diff options
author | Clément Bœsch <ubitux@gmail.com> | 2012-05-09 22:39:40 +0200 |
---|---|---|
committer | Clément Bœsch <ubitux@gmail.com> | 2012-05-13 16:49:17 +0200 |
commit | ca297513f034198029084b4af33ac4c29ab83bce (patch) | |
tree | b13ed08cbd40b4b4a7f981e4f0105b58d55064b1 /libavformat/mp3enc.c | |
parent | 1f2f031c2fc3a0f5439a2f3fb22236c8e3d8f69f (diff) | |
download | ffmpeg-ca297513f034198029084b4af33ac4c29ab83bce.tar.gz |
lavf/mp3enc: support MPEG-2 and MPEG-2.5 sample rates when writing Xing header.
Diffstat (limited to 'libavformat/mp3enc.c')
-rw-r--r-- | libavformat/mp3enc.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/libavformat/mp3enc.c b/libavformat/mp3enc.c index 7dec8245f0..8a9f788faa 100644 --- a/libavformat/mp3enc.c +++ b/libavformat/mp3enc.c @@ -121,17 +121,21 @@ static int mp3_write_xing(AVFormatContext *s) int64_t xing_offset; int32_t header, mask; MPADecodeHeader c; - int srate_idx, i, channels; + int srate_idx, ver = 0, i, channels; int needed; if (!s->pb->seekable) return 0; - for (i = 0; i < FF_ARRAY_ELEMS(avpriv_mpa_freq_tab); i++) - if (avpriv_mpa_freq_tab[i] == codec->sample_rate) { - srate_idx = i; - break; - } + for (i = 0; i < FF_ARRAY_ELEMS(avpriv_mpa_freq_tab); i++) { + const uint16_t base_freq = avpriv_mpa_freq_tab[i]; + if (codec->sample_rate == base_freq) ver = 0x3; // MPEG 1 + else if (codec->sample_rate == base_freq / 2) ver = 0x2; // MPEG 2 + else if (codec->sample_rate == base_freq / 4) ver = 0x0; // MPEG 2.5 + else continue; + srate_idx = i; + break; + } if (i == FF_ARRAY_ELEMS(avpriv_mpa_freq_tab)) { av_log(s, AV_LOG_WARNING, "Unsupported sample rate, not writing Xing header.\n"); return -1; @@ -145,7 +149,7 @@ static int mp3_write_xing(AVFormatContext *s) /* dummy MPEG audio header */ header = 0xff << 24; // sync - header |= (0x7 << 5 | 0x3 << 3 | 0x1 << 1 | 0x1) << 16; // sync/mpeg-1/layer 3/no crc*/ + header |= (0x7 << 5 | ver << 3 | 0x1 << 1 | 0x1) << 16; // sync/audio-version/layer 3/no crc*/ header |= (srate_idx << 2) << 8; header |= channels << 6; |