On 14/04/2017 15:53, James Almer wrote: > This mimics the behavior of the now unused h264/hevc parser's split() > function and fixes decoding some files when extract_extradata bsf is > enabled. > > Signed-off-by: James Almer <[email protected]> > --- > libavcodec/extract_extradata_bsf.c | 15 ++++++++++++--- > 1 file changed, 12 insertions(+), 3 deletions(-) > > diff --git a/libavcodec/extract_extradata_bsf.c > b/libavcodec/extract_extradata_bsf.c > index 20b30803b..20840bd6a 100644 > --- a/libavcodec/extract_extradata_bsf.c > +++ b/libavcodec/extract_extradata_bsf.c > @@ -65,7 +65,7 @@ static int extract_extradata_h2645(AVBSFContext *ctx, > AVPacket *pkt, > int extradata_size = 0; > const int *extradata_nal_types; > int nb_extradata_nal_types; > - int i, ret = 0; > + int i, has_sps = 0, has_vps = 0, ret = 0; > > if (ctx->par_in->codec_id == AV_CODEC_ID_HEVC) { > extradata_nal_types = extradata_nal_types_hevc; > @@ -82,11 +82,20 @@ static int extract_extradata_h2645(AVBSFContext *ctx, > AVPacket *pkt, > > for (i = 0; i < h2645_pkt.nb_nals; i++) { > H2645NAL *nal = &h2645_pkt.nals[i]; > - if (val_in_array(extradata_nal_types, nb_extradata_nal_types, > nal->type)) > + if (val_in_array(extradata_nal_types, nb_extradata_nal_types, > nal->type)) { > extradata_size += nal->raw_size + 3; > + if (ctx->par_in->codec_id == AV_CODEC_ID_HEVC) { > + if (nal->type == HEVC_NAL_SPS) has_sps = 1; > + if (nal->type == HEVC_NAL_VPS) has_vps = 1; > + } else { > + if (nal->type == H264_NAL_SPS) has_sps = 1; > + } > + } > } > > - if (extradata_size) { > + if (extradata_size && > + ((ctx->par_in->codec_id == AV_CODEC_ID_HEVC && has_sps && has_vps) || > + (ctx->par_in->codec_id == AV_CODEC_ID_H264 && has_sps))) { > AVBufferRef *filtered_buf; > uint8_t *extradata, *filtered_data; > >
The patch itself seems fine btw. _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
