diff options
author | reimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2010-01-11 20:27:52 +0000 |
---|---|---|
committer | reimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2010-01-11 20:27:52 +0000 |
commit | 33bc71f10d0218a99128b6a786357f8c60ba821e (patch) | |
tree | f981d7109a26bccd2b06a07e348a6c9dc8b1bc54 /libaf | |
parent | d3ae3611ce366b7598c49094a94109c6ee504322 (diff) | |
download | mpv-33bc71f10d0218a99128b6a786357f8c60ba821e.tar.bz2 mpv-33bc71f10d0218a99128b6a786357f8c60ba821e.tar.xz |
Add support for distinguishing between little- and big-endian SPDIF AC3
and converting between both.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30283 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libaf')
-rw-r--r-- | libaf/af_format.c | 4 | ||||
-rw-r--r-- | libaf/af_format.h | 5 | ||||
-rw-r--r-- | libaf/af_lavcac3enc.c | 4 | ||||
-rw-r--r-- | libaf/format.c | 6 |
4 files changed, 14 insertions, 5 deletions
diff --git a/libaf/af_format.c b/libaf/af_format.c index 64acbbb9b6..3b9b907882 100644 --- a/libaf/af_format.c +++ b/libaf/af_format.c @@ -98,6 +98,8 @@ static int control(struct af_instance_s* af, int cmd, void* arg) af->data->bps == data->bps) return AF_DETACH; + // Allow trivial AC3-endianness conversion + if (!AF_FORMAT_IS_AC3(af->data->format) || !AF_FORMAT_IS_AC3(data->format)) // Check for errors in configuration if((AF_OK != check_bps(data->bps)) || (AF_OK != check_format(data->format)) || @@ -152,7 +154,7 @@ static int control(struct af_instance_s* af, int cmd, void* arg) } case AF_CONTROL_FORMAT_FMT | AF_CONTROL_SET:{ // Check for errors in configuration - if(AF_OK != check_format(*(int*)arg)) + if(!AF_FORMAT_IS_AC3(*(int*)arg) && AF_OK != check_format(*(int*)arg)) return AF_ERROR; af->data->format = *(int*)arg; diff --git a/libaf/af_format.h b/libaf/af_format.h index 3f1250b430..5f194c1365 100644 --- a/libaf/af_format.h +++ b/libaf/af_format.h @@ -83,6 +83,9 @@ #define AF_FORMAT_FLOAT_LE (AF_FORMAT_F|AF_FORMAT_32BIT|AF_FORMAT_LE) #define AF_FORMAT_FLOAT_BE (AF_FORMAT_F|AF_FORMAT_32BIT|AF_FORMAT_BE) +#define AF_FORMAT_AC3_LE (AF_FORMAT_AC3|AF_FORMAT_16BIT|AF_FORMAT_LE) +#define AF_FORMAT_AC3_BE (AF_FORMAT_AC3|AF_FORMAT_16BIT|AF_FORMAT_BE) + #if HAVE_BIGENDIAN #define AF_FORMAT_U16_NE AF_FORMAT_U16_BE #define AF_FORMAT_S16_NE AF_FORMAT_S16_BE @@ -91,6 +94,7 @@ #define AF_FORMAT_U32_NE AF_FORMAT_U32_BE #define AF_FORMAT_S32_NE AF_FORMAT_S32_BE #define AF_FORMAT_FLOAT_NE AF_FORMAT_FLOAT_BE +#define AF_FORMAT_AC3_NE AF_FORMAT_AC3_BE #else #define AF_FORMAT_U16_NE AF_FORMAT_U16_LE #define AF_FORMAT_S16_NE AF_FORMAT_S16_LE @@ -99,6 +103,7 @@ #define AF_FORMAT_U32_NE AF_FORMAT_U32_LE #define AF_FORMAT_S32_NE AF_FORMAT_S32_LE #define AF_FORMAT_FLOAT_NE AF_FORMAT_FLOAT_LE +#define AF_FORMAT_AC3_NE AF_FORMAT_AC3_LE #endif #define AF_FORMAT_UNKNOWN (-1) diff --git a/libaf/af_lavcac3enc.c b/libaf/af_lavcac3enc.c index dd6863320f..1211453593 100644 --- a/libaf/af_lavcac3enc.c +++ b/libaf/af_lavcac3enc.c @@ -58,7 +58,7 @@ static int control(struct af_instance_s *af, int cmd, void *arg) switch (cmd){ case AF_CONTROL_REINIT: - if (data->format == AF_FORMAT_AC3 || data->nch < s->min_channel_num) + if (AF_FORMAT_IS_AC3(data->format) || data->nch < s->min_channel_num) return AF_DETACH; s->pending_len = 0; @@ -102,7 +102,7 @@ static int control(struct af_instance_s *af, int cmd, void *arg) return AF_ERROR; } } - af->data->format = AF_FORMAT_AC3; + af->data->format = AF_FORMAT_AC3_NE; af->data->nch = 2; return test_output_res; case AF_CONTROL_COMMAND_LINE: diff --git a/libaf/format.c b/libaf/format.c index cb795ee362..21494f43b4 100644 --- a/libaf/format.c +++ b/libaf/format.c @@ -47,7 +47,7 @@ int af_str2fmt(const char* str) format |= AF_FORMAT_A_LAW; return format; } if(strstr(str,"ac3") || strstr(str,"AC3")){ - format |= AF_FORMAT_AC3; return format; + format |= AF_FORMAT_AC3 | AF_FORMAT_16BIT; return format; } if(strstr(str,"mpeg2") || strstr(str,"MPEG2")){ format |= AF_FORMAT_MPEG2; return format; @@ -158,7 +158,9 @@ static struct { { "mulaw", AF_FORMAT_MU_LAW }, { "alaw", AF_FORMAT_A_LAW }, { "mpeg2", AF_FORMAT_MPEG2 }, - { "ac3", AF_FORMAT_AC3 }, + { "ac3le", AF_FORMAT_AC3_LE }, + { "ac3be", AF_FORMAT_AC3_BE }, + { "ac3ne", AF_FORMAT_AC3_NE }, { "imaadpcm", AF_FORMAT_IMA_ADPCM }, { "u8", AF_FORMAT_U8 }, |