Merge remote-tracking branch 'qatar/master'
* qatar/master: libopencore-amr: Check the return value of amr_decode_fix_avctx Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
cb395929e3
@ -27,7 +27,7 @@
|
||||
#include "audio_frame_queue.h"
|
||||
#include "internal.h"
|
||||
|
||||
static void amr_decode_fix_avctx(AVCodecContext *avctx)
|
||||
static int amr_decode_fix_avctx(AVCodecContext *avctx)
|
||||
{
|
||||
const int is_amr_wb = 1 + (avctx->codec_id == AV_CODEC_ID_AMR_WB);
|
||||
|
||||
@ -36,12 +36,13 @@ static void amr_decode_fix_avctx(AVCodecContext *avctx)
|
||||
|
||||
if (avctx->channels > 1) {
|
||||
av_log_missing_feature(avctx, "multi-channel AMR", 0);
|
||||
return;
|
||||
return AVERROR_PATCHWELCOME;
|
||||
}
|
||||
|
||||
avctx->channels = 1;
|
||||
avctx->channel_layout = AV_CH_LAYOUT_MONO;
|
||||
avctx->sample_fmt = AV_SAMPLE_FMT_S16;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if CONFIG_LIBOPENCORE_AMRNB
|
||||
@ -108,6 +109,10 @@ static const AVClass class = {
|
||||
static av_cold int amr_nb_decode_init(AVCodecContext *avctx)
|
||||
{
|
||||
AMRContext *s = avctx->priv_data;
|
||||
int ret;
|
||||
|
||||
if ((ret = amr_decode_fix_avctx(avctx)) < 0)
|
||||
return ret;
|
||||
|
||||
s->dec_state = Decoder_Interface_init();
|
||||
if (!s->dec_state) {
|
||||
@ -115,13 +120,6 @@ static av_cold int amr_nb_decode_init(AVCodecContext *avctx)
|
||||
return -1;
|
||||
}
|
||||
|
||||
amr_decode_fix_avctx(avctx);
|
||||
|
||||
if (avctx->channels > 1) {
|
||||
av_log(avctx, AV_LOG_ERROR, "amr_nb: multichannel decoding not supported\n");
|
||||
return AVERROR(ENOSYS);
|
||||
}
|
||||
|
||||
avcodec_get_frame_defaults(&s->frame);
|
||||
avctx->coded_frame = &s->frame;
|
||||
|
||||
@ -323,16 +321,13 @@ typedef struct AMRWBContext {
|
||||
static av_cold int amr_wb_decode_init(AVCodecContext *avctx)
|
||||
{
|
||||
AMRWBContext *s = avctx->priv_data;
|
||||
int ret;
|
||||
|
||||
if ((ret = amr_decode_fix_avctx(avctx)) < 0)
|
||||
return ret;
|
||||
|
||||
s->state = D_IF_init();
|
||||
|
||||
amr_decode_fix_avctx(avctx);
|
||||
|
||||
if (avctx->channels > 1) {
|
||||
av_log(avctx, AV_LOG_ERROR, "amr_wb: multichannel decoding not supported\n");
|
||||
return AVERROR(ENOSYS);
|
||||
}
|
||||
|
||||
avcodec_get_frame_defaults(&s->frame);
|
||||
avctx->coded_frame = &s->frame;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user