[FFmpeg-devel] [PATCH] lavc/h2645_parse: Don't automatically remove nuh_layer_id > 0 packets
Andriy Gelman
andriy.gelman at gmail.com
Thu Dec 5 23:35:54 EET 2019
On Mon, 02. Dec 00:07, James Almer wrote:
> On 12/1/2019 11:48 PM, Andriy Gelman wrote:
> > From: Andriy Gelman <andriy.gelman at gmail.com>
> >
> > HEVC standard supports multi-layer streams (ITU-T H.265 02/2018 Annex
> > F). Each NAL unit belongs to a particular layer defined by nuh_layer_id
> > in the header.
> >
> > Currently, all NAL units that do not belong to a base layer are
> > automatically removed in ff_h2645_packet_split(). Some data may
> > therefore be lost when future filters/decoders are designed to support
> > multi-layer streams.
> >
> > A better approach is to forward nuh_layer_id > 0 packets and let blocks
> > down the chain decide how to process them. The condition to remove
> > packets has been moved to hevcdec and cbs bsf where such packets are
> > currently not supported.
> > ---
> > libavcodec/cbs_h2645.c | 3 +++
> > libavcodec/h2645_parse.c | 7 +++----
> > libavcodec/h2645_parse.h | 5 +++++
> > libavcodec/hevc_parse.c | 2 ++
> > libavcodec/hevc_parser.c | 2 ++
> > libavcodec/hevcdec.c | 2 +-
> > 6 files changed, 16 insertions(+), 5 deletions(-)
>
> Missing changes to extract_extradata_bsf.
>
> >
> > diff --git a/libavcodec/cbs_h2645.c b/libavcodec/cbs_h2645.c
> > index 88fa0029cd6..9f89f1c5a55 100644
> > --- a/libavcodec/cbs_h2645.c
> > +++ b/libavcodec/cbs_h2645.c
> > @@ -562,6 +562,9 @@ static int cbs_h2645_fragment_add_nals(CodedBitstreamContext *ctx,
> >
> > for (i = 0; i < packet->nb_nals; i++) {
> > const H2645NAL *nal = &packet->nals[i];
> > + if (nal->nuh_layer_id > 0)
> > + continue;
>
> CBS itself must not ignore them. Users of CBS should be able to choose
> to ignore them, same way you're doing it for h2645_parse and its users
> below.
James, Andreas,
The parameter sets for multi-layer streams are parsed differently to the
base-layer. See for example SPS p.35 vs p.432 ITU-H265 (02/2018).
CBS only supports parsing nuh_layer_id = 0 at the moment. I have checked with a
multi-layer stream and CBS errors out.
Do you agree then that the above check should stay in the patch?
Thanks,
--
Andriy
More information about the ffmpeg-devel
mailing list