audio: add flag to mark possible unpack formats
authorWim Taymans <wim.taymans@collabora.co.uk>
Fri, 8 Jun 2012 10:26:08 +0000 (12:26 +0200)
committerWim Taymans <wim.taymans@collabora.co.uk>
Fri, 8 Jun 2012 15:57:43 +0000 (17:57 +0200)
Make a new flag to mark formats that can be used in pack and unpack functions.
Mark S32NE and F64NE as those unpack formats

gst-libs/gst/audio/audio-format.c
gst-libs/gst/audio/audio-format.h

index d6ba4f6..7a59816 100644 (file)
 #include "audio-format.h"
 
 #define SINT (GST_AUDIO_FORMAT_FLAG_INTEGER | GST_AUDIO_FORMAT_FLAG_SIGNED)
+#define SINT_PACK (SINT | GST_AUDIO_FORMAT_FLAG_UNPACK)
 #define UINT (GST_AUDIO_FORMAT_FLAG_INTEGER)
+#define FLOAT (GST_AUDIO_FORMAT_FLAG_FLOAT)
+#define FLOAT_PACK (FLOAT | GST_AUDIO_FORMAT_FLAG_UNPACK)
 
 #define MAKE_FORMAT(str,desc,flags,end,width,depth,silent) \
   { GST_AUDIO_FORMAT_ ##str, G_STRINGIFY(str), desc, flags, end, width, depth, silent }
@@ -72,10 +75,19 @@ static GstAudioFormatInfo formats[] = {
   MAKE_FORMAT (U24_32BE, "24-bit unsigned PCM audio", UINT, G_BIG_ENDIAN, 32,
       24, SILENT_U24_32BE),
   /* 32 bit */
-  MAKE_FORMAT (S32LE, "32-bit signed PCM audio", SINT, G_LITTLE_ENDIAN, 32, 32,
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+  MAKE_FORMAT (S32LE, "32-bit signed PCM audio", SINT_PACK, G_LITTLE_ENDIAN, 32,
+      32,
       SILENT_0),
   MAKE_FORMAT (S32BE, "32-bit signed PCM audio", SINT, G_BIG_ENDIAN, 32, 32,
       SILENT_0),
+#else
+  MAKE_FORMAT (S32LE, "32-bit signed PCM audio", SINT, G_LITTLE_ENDIAN, 32, 32,
+      SILENT_0),
+  MAKE_FORMAT (S32BE, "32-bit signed PCM audio", SINT_PACK, G_BIG_ENDIAN, 32,
+      32,
+      SILENT_0),
+#endif
   MAKE_FORMAT (U32LE, "32-bit unsigned PCM audio", UINT, G_LITTLE_ENDIAN, 32,
       32, SILENT_U32LE),
   MAKE_FORMAT (U32BE, "32-bit unsigned PCM audio", UINT, G_BIG_ENDIAN, 32, 32,
@@ -109,17 +121,20 @@ static GstAudioFormatInfo formats[] = {
       SILENT_U18BE),
   /* float */
   MAKE_FORMAT (F32LE, "32-bit floating-point audio",
-      GST_AUDIO_FORMAT_FLAG_FLOAT, G_LITTLE_ENDIAN, 32, 32,
-      SILENT_0),
+      GST_AUDIO_FORMAT_FLAG_FLOAT, G_LITTLE_ENDIAN, 32, 32, SILENT_0),
   MAKE_FORMAT (F32BE, "32-bit floating-point audio",
-      GST_AUDIO_FORMAT_FLAG_FLOAT, G_BIG_ENDIAN, 32, 32,
-      SILENT_0),
+      GST_AUDIO_FORMAT_FLAG_FLOAT, G_BIG_ENDIAN, 32, 32, SILENT_0),
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
   MAKE_FORMAT (F64LE, "64-bit floating-point audio",
-      GST_AUDIO_FORMAT_FLAG_FLOAT, G_LITTLE_ENDIAN, 64, 64,
-      SILENT_0),
+      FLOAT_PACK, G_LITTLE_ENDIAN, 64, 64, SILENT_0),
   MAKE_FORMAT (F64BE, "64-bit floating-point audio",
-      GST_AUDIO_FORMAT_FLAG_FLOAT, G_BIG_ENDIAN, 64, 64,
-      SILENT_0)
+      FLOAT, G_BIG_ENDIAN, 64, 64, SILENT_0)
+#else
+  MAKE_FORMAT (F64LE, "64-bit floating-point audio",
+      FLOAT, G_LITTLE_ENDIAN, 64, 64, SILENT_0),
+  MAKE_FORMAT (F64BE, "64-bit floating-point audio",
+      FLOAT_PACK, G_BIG_ENDIAN, 64, 64, SILENT_0)
+#endif
 };
 
 G_DEFINE_POINTER_TYPE (GstAudioFormatInfo, gst_audio_format_info);
index 1228e92..d47cb79 100644 (file)
@@ -30,8 +30,10 @@ G_BEGIN_DECLS
 
 #if G_BYTE_ORDER == G_BIG_ENDIAN
 #define _GST_AUDIO_FORMAT_NE(fmt) GST_AUDIO_FORMAT_ ## fmt ## BE
+#define _GST_AUDIO_FORMAT_OE(fmt) GST_AUDIO_FORMAT_ ## fmt ## LE
 #elif G_BYTE_ORDER == G_LITTLE_ENDIAN
 #define _GST_AUDIO_FORMAT_NE(fmt) GST_AUDIO_FORMAT_ ## fmt ## LE
+#define _GST_AUDIO_FORMAT_OE(fmt) GST_AUDIO_FORMAT_ ## fmt ## BE
 #endif
 
 /**
@@ -152,6 +154,8 @@ typedef struct _GstAudioFormatInfo GstAudioFormatInfo;
  * @GST_AUDIO_FORMAT_FLAG_FLOAT: float samples
  * @GST_AUDIO_FORMAT_FLAG_SIGNED: signed samples
  * @GST_AUDIO_FORMAT_FLAG_COMPLEX: complex layout
+ * @GST_AUDIO_FORMAT_FLAG_UNPACK: the format can be used in
+ * #GstAudioFormatUnpack and #GstAudioFormatPack functions
  *
  * The different audio flags that a format info can have.
  */
@@ -160,7 +164,8 @@ typedef enum
   GST_AUDIO_FORMAT_FLAG_INTEGER  = (1 << 0),
   GST_AUDIO_FORMAT_FLAG_FLOAT    = (1 << 1),
   GST_AUDIO_FORMAT_FLAG_SIGNED   = (1 << 2),
-  GST_AUDIO_FORMAT_FLAG_COMPLEX  = (1 << 4)
+  GST_AUDIO_FORMAT_FLAG_COMPLEX  = (1 << 4),
+  GST_AUDIO_FORMAT_FLAG_UNPACK   = (1 << 5)
 } GstAudioFormatFlags;
 
 /**