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

Reply via email to