You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-15 14:13:16 +02:00
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:
@@ -27,7 +27,7 @@
|
|||||||
#include "audio_frame_queue.h"
|
#include "audio_frame_queue.h"
|
||||||
#include "internal.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);
|
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) {
|
if (avctx->channels > 1) {
|
||||||
av_log_missing_feature(avctx, "multi-channel AMR", 0);
|
av_log_missing_feature(avctx, "multi-channel AMR", 0);
|
||||||
return;
|
return AVERROR_PATCHWELCOME;
|
||||||
}
|
}
|
||||||
|
|
||||||
avctx->channels = 1;
|
avctx->channels = 1;
|
||||||
avctx->channel_layout = AV_CH_LAYOUT_MONO;
|
avctx->channel_layout = AV_CH_LAYOUT_MONO;
|
||||||
avctx->sample_fmt = AV_SAMPLE_FMT_S16;
|
avctx->sample_fmt = AV_SAMPLE_FMT_S16;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if CONFIG_LIBOPENCORE_AMRNB
|
#if CONFIG_LIBOPENCORE_AMRNB
|
||||||
@@ -108,6 +109,10 @@ static const AVClass class = {
|
|||||||
static av_cold int amr_nb_decode_init(AVCodecContext *avctx)
|
static av_cold int amr_nb_decode_init(AVCodecContext *avctx)
|
||||||
{
|
{
|
||||||
AMRContext *s = avctx->priv_data;
|
AMRContext *s = avctx->priv_data;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if ((ret = amr_decode_fix_avctx(avctx)) < 0)
|
||||||
|
return ret;
|
||||||
|
|
||||||
s->dec_state = Decoder_Interface_init();
|
s->dec_state = Decoder_Interface_init();
|
||||||
if (!s->dec_state) {
|
if (!s->dec_state) {
|
||||||
@@ -115,13 +120,6 @@ static av_cold int amr_nb_decode_init(AVCodecContext *avctx)
|
|||||||
return -1;
|
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);
|
avcodec_get_frame_defaults(&s->frame);
|
||||||
avctx->coded_frame = &s->frame;
|
avctx->coded_frame = &s->frame;
|
||||||
|
|
||||||
@@ -323,16 +321,13 @@ typedef struct AMRWBContext {
|
|||||||
static av_cold int amr_wb_decode_init(AVCodecContext *avctx)
|
static av_cold int amr_wb_decode_init(AVCodecContext *avctx)
|
||||||
{
|
{
|
||||||
AMRWBContext *s = avctx->priv_data;
|
AMRWBContext *s = avctx->priv_data;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if ((ret = amr_decode_fix_avctx(avctx)) < 0)
|
||||||
|
return ret;
|
||||||
|
|
||||||
s->state = D_IF_init();
|
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);
|
avcodec_get_frame_defaults(&s->frame);
|
||||||
avctx->coded_frame = &s->frame;
|
avctx->coded_frame = &s->frame;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user