You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-04 22:03:09 +02:00
avcodec/ac3dec: add a flush callback for the ac3 and eac3 decoders
Fixes ticket #10732 Signed-off-by: James Almer <jamrial@gmail.com>
This commit is contained in:
@ -252,6 +252,16 @@ static av_cold int ac3_decode_init(AVCodecContext *avctx)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static av_cold void ac3_decode_flush(AVCodecContext *avctx)
|
||||||
|
{
|
||||||
|
AC3DecodeContext *s = avctx->priv_data;
|
||||||
|
|
||||||
|
memset(&s->frame_type, 0, sizeof(*s) - offsetof(AC3DecodeContext, frame_type));
|
||||||
|
|
||||||
|
AC3_RENAME(ff_kbd_window_init)(s->window, 5.0, 256);
|
||||||
|
av_lfg_init(&s->dith_state, 0);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parse the 'sync info' and 'bit stream info' from the AC-3 bitstream.
|
* Parse the 'sync info' and 'bit stream info' from the AC-3 bitstream.
|
||||||
* GetBitContext within AC3DecodeContext must point to
|
* GetBitContext within AC3DecodeContext must point to
|
||||||
|
@ -96,6 +96,7 @@ typedef struct AC3DecodeContext {
|
|||||||
SHORTFLOAT *downmix_coeffs[2]; ///< stereo downmix coefficients
|
SHORTFLOAT *downmix_coeffs[2]; ///< stereo downmix coefficients
|
||||||
|
|
||||||
// Start of flushable fields.
|
// Start of flushable fields.
|
||||||
|
// frame_type must be the flushable field, or the offset changed in ac3_decode_flush().
|
||||||
|
|
||||||
///@name Bit stream information
|
///@name Bit stream information
|
||||||
///@{
|
///@{
|
||||||
|
@ -181,6 +181,7 @@ const FFCodec ff_ac3_fixed_decoder = {
|
|||||||
.p.priv_class = &ac3_decoder_class,
|
.p.priv_class = &ac3_decoder_class,
|
||||||
.priv_data_size = sizeof (AC3DecodeContext),
|
.priv_data_size = sizeof (AC3DecodeContext),
|
||||||
.init = ac3_decode_init,
|
.init = ac3_decode_init,
|
||||||
|
.flush = ac3_decode_flush,
|
||||||
.close = ac3_decode_end,
|
.close = ac3_decode_end,
|
||||||
FF_CODEC_DECODE_CB(ac3_decode_frame),
|
FF_CODEC_DECODE_CB(ac3_decode_frame),
|
||||||
.p.capabilities = AV_CODEC_CAP_CHANNEL_CONF |
|
.p.capabilities = AV_CODEC_CAP_CHANNEL_CONF |
|
||||||
|
@ -70,6 +70,7 @@ const FFCodec ff_ac3_decoder = {
|
|||||||
.p.id = AV_CODEC_ID_AC3,
|
.p.id = AV_CODEC_ID_AC3,
|
||||||
.priv_data_size = sizeof (AC3DecodeContext),
|
.priv_data_size = sizeof (AC3DecodeContext),
|
||||||
.init = ac3_decode_init,
|
.init = ac3_decode_init,
|
||||||
|
.flush = ac3_decode_flush,
|
||||||
.close = ac3_decode_end,
|
.close = ac3_decode_end,
|
||||||
FF_CODEC_DECODE_CB(ac3_decode_frame),
|
FF_CODEC_DECODE_CB(ac3_decode_frame),
|
||||||
.p.capabilities = AV_CODEC_CAP_CHANNEL_CONF |
|
.p.capabilities = AV_CODEC_CAP_CHANNEL_CONF |
|
||||||
@ -88,6 +89,7 @@ const FFCodec ff_eac3_decoder = {
|
|||||||
.p.id = AV_CODEC_ID_EAC3,
|
.p.id = AV_CODEC_ID_EAC3,
|
||||||
.priv_data_size = sizeof (AC3DecodeContext),
|
.priv_data_size = sizeof (AC3DecodeContext),
|
||||||
.init = ac3_decode_init,
|
.init = ac3_decode_init,
|
||||||
|
.flush = ac3_decode_flush,
|
||||||
.close = ac3_decode_end,
|
.close = ac3_decode_end,
|
||||||
FF_CODEC_DECODE_CB(ac3_decode_frame),
|
FF_CODEC_DECODE_CB(ac3_decode_frame),
|
||||||
.p.capabilities = AV_CODEC_CAP_CHANNEL_CONF |
|
.p.capabilities = AV_CODEC_CAP_CHANNEL_CONF |
|
||||||
|
Reference in New Issue
Block a user