Mercurial > mplayer.hg
changeset 30243:05f085c36d5b
Let the format filter do the AC3 endianness conversion instead of duplicating
the conversion code over and over.
author | reimar |
---|---|
date | Mon, 11 Jan 2010 20:40:51 +0000 |
parents | 03c1ad03f29d |
children | 5ba6784f6574 |
files | libaf/af_lavcac3enc.c libmpcodecs/ad_hwac3.c |
diffstat | 2 files changed, 14 insertions(+), 37 deletions(-) [+] |
line wrap: on
line diff
--- a/libaf/af_lavcac3enc.c Mon Jan 11 20:29:33 2010 +0000 +++ b/libaf/af_lavcac3enc.c Mon Jan 11 20:40:51 2010 +0000 @@ -32,6 +32,7 @@ #include "libavcodec/avcodec.h" #include "libavcodec/ac3.h" +#include "libavutil/intreadwrite.h" // Data for specific instances of this filter typedef struct af_ac3enc_s { @@ -102,7 +103,7 @@ return AF_ERROR; } } - af->data->format = AF_FORMAT_AC3_NE; + af->data->format = AF_FORMAT_AC3_BE; af->data->nch = 2; return test_output_res; case AF_CONTROL_COMMAND_LINE: @@ -235,28 +236,13 @@ len, s->pending_len); if (s->add_iec61937_header) { - int16_t *out = (int16_t *)buf; int bsmod = dest[5] & 0x7; -#if !HAVE_BIGENDIAN - int i; - char tmp; - for (i = 0; i < len; i += 2) { - tmp = dest[i]; - dest[i] = dest[i+1]; - dest[i+1] = tmp; - } - if (len & 1) { - dest[len] = dest[len-1]; - dest[len-1] = 0; - len++; - } -#endif - out[0] = 0xF872; // iec 61937 syncword 1 - out[1] = 0x4E1F; // iec 61937 syncword 2 - out[2] = 0x0001; // data-type ac3 - out[2] |= bsmod << 8; // bsmod - out[3] = len << 3; // number of bits in payload + AV_WB16(buf, 0xF872); // iec 61937 syncword 1 + AV_WB16(buf + 2, 0x4E1F); // iec 61937 syncword 2 + buf[4] = bsmod; // bsmod + buf[5] = 0x01; // data-type ac3 + AV_WB16(buf + 6, len << 3); // number of bits in payload memset(buf + 8 + len, 0, AC3_FRAME_SIZE * 2 * 2 - 8 - len); len = AC3_FRAME_SIZE * 2 * 2;
--- a/libmpcodecs/ad_hwac3.c Mon Jan 11 20:29:33 2010 +0000 +++ b/libmpcodecs/ad_hwac3.c Mon Jan 11 20:40:51 2010 +0000 @@ -16,6 +16,7 @@ #include "help_mp.h" #include "mpbswap.h" #include "libavutil/common.h" +#include "libavutil/intreadwrite.h" #include "ad_internal.h" @@ -151,7 +152,7 @@ sh->audio_in_minsize = 8192; sh->channels = 2; sh->samplesize = 2; - sh->sample_format = AF_FORMAT_AC3_NE; + sh->sample_format = AF_FORMAT_AC3_BE; return 1; } @@ -198,22 +199,12 @@ } else if(isdts == 0) { - uint16_t *buf16 = (uint16_t *)buf; - buf16[0] = 0xF872; // iec 61937 syncword 1 - buf16[1] = 0x4E1F; // iec 61937 syncword 2 - buf16[2] = 0x0001; // data-type ac3 - buf16[2] |= (sh_audio->a_in_buffer[5] & 0x7) << 8; // bsmod - buf16[3] = len << 3; // number of bits in payload -#if HAVE_BIGENDIAN + AV_WB16(buf, 0xF872); // iec 61937 syncword 1 + AV_WB16(buf + 2, 0x4E1F); // iec 61937 syncword 2 + buf[4] = sh_audio->a_in_buffer[5] & 0x7; // bsmod + buf[5] = 0x01; // data-type ac3 + AV_WB16(buf + 6, len << 3); // number of bits in payload memcpy(buf + 8, sh_audio->a_in_buffer, len); -#else - swab(sh_audio->a_in_buffer, buf + 8, len); - if (len & 1) { - buf[8+len-1] = 0; - buf[8+len] = sh_audio->a_in_buffer[len-1]; - len++; - } -#endif memset(buf + 8 + len, 0, 6144 - 8 - len); return 6144;