Browse Source

lavf/mp3enc: support MPEG-2 and MPEG-2.5 sample rates when writing Xing header.

tags/n0.11
Clément Bœsch 14 years ago
parent
commit
ca297513f0
1 changed files with 11 additions and 7 deletions
  1. +11
    -7
      libavformat/mp3enc.c

+ 11
- 7
libavformat/mp3enc.c View File

@@ -121,17 +121,21 @@ static int mp3_write_xing(AVFormatContext *s)
int64_t xing_offset; int64_t xing_offset;
int32_t header, mask; int32_t header, mask;
MPADecodeHeader c; MPADecodeHeader c;
int srate_idx, i, channels;
int srate_idx, ver = 0, i, channels;
int needed; int needed;


if (!s->pb->seekable) if (!s->pb->seekable)
return 0; 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)) { if (i == FF_ARRAY_ELEMS(avpriv_mpa_freq_tab)) {
av_log(s, AV_LOG_WARNING, "Unsupported sample rate, not writing Xing header.\n"); av_log(s, AV_LOG_WARNING, "Unsupported sample rate, not writing Xing header.\n");
return -1; return -1;
@@ -145,7 +149,7 @@ static int mp3_write_xing(AVFormatContext *s)


/* dummy MPEG audio header */ /* dummy MPEG audio header */
header = 0xff << 24; // sync 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 |= (srate_idx << 2) << 8;
header |= channels << 6; header |= channels << 6;




Loading…
Cancel
Save