| @@ -58,7 +58,6 @@ | |||
| typedef struct { | |||
| AVCodecContext *avctx; | |||
| AVFrame frame; | |||
| GetBitContext gb; | |||
| int channels; | |||
| @@ -248,7 +247,7 @@ static void append_extra_bits(int32_t *buffer[2], int32_t *extra_bits_buffer[2], | |||
| buffer[ch][i] = (buffer[ch][i] << extra_bits) | extra_bits_buffer[ch][i]; | |||
| } | |||
| static int decode_element(AVCodecContext *avctx, void *data, int ch_index, | |||
| static int decode_element(AVCodecContext *avctx, AVFrame *frame, int ch_index, | |||
| int channels) | |||
| { | |||
| ALACContext *alac = avctx->priv_data; | |||
| @@ -283,8 +282,8 @@ static int decode_element(AVCodecContext *avctx, void *data, int ch_index, | |||
| } | |||
| if (!alac->nb_samples) { | |||
| /* get output buffer */ | |||
| alac->frame.nb_samples = output_samples; | |||
| if ((ret = ff_get_buffer(avctx, &alac->frame)) < 0) { | |||
| frame->nb_samples = output_samples; | |||
| if ((ret = ff_get_buffer(avctx, frame)) < 0) { | |||
| av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); | |||
| return ret; | |||
| } | |||
| @@ -296,7 +295,7 @@ static int decode_element(AVCodecContext *avctx, void *data, int ch_index, | |||
| alac->nb_samples = output_samples; | |||
| if (alac->sample_size > 16) { | |||
| for (ch = 0; ch < channels; ch++) | |||
| alac->output_samples_buffer[ch] = (int32_t *)alac->frame.extended_data[ch_index + ch]; | |||
| alac->output_samples_buffer[ch] = (int32_t *)frame->extended_data[ch_index + ch]; | |||
| } | |||
| if (is_compressed) { | |||
| @@ -377,7 +376,7 @@ static int decode_element(AVCodecContext *avctx, void *data, int ch_index, | |||
| switch(alac->sample_size) { | |||
| case 16: { | |||
| for (ch = 0; ch < channels; ch++) { | |||
| int16_t *outbuffer = (int16_t *)alac->frame.extended_data[ch_index + ch]; | |||
| int16_t *outbuffer = (int16_t *)frame->extended_data[ch_index + ch]; | |||
| for (i = 0; i < alac->nb_samples; i++) | |||
| *outbuffer++ = alac->output_samples_buffer[ch][i]; | |||
| }} | |||
| @@ -397,6 +396,7 @@ static int alac_decode_frame(AVCodecContext *avctx, void *data, | |||
| int *got_frame_ptr, AVPacket *avpkt) | |||
| { | |||
| ALACContext *alac = avctx->priv_data; | |||
| AVFrame *frame = data; | |||
| enum AlacRawDataBlockType element; | |||
| int channels; | |||
| int ch, ret, got_end; | |||
| @@ -423,7 +423,7 @@ static int alac_decode_frame(AVCodecContext *avctx, void *data, | |||
| return AVERROR_INVALIDDATA; | |||
| } | |||
| ret = decode_element(avctx, data, | |||
| ret = decode_element(avctx, frame, | |||
| ff_alac_channel_layout_offsets[alac->channels - 1][ch], | |||
| channels); | |||
| if (ret < 0 && get_bits_left(&alac->gb)) | |||
| @@ -441,8 +441,7 @@ static int alac_decode_frame(AVCodecContext *avctx, void *data, | |||
| avpkt->size * 8 - get_bits_count(&alac->gb)); | |||
| } | |||
| *got_frame_ptr = 1; | |||
| *(AVFrame *)data = alac->frame; | |||
| *got_frame_ptr = 1; | |||
| return avpkt->size; | |||
| } | |||
| @@ -563,9 +562,6 @@ static av_cold int alac_decode_init(AVCodecContext * avctx) | |||
| return ret; | |||
| } | |||
| avcodec_get_frame_defaults(&alac->frame); | |||
| avctx->coded_frame = &alac->frame; | |||
| return 0; | |||
| } | |||