On 31/10/2023 18:57, Evgeny Pavlov wrote:
From: Michael Fabian 'Xaymar' Dirks <michael.di...@xaymar.com>

added 10 bit support for amf hevc.

before:

command - ffmpeg.exe -hide_banner -y -hwaccel d3d11va -hwaccel_output_format 
d3d11 -i test_10bit_file.mkv -an -c:v h264_amf res.dx11_hw_h264.mkv
output -  Format of input frames context (p010le) is not supported by AMF.
command - ffmpeg.exe -hide_banner -y -hwaccel d3d11va -hwaccel_output_format 
d3d11 -i test_10bit_file -an -c:v hevc_amf res.dx11_hw_hevc.mkv
output -  Format of input frames context (p010le) is not supported by AMF.

after:

command - ffmpeg.exe -hide_banner -y -hwaccel d3d11va -hwaccel_output_format 
d3d11 -i test_10bit_file -an -c:v h264_amf res.dx11_hw_h264.mkv
output -  10-bit input video is not supported by AMF H264 encoder
command - ffmpeg.exe -hide_banner -y -hwaccel d3d11va -hwaccel_output_format 
d3d11 -i test_10bit_file -an -c:v hevc_amf res.dx11_hw_hevc.mkv
output -  10bit file

v2 - lost line returned in ff_amf_pix_fmts
v3 - fixes after review
v4 - extract duplicated code, fix incorrect processing of 10-bit input for h264
v5 - non-functional changes after review

Co-authored-by: Evgeny Pavlov <lucenti...@gmail.com>
---
  libavcodec/amfenc.c      | 37 +++++++++++++++++++++++++++++++++++++
  libavcodec/amfenc.h      |  3 +++
  libavcodec/amfenc_h264.c | 24 ++++++++++++++++++++----
  libavcodec/amfenc_hevc.c | 26 +++++++++++++++++++++++++-
  4 files changed, 85 insertions(+), 5 deletions(-)

There is something very wrong with how the header information is working here.

With this series applied, I ran:

ffmpeg_g.exe -report -y -i in.mp4 -an -c:v hevc_amf -bsf:v trace_headers 
-frames:v 1 out.mp4

My input file is:

  Stream #0:0[0x1](und), 60, 1/60000: Video: hevc (Main 10) (hvc1 / 
0x31637668), yuv420p10le(tv, bt2020nc/bt2020/smpte2084), 3840x2160 [SAR 1:1 DAR 
16:9], 74462 kb/s, 59.94 fps, 59.94 tbr, 60k tbn (default)

[trace_headers @ 0000023184c753c0] Extradata
[trace_headers @ 0000023184c753c0] Sequence Parameter Set
...
[trace_headers @ 0000023184c753c0] 222         vui_parameters_present_flag      
                           0 = 0

So no colour information at all in the headers, and the output file indeed says:

  Stream #0:0[0x1](und): Video: hevc (Main 10) (hev1 / 0x31766568), 
yuv420p10le(tv, progressive), 3840x2160, 977 kb/s, SAR 1:1 DAR 16:9, 59.94 fps, 
59.94 tbr, 60k tbn (default)

However!  Reading further:

[trace_headers @ 0000023184c753c0] Packet: 2039 bytes, key frame, pts 0, dts 0.
...
[trace_headers @ 0000023184c753c0] Sequence Parameter Set
...
[trace_headers @ 0000023184c753c0] 222         vui_parameters_present_flag      
                           1 = 1
[trace_headers @ 0000023184c753c0] 223         aspect_ratio_info_present_flag   
                           1 = 1
[trace_headers @ 0000023184c753c0] 224         aspect_ratio_idc                 
                    11111111 = 255
[trace_headers @ 0000023184c753c0] 232         sar_width                        
            0000000000000001 = 1
[trace_headers @ 0000023184c753c0] 248         sar_height                       
            0000000000000001 = 1
[trace_headers @ 0000023184c753c0] 264         overscan_info_present_flag       
                           0 = 0
[trace_headers @ 0000023184c753c0] 265         video_signal_type_present_flag   
                           1 = 1
[trace_headers @ 0000023184c753c0] 266         video_format                     
                         101 = 5
[trace_headers @ 0000023184c753c0] 269         video_full_range_flag            
                           0 = 0
[trace_headers @ 0000023184c753c0] 270         colour_description_present_flag  
                           1 = 1
[trace_headers @ 0000023184c753c0] 271         colour_primaries                 
                    00001001 = 9
[trace_headers @ 0000023184c753c0] 279         transfer_characteristics         
                    00010000 = 16
[trace_headers @ 0000023184c753c0] 287         matrix_coefficients              
                    00001001 = 9
[trace_headers @ 0000023184c753c0] 295         chroma_loc_info_present_flag     
                           0 = 0
[trace_headers @ 0000023184c753c0] 296         neutral_chroma_indication_flag   
                           0 = 0
[trace_headers @ 0000023184c753c0] 297         field_seq_flag                   
                           0 = 0
[trace_headers @ 0000023184c753c0] 298         frame_field_info_present_flag    
                           0 = 0
[trace_headers @ 0000023184c753c0] 299         default_display_window_flag      
                           0 = 0
[trace_headers @ 0000023184c753c0] 300         vui_timing_info_present_flag     
                           1 = 1
[trace_headers @ 0000023184c753c0] 301         vui_num_units_in_tick        
00000000000000000000001111101001 = 1001
[trace_headers @ 0000023184c753c0] 333         vui_time_scale               
00000000000000001110101001100000 = 60000
[trace_headers @ 0000023184c753c0] 365         
vui_poc_proportional_to_timing_flag                         1 = 1
[trace_headers @ 0000023184c753c0] 366         
vui_num_ticks_poc_diff_one_minus1                           1 = 0

Comparing the to the original, the chroma sample location (collocated top-left 
in the original, so the implied default is wrong) has been lost but the colours 
are otherwise correct in the extraneous headers embedded in the first packet.

So the colour information has kindof been passed through, except not in the 
place in the headers which matters so it is mostly useless.  (I guess it maybe 
works for raw streams with no headers?)

I think you need to fix whatever is making the headers not match the actual 
stream content (which creates invalid files, mp4 and similar containers with 
global headers need them to match).

Thanks,

- Mark
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to