mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-24 10:41:04 +00:00
d3d11h264dec: Reconfigure decoder object on DPB size change
Even if resolution and/or bitdepth is not updated, required DPB size can be changed per SPS update and it could be even larger than previously configured size of DPB. If so, we need to reconfigure DPB d3d11 texture pool again. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1839>
This commit is contained in:
parent
dc90a3d3cf
commit
3e35a6f03f
1 changed files with 25 additions and 0 deletions
|
@ -99,6 +99,7 @@ typedef struct _GstD3D11H264Dec
|
|||
guint chroma_format_idc;
|
||||
GstVideoFormat out_format;
|
||||
gboolean interlaced;
|
||||
gint max_dpb_size;
|
||||
|
||||
/* Array of DXVA_Slice_H264_Short */
|
||||
GArray *slice_list;
|
||||
|
@ -295,6 +296,21 @@ gst_d3d11_h264_dec_set_context (GstElement * element, GstContext * context)
|
|||
GST_ELEMENT_CLASS (parent_class)->set_context (element, context);
|
||||
}
|
||||
|
||||
/* Clear all codec specific (e.g., SPS) data */
|
||||
static void
|
||||
gst_d3d11_h264_dec_reset (GstD3D11H264Dec * self)
|
||||
{
|
||||
self->width = 0;
|
||||
self->height = 0;
|
||||
self->coded_width = 0;
|
||||
self->coded_height = 0;
|
||||
self->bitdepth = 0;
|
||||
self->chroma_format_idc = 0;
|
||||
self->out_format = GST_VIDEO_FORMAT_UNKNOWN;
|
||||
self->interlaced = FALSE;
|
||||
self->max_dpb_size = 0;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_d3d11_h264_dec_open (GstVideoDecoder * decoder)
|
||||
{
|
||||
|
@ -315,6 +331,8 @@ gst_d3d11_h264_dec_open (GstVideoDecoder * decoder)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
gst_d3d11_h264_dec_reset (self);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -436,6 +454,13 @@ gst_d3d11_h264_dec_new_sequence (GstH264Decoder * decoder,
|
|||
modified = TRUE;
|
||||
}
|
||||
|
||||
if (self->max_dpb_size < max_dpb_size) {
|
||||
GST_INFO_OBJECT (self, "Requires larger DPB size (%d -> %d)",
|
||||
self->max_dpb_size, max_dpb_size);
|
||||
self->max_dpb_size = max_dpb_size;
|
||||
modified = TRUE;
|
||||
}
|
||||
|
||||
if (modified || !self->d3d11_decoder->opened) {
|
||||
GstVideoInfo info;
|
||||
|
||||
|
|
Loading…
Reference in a new issue