fourcc: remove fourcc
authorWim Taymans <wim.taymans@collabora.co.uk>
Mon, 22 Aug 2011 10:22:02 +0000 (12:22 +0200)
committerWim Taymans <wim.taymans@collabora.co.uk>
Mon, 22 Aug 2011 10:22:02 +0000 (12:22 +0200)
Remove fourcc in caps.
Fix pbutils descriptions.
Add more video macros
Fix some unit test

ext/ogg/gstoggstream.c
ext/ogg/gstogmparse.c
gst-libs/gst/pbutils/Makefile.am
gst-libs/gst/pbutils/descriptions.c
gst-libs/gst/riff/riff-media.c
gst-libs/gst/video/video.h
tests/check/Makefile.am
tests/check/elements/decodebin.c

index 93ec358..c694fad 100644 (file)
@@ -1415,12 +1415,14 @@ setup_ogmaudio_mapper (GstOggStream * pad, ogg_packet * packet)
 {
   guint8 *data = packet->packet;
   guint32 fourcc;
+  gchar *fstr;
 
   pad->granulerate_n = GST_READ_UINT64_LE (data + 25);
   pad->granulerate_d = 1;
 
   fourcc = GST_READ_UINT32_LE (data + 9);
-  GST_DEBUG ("fourcc: %" GST_FOURCC_FORMAT, GST_FOURCC_ARGS (fourcc));
+  fstr = g_strdup_printf ("%" GST_FOURCC_FORMAT, GST_FOURCC_ARGS (fourcc));
+  GST_DEBUG ("fourcc: %s", fstr);
 
   pad->caps = gst_riff_create_audio_caps (fourcc, NULL, NULL, NULL, NULL, NULL);
 
@@ -1433,9 +1435,10 @@ setup_ogmaudio_mapper (GstOggStream * pad, ogg_packet * packet)
         "rate", G_TYPE_INT, pad->granulerate_n, NULL);
   } else {
     pad->caps = gst_caps_new_simple ("audio/x-ogm-unknown",
-        "fourcc", GST_TYPE_FOURCC, fourcc,
+        "fourcc", G_TYPE_STRING, fstr,
         "rate", G_TYPE_INT, pad->granulerate_n, NULL);
   }
+  g_free (fstr);
 
   pad->n_header_packets = 1;
   pad->is_ogm = TRUE;
@@ -1450,6 +1453,7 @@ setup_ogmvideo_mapper (GstOggStream * pad, ogg_packet * packet)
   guint32 fourcc;
   int width, height;
   gint64 time_unit;
+  gchar *fstr;
 
   GST_DEBUG ("time unit %d", GST_READ_UINT32_LE (data + 16));
   GST_DEBUG ("samples per unit %d", GST_READ_UINT32_LE (data + 24));
@@ -1469,13 +1473,14 @@ setup_ogmvideo_mapper (GstOggStream * pad, ogg_packet * packet)
   fourcc = GST_READ_UINT32_LE (data + 9);
   width = GST_READ_UINT32_LE (data + 45);
   height = GST_READ_UINT32_LE (data + 49);
-  GST_DEBUG ("fourcc: %" GST_FOURCC_FORMAT, GST_FOURCC_ARGS (fourcc));
+  fstr = g_strdup_printf ("%" GST_FOURCC_FORMAT, GST_FOURCC_ARGS (fourcc));
+  GST_DEBUG ("fourcc: %s", fstr);
 
   pad->caps = gst_riff_create_video_caps (fourcc, NULL, NULL, NULL, NULL, NULL);
 
   if (pad->caps == NULL) {
     pad->caps = gst_caps_new_simple ("video/x-ogm-unknown",
-        "fourcc", GST_TYPE_FOURCC, fourcc,
+        "fourcc", G_TYPE_STRING, fstr,
         "framerate", GST_TYPE_FRACTION, pad->granulerate_n,
         pad->granulerate_d, NULL);
   } else {
@@ -1485,6 +1490,7 @@ setup_ogmvideo_mapper (GstOggStream * pad, ogg_packet * packet)
         "width", G_TYPE_INT, width, "height", G_TYPE_INT, height, NULL);
   }
   GST_DEBUG ("caps: %" GST_PTR_FORMAT, pad->caps);
+  g_free (fstr);
 
   pad->n_header_packets = 1;
   pad->frame_size = 1;
index a9da76b..b81856a 100644 (file)
@@ -585,7 +585,7 @@ gst_ogm_parse_stream_header (GstOgmParse * ogm, const guint8 * data, guint size)
         GST_WARNING_OBJECT (ogm, "could not find video caps for fourcc %"
             GST_FOURCC_FORMAT, GST_FOURCC_ARGS (fourcc));
         caps = gst_caps_new_simple ("video/x-ogm-unknown", "fourcc",
-            GST_TYPE_FOURCC, fourcc, NULL);
+            G_TYPE_STRING, ogm->hdr.subtype, NULL);
         break;
       }
 
index 8a519ed..abb4fcd 100644 (file)
@@ -47,6 +47,7 @@ EXTRA_DIST = pbutils-marshal.list
 
 libgstpbutils_@GST_MAJORMINOR@_la_LIBADD = \
   $(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_MAJORMINOR@.la \
+  $(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
   $(GST_LIBS)
 libgstpbutils_@GST_MAJORMINOR@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
 libgstpbutils_@GST_MAJORMINOR@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
index f4db9c5..69cb742 100644 (file)
@@ -42,6 +42,9 @@
 
 #include "gst/gst-i18n-plugin.h"
 
+#include <gst/audio/audio.h>
+#include <gst/video/video.h>
+
 #include "pbutils.h"
 #include "pbutils-private.h"
 
@@ -184,7 +187,6 @@ static const FormatInfo formats[] = {
   {"video/x-nut", "NUT", FLAG_CONTAINER},
   {"video/x-nuv", "MythTV NuppelVideo (NUV)", FLAG_CONTAINER},
   {"video/x-qdrw", "Apple QuickDraw", 0},
-  {"video/x-raw-gray", N_("Uncompressed Gray Image"), 0},
   {"video/x-smc", "Apple SMC", 0},
   {"video/x-smoke", "Smoke", 0},
   {"video/x-tarkin", "Tarkin", 0},
@@ -251,8 +253,7 @@ static const FormatInfo formats[] = {
   {"audio/x-adpcm", NULL, 0},
   {"audio/x-mace", NULL, 0},
   {"audio/x-pn-realaudio", NULL, 0},
-  {"audio/x-raw-int", NULL, 0},
-  {"audio/x-raw-float", NULL, 0},
+  {"audio/x-raw", NULL, 0},
   {"audio/x-wma", NULL, 0},
   {"video/mpeg", NULL, FLAG_CONTAINER | FLAG_SYSTEMSTREAM},
   {"video/mpeg", NULL, 0},
@@ -274,14 +275,13 @@ static const FormatInfo formats[] = {
   {"audio/x-pn-multirate-realaudio-live", NULL, 0},
 #endif
   {"video/x-truemotion", NULL, 0},
-  {"video/x-raw-rgb", NULL, 0},
-  {"video/x-raw-yuv", NULL, 0},
+  {"video/x-raw", NULL, 0},
   {"video/x-svq", NULL, 0},
   {"video/x-wmv", NULL, 0},
   {"video/x-xan", NULL, 0}
 };
 
-/* returns static descriptions and dynamic ones (such as video/x-raw-yuv),
+/* returns static descriptions and dynamic ones (such as video/x-raw),
  * or NULL if caps aren't known at all */
 static gchar *
 format_info_get_desc (const FormatInfo * info, const GstCaps * caps)
@@ -295,63 +295,61 @@ format_info_get_desc (const FormatInfo * info, const GstCaps * caps)
 
   s = gst_caps_get_structure (caps, 0);
 
-  if (strcmp (info->type, "video/x-raw-yuv") == 0) {
-    const gchar *ret = NULL;
-    guint32 fourcc = 0;
+  if (strcmp (info->type, "video/x-raw") == 0) {
+    gchar *ret = NULL;
+    const gchar *str = 0;
+    GstVideoFormat format;
+    const GstVideoFormatInfo *finfo;
 
-    gst_structure_get_fourcc (s, "format", &fourcc);
-    switch (fourcc) {
-      case GST_MAKE_FOURCC ('I', '4', '2', '0'):
-        ret = _("Uncompressed planar YUV 4:2:0");
-        break;
-      case GST_MAKE_FOURCC ('Y', 'V', '1', '2'):
-        ret = _("Uncompressed planar YVU 4:2:0");
-        break;
-      case GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'):
-        ret = _("Uncompressed packed YUV 4:2:2");
-        break;
-      case GST_MAKE_FOURCC ('Y', 'U', 'V', '9'):
-        ret = _("Uncompressed packed YUV 4:1:0");
-        break;
-      case GST_MAKE_FOURCC ('Y', 'V', 'U', '9'):
-        ret = _("Uncompressed packed YVU 4:1:0");
-        break;
-      case GST_MAKE_FOURCC ('Y', 'V', 'Y', 'U'):
-      case GST_MAKE_FOURCC ('U', 'Y', 'V', 'Y'):
-        ret = _("Uncompressed packed YUV 4:2:2");
-        break;
-      case GST_MAKE_FOURCC ('Y', '4', '1', 'P'):
-        ret = _("Uncompressed packed YUV 4:1:1");
-        break;
-      case GST_MAKE_FOURCC ('I', 'Y', 'U', '2'):
-        ret = _("Uncompressed packed YUV 4:4:4");
-        break;
-      case GST_MAKE_FOURCC ('Y', '4', '2', 'B'):
-        ret = _("Uncompressed planar YUV 4:2:2");
-        break;
-      case GST_MAKE_FOURCC ('Y', '4', '1', 'B'):
-        ret = _("Uncompressed planar YUV 4:1:1");
-        break;
-      case GST_MAKE_FOURCC ('Y', '8', '0', '0'):
-        ret = _("Uncompressed black and white Y-plane");
-        break;
-      default:
-        ret = _("Uncompressed YUV");
-        break;
-    }
-    return g_strdup (ret);
-  } else if (strcmp (info->type, "video/x-raw-rgb") == 0) {
-    const gchar *rgb_str;
-    gint depth = 0;
+    str = gst_structure_get_string (s, "format");
+    format = gst_video_format_from_string (str);
+    if (format == GST_VIDEO_FORMAT_UNKNOWN)
+      return g_strdup (_("Uncompressed video"));
+
+    finfo = gst_video_format_get_info (format);
+
+    if (GST_VIDEO_FORMAT_INFO_IS_GRAY (finfo)) {
+      ret = g_strdup (_("Uncompressed gray"));
+    } else if (GST_VIDEO_FORMAT_INFO_IS_YUV (finfo)) {
+      const gchar *layout;
+      const gchar *subs;
+      gint w_sub, h_sub;
+
+      w_sub = GST_VIDEO_FORMAT_INFO_W_SUB (finfo, 1);
+      h_sub = GST_VIDEO_FORMAT_INFO_H_SUB (finfo, 1);
 
-    gst_structure_get_int (s, "depth", &depth);
-    rgb_str = gst_structure_has_field (s, "alpha_mask") ? "RGBA" : "RGB";
-    if (gst_structure_has_field (s, "paletted_data")) {
-      return g_strdup_printf (_("Uncompressed palettized %d-bit %s"), depth,
-          rgb_str);
+      if (GST_VIDEO_FORMAT_INFO_N_PLANES (finfo) == 1) {
+        layout = "planar";
+      } else {
+        layout = "packed";
+      }
+
+      if (w_sub == 1 && h_sub == 1) {
+        subs = "4:4:4";
+      } else if (w_sub == 2 && h_sub == 1) {
+        subs = "4:2:2";
+      } else if (w_sub == 2 && h_sub == 2) {
+        subs = "4:2:0";
+      } else if (w_sub == 4 && h_sub == 1) {
+        subs = "4:1:1";
+      } else {
+        subs = "";
+      }
+      ret = g_strdup_printf (_("Uncompressed %s YUV %s"), layout, subs);
+    } else if (GST_VIDEO_FORMAT_INFO_IS_RGB (finfo)) {
+      gboolean alpha, palette;
+      gint bits;
+
+      alpha = GST_VIDEO_FORMAT_INFO_HAS_ALPHA (finfo);
+      palette = GST_VIDEO_FORMAT_INFO_HAS_PALETTE (finfo);
+      bits = GST_VIDEO_FORMAT_INFO_BITS (finfo);
+
+      ret = g_strdup_printf (_("Uncompressed %s%d-bit %s"),
+          palette ? "palettized " : "", bits, alpha ? "RGBA" : "RGB");
     } else {
-      return g_strdup_printf ("Uncompressed %d-bit %s", depth, rgb_str);
+      ret = g_strdup (_("Uncompressed video"));
     }
+    return ret;
   } else if (strcmp (info->type, "video/x-h263") == 0) {
     const gchar *variant, *ret;
 
@@ -610,26 +608,25 @@ format_info_get_desc (const FormatInfo * info, const GstCaps * caps)
       }
     }
     return g_strdup ("MPEG Video");
-  } else if (strcmp (info->type, "audio/x-raw-int") == 0) {
-    gint bitdepth = 0;
-
-    /* 8-bit pcm might not have depth field (?) */
-    if (!gst_structure_get_int (s, "depth", &bitdepth))
-      gst_structure_get_int (s, "width", &bitdepth);
-    if (bitdepth != 0)
-      return g_strdup_printf (_("Raw %d-bit PCM audio"), bitdepth);
-    else
-      return g_strdup (_("Raw PCM audio"));
-  } else if (strcmp (info->type, "audio/x-raw-float") == 0) {
-    gint bitdepth = 0;
-
-    gst_structure_get_int (s, "width", &bitdepth);
-    if (bitdepth != 0)
-      return g_strdup_printf (_("Raw %d-bit floating-point audio"), bitdepth);
-    else
-      return g_strdup (_("Raw floating-point audio"));
+  } else if (strcmp (info->type, "audio/x-raw") == 0) {
+    gint depth = 0;
+    gboolean is_float;
+    const gchar *str;
+    GstAudioFormat format;
+    const GstAudioFormatInfo *finfo;
+
+    str = gst_structure_get_string (s, "format");
+    format = gst_audio_format_from_string (str);
+    if (format == GST_AUDIO_FORMAT_UNKNOWN)
+      return g_strdup (_("Uncompressed audio"));
+
+    finfo = gst_audio_format_get_info (format);
+    depth = GST_AUDIO_FORMAT_INFO_DEPTH (finfo);
+    is_float = GST_AUDIO_FORMAT_INFO_IS_FLOAT (finfo);
+
+    return g_strdup_printf (_("Raw %d-bit %s audio"), depth,
+        is_float ? "floating-point" : "PCM");
   }
-
   return NULL;
 }
 
index 80d50cc..fbf43da 100644 (file)
@@ -68,21 +68,14 @@ gst_riff_create_video_caps (guint32 codec_fcc,
 
       if (strf) {
         if (bpp == 8) {
-          caps = gst_caps_new_simple ("video/x-raw-rgb",
-              "bpp", G_TYPE_INT, 8, "depth", G_TYPE_INT, 8,
-              "endianness", G_TYPE_INT, G_BYTE_ORDER, NULL);
+          caps = gst_caps_new_simple ("video/x-raw",
+              "format", G_TYPE_STRING, "RGB8_PALETTED", NULL);
         } else if (bpp == 24) {
-          caps = gst_caps_new_simple ("video/x-raw-rgb",
-              "bpp", G_TYPE_INT, 24, "depth", G_TYPE_INT, 24,
-              "endianness", G_TYPE_INT, G_BIG_ENDIAN,
-              "red_mask", G_TYPE_INT, 0xff, "green_mask", G_TYPE_INT, 0xff00,
-              "blue_mask", G_TYPE_INT, 0xff0000, NULL);
+          caps = gst_caps_new_simple ("video/x-raw",
+              "format", G_TYPE_STRING, "BGR", NULL);
         } else if (bpp == 32) {
-          caps = gst_caps_new_simple ("video/x-raw-rgb",
-              "bpp", G_TYPE_INT, 32, "depth", G_TYPE_INT, 24,
-              "endianness", G_TYPE_INT, G_BIG_ENDIAN,
-              "red_mask", G_TYPE_INT, 0xff00, "green_mask", G_TYPE_INT,
-              0xff0000, "blue_mask", G_TYPE_INT, 0xff000000, NULL);
+          caps = gst_caps_new_simple ("video/x-raw",
+              "format", G_TYPE_STRING, "BGRx", NULL);
         } else {
           GST_WARNING ("Unhandled DIB RGB depth: %d", bpp);
           return NULL;
@@ -90,8 +83,8 @@ gst_riff_create_video_caps (guint32 codec_fcc,
       } else {
         /* for template */
         caps =
-            gst_caps_from_string ("video/x-raw-rgb, bpp = (int) { 8, 24, 32 }, "
-            "depth = (int) { 8, 24}");
+            gst_caps_from_string ("video/x-raw, format = (string) "
+            "{ RGB8_PALETTED, BGR, BGRx }");
       }
 
       palette = strf_data;
@@ -105,40 +98,38 @@ gst_riff_create_video_caps (guint32 codec_fcc,
       break;
     }
     case GST_MAKE_FOURCC ('I', '4', '2', '0'):
-      caps = gst_caps_new_simple ("video/x-raw-yuv",
-          "format", GST_TYPE_FOURCC, codec_fcc, NULL);
+      caps = gst_caps_new_simple ("video/x-raw",
+          "format", G_TYPE_STRING, "I420", NULL);
       if (codec_name)
         *codec_name = g_strdup ("Uncompressed planar YUV 4:2:0");
       break;
 
     case GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'):
     case GST_MAKE_FOURCC ('Y', 'U', 'N', 'V'):
-      caps = gst_caps_new_simple ("video/x-raw-yuv",
-          "format", GST_TYPE_FOURCC, GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'),
-          NULL);
+      caps = gst_caps_new_simple ("video/x-raw",
+          "format", G_TYPE_STRING, "YUY2", NULL);
       if (codec_name)
         *codec_name = g_strdup ("Uncompressed packed YUV 4:2:2");
       break;
 
     case GST_MAKE_FOURCC ('Y', 'V', 'U', '9'):
-      caps = gst_caps_new_simple ("video/x-raw-yuv",
-          "format", GST_TYPE_FOURCC, codec_fcc, NULL);
+      caps = gst_caps_new_simple ("video/x-raw",
+          "format", G_TYPE_STRING, "YVU9", NULL);
       if (codec_name)
         *codec_name = g_strdup ("Uncompressed packed YVU 4:1:0");
       break;
 
     case GST_MAKE_FOURCC ('U', 'Y', 'V', 'Y'):
     case GST_MAKE_FOURCC ('2', 'v', 'u', 'y'):
-      caps = gst_caps_new_simple ("video/x-raw-yuv",
-          "format", GST_TYPE_FOURCC, GST_MAKE_FOURCC ('U', 'Y', 'V', 'Y'),
-          NULL);
+      caps = gst_caps_new_simple ("video/x-raw",
+          "format", G_TYPE_STRING, "UYVY", NULL);
       if (codec_name)
         *codec_name = g_strdup ("Uncompressed packed YUV 4:2:2");
       break;
 
     case GST_MAKE_FOURCC ('Y', 'V', '1', '2'):
-      caps = gst_caps_new_simple ("video/x-raw-yuv",
-          "format", GST_TYPE_FOURCC, codec_fcc, NULL);
+      caps = gst_caps_new_simple ("video/x-raw",
+          "format", G_TYPE_STRING, "YV12", NULL);
       if (codec_name)
         *codec_name = g_strdup ("Uncompressed packed YVU 4:2:2");
       break;
@@ -547,16 +538,14 @@ gst_riff_create_video_caps (guint32 codec_fcc,
 
     case GST_MAKE_FOURCC ('W', 'M', 'V', 'A'):
       caps = gst_caps_new_simple ("video/x-wmv",
-          "wmvversion", G_TYPE_INT, 3, "format", GST_TYPE_FOURCC,
-          codec_fcc, NULL);
+          "wmvversion", G_TYPE_INT, 3, "format", G_TYPE_STRING, "WMVA", NULL);
       if (codec_name)
         *codec_name = g_strdup ("Microsoft Windows Media Advanced Profile");
       break;
 
     case GST_MAKE_FOURCC ('W', 'V', 'C', '1'):
       caps = gst_caps_new_simple ("video/x-wmv",
-          "wmvversion", G_TYPE_INT, 3, "format", GST_TYPE_FOURCC,
-          codec_fcc, NULL);
+          "wmvversion", G_TYPE_INT, 3, "format", G_TYPE_STRING, "WVC1", NULL);
       if (codec_name)
         *codec_name = g_strdup ("Microsoft Windows Media VC-1");
       break;
index 59a32ab..290da71 100644 (file)
@@ -261,8 +261,12 @@ struct _GstVideoFormatInfo {
 #define GST_VIDEO_FORMAT_INFO_IS_RGB(info)       ((info)->flags & GST_VIDEO_FORMAT_FLAG_RGB)
 #define GST_VIDEO_FORMAT_INFO_IS_GRAY(info)      ((info)->flags & GST_VIDEO_FORMAT_FLAG_GRAY)
 #define GST_VIDEO_FORMAT_INFO_HAS_ALPHA(info)    ((info)->flags & GST_VIDEO_FORMAT_FLAG_ALPHA)
+#define GST_VIDEO_FORMAT_INFO_IS_LE(info)        ((info)->flags & GST_VIDEO_FORMAT_FLAG_LE)
+#define GST_VIDEO_FORMAT_INFO_HAS_PALETTE(info)  ((info)->flags & GST_VIDEO_FORMAT_FLAG_PALETTE)
 
+#define GST_VIDEO_FORMAT_INFO_BITS(info)         ((info)->bits)
 #define GST_VIDEO_FORMAT_INFO_N_COMPONENTS(info) ((info)->n_components)
+#define GST_VIDEO_FORMAT_INFO_SHIFT(info,c)      ((info)->shift[c])
 #define GST_VIDEO_FORMAT_INFO_DEPTH(info,c)      ((info)->depth[c])
 #define GST_VIDEO_FORMAT_INFO_PSTRIDE(info,c)    ((info)->pixel_stride[c])
 #define GST_VIDEO_FORMAT_INFO_N_PLANES(info)     ((info)->n_planes)
index dd0d4da..530d61a 100644 (file)
@@ -131,10 +131,7 @@ check_PROGRAMS = \
        libs/xmpwriter \
        $(cxx_checks) \
        $(check_orc) \
-       pipelines/simple-launch-lines \
-       pipelines/streamheader \
-       pipelines/basetime \
-       pipelines/capsfilter-renegotiation
+       pipelines/simple-launch-lines
 
 # TORTURE_TO_FIX = \
 #       elements/adder
@@ -146,6 +143,9 @@ VALGRIND_TO_FIX = \
 
 # FIXME 0.11: these tests don't even build at the moment
 ZERO_11_TO_PORT = \
+       pipelines/streamheader \
+       pipelines/basetime \
+       pipelines/capsfilter-renegotiation \
        elements/appsink            \
        elements/appsrc             \
        elements/audiorate          \
index 9e612d6..79cfe63 100644 (file)
@@ -222,13 +222,13 @@ static gboolean test_mpeg_audio_parse_check_valid_frame (GstBaseParse * parse,
 static GstFlowReturn test_mpeg_audio_parse_parse_frame (GstBaseParse * parse,
     GstBaseParseFrame * frame);
 
-GST_BOILERPLATE (TestMpegAudioParse, test_mpeg_audio_parse, GstBaseParse,
-    GST_TYPE_BASE_PARSE);
+G_DEFINE_TYPE (TestMpegAudioParse, test_mpeg_audio_parse, GST_TYPE_BASE_PARSE);
 
 static void
-test_mpeg_audio_parse_base_init (gpointer klass)
+test_mpeg_audio_parse_class_init (TestMpegAudioParseClass * klass)
 {
   GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+  GstBaseParseClass *parse_class = GST_BASE_PARSE_CLASS (klass);
 
   gst_element_class_add_pad_template (element_class,
       gst_static_pad_template_get (&sink_template));
@@ -238,12 +238,6 @@ test_mpeg_audio_parse_base_init (gpointer klass)
   gst_element_class_set_details_simple (element_class, "MPEG1 Audio Parser",
       "Codec/Parser/Audio", "Pretends to parse mpeg1 audio stream",
       "Foo Bar <foo@bar.com>");
-}
-
-static void
-test_mpeg_audio_parse_class_init (TestMpegAudioParseClass * klass)
-{
-  GstBaseParseClass *parse_class = GST_BASE_PARSE_CLASS (klass);
 
   parse_class->start = test_mpeg_audio_parse_start;
   parse_class->stop = test_mpeg_audio_parse_stop;
@@ -254,8 +248,7 @@ test_mpeg_audio_parse_class_init (TestMpegAudioParseClass * klass)
 static gint num_parse_instances = 0;
 
 static void
-test_mpeg_audio_parse_init (TestMpegAudioParse * mp3parse,
-    TestMpegAudioParseClass * klass)
+test_mpeg_audio_parse_init (TestMpegAudioParse * mp3parse)
 {
   /* catch decodebin plugging parsers in a loop early */
   fail_unless (++num_parse_instances < 10);
@@ -278,7 +271,9 @@ static gboolean
 test_mpeg_audio_parse_check_valid_frame (GstBaseParse * parse,
     GstBaseParseFrame * frame, guint * framesize, gint * skipsize)
 {
-  const guint8 *data = GST_BUFFER_DATA (frame->buffer);
+  guint8 data[2];
+
+  gst_buffer_extract (frame->buffer, 0, data, 2);
 
   if ((GST_READ_UINT16_BE (data) & 0xffe0) == 0xffe0) {
     /* this framesize is hard-coded for ../test.mp3 */
@@ -300,7 +295,6 @@ test_mpeg_audio_parse_parse_frame (GstBaseParse * parse,
     caps = gst_caps_new_simple ("audio/mpeg", "mpegversion", G_TYPE_INT, 1,
         "mpegaudioversion", G_TYPE_INT, 1, "layer", G_TYPE_INT, 3,
         "rate", G_TYPE_INT, 44100, "channels", G_TYPE_INT, 2, NULL);
-    gst_buffer_set_caps (frame->buffer, caps);
     gst_pad_set_caps (GST_BASE_PARSE_SRC_PAD (parse), caps);
     gst_caps_unref (caps);
   }