[FFmpeg-devel] [PATCH V2] avcodec/h264_mp4toannexb_bsf: add No IDR frame situation

Michael Niedermayer michael at niedermayer.cc
Fri Aug 24 00:29:56 EEST 2018


On Thu, Aug 16, 2018 at 03:07:50PM +0800, Linjie Fu wrote:
> 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;

The commit message is insufficient
this adds the extradata if new_idr is set not just in the absence of IDR at
the begin

also teh addded code is identical to the first if() just a different NAL is
checked for, this code duplication is not a good idea in already complex
code

thx

[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

When you are offended at any man's fault, turn to yourself and study your
own failings. Then you will forget your anger. -- Epictetus
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20180823/07781eab/attachment.sig>


More information about the ffmpeg-devel mailing list