#7330: ffmpeg 4.0 fails to transcoding one 4k clip
------------------------------------+-----------------------------------
             Reporter:  applemax82  |                    Owner:
                 Type:  defect      |                   Status:  new
             Priority:  normal      |                Component:  avcodec
              Version:  git-master  |               Resolution:
             Keywords:  qsv         |               Blocked By:
             Blocking:              |  Reproduced by developer:  0
Analyzed by developer:  0           |
------------------------------------+-----------------------------------

Comment (by fulinjie):

 Reproduced on the latest ffmpeg master version.


 {{{
 ffmpeg -nostdin -y -hwaccel qsv -c:v h264_qsv -i src_AVC_4K.mp4 -b:a 80000
 -ar 44100 -c:v h264_qsv -g 300 -profile:v high -preset veryfast -c:a
 libfdk_aac -max_muxing_queue_size 4000 -b:v 17418000 -movflags +faststart
 -strict -3 -vsync passthrough -f mp4 dst_AVC_4K.mp4
 }}}

 Failed with:
 {{{
 [h264_qsv @ 0x55997bc94d80] Current profile is unsupported
 [h264_qsv @ 0x55997bc94d80] Selected ratecontrol mode is unsupported
 [h264_qsv @ 0x55997bc94d80] Current frame rate is unsupported
 [h264_qsv @ 0x55997bc94d80] Current picture structure is unsupported
 [h264_qsv @ 0x55997bc94d80] Current resolution is unsupported
 [h264_qsv @ 0x55997bc94d80] Current pixel format is unsupported
 [h264_qsv @ 0x55997bc94d80] some encoding parameters are not supported by
 the QSV runtime. Please double check the input parameters.
 [h264_qsv @ 0x55997bc94d80] encoded 0 frames, avarge qp is -nan
 Error initializing output stream 0:0 -- Error while opening encoder for
 output stream #0:0 - maybe incorrect parameters such as bit_rate, rate,
 width or height
 }}}

 Encoder initializing failed.
 Frame can not be decoded but no errors reported.

 Tracing this issue:
 1. src_AVC_4K.mp4 has some errors: Value of slice::pic_parameter_set_id is
 out of range.
 2. it can be decoded successfully in soft ways but fails in h264_qsv.
 3. in the function of decode_simple_receive_frame():
 {{{
 while (!frame->buf[0]) {
         ret = decode_simple_internal(avctx, frame);
         if (ret < 0)
             return ret;
     }

 }}}
 When decode_simple_internal returns a normal value (ret = 0), the value of
 frame->buf[0] still equals to 0x00 which is incorrect. So it can not jump
 out of the loop until decode_simple_internal returns -11 (wait for data to
 be processed).

 It's the reason why frames can't be decoded but report no errors.

 4. The function qsv_decode() in qsvdec.c calls :

 {{{
  ret = MFXVideoDECODE_DecodeFrameAsync(q->session, avpkt->size ? &bs :
 NULL,
                                               insurf, &outsurf, sync);
 }}}
 returns: ret = -10, whcih means MFX_ERR_MORE_DATA (/* expect more data at
 input */ according to the mfxdefs.h)
 This lead to the error condition in 4.

 5. Varify this issue through MSDK sample_decode:

 {{{
 ./sample_decode h264 -i src_AVC_4K.mp4 -o sample_out.mp4

 [ERROR], sts=MFX_ERR_MORE_DATA(-10), InitMfxParams,
 m_FileReader->ReadNextFrame failed at
 
/home/linjiefu/Documents/git/msdk/samples/sample_decode/src/pipeline_decode.cpp:653

 [ERROR], sts=MFX_ERR_MORE_DATA(-10), Init, InitMfxParams failed at
 
/home/linjiefu/Documents/git/msdk/samples/sample_decode/src/pipeline_decode.cpp:395

 [ERROR], sts=MFX_ERR_MORE_DATA(-10), main, Pipeline.Init failed at
 
/home/linjiefu/Documents/git/msdk/samples/sample_decode/src/sample_decode.cpp:666
 }}}

 sample_decode can't decode src_AVC_4K.mp4 successfully.

--
Ticket URL: <https://trac.ffmpeg.org/ticket/7330#comment:2>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
_______________________________________________
FFmpeg-trac mailing list
FFmpeg-trac@avcodec.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-trac

Reply via email to