mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-28 00:46:37 +00:00
libs: decoder: jpeg: support dynamic resolution change decode.
Add size_changed flag to watch out resolution. if change, reset jpeg decoder's context.
This commit is contained in:
parent
49f363bca2
commit
871aecb0d4
1 changed files with 13 additions and 0 deletions
|
@ -70,6 +70,7 @@ struct _GstVaapiDecoderJpegPrivate
|
|||
guint decoder_state;
|
||||
guint is_opened:1;
|
||||
guint profile_changed:1;
|
||||
guint size_changed:1;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -123,6 +124,7 @@ gst_vaapi_decoder_jpeg_close (GstVaapiDecoderJpeg * decoder)
|
|||
priv->height = 0;
|
||||
priv->is_opened = FALSE;
|
||||
priv->profile_changed = TRUE;
|
||||
priv->size_changed = TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
@ -155,6 +157,7 @@ gst_vaapi_decoder_jpeg_create (GstVaapiDecoder * base_decoder)
|
|||
|
||||
priv->profile = GST_VAAPI_PROFILE_JPEG_BASELINE;
|
||||
priv->profile_changed = TRUE;
|
||||
priv->size_changed = TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -194,6 +197,12 @@ ensure_context (GstVaapiDecoderJpeg * decoder)
|
|||
priv->profile = profiles[i];
|
||||
}
|
||||
|
||||
if (priv->size_changed) {
|
||||
GST_DEBUG ("size changed");
|
||||
priv->size_changed = FALSE;
|
||||
reset_context = TRUE;
|
||||
}
|
||||
|
||||
if (reset_context) {
|
||||
GstVaapiContextInfo info;
|
||||
|
||||
|
@ -439,6 +448,10 @@ decode_picture (GstVaapiDecoderJpeg * decoder, GstJpegSegment * seg)
|
|||
GST_ERROR ("failed to parse image");
|
||||
return GST_VAAPI_DECODER_STATUS_ERROR_BITSTREAM_PARSER;
|
||||
}
|
||||
|
||||
if (priv->height != frame_hdr->height || priv->width != frame_hdr->width)
|
||||
priv->size_changed = TRUE;
|
||||
|
||||
priv->height = frame_hdr->height;
|
||||
priv->width = frame_hdr->width;
|
||||
|
||||
|
|
Loading…
Reference in a new issue