ext/dv/gstdv.c (plugin_init): libdv is a marginal decoder, at best, on big endian...
authorAndy Wingo <wingo@pobox.com>
Fri, 21 Apr 2006 15:50:28 +0000 (15:50 +0000)
committerAndy Wingo <wingo@pobox.com>
Fri, 21 Apr 2006 15:50:28 +0000 (15:50 +0000)
Original commit message from CVS:
2006-04-21  Andy Wingo  <wingo@pobox.com>

* ext/dv/gstdv.c (plugin_init): libdv is a marginal decoder, at
best, on big endian systems. Drop its rank in that case. OTOH on
x86 it's quite fine. See changes from today in gst-ffmpeg as well.

ChangeLog
ext/dv/gstdv.c

index 9d3c9ef..4e162c7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2006-04-21  Andy Wingo  <wingo@pobox.com>
+
+       * ext/dv/gstdv.c (plugin_init): libdv is a marginal decoder, at
+       best, on big endian systems. Drop its rank in that case. OTOH on
+       x86 it's quite fine. See changes from today in gst-ffmpeg as well.
+
 2006-04-21  Michael Smith  <msmith@fluendo.com>
 
        * configure.ac:
index 55d5cf0..90947f4 100644 (file)
 static gboolean
 plugin_init (GstPlugin * plugin)
 {
+  GstRank dvdec_rank;
+
   if (!gst_element_register (plugin, "dvdemux", GST_RANK_PRIMARY,
           gst_dvdemux_get_type ()))
     return FALSE;
 
-  if (!gst_element_register (plugin, "dvdec", GST_RANK_SECONDARY,
-          gst_dvdec_get_type ()))
+  /* libdv does not correctly play back videos on big-endian machines. also it's
+     only optimized properly on x86-32 and x86-64. */
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+  rank = GST_RANK_PRIMARY;
+#else
+  rank = GST_RANK_MARGINAL;
+#endif
+
+  if (!gst_element_register (plugin, "dvdec", rank, gst_dvdec_get_type ()))
     return FALSE;
 
   return TRUE;