+static block_t *Float32toS8 ( filter_t *, block_t * );
+static block_t *Float32toU8 ( filter_t *, block_t * );
+
+static block_t *S24toFloat32 ( filter_t *, block_t * );
+static block_t *S24toS16 ( filter_t *, block_t * );
+static block_t *S24toS16Invert( filter_t *, block_t * );
+
+static block_t *S16toFloat32 ( filter_t *, block_t * );
+static block_t *S16toS24 ( filter_t *, block_t * );
+static block_t *S16toS24Invert( filter_t *, block_t * );
+static block_t *S16toS8 ( filter_t *, block_t * );
+static block_t *S16toU8 ( filter_t *, block_t * );
+static block_t *S16toU16 ( filter_t *, block_t * );
+
+static block_t *U16toFloat32( filter_t *, block_t * );
+static block_t *U16toS8 ( filter_t *, block_t * );
+static block_t *U16toU8 ( filter_t *, block_t * );
+static block_t *U16toS16 ( filter_t *, block_t * );
+
+static block_t *Float32toS24Invert( filter_t *, block_t * );
+static block_t *Float32toS16Invert( filter_t *, block_t * );
+static block_t *Float32toU16Invert( filter_t *, block_t * );
+
+static block_t *S24InverttoFloat32 ( filter_t *, block_t * );
+static block_t *S24InverttoS16 ( filter_t *, block_t * );
+static block_t *S24InverttoS16Invert( filter_t *, block_t * );
+
+static block_t *S16InverttoFloat32 ( filter_t *, block_t * );
+static block_t *S16InverttoS24 ( filter_t *, block_t * );
+static block_t *S16InverttoS24Invert( filter_t *, block_t * );
+static block_t *S16InverttoS8 ( filter_t *, block_t * );
+static block_t *S16InverttoU8 ( filter_t *, block_t * );
+static block_t *S16InverttoU16 ( filter_t *, block_t * );
+
+static block_t *U16InverttoFloat32( filter_t *, block_t * );
+static block_t *U16InverttoS8 ( filter_t *, block_t * );
+static block_t *U16InverttoU8 ( filter_t *, block_t * );
+static block_t *U16InverttoS16 ( filter_t *, block_t * );
+
+static block_t *S8toFloat32 ( filter_t *, block_t * );
+static block_t *S8toS16 ( filter_t *, block_t * );
+static block_t *S8toU16 ( filter_t *, block_t * );
+static block_t *S8toU8 ( filter_t *, block_t * );
+static block_t *S8toS16Invert( filter_t *, block_t * );
+static block_t *S8toU16Invert( filter_t *, block_t * );
+
+static block_t *U8toFloat32 ( filter_t *, block_t * );
+static block_t *U8toFloat32 ( filter_t *, block_t * );
+static block_t *U8toS16 ( filter_t *, block_t * );
+static block_t *U8toU16 ( filter_t *, block_t * );
+static block_t *U8toS8 ( filter_t *, block_t * );
+static block_t *U8toS16Invert( filter_t *, block_t * );
+static block_t *U8toU16Invert( filter_t *, block_t * );
+
+
+static block_t *U8toS8( filter_t *, block_t * );
+static block_t *S8toU8( filter_t *, block_t * );
+
+
+static block_t *Swap16( filter_t *, block_t * );
+static block_t *Swap24( filter_t *, block_t * );
+
+static struct
+{
+ vlc_fourcc_t i_src;
+ vlc_fourcc_t i_dst;
+ block_t *(*pf_convert)( filter_t *, block_t *);
+} ConvertTable[] =
+{
+ /* From fl32 */
+ { VLC_FOURCC('f','l','3','2'), AOUT_FMT_S24_NE, Float32toS24 },
+ { VLC_FOURCC('f','l','3','2'), AOUT_FMT_S16_NE, Float32toS16 },
+ { VLC_FOURCC('f','l','3','2'), AOUT_FMT_U16_NE, Float32toU16 },
+ { VLC_FOURCC('f','l','3','2'), AOUT_FMT_S24_IE, Float32toS24Invert },
+ { VLC_FOURCC('f','l','3','2'), AOUT_FMT_S16_IE, Float32toS16Invert },
+ { VLC_FOURCC('f','l','3','2'), AOUT_FMT_U16_IE, Float32toU16Invert },
+ { VLC_FOURCC('f','l','3','2'), VLC_FOURCC('s','8',' ',' '), Float32toS8 },
+ { VLC_FOURCC('f','l','3','2'), VLC_FOURCC('u','8',' ',' '), Float32toU8 },
+
+ /* From s24 invert */
+ { AOUT_FMT_S24_NE, VLC_FOURCC('f','l','3','2'), S24toFloat32 },
+ { AOUT_FMT_S24_NE, AOUT_FMT_S24_IE, Swap24 },
+ { AOUT_FMT_S24_NE, AOUT_FMT_S16_NE, S24toS16 },
+ { AOUT_FMT_S24_NE, AOUT_FMT_S16_IE, S24toS16Invert },
+
+ /* From s16 */
+ { AOUT_FMT_S16_NE, VLC_FOURCC('f','l','3','2'), S16toFloat32 },
+ { AOUT_FMT_S16_NE, AOUT_FMT_S24_NE, S16toS24 },
+ { AOUT_FMT_S16_NE, AOUT_FMT_S24_IE, S16toS24Invert },
+ { AOUT_FMT_S16_NE, AOUT_FMT_S16_IE, Swap16 },
+ { AOUT_FMT_S16_NE, AOUT_FMT_U16_IE, S16toU16 },
+ { AOUT_FMT_S16_NE, VLC_FOURCC('s','8',' ',' '), S16toS8 },
+ { AOUT_FMT_S16_NE, VLC_FOURCC('u','8',' ',' '), S16toU8 },
+
+ /* From u16 */
+ { AOUT_FMT_U16_NE, VLC_FOURCC('f','l','3','2'), U16toFloat32 },
+ { AOUT_FMT_U16_NE, AOUT_FMT_U16_IE, Swap16 },
+ { AOUT_FMT_U16_NE, AOUT_FMT_S16_IE, U16toS16 },
+ { AOUT_FMT_U16_NE, VLC_FOURCC('s','8',' ',' '), U16toS8 },
+ { AOUT_FMT_U16_NE, VLC_FOURCC('u','8',' ',' '), U16toU8 },
+
+ /* From s8 */
+ { VLC_FOURCC('s','8',' ',' '), VLC_FOURCC('f','l','3','2'), S8toFloat32 },
+ { VLC_FOURCC('s','8',' ',' '), AOUT_FMT_S16_NE, S8toS16 },
+ { VLC_FOURCC('s','8',' ',' '), AOUT_FMT_S16_IE, S8toS16Invert },
+ { VLC_FOURCC('s','8',' ',' '), AOUT_FMT_U16_NE, S8toU16 },
+ { VLC_FOURCC('s','8',' ',' '), AOUT_FMT_U16_IE, S8toU16Invert },
+ { VLC_FOURCC('s','8',' ',' '), VLC_FOURCC('u','8',' ',' '), S8toU8 },
+
+ /* From u8 */
+ { VLC_FOURCC('u','8',' ',' '), VLC_FOURCC('f','l','3','2'), U8toFloat32 },
+ { VLC_FOURCC('u','8',' ',' '), AOUT_FMT_S16_NE, U8toS16 },
+ { VLC_FOURCC('u','8',' ',' '), AOUT_FMT_S16_IE, U8toS16Invert },
+ { VLC_FOURCC('u','8',' ',' '), AOUT_FMT_U16_NE, U8toU16 },
+ { VLC_FOURCC('u','8',' ',' '), AOUT_FMT_U16_IE, U8toU16Invert },
+ { VLC_FOURCC('u','8',' ',' '), VLC_FOURCC('s','8',' ',' '), U8toS8 },
+
+ /* From s24 invert */
+ { AOUT_FMT_S24_IE, VLC_FOURCC('f','l','3','2'), S24InverttoFloat32 },
+ { AOUT_FMT_S24_IE, AOUT_FMT_S24_NE, Swap24 },
+ { AOUT_FMT_S24_IE, AOUT_FMT_S16_NE, S24InverttoS16 },
+ { AOUT_FMT_S24_IE, AOUT_FMT_S16_IE, S24InverttoS16Invert },
+
+ /* From s16 invert */
+ { AOUT_FMT_S16_IE, VLC_FOURCC('f','l','3','2'), S16InverttoFloat32 },
+ { AOUT_FMT_S16_IE, AOUT_FMT_S24_NE, S16InverttoS24 },
+ { AOUT_FMT_S16_IE, AOUT_FMT_S24_IE, S16InverttoS24Invert },
+ { AOUT_FMT_S16_IE, AOUT_FMT_S16_NE, Swap16 },
+ { AOUT_FMT_S16_IE, AOUT_FMT_U16_NE, S16InverttoU16 },
+ { AOUT_FMT_S16_IE, VLC_FOURCC('s','8',' ',' '), S16InverttoS8 },
+ { AOUT_FMT_S16_IE, VLC_FOURCC('u','8',' ',' '), S16InverttoU8 },
+
+ /* From u16 invert */
+ { AOUT_FMT_U16_IE, VLC_FOURCC('f','l','3','2'), U16InverttoFloat32 },
+ { AOUT_FMT_U16_IE, AOUT_FMT_U16_NE, Swap16 },
+ { AOUT_FMT_U16_IE, AOUT_FMT_S16_NE, U16InverttoS16 },
+ { AOUT_FMT_U16_IE, VLC_FOURCC('s','8',' ',' '), U16InverttoS8 },
+ { AOUT_FMT_U16_IE, VLC_FOURCC('u','8',' ',' '), U16InverttoU8 },
+
+ { 0, 0, NULL },
+};
+