From 5e3c7f2092a81a769958b215352384af7ced33d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Manuel=20J=C3=A1quez=20Leal?= Date: Mon, 12 Oct 2020 11:07:47 +0200 Subject: [PATCH] codecs: vp9decoder: Pass parser as new_sequence() parameter. In order to know the chroma format, besides profile, subsampling_x and subsampling_y are needed (Spec 7.2.2 Color config semantics). These values are in GstVp9Parser but not in GstVp9Framehdr. Also, bit_depth is available in parser but not frame header. Evenmore, those values are copied to picture structure later. In case of VA-API, to configure the pipeline, it is require to know the chroma format and depth. It is possible to know chroma and depth through caps coming from vp9parser, but it requires string parsing. It would be less error prone to get these values through the parser structure at new_sequence() virtual method. Part-of: --- gst-libs/gst/codecs/gstvp9decoder.c | 2 +- gst-libs/gst/codecs/gstvp9decoder.h | 1 + sys/d3d11/gstd3d11vp9dec.c | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/gst-libs/gst/codecs/gstvp9decoder.c b/gst-libs/gst/codecs/gstvp9decoder.c index a292fc8442..38691924c0 100644 --- a/gst-libs/gst/codecs/gstvp9decoder.c +++ b/gst-libs/gst/codecs/gstvp9decoder.c @@ -187,7 +187,7 @@ gst_vp9_decoder_check_codec_change (GstVp9Decoder * self, priv->had_sequence = TRUE; if (klass->new_sequence) - priv->had_sequence = klass->new_sequence (self, frame_hdr); + priv->had_sequence = klass->new_sequence (self, priv->parser, frame_hdr); ret = priv->had_sequence; } diff --git a/gst-libs/gst/codecs/gstvp9decoder.h b/gst-libs/gst/codecs/gstvp9decoder.h index 89161ba6af..f25252f5df 100644 --- a/gst-libs/gst/codecs/gstvp9decoder.h +++ b/gst-libs/gst/codecs/gstvp9decoder.h @@ -85,6 +85,7 @@ struct _GstVp9DecoderClass GstVideoDecoderClass parent_class; gboolean (*new_sequence) (GstVp9Decoder * decoder, + const GstVp9Parser * parser, const GstVp9FrameHdr * frame_hdr); /** diff --git a/sys/d3d11/gstd3d11vp9dec.c b/sys/d3d11/gstd3d11vp9dec.c index 95c962966f..17a76e626e 100644 --- a/sys/d3d11/gstd3d11vp9dec.c +++ b/sys/d3d11/gstd3d11vp9dec.c @@ -133,7 +133,7 @@ static gboolean gst_d3d11_vp9_dec_src_query (GstVideoDecoder * decoder, /* GstVp9Decoder */ static gboolean gst_d3d11_vp9_dec_new_sequence (GstVp9Decoder * decoder, - const GstVp9FrameHdr * frame_hdr); + const GstVp9Parser * parser, const GstVp9FrameHdr * frame_hdr); static gboolean gst_d3d11_vp9_dec_new_picture (GstVp9Decoder * decoder, GstVideoCodecFrame * frame, GstVp9Picture * picture); static GstVp9Picture *gst_d3d11_vp9_dec_duplicate_picture (GstVp9Decoder * @@ -342,7 +342,7 @@ gst_d3d11_vp9_dec_src_query (GstVideoDecoder * decoder, GstQuery * query) static gboolean gst_d3d11_vp9_dec_new_sequence (GstVp9Decoder * decoder, - const GstVp9FrameHdr * frame_hdr) + const GstVp9Parser * parser, const GstVp9FrameHdr * frame_hdr) { GstD3D11Vp9Dec *self = GST_D3D11_VP9_DEC (decoder); gboolean modified = FALSE;