From f9facc6a4a095119f2e5d86d9a9a1e3d00776da5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Wed, 25 Apr 2012 18:21:03 +0200 Subject: [PATCH] video: Remove interlaced handling from the video base classes This must be handled by the subclasses in 0.11 because interlacing is much more complex now and can't be handled in a generic way. --- gst-libs/gst/video/gstvideodecoder.c | 34 ++++------------------------------ gst-libs/gst/video/gstvideoencoder.c | 20 -------------------- gst-libs/gst/video/gstvideoutils.h | 8 +------- 3 files changed, 5 insertions(+), 57 deletions(-) diff --git a/gst-libs/gst/video/gstvideodecoder.c b/gst-libs/gst/video/gstvideodecoder.c index 0bfa7aa..273c44f 100644 --- a/gst-libs/gst/video/gstvideodecoder.c +++ b/gst-libs/gst/video/gstvideodecoder.c @@ -1940,7 +1940,6 @@ gst_video_decoder_finish_frame (GstVideoDecoder * decoder, GstVideoCodecFrame * frame) { GstVideoDecoderPrivate *priv = decoder->priv; - GstVideoCodecState *state = priv->output_state; GstBuffer *output_buffer; GstFlowReturn ret = GST_FLOW_OK; guint64 start, stop; @@ -1967,26 +1966,6 @@ gst_video_decoder_finish_frame (GstVideoDecoder * decoder, frame->output_buffer = NULL; GST_BUFFER_FLAG_UNSET (output_buffer, GST_BUFFER_FLAG_DELTA_UNIT); - if (GST_VIDEO_INFO_IS_INTERLACED (&state->info)) { - if (GST_VIDEO_CODEC_FRAME_FLAG_IS_SET (frame, - GST_VIDEO_CODEC_FRAME_FLAG_TFF)) { - GST_BUFFER_FLAG_SET (output_buffer, GST_VIDEO_BUFFER_FLAG_TFF); - } else { - GST_BUFFER_FLAG_UNSET (output_buffer, GST_VIDEO_BUFFER_FLAG_TFF); - } - if (GST_VIDEO_CODEC_FRAME_FLAG_IS_SET (frame, - GST_VIDEO_CODEC_FRAME_FLAG_RFF)) { - GST_BUFFER_FLAG_SET (output_buffer, GST_VIDEO_BUFFER_FLAG_RFF); - } else { - GST_BUFFER_FLAG_UNSET (output_buffer, GST_VIDEO_BUFFER_FLAG_RFF); - } - if (GST_VIDEO_CODEC_FRAME_FLAG_IS_SET (frame, - GST_VIDEO_CODEC_FRAME_FLAG_ONEFIELD)) { - GST_BUFFER_FLAG_SET (output_buffer, GST_VIDEO_BUFFER_FLAG_ONEFIELD); - } else { - GST_BUFFER_FLAG_UNSET (output_buffer, GST_VIDEO_BUFFER_FLAG_ONEFIELD); - } - } if (priv->discont) { GST_BUFFER_FLAG_SET (output_buffer, GST_BUFFER_FLAG_DISCONT); @@ -2122,21 +2101,16 @@ gst_video_decoder_get_frame_duration (GstVideoDecoder * decoder, GstVideoCodecFrame * frame) { GstVideoCodecState *state = decoder->priv->output_state; - gint fields; if (state->info.fps_d == 0 || state->info.fps_n == 0) { return GST_CLOCK_TIME_NONE; } - if (GST_VIDEO_CODEC_FRAME_FLAG_IS_SET (frame, GST_VIDEO_CODEC_FRAME_FLAG_RFF)) - fields = 3; - else if (GST_VIDEO_CODEC_FRAME_FLAG_IS_SET (frame, - GST_VIDEO_CODEC_FRAME_FLAG_ONEFIELD)) - fields = 1; - else - fields = 2; + /* FIXME: For interlaced frames this needs to take into account + * the number of valid fields in the frame + */ - return gst_util_uint64_scale (fields * GST_SECOND, state->info.fps_d, + return gst_util_uint64_scale (GST_SECOND, state->info.fps_d, state->info.fps_n); } diff --git a/gst-libs/gst/video/gstvideoencoder.c b/gst-libs/gst/video/gstvideoencoder.c index 933fc6c..933bb9b 100644 --- a/gst-libs/gst/video/gstvideoencoder.c +++ b/gst-libs/gst/video/gstvideoencoder.c @@ -1089,26 +1089,6 @@ gst_video_encoder_new_frame (GstVideoEncoder * encoder, GstBuffer * buf, frame->pts = timestamp; frame->duration = duration; - if (GST_VIDEO_INFO_IS_INTERLACED (&encoder->priv->input_state->info)) { - if (GST_BUFFER_FLAG_IS_SET (buf, GST_VIDEO_BUFFER_FLAG_TFF)) { - GST_VIDEO_CODEC_FRAME_FLAG_SET (frame, GST_VIDEO_CODEC_FRAME_FLAG_TFF); - } else { - GST_VIDEO_CODEC_FRAME_FLAG_UNSET (frame, GST_VIDEO_CODEC_FRAME_FLAG_TFF); - } - if (GST_BUFFER_FLAG_IS_SET (buf, GST_VIDEO_BUFFER_FLAG_RFF)) { - GST_VIDEO_CODEC_FRAME_FLAG_SET (frame, GST_VIDEO_CODEC_FRAME_FLAG_RFF); - } else { - GST_VIDEO_CODEC_FRAME_FLAG_UNSET (frame, GST_VIDEO_CODEC_FRAME_FLAG_RFF); - } - if (GST_BUFFER_FLAG_IS_SET (buf, GST_VIDEO_BUFFER_FLAG_ONEFIELD)) { - GST_VIDEO_CODEC_FRAME_FLAG_SET (frame, - GST_VIDEO_CODEC_FRAME_FLAG_ONEFIELD); - } else { - GST_VIDEO_CODEC_FRAME_FLAG_UNSET (frame, - GST_VIDEO_CODEC_FRAME_FLAG_ONEFIELD); - } - } - return frame; } diff --git a/gst-libs/gst/video/gstvideoutils.h b/gst-libs/gst/video/gstvideoutils.h index d68fa10..7495faa 100644 --- a/gst-libs/gst/video/gstvideoutils.h +++ b/gst-libs/gst/video/gstvideoutils.h @@ -74,9 +74,6 @@ struct _GstVideoCodecState * @GST_VIDEO_CODEC_FRAME_FLAG_SYNC_POINT: is the frame a synchronization point (keyframe) * @GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME: should the output frame be made a keyframe * @GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME_HEADERS: should the encoder output stream headers - * @GST_VIDEO_CODEC_FRAME_FLAG_TFF: top-field first - * @GST_VIDEO_CODEC_FRAME_FLAG_RFF: the field is repeated - * @GST_VIDEO_CODEC_FRAME_FLAG_ONEFIELD: only one field is present * * Flags for #GstVideoCodecFrame */ @@ -85,10 +82,7 @@ typedef enum GST_VIDEO_CODEC_FRAME_FLAG_DECODE_ONLY = (1<<0), GST_VIDEO_CODEC_FRAME_FLAG_SYNC_POINT = (1<<1), GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME = (1<<2), - GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME_HEADERS = (1<<3), - GST_VIDEO_CODEC_FRAME_FLAG_TFF = (1<<4), - GST_VIDEO_CODEC_FRAME_FLAG_RFF = (1<<5), - GST_VIDEO_CODEC_FRAME_FLAG_ONEFIELD = (1<<6) + GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME_HEADERS = (1<<3) } GstVideoCodecFrameFlags; /** -- 2.7.4