mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-06-27 19:07:23 +08:00
sonic: update to new API
Fixes Ticket1075 Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
@ -44,6 +44,7 @@
|
|||||||
#define RIGHT_SIDE 2
|
#define RIGHT_SIDE 2
|
||||||
|
|
||||||
typedef struct SonicContext {
|
typedef struct SonicContext {
|
||||||
|
AVFrame frame;
|
||||||
int lossless, decorrelation;
|
int lossless, decorrelation;
|
||||||
|
|
||||||
int num_taps, downsampling;
|
int num_taps, downsampling;
|
||||||
@ -757,6 +758,9 @@ static av_cold int sonic_decode_init(AVCodecContext *avctx)
|
|||||||
s->channels = avctx->channels;
|
s->channels = avctx->channels;
|
||||||
s->samplerate = avctx->sample_rate;
|
s->samplerate = avctx->sample_rate;
|
||||||
|
|
||||||
|
avcodec_get_frame_defaults(&s->frame);
|
||||||
|
avctx->coded_frame = &s->frame;
|
||||||
|
|
||||||
if (!avctx->extradata)
|
if (!avctx->extradata)
|
||||||
{
|
{
|
||||||
av_log(avctx, AV_LOG_ERROR, "No mandatory headers present\n");
|
av_log(avctx, AV_LOG_ERROR, "No mandatory headers present\n");
|
||||||
@ -848,18 +852,25 @@ static av_cold int sonic_decode_close(AVCodecContext *avctx)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int sonic_decode_frame(AVCodecContext *avctx,
|
static int sonic_decode_frame(AVCodecContext *avctx,
|
||||||
void *data, int *data_size,
|
void *data, int *got_frame_ptr,
|
||||||
AVPacket *avpkt)
|
AVPacket *avpkt)
|
||||||
{
|
{
|
||||||
const uint8_t *buf = avpkt->data;
|
const uint8_t *buf = avpkt->data;
|
||||||
int buf_size = avpkt->size;
|
int buf_size = avpkt->size;
|
||||||
SonicContext *s = avctx->priv_data;
|
SonicContext *s = avctx->priv_data;
|
||||||
GetBitContext gb;
|
GetBitContext gb;
|
||||||
int i, quant, ch, j;
|
int i, quant, ch, j, ret;
|
||||||
short *samples = data;
|
short *samples;
|
||||||
|
|
||||||
if (buf_size == 0) return 0;
|
if (buf_size == 0) return 0;
|
||||||
|
|
||||||
|
s->frame.nb_samples = s->frame_size;
|
||||||
|
if ((ret = avctx->get_buffer(avctx, &s->frame)) < 0) {
|
||||||
|
av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
samples = s->frame.data[0];
|
||||||
|
|
||||||
// av_log(NULL, AV_LOG_INFO, "buf_size: %d\n", buf_size);
|
// av_log(NULL, AV_LOG_INFO, "buf_size: %d\n", buf_size);
|
||||||
|
|
||||||
init_get_bits(&gb, buf, buf_size*8);
|
init_get_bits(&gb, buf, buf_size*8);
|
||||||
@ -930,7 +941,8 @@ static int sonic_decode_frame(AVCodecContext *avctx,
|
|||||||
|
|
||||||
align_get_bits(&gb);
|
align_get_bits(&gb);
|
||||||
|
|
||||||
*data_size = s->frame_size * 2;
|
*got_frame_ptr = 1;
|
||||||
|
*(AVFrame*)data = s->frame;
|
||||||
|
|
||||||
return (get_bits_count(&gb)+7)/8;
|
return (get_bits_count(&gb)+7)/8;
|
||||||
}
|
}
|
||||||
@ -943,6 +955,7 @@ AVCodec ff_sonic_decoder = {
|
|||||||
.init = sonic_decode_init,
|
.init = sonic_decode_init,
|
||||||
.close = sonic_decode_close,
|
.close = sonic_decode_close,
|
||||||
.decode = sonic_decode_frame,
|
.decode = sonic_decode_frame,
|
||||||
|
.capabilities = CODEC_CAP_DR1,
|
||||||
.long_name = NULL_IF_CONFIG_SMALL("Sonic"),
|
.long_name = NULL_IF_CONFIG_SMALL("Sonic"),
|
||||||
};
|
};
|
||||||
#endif /* CONFIG_SONIC_DECODER */
|
#endif /* CONFIG_SONIC_DECODER */
|
||||||
|
Reference in New Issue
Block a user