Commit 3242babf authored by James Almer's avatar James Almer

avcodec/audiotoolboxdec: switch to the new generic filtering mechanism

Tested-by: ubitux
Signed-off-by: 's avatarJames Almer <jamrial@gmail.com>
parent e49338a9
...@@ -43,7 +43,6 @@ typedef struct ATDecodeContext { ...@@ -43,7 +43,6 @@ typedef struct ATDecodeContext {
AudioStreamPacketDescription pkt_desc; AudioStreamPacketDescription pkt_desc;
AVPacket in_pkt; AVPacket in_pkt;
AVPacket new_in_pkt; AVPacket new_in_pkt;
AVBSFContext *bsf;
char *decoded_data; char *decoded_data;
int channel_map[64]; int channel_map[64];
...@@ -478,42 +477,15 @@ static int ffat_decode(AVCodecContext *avctx, void *data, ...@@ -478,42 +477,15 @@ static int ffat_decode(AVCodecContext *avctx, void *data,
ATDecodeContext *at = avctx->priv_data; ATDecodeContext *at = avctx->priv_data;
AVFrame *frame = data; AVFrame *frame = data;
int pkt_size = avpkt->size; int pkt_size = avpkt->size;
AVPacket filtered_packet = {0};
OSStatus ret; OSStatus ret;
AudioBufferList out_buffers; AudioBufferList out_buffers;
if (avctx->codec_id == AV_CODEC_ID_AAC && avpkt->size > 2 && if (avctx->codec_id == AV_CODEC_ID_AAC) {
(AV_RB16(avpkt->data) & 0xfff0) == 0xfff0) {
AVPacket filter_pkt = {0};
if (!at->bsf) {
const AVBitStreamFilter *bsf = av_bsf_get_by_name("aac_adtstoasc");
if(!bsf)
return AVERROR_BSF_NOT_FOUND;
if ((ret = av_bsf_alloc(bsf, &at->bsf)))
return ret;
if (((ret = avcodec_parameters_from_context(at->bsf->par_in, avctx)) < 0) ||
((ret = av_bsf_init(at->bsf)) < 0)) {
av_bsf_free(&at->bsf);
return ret;
}
}
if ((ret = av_packet_ref(&filter_pkt, avpkt)) < 0)
return ret;
if ((ret = av_bsf_send_packet(at->bsf, &filter_pkt)) < 0) {
av_packet_unref(&filter_pkt);
return ret;
}
if ((ret = av_bsf_receive_packet(at->bsf, &filtered_packet)) < 0)
return ret;
if (!at->extradata_size) { if (!at->extradata_size) {
uint8_t *side_data; uint8_t *side_data;
int side_data_size = 0; int side_data_size = 0;
side_data = av_packet_get_side_data(&filtered_packet, AV_PKT_DATA_NEW_EXTRADATA, side_data = av_packet_get_side_data(avpkt, AV_PKT_DATA_NEW_EXTRADATA,
&side_data_size); &side_data_size);
if (side_data_size) { if (side_data_size) {
at->extradata = av_mallocz(side_data_size + AV_INPUT_BUFFER_PADDING_SIZE); at->extradata = av_mallocz(side_data_size + AV_INPUT_BUFFER_PADDING_SIZE);
...@@ -523,13 +495,10 @@ static int ffat_decode(AVCodecContext *avctx, void *data, ...@@ -523,13 +495,10 @@ static int ffat_decode(AVCodecContext *avctx, void *data,
memcpy(at->extradata, side_data, side_data_size); memcpy(at->extradata, side_data, side_data_size);
} }
} }
avpkt = &filtered_packet;
} }
if (!at->converter) { if (!at->converter) {
if ((ret = ffat_create_decoder(avctx, avpkt)) < 0) { if ((ret = ffat_create_decoder(avctx, avpkt)) < 0) {
av_packet_unref(&filtered_packet);
return ret; return ret;
} }
} }
...@@ -548,9 +517,7 @@ static int ffat_decode(AVCodecContext *avctx, void *data, ...@@ -548,9 +517,7 @@ static int ffat_decode(AVCodecContext *avctx, void *data,
av_packet_unref(&at->new_in_pkt); av_packet_unref(&at->new_in_pkt);
if (avpkt->size) { if (avpkt->size) {
if (filtered_packet.data) { if ((ret = av_packet_ref(&at->new_in_pkt, avpkt)) < 0) {
at->new_in_pkt = filtered_packet;
} else if ((ret = av_packet_ref(&at->new_in_pkt, avpkt)) < 0) {
return ret; return ret;
} }
} else { } else {
...@@ -601,7 +568,6 @@ static av_cold int ffat_close_decoder(AVCodecContext *avctx) ...@@ -601,7 +568,6 @@ static av_cold int ffat_close_decoder(AVCodecContext *avctx)
ATDecodeContext *at = avctx->priv_data; ATDecodeContext *at = avctx->priv_data;
if (at->converter) if (at->converter)
AudioConverterDispose(at->converter); AudioConverterDispose(at->converter);
av_bsf_free(&at->bsf);
av_packet_unref(&at->new_in_pkt); av_packet_unref(&at->new_in_pkt);
av_packet_unref(&at->in_pkt); av_packet_unref(&at->in_pkt);
av_free(at->decoded_data); av_free(at->decoded_data);
...@@ -615,7 +581,7 @@ static av_cold int ffat_close_decoder(AVCodecContext *avctx) ...@@ -615,7 +581,7 @@ static av_cold int ffat_close_decoder(AVCodecContext *avctx)
.version = LIBAVUTIL_VERSION_INT, \ .version = LIBAVUTIL_VERSION_INT, \
}; };
#define FFAT_DEC(NAME, ID) \ #define FFAT_DEC(NAME, ID, bsf_name) \
FFAT_DEC_CLASS(NAME) \ FFAT_DEC_CLASS(NAME) \
AVCodec ff_##NAME##_at_decoder = { \ AVCodec ff_##NAME##_at_decoder = { \
.name = #NAME "_at", \ .name = #NAME "_at", \
...@@ -628,22 +594,23 @@ static av_cold int ffat_close_decoder(AVCodecContext *avctx) ...@@ -628,22 +594,23 @@ static av_cold int ffat_close_decoder(AVCodecContext *avctx)
.decode = ffat_decode, \ .decode = ffat_decode, \
.flush = ffat_decode_flush, \ .flush = ffat_decode_flush, \
.priv_class = &ffat_##NAME##_dec_class, \ .priv_class = &ffat_##NAME##_dec_class, \
.bsfs = bsf_name, \
.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY, \ .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY, \
.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, \ .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, \
}; };
FFAT_DEC(aac, AV_CODEC_ID_AAC) FFAT_DEC(aac, AV_CODEC_ID_AAC, "aac_adtstoasc")
FFAT_DEC(ac3, AV_CODEC_ID_AC3) FFAT_DEC(ac3, AV_CODEC_ID_AC3, NULL)
FFAT_DEC(adpcm_ima_qt, AV_CODEC_ID_ADPCM_IMA_QT) FFAT_DEC(adpcm_ima_qt, AV_CODEC_ID_ADPCM_IMA_QT, NULL)
FFAT_DEC(alac, AV_CODEC_ID_ALAC) FFAT_DEC(alac, AV_CODEC_ID_ALAC, NULL)
FFAT_DEC(amr_nb, AV_CODEC_ID_AMR_NB) FFAT_DEC(amr_nb, AV_CODEC_ID_AMR_NB, NULL)
FFAT_DEC(eac3, AV_CODEC_ID_EAC3) FFAT_DEC(eac3, AV_CODEC_ID_EAC3, NULL)
FFAT_DEC(gsm_ms, AV_CODEC_ID_GSM_MS) FFAT_DEC(gsm_ms, AV_CODEC_ID_GSM_MS, NULL)
FFAT_DEC(ilbc, AV_CODEC_ID_ILBC) FFAT_DEC(ilbc, AV_CODEC_ID_ILBC, NULL)
FFAT_DEC(mp1, AV_CODEC_ID_MP1) FFAT_DEC(mp1, AV_CODEC_ID_MP1, NULL)
FFAT_DEC(mp2, AV_CODEC_ID_MP2) FFAT_DEC(mp2, AV_CODEC_ID_MP2, NULL)
FFAT_DEC(mp3, AV_CODEC_ID_MP3) FFAT_DEC(mp3, AV_CODEC_ID_MP3, NULL)
FFAT_DEC(pcm_alaw, AV_CODEC_ID_PCM_ALAW) FFAT_DEC(pcm_alaw, AV_CODEC_ID_PCM_ALAW, NULL)
FFAT_DEC(pcm_mulaw, AV_CODEC_ID_PCM_MULAW) FFAT_DEC(pcm_mulaw, AV_CODEC_ID_PCM_MULAW, NULL)
FFAT_DEC(qdmc, AV_CODEC_ID_QDMC) FFAT_DEC(qdmc, AV_CODEC_ID_QDMC, NULL)
FFAT_DEC(qdm2, AV_CODEC_ID_QDM2) FFAT_DEC(qdm2, AV_CODEC_ID_QDM2, NULL)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment