[gst-cvs] gst-plugins-ugly: mpeg2dec: Implement interlaced support.

Edward Hervey bilboed at kemper.freedesktop.org
Tue May 12 02:54:18 PDT 2009


Module: gst-plugins-ugly
Branch: master
Commit: 8905e8c81e9ce605c718c15e4f2c1ce5bbf2e633
URL:    http://cgit.freedesktop.org/gstreamer/gst-plugins-ugly/commit/?id=8905e8c81e9ce605c718c15e4f2c1ce5bbf2e633

Author: Edward Hervey <bilboed at bilboed.com>
Date:   Tue May 12 11:44:13 2009 +0200

mpeg2dec: Implement interlaced support.

Expand the debugging statements to show more picture information.

---

 ext/mpeg2dec/gstmpeg2dec.c |   27 ++++++++++++++++++++++++---
 ext/mpeg2dec/gstmpeg2dec.h |    2 ++
 2 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/ext/mpeg2dec/gstmpeg2dec.c b/ext/mpeg2dec/gstmpeg2dec.c
index 1bbebc2..6317c20 100644
--- a/ext/mpeg2dec/gstmpeg2dec.c
+++ b/ext/mpeg2dec/gstmpeg2dec.c
@@ -601,7 +601,8 @@ gst_mpeg2dec_negotiate_format (GstMpeg2dec * mpeg2dec)
       "height", G_TYPE_INT, mpeg2dec->height,
       "pixel-aspect-ratio", GST_TYPE_FRACTION, mpeg2dec->pixel_width,
       mpeg2dec->pixel_height,
-      "framerate", GST_TYPE_FRACTION, mpeg2dec->fps_n, mpeg2dec->fps_d, NULL);
+      "framerate", GST_TYPE_FRACTION, mpeg2dec->fps_n, mpeg2dec->fps_d,
+      "interlaced", G_TYPE_BOOLEAN, mpeg2dec->interlaced, NULL);
 
   gst_pad_set_caps (mpeg2dec->srcpad, caps);
   gst_caps_unref (caps);
@@ -658,6 +659,9 @@ handle_sequence (GstMpeg2dec * mpeg2dec, const mpeg2_info_t * info)
   mpeg2dec->fps_d = info->sequence->frame_period;
   mpeg2dec->frame_period = info->sequence->frame_period * GST_USECOND / 27;
 
+  mpeg2dec->interlaced =
+      !(info->sequence->flags & SEQ_FLAG_PROGRESSIVE_SEQUENCE);
+
   GST_DEBUG_OBJECT (mpeg2dec,
       "sequence flags: %d, frame period: %d (%g), frame rate: %d/%d",
       info->sequence->flags, info->sequence->frame_period,
@@ -668,6 +672,13 @@ handle_sequence (GstMpeg2dec * mpeg2dec, const mpeg2_info_t * info)
   GST_DEBUG_OBJECT (mpeg2dec, "transfer chars: %d, matrix coef: %d",
       info->sequence->transfer_characteristics,
       info->sequence->matrix_coefficients);
+  GST_DEBUG_OBJECT (mpeg2dec,
+      "FLAGS: CONSTRAINED_PARAMETERS:%d, PROGRESSIVE_SEQUENCE:%d",
+      info->sequence->flags & SEQ_FLAG_CONSTRAINED_PARAMETERS,
+      info->sequence->flags & SEQ_FLAG_PROGRESSIVE_SEQUENCE);
+  GST_DEBUG_OBJECT (mpeg2dec, "FLAGS: LOW_DELAY:%d, COLOUR_DESCRIPTION:%d",
+      info->sequence->flags & SEQ_FLAG_LOW_DELAY,
+      info->sequence->flags & SEQ_FLAG_COLOUR_DESCRIPTION);
 
   if (!gst_mpeg2dec_negotiate_format (mpeg2dec))
     goto negotiate_failed;
@@ -927,11 +938,20 @@ handle_slice (GstMpeg2dec * mpeg2dec, const mpeg2_info_t * info)
   }
   mpeg2dec->next_time += GST_BUFFER_DURATION (outbuf);
 
+  if (picture->flags & PIC_FLAG_TOP_FIELD_FIRST)
+    GST_BUFFER_FLAG_SET (outbuf, GST_VIDEO_BUFFER_TFF);
+
+  if (picture->flags & PIC_FLAG_REPEAT_FIRST_FIELD)
+    GST_BUFFER_FLAG_SET (outbuf, GST_VIDEO_BUFFER_RFF);
+
   GST_DEBUG_OBJECT (mpeg2dec,
-      "picture: %s %s fields:%d off:%" G_GINT64_FORMAT " ts:%"
+      "picture: %s %s %s %s %s fields:%d off:%" G_GINT64_FORMAT " ts:%"
       GST_TIME_FORMAT,
-      (picture->flags & PIC_FLAG_TOP_FIELD_FIRST ? "tff " : "    "),
       (picture->flags & PIC_FLAG_PROGRESSIVE_FRAME ? "prog" : "    "),
+      (picture->flags & PIC_FLAG_TOP_FIELD_FIRST ? "tff" : "   "),
+      (picture->flags & PIC_FLAG_REPEAT_FIRST_FIELD ? "rff" : "   "),
+      (picture->flags & PIC_FLAG_SKIP ? "skip" : "    "),
+      (picture->flags & PIC_FLAG_COMPOSITE_DISPLAY ? "composite" : "         "),
       picture->nb_fields, GST_BUFFER_OFFSET (outbuf),
       GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf)));
 
@@ -989,6 +1009,7 @@ handle_slice (GstMpeg2dec * mpeg2dec, const mpeg2_info_t * info)
         outbuf,
         GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf)),
         GST_TIME_ARGS (GST_BUFFER_DURATION (outbuf)));
+    GST_LOG_OBJECT (mpeg2dec, "... with flags %x", GST_BUFFER_FLAGS (outbuf));
 
     ret = gst_pad_push (mpeg2dec->srcpad, outbuf);
     GST_DEBUG_OBJECT (mpeg2dec, "pushed with result %s",
diff --git a/ext/mpeg2dec/gstmpeg2dec.h b/ext/mpeg2dec/gstmpeg2dec.h
index 786e237..c7a3158 100644
--- a/ext/mpeg2dec/gstmpeg2dec.h
+++ b/ext/mpeg2dec/gstmpeg2dec.h
@@ -23,6 +23,7 @@
 
 
 #include <gst/gst.h>
+#include <gst/video/video.h>
 #include <mpeg2.h>
 
 G_BEGIN_DECLS
@@ -96,6 +97,7 @@ struct _GstMpeg2dec {
   gint           frame_rate_code;
   gint64         total_frames;
   gint64         frame_period;
+  gboolean       interlaced;
 
   gint           size;
   gint           u_offs;





More information about the Gstreamer-commits mailing list