[FFmpeg-trac] #6418(undetermined:open): ffmpeg QSV doesnt work with live streams

FFmpeg trac at avcodec.org
Thu Aug 16 10:35:18 EEST 2018


#6418: ffmpeg QSV doesnt work with live streams
-------------------------------------+-------------------------------------
             Reporter:  rycius       |                    Owner:
                 Type:  defect       |                   Status:  open
             Priority:  important    |                Component:
              Version:  git-master   |  undetermined
             Keywords:  qsv          |               Resolution:
  regression                         |               Blocked By:
             Blocking:               |  Reproduced by developer:  0
Analyzed by developer:  0            |
-------------------------------------+-------------------------------------

Comment (by fulinjie):

 commit f6042a603f61ab2ef496402e11c99864e243b542 should fix the decoding
 issue of No Inband video: No.Inband.SPPS.No.IDR.mkv

 commit f6042a603f61ab2ef496402e11c99864e243b542
 Author: Linjie Fu <linjie.fu at intel.com>
 Date: Thu, 16 Aug 2018 15:02:35 +0800
 Subject: [PATCH V2] avcodec/h264_mp4toannexb_bsf: add No IDR frame
 situation

 Fix the live stream encoding problem using qsv when the first frame
 is not an IDR frame.

 Add the extradata information when the IDR frame is missing in the
 first GOP.

 Fix the bug reported in  ticket #6418.

 [PATCH V2] Fix the coding style.

 Signed-off-by: Linjie Fu <linjie.fu at intel.com>
 ---
  libavcodec/h264_mp4toannexb_bsf.c | 8 ++++++++
  1 file changed, 8 insertions(+)

 diff --git a/libavcodec/h264_mp4toannexb_bsf.c
 b/libavcodec/h264_mp4toannexb_bsf.c
 index 794c82e650..fbb9f1fe20 100644
 --- a/libavcodec/h264_mp4toannexb_bsf.c
 +++ b/libavcodec/h264_mp4toannexb_bsf.c
 @@ -33,6 +33,7 @@ typedef struct H264BSFContext {
      int32_t  pps_offset;
      uint8_t  length_size;
      uint8_t  new_idr;
 +    uint8_t  new_nal_slice;
      uint8_t  idr_sps_seen;
      uint8_t  idr_pps_seen;
      int      extradata_parsed;
 @@ -243,6 +244,7 @@ static int h264_mp4toannexb_filter(AVBSFContext *ctx,
 AVPacket *out)
                                 buf, nal_size, 1)) < 0)
                  goto fail;
              s->new_idr = 0;
 +            s->new_nal_slice = 1;
          /* if only SPS has been seen, also insert PPS */
          } else if (s->new_idr && unit_type == H264_NAL_IDR_SLICE &&
 s->idr_sps_seen && !s->idr_pps_seen) {
              if (s->pps_offset == -1) {
 @@ -253,6 +255,12 @@ static int h264_mp4toannexb_filter(AVBSFContext *ctx,
 AVPacket *out)
                                          ctx->par_out->extradata +
 s->pps_offset, ctx->par_out->extradata_size - s->pps_offset,
                                          buf, nal_size, 1)) < 0)
                  goto fail;
 +        } else if (s->new_idr && !s->new_nal_slice && H264_NAL_SLICE ==
 unit_type && !s->idr_sps_seen && !s->idr_pps_seen){
 +            av_log(ctx, AV_LOG_WARNING, "first H264_NAL_SLICE when there
 is no IDR.\n");
 +            if ((ret = alloc_and_copy(out, ctx->par_out->extradata,
 ctx->par_out->extradata_size, buf, nal_size, 1)) < 0)
 +                goto fail;
 +            s->new_nal_slice = 1;
 +            s->new_idr = 0;
          } else {
              if ((ret=alloc_and_copy(out, NULL, 0, buf, nal_size,
 unit_type == H264_NAL_SPS || unit_type == H264_NAL_PPS)) < 0)
                  goto fail;
 --

--
Ticket URL: <https://trac.ffmpeg.org/ticket/6418#comment:20>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list