mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-22 15:18:21 +00:00
video: Add gst_video_decoder_set_interlaced_output_state()
Add a variant of gst_video_decoder_set_output_state() that allows the user to pass an interlacing mode as well. This is needed to ensure that gst_video_info_set_interlaced_format() is used instead so that GstVideoInfo.size is correctly initialized. https://bugzilla.gnome.org/show_bug.cgi?id=796106
This commit is contained in:
parent
4879983253
commit
be6c8400b0
2 changed files with 35 additions and 4 deletions
|
@ -619,15 +619,16 @@ parse_fail:
|
||||||
}
|
}
|
||||||
|
|
||||||
static GstVideoCodecState *
|
static GstVideoCodecState *
|
||||||
_new_output_state (GstVideoFormat fmt, guint width, guint height,
|
_new_output_state (GstVideoFormat fmt, GstVideoInterlaceMode mode, guint width,
|
||||||
GstVideoCodecState * reference)
|
guint height, GstVideoCodecState * reference)
|
||||||
{
|
{
|
||||||
GstVideoCodecState *state;
|
GstVideoCodecState *state;
|
||||||
|
|
||||||
state = g_slice_new0 (GstVideoCodecState);
|
state = g_slice_new0 (GstVideoCodecState);
|
||||||
state->ref_count = 1;
|
state->ref_count = 1;
|
||||||
gst_video_info_init (&state->info);
|
gst_video_info_init (&state->info);
|
||||||
if (!gst_video_info_set_format (&state->info, fmt, width, height)) {
|
if (!gst_video_info_set_interlaced_format (&state->info, fmt, mode, width,
|
||||||
|
height)) {
|
||||||
g_slice_free (GstVideoCodecState, state);
|
g_slice_free (GstVideoCodecState, state);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -3485,6 +3486,31 @@ GstVideoCodecState *
|
||||||
gst_video_decoder_set_output_state (GstVideoDecoder * decoder,
|
gst_video_decoder_set_output_state (GstVideoDecoder * decoder,
|
||||||
GstVideoFormat fmt, guint width, guint height,
|
GstVideoFormat fmt, guint width, guint height,
|
||||||
GstVideoCodecState * reference)
|
GstVideoCodecState * reference)
|
||||||
|
{
|
||||||
|
return gst_video_decoder_set_interlaced_output_state (decoder, fmt,
|
||||||
|
GST_VIDEO_INTERLACE_MODE_PROGRESSIVE, width, height, reference);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_video_decoder_set_interlaced_output_state:
|
||||||
|
* @decoder: a #GstVideoDecoder
|
||||||
|
* @fmt: a #GstVideoFormat
|
||||||
|
* @width: The width in pixels
|
||||||
|
* @height: The height in pixels
|
||||||
|
* @mode: A #GstVideoInterlaceMode
|
||||||
|
* @reference: (allow-none) (transfer none): An optional reference #GstVideoCodecState
|
||||||
|
*
|
||||||
|
* Same as #gst_video_decoder_set_output_state() but also allows you to also set
|
||||||
|
* the interlacing mode.
|
||||||
|
*
|
||||||
|
* Returns: (transfer full): the newly configured output state.
|
||||||
|
*
|
||||||
|
* Since: 1.16.
|
||||||
|
*/
|
||||||
|
GstVideoCodecState *
|
||||||
|
gst_video_decoder_set_interlaced_output_state (GstVideoDecoder * decoder,
|
||||||
|
GstVideoFormat fmt, GstVideoInterlaceMode mode, guint width, guint height,
|
||||||
|
GstVideoCodecState * reference)
|
||||||
{
|
{
|
||||||
GstVideoDecoderPrivate *priv = decoder->priv;
|
GstVideoDecoderPrivate *priv = decoder->priv;
|
||||||
GstVideoCodecState *state;
|
GstVideoCodecState *state;
|
||||||
|
@ -3493,7 +3519,7 @@ gst_video_decoder_set_output_state (GstVideoDecoder * decoder,
|
||||||
fmt, width, height, reference);
|
fmt, width, height, reference);
|
||||||
|
|
||||||
/* Create the new output state */
|
/* Create the new output state */
|
||||||
state = _new_output_state (fmt, width, height, reference);
|
state = _new_output_state (fmt, mode, width, height, reference);
|
||||||
if (!state)
|
if (!state)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
|
|
@ -433,6 +433,11 @@ GstVideoCodecState *gst_video_decoder_set_output_state (GstVideoDecoder *decoder
|
||||||
GstVideoFormat fmt, guint width, guint height,
|
GstVideoFormat fmt, guint width, guint height,
|
||||||
GstVideoCodecState *reference);
|
GstVideoCodecState *reference);
|
||||||
|
|
||||||
|
GST_VIDEO_API
|
||||||
|
GstVideoCodecState *gst_video_decoder_set_interlaced_output_state (GstVideoDecoder *decoder,
|
||||||
|
GstVideoFormat fmt, GstVideoInterlaceMode mode,
|
||||||
|
guint width, guint height, GstVideoCodecState *reference);
|
||||||
|
|
||||||
GST_VIDEO_API
|
GST_VIDEO_API
|
||||||
GstVideoCodecState *gst_video_decoder_get_output_state (GstVideoDecoder *decoder);
|
GstVideoCodecState *gst_video_decoder_get_output_state (GstVideoDecoder *decoder);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue