atrac3: decode directly to the user-provided AVFrame
This commit is contained in:
parent
0ded61b57a
commit
9a75ace2b2
@ -86,7 +86,6 @@ typedef struct ChannelUnit {
|
||||
} ChannelUnit;
|
||||
|
||||
typedef struct ATRAC3Context {
|
||||
AVFrame frame;
|
||||
GetBitContext gb;
|
||||
//@{
|
||||
/** stream data */
|
||||
@ -798,6 +797,7 @@ static int decode_frame(AVCodecContext *avctx, const uint8_t *databuf,
|
||||
static int atrac3_decode_frame(AVCodecContext *avctx, void *data,
|
||||
int *got_frame_ptr, AVPacket *avpkt)
|
||||
{
|
||||
AVFrame *frame = data;
|
||||
const uint8_t *buf = avpkt->data;
|
||||
int buf_size = avpkt->size;
|
||||
ATRAC3Context *q = avctx->priv_data;
|
||||
@ -811,8 +811,8 @@ static int atrac3_decode_frame(AVCodecContext *avctx, void *data,
|
||||
}
|
||||
|
||||
/* get output buffer */
|
||||
q->frame.nb_samples = SAMPLES_PER_FRAME;
|
||||
if ((ret = ff_get_buffer(avctx, &q->frame)) < 0) {
|
||||
frame->nb_samples = SAMPLES_PER_FRAME;
|
||||
if ((ret = ff_get_buffer(avctx, frame)) < 0) {
|
||||
av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
|
||||
return ret;
|
||||
}
|
||||
@ -825,14 +825,13 @@ static int atrac3_decode_frame(AVCodecContext *avctx, void *data,
|
||||
databuf = buf;
|
||||
}
|
||||
|
||||
ret = decode_frame(avctx, databuf, (float **)q->frame.extended_data);
|
||||
ret = decode_frame(avctx, databuf, (float **)frame->extended_data);
|
||||
if (ret) {
|
||||
av_log(NULL, AV_LOG_ERROR, "Frame decoding error!\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
*got_frame_ptr = 1;
|
||||
*(AVFrame *)data = q->frame;
|
||||
*got_frame_ptr = 1;
|
||||
|
||||
return avctx->block_align;
|
||||
}
|
||||
@ -986,9 +985,6 @@ static av_cold int atrac3_decode_init(AVCodecContext *avctx)
|
||||
return AVERROR(ENOMEM);
|
||||
}
|
||||
|
||||
avcodec_get_frame_defaults(&q->frame);
|
||||
avctx->coded_frame = &q->frame;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user