mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-18 12:15:19 +00:00
va: Move common variable need_negotiation to GstBaseDec.
This is a common variable to all decoders, so it's sound to move it to the base helper. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1257>
This commit is contained in:
parent
a2a3c81c85
commit
97e3f88c20
7 changed files with 23 additions and 32 deletions
|
@ -76,8 +76,6 @@ struct _GstVaAV1Dec
|
||||||
GstAV1SequenceHeaderOBU seq;
|
GstAV1SequenceHeaderOBU seq;
|
||||||
gint max_width;
|
gint max_width;
|
||||||
gint max_height;
|
gint max_height;
|
||||||
|
|
||||||
gboolean need_negotiation;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static GstElementClass *parent_class = NULL;
|
static GstElementClass *parent_class = NULL;
|
||||||
|
@ -101,10 +99,10 @@ gst_va_av1_dec_negotiate (GstVideoDecoder * decoder)
|
||||||
GstCapsFeatures *capsfeatures = NULL;
|
GstCapsFeatures *capsfeatures = NULL;
|
||||||
|
|
||||||
/* Ignore downstream renegotiation request. */
|
/* Ignore downstream renegotiation request. */
|
||||||
if (!self->need_negotiation)
|
if (!base->need_negotiation)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
self->need_negotiation = FALSE;
|
base->need_negotiation = FALSE;
|
||||||
|
|
||||||
/* Do not re-create the context if only the frame size changes */
|
/* Do not re-create the context if only the frame size changes */
|
||||||
if (!gst_va_decoder_config_is_equal (base->decoder, base->profile,
|
if (!gst_va_decoder_config_is_equal (base->decoder, base->profile,
|
||||||
|
@ -275,7 +273,7 @@ gst_va_av1_dec_new_sequence (GstAV1Decoder * decoder,
|
||||||
base->rt_format = rt_format;
|
base->rt_format = rt_format;
|
||||||
self->max_width = seq_hdr->max_frame_width_minus_1 + 1;
|
self->max_width = seq_hdr->max_frame_width_minus_1 + 1;
|
||||||
self->max_height = seq_hdr->max_frame_height_minus_1 + 1;
|
self->max_height = seq_hdr->max_frame_height_minus_1 + 1;
|
||||||
self->need_negotiation = TRUE;
|
base->need_negotiation = TRUE;
|
||||||
|
|
||||||
base->min_buffers = 7 + 4; /* dpb size + scratch surfaces */
|
base->min_buffers = 7 + 4; /* dpb size + scratch surfaces */
|
||||||
|
|
||||||
|
@ -313,10 +311,10 @@ gst_va_av1_dec_new_picture (GstAV1Decoder * decoder,
|
||||||
/* *INDENT-ON* */
|
/* *INDENT-ON* */
|
||||||
}
|
}
|
||||||
|
|
||||||
self->need_negotiation = TRUE;
|
base->need_negotiation = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (self->need_negotiation) {
|
if (base->need_negotiation) {
|
||||||
if (!gst_video_decoder_negotiate (GST_VIDEO_DECODER (self))) {
|
if (!gst_video_decoder_negotiate (GST_VIDEO_DECODER (self))) {
|
||||||
GST_ERROR_OBJECT (self, "Failed to negotiate with downstream");
|
GST_ERROR_OBJECT (self, "Failed to negotiate with downstream");
|
||||||
return GST_FLOW_NOT_NEGOTIATED;
|
return GST_FLOW_NOT_NEGOTIATED;
|
||||||
|
|
|
@ -76,6 +76,8 @@ struct _GstVaBaseDec
|
||||||
|
|
||||||
gboolean apply_video_crop;
|
gboolean apply_video_crop;
|
||||||
GstVideoConverter *convert;
|
GstVideoConverter *convert;
|
||||||
|
|
||||||
|
gboolean need_negotiation;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GstVaBaseDecClass
|
struct _GstVaBaseDecClass
|
||||||
|
|
|
@ -84,7 +84,6 @@ struct _GstVaH264Dec
|
||||||
/* Used to fill VAPictureParameterBufferH264.ReferenceFrames */
|
/* Used to fill VAPictureParameterBufferH264.ReferenceFrames */
|
||||||
GArray *ref_list;
|
GArray *ref_list;
|
||||||
|
|
||||||
gboolean need_negotiation;
|
|
||||||
gboolean interlaced;
|
gboolean interlaced;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -748,7 +747,7 @@ gst_va_h264_dec_new_sequence (GstH264Decoder * decoder, const GstH264SPS * sps,
|
||||||
base->min_buffers = self->dpb_size + 4; /* dpb size + scratch surfaces */
|
base->min_buffers = self->dpb_size + 4; /* dpb size + scratch surfaces */
|
||||||
|
|
||||||
if (negotiation_needed) {
|
if (negotiation_needed) {
|
||||||
self->need_negotiation = TRUE;
|
base->need_negotiation = TRUE;
|
||||||
if (!gst_video_decoder_negotiate (GST_VIDEO_DECODER (self))) {
|
if (!gst_video_decoder_negotiate (GST_VIDEO_DECODER (self))) {
|
||||||
GST_ERROR_OBJECT (self, "Failed to negotiate with downstream");
|
GST_ERROR_OBJECT (self, "Failed to negotiate with downstream");
|
||||||
return GST_FLOW_NOT_NEGOTIATED;
|
return GST_FLOW_NOT_NEGOTIATED;
|
||||||
|
@ -824,10 +823,10 @@ gst_va_h264_dec_negotiate (GstVideoDecoder * decoder)
|
||||||
GstH264Decoder *h264dec = GST_H264_DECODER (decoder);
|
GstH264Decoder *h264dec = GST_H264_DECODER (decoder);
|
||||||
|
|
||||||
/* Ignore downstream renegotiation request. */
|
/* Ignore downstream renegotiation request. */
|
||||||
if (!self->need_negotiation)
|
if (!base->need_negotiation)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
self->need_negotiation = FALSE;
|
base->need_negotiation = FALSE;
|
||||||
|
|
||||||
if (gst_va_decoder_is_open (base->decoder)
|
if (gst_va_decoder_is_open (base->decoder)
|
||||||
&& !gst_va_decoder_close (base->decoder))
|
&& !gst_va_decoder_close (base->decoder))
|
||||||
|
|
|
@ -99,8 +99,6 @@ struct _GstVaH265Dec
|
||||||
gint32 WpOffsetHalfRangeC;
|
gint32 WpOffsetHalfRangeC;
|
||||||
|
|
||||||
struct slice prev_slice;
|
struct slice prev_slice;
|
||||||
|
|
||||||
gboolean need_negotiation;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static GstElementClass *parent_class = NULL;
|
static GstElementClass *parent_class = NULL;
|
||||||
|
@ -1121,7 +1119,7 @@ gst_va_h265_dec_new_sequence (GstH265Decoder * decoder, const GstH265SPS * sps,
|
||||||
base->min_buffers = self->dpb_size + 4; /* dpb size + scratch surfaces */
|
base->min_buffers = self->dpb_size + 4; /* dpb size + scratch surfaces */
|
||||||
|
|
||||||
if (negotiation_needed) {
|
if (negotiation_needed) {
|
||||||
self->need_negotiation = TRUE;
|
base->need_negotiation = TRUE;
|
||||||
if (!gst_video_decoder_negotiate (GST_VIDEO_DECODER (self))) {
|
if (!gst_video_decoder_negotiate (GST_VIDEO_DECODER (self))) {
|
||||||
GST_ERROR_OBJECT (self, "Failed to negotiate with downstream");
|
GST_ERROR_OBJECT (self, "Failed to negotiate with downstream");
|
||||||
return GST_FLOW_NOT_NEGOTIATED;
|
return GST_FLOW_NOT_NEGOTIATED;
|
||||||
|
@ -1208,10 +1206,10 @@ gst_va_h265_dec_negotiate (GstVideoDecoder * decoder)
|
||||||
GstH265Decoder *h265dec = GST_H265_DECODER (decoder);
|
GstH265Decoder *h265dec = GST_H265_DECODER (decoder);
|
||||||
|
|
||||||
/* Ignore downstream renegotiation request. */
|
/* Ignore downstream renegotiation request. */
|
||||||
if (!self->need_negotiation)
|
if (!base->need_negotiation)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
self->need_negotiation = FALSE;
|
base->need_negotiation = FALSE;
|
||||||
|
|
||||||
if (gst_va_decoder_is_open (base->decoder)
|
if (gst_va_decoder_is_open (base->decoder)
|
||||||
&& !gst_va_decoder_close (base->decoder))
|
&& !gst_va_decoder_close (base->decoder))
|
||||||
|
|
|
@ -71,8 +71,6 @@ struct _GstVaMpeg2Dec
|
||||||
GstVaBaseDec parent;
|
GstVaBaseDec parent;
|
||||||
|
|
||||||
gboolean progressive;
|
gboolean progressive;
|
||||||
gboolean need_negotiation;
|
|
||||||
|
|
||||||
GstMpegVideoSequenceHdr seq;
|
GstMpegVideoSequenceHdr seq;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -97,10 +95,10 @@ gst_va_mpeg2_dec_negotiate (GstVideoDecoder * decoder)
|
||||||
GstMpeg2Decoder *mpeg2dec = GST_MPEG2_DECODER (decoder);
|
GstMpeg2Decoder *mpeg2dec = GST_MPEG2_DECODER (decoder);
|
||||||
|
|
||||||
/* Ignore downstream renegotiation request. */
|
/* Ignore downstream renegotiation request. */
|
||||||
if (!self->need_negotiation)
|
if (!base->need_negotiation)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
self->need_negotiation = FALSE;
|
base->need_negotiation = FALSE;
|
||||||
|
|
||||||
if (gst_va_decoder_is_open (base->decoder)
|
if (gst_va_decoder_is_open (base->decoder)
|
||||||
&& !gst_va_decoder_close (base->decoder))
|
&& !gst_va_decoder_close (base->decoder))
|
||||||
|
@ -281,7 +279,7 @@ gst_va_mpeg2_dec_new_sequence (GstMpeg2Decoder * decoder,
|
||||||
base->min_buffers = 2 + 4; /* max num pic references + scratch surfaces */
|
base->min_buffers = 2 + 4; /* max num pic references + scratch surfaces */
|
||||||
|
|
||||||
if (negotiation_needed) {
|
if (negotiation_needed) {
|
||||||
self->need_negotiation = TRUE;
|
base->need_negotiation = TRUE;
|
||||||
if (!gst_video_decoder_negotiate (GST_VIDEO_DECODER (self))) {
|
if (!gst_video_decoder_negotiate (GST_VIDEO_DECODER (self))) {
|
||||||
GST_ERROR_OBJECT (self, "Failed to negotiate with downstream");
|
GST_ERROR_OBJECT (self, "Failed to negotiate with downstream");
|
||||||
return GST_FLOW_NOT_NEGOTIATED;
|
return GST_FLOW_NOT_NEGOTIATED;
|
||||||
|
|
|
@ -71,8 +71,6 @@ struct _GstVaVp8Dec
|
||||||
GstVaBaseDec parent;
|
GstVaBaseDec parent;
|
||||||
|
|
||||||
GstFlowReturn last_ret;
|
GstFlowReturn last_ret;
|
||||||
|
|
||||||
gboolean need_negotiation;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static GstElementClass *parent_class = NULL;
|
static GstElementClass *parent_class = NULL;
|
||||||
|
@ -96,10 +94,10 @@ gst_va_vp8_dec_negotiate (GstVideoDecoder * decoder)
|
||||||
GstVp8Decoder *vp8dec = GST_VP8_DECODER (decoder);
|
GstVp8Decoder *vp8dec = GST_VP8_DECODER (decoder);
|
||||||
|
|
||||||
/* Ignore downstream renegotiation request. */
|
/* Ignore downstream renegotiation request. */
|
||||||
if (!self->need_negotiation)
|
if (!base->need_negotiation)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
self->need_negotiation = FALSE;
|
base->need_negotiation = FALSE;
|
||||||
|
|
||||||
if (gst_va_decoder_is_open (base->decoder)
|
if (gst_va_decoder_is_open (base->decoder)
|
||||||
&& !gst_va_decoder_close (base->decoder))
|
&& !gst_va_decoder_close (base->decoder))
|
||||||
|
@ -180,7 +178,7 @@ gst_va_vp8_dec_new_sequence (GstVp8Decoder * decoder,
|
||||||
base->min_buffers = 3 + 4; /* max num pic references + scratch surfaces */
|
base->min_buffers = 3 + 4; /* max num pic references + scratch surfaces */
|
||||||
|
|
||||||
if (negotiation_needed) {
|
if (negotiation_needed) {
|
||||||
self->need_negotiation = TRUE;
|
base->need_negotiation = TRUE;
|
||||||
if (!gst_video_decoder_negotiate (GST_VIDEO_DECODER (self))) {
|
if (!gst_video_decoder_negotiate (GST_VIDEO_DECODER (self))) {
|
||||||
GST_ERROR_OBJECT (self, "Failed to negotiate with downstream");
|
GST_ERROR_OBJECT (self, "Failed to negotiate with downstream");
|
||||||
return GST_FLOW_NOT_NEGOTIATED;
|
return GST_FLOW_NOT_NEGOTIATED;
|
||||||
|
|
|
@ -70,8 +70,6 @@ struct _GstVaVp9Dec
|
||||||
{
|
{
|
||||||
GstVaBaseDec parent;
|
GstVaBaseDec parent;
|
||||||
GstVp9Segmentation segmentation[GST_VP9_MAX_SEGMENTS];
|
GstVp9Segmentation segmentation[GST_VP9_MAX_SEGMENTS];
|
||||||
|
|
||||||
gboolean need_negotiation;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static GstElementClass *parent_class = NULL;
|
static GstElementClass *parent_class = NULL;
|
||||||
|
@ -182,7 +180,7 @@ gst_va_vp9_new_sequence (GstVp9Decoder * decoder,
|
||||||
base->min_buffers = GST_VP9_REF_FRAMES;
|
base->min_buffers = GST_VP9_REF_FRAMES;
|
||||||
|
|
||||||
if (negotiation_needed) {
|
if (negotiation_needed) {
|
||||||
self->need_negotiation = TRUE;
|
base->need_negotiation = TRUE;
|
||||||
if (!gst_video_decoder_negotiate (GST_VIDEO_DECODER (self))) {
|
if (!gst_video_decoder_negotiate (GST_VIDEO_DECODER (self))) {
|
||||||
GST_ERROR_OBJECT (self, "Failed to negotiate with downstream");
|
GST_ERROR_OBJECT (self, "Failed to negotiate with downstream");
|
||||||
return GST_FLOW_NOT_NEGOTIATED;
|
return GST_FLOW_NOT_NEGOTIATED;
|
||||||
|
@ -202,7 +200,7 @@ _check_resolution_change (GstVaVp9Dec * self, GstVp9Picture * picture)
|
||||||
base->width = frame_hdr->width;
|
base->width = frame_hdr->width;
|
||||||
base->height = frame_hdr->height;
|
base->height = frame_hdr->height;
|
||||||
|
|
||||||
self->need_negotiation = TRUE;
|
base->need_negotiation = TRUE;
|
||||||
if (!gst_video_decoder_negotiate (GST_VIDEO_DECODER (self))) {
|
if (!gst_video_decoder_negotiate (GST_VIDEO_DECODER (self))) {
|
||||||
GST_ERROR_OBJECT (self, "Resolution changed, but failed to"
|
GST_ERROR_OBJECT (self, "Resolution changed, but failed to"
|
||||||
" negotiate with downstream");
|
" negotiate with downstream");
|
||||||
|
@ -555,10 +553,10 @@ gst_va_vp9_dec_negotiate (GstVideoDecoder * decoder)
|
||||||
gboolean need_open;
|
gboolean need_open;
|
||||||
|
|
||||||
/* Ignore downstream renegotiation request. */
|
/* Ignore downstream renegotiation request. */
|
||||||
if (!self->need_negotiation)
|
if (!base->need_negotiation)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
self->need_negotiation = FALSE;
|
base->need_negotiation = FALSE;
|
||||||
|
|
||||||
need_open = TRUE;
|
need_open = TRUE;
|
||||||
/* VP9 profile entry should have the ability to handle dynamical
|
/* VP9 profile entry should have the ability to handle dynamical
|
||||||
|
|
Loading…
Reference in a new issue