mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-28 04:31:06 +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;
|
guint chroma_format_idc;
|
||||||
GstVideoFormat out_format;
|
GstVideoFormat out_format;
|
||||||
gboolean interlaced;
|
gboolean interlaced;
|
||||||
|
gint max_dpb_size;
|
||||||
|
|
||||||
/* Array of DXVA_Slice_H264_Short */
|
/* Array of DXVA_Slice_H264_Short */
|
||||||
GArray *slice_list;
|
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);
|
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
|
static gboolean
|
||||||
gst_d3d11_h264_dec_open (GstVideoDecoder * decoder)
|
gst_d3d11_h264_dec_open (GstVideoDecoder * decoder)
|
||||||
{
|
{
|
||||||
|
@ -315,6 +331,8 @@ gst_d3d11_h264_dec_open (GstVideoDecoder * decoder)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gst_d3d11_h264_dec_reset (self);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -436,6 +454,13 @@ gst_d3d11_h264_dec_new_sequence (GstH264Decoder * decoder,
|
||||||
modified = TRUE;
|
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) {
|
if (modified || !self->d3d11_decoder->opened) {
|
||||||
GstVideoInfo info;
|
GstVideoInfo info;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue