On Sat, 30 Mar 2013 16:03:53 +0100, Luca Barbato <[email protected]> wrote:
> The sample rate index is 3 bits even if currently index 5, 6 and 7 are
> not supported.
>
> Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
> CC: [email protected]
> ---
>
> I started extending the array and then ended up changing a little the ATRAC3+
> section. I can split the patch if you like the a simpler patch.
>
> Anybody could tell me we aren't erroring out given that ATRAC3+ is supposedly
> not supported?
>
I imagine demuxing can still work even if we have no decoder.
> libavformat/oma.c | 2 +-
> libavformat/oma.h | 2 +-
> libavformat/omadec.c | 15 ++++++++++++---
> 3 files changed, 14 insertions(+), 5 deletions(-)
>
> diff --git a/libavformat/oma.c b/libavformat/oma.c
> index f6454d9..aaaf0b2 100644
> --- a/libavformat/oma.c
> +++ b/libavformat/oma.c
> @@ -22,7 +22,7 @@
> #include "oma.h"
> #include "libavcodec/avcodec.h"
>
> -const uint16_t ff_oma_srate_tab[6] = { 320, 441, 480, 882, 960, 0 };
> +const uint16_t ff_oma_srate_tab[8] = { 320, 441, 480, 882, 960, 0 };
>
> const AVCodecTag ff_oma_codec_tags[] = {
> { AV_CODEC_ID_ATRAC3, OMA_CODECID_ATRAC3 },
> diff --git a/libavformat/oma.h b/libavformat/oma.h
> index bac8bcb..1f0ddf9 100644
> --- a/libavformat/oma.h
> +++ b/libavformat/oma.h
> @@ -37,7 +37,7 @@ enum {
> OMA_CODECID_WMA = 5,
> };
>
> -extern const uint16_t ff_oma_srate_tab[6];
> +extern const uint16_t ff_oma_srate_tab[8];
>
> extern const AVCodecTag ff_oma_codec_tags[];
>
> diff --git a/libavformat/omadec.c b/libavformat/omadec.c
> index 6d6d311..b6094ce 100644
> --- a/libavformat/omadec.c
> +++ b/libavformat/omadec.c
> @@ -305,6 +305,10 @@ static int oma_read_header(AVFormatContext *s)
> switch (buf[32]) {
> case OMA_CODECID_ATRAC3:
> samplerate = ff_oma_srate_tab[(codec_params >> 13) & 7]*100;
> + if (!samplerate) {
> + av_log(s, AV_LOG_ERROR, "Unsupported sample rate\n");
> + return AVERROR_INVALIDDATA;
> + }
> if (samplerate != 44100)
> avpriv_request_sample(s, "Sample rate %d", samplerate);
>
> @@ -334,9 +338,14 @@ static int oma_read_header(AVFormatContext *s)
> case OMA_CODECID_ATRAC3P:
> st->codec->channels = (codec_params >> 10) & 7;
> framesize = ((codec_params & 0x3FF) * 8) + 8;
> - st->codec->sample_rate = ff_oma_srate_tab[(codec_params >> 13) &
> 7]*100;
> - st->codec->bit_rate = st->codec->sample_rate * framesize * 8
> / 1024;
> - avpriv_set_pts_info(st, 64, 1, st->codec->sample_rate);
> + samplerate = ff_oma_srate_tab[(codec_params >> 13) & 7]*100;
Add some spaces around * while you're at it, otherwise looks good.
--
Anton Khirnov
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel