summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--audio/decode/ad_lavc.c35
1 files changed, 5 insertions, 30 deletions
diff --git a/audio/decode/ad_lavc.c b/audio/decode/ad_lavc.c
index 2495012e47..c311bc2cb8 100644
--- a/audio/decode/ad_lavc.c
+++ b/audio/decode/ad_lavc.c
@@ -50,7 +50,6 @@ struct priv {
uint8_t *output_packed; // used by deplanarize to store packed audio samples
int output_left;
int unitsize;
- int previous_data_left; // input demuxer packet data
bool force_channel_map;
};
@@ -344,7 +343,6 @@ static int control(sh_audio_t *sh, int cmd, void *arg)
switch (cmd) {
case ADCTRL_RESYNC_STREAM:
avcodec_flush_buffers(ctx->avctx);
- ctx->previous_data_left = 0;
ctx->output_left = 0;
return CONTROL_TRUE;
}
@@ -374,35 +372,15 @@ static int decode_new_packet(struct sh_audio *sh)
{
struct priv *priv = sh->context;
AVCodecContext *avctx = priv->avctx;
- double pts = MP_NOPTS_VALUE;
- int insize;
- bool packet_already_used = priv->previous_data_left;
- struct demux_packet *mpkt = ds_get_packet2(sh->ds,
- priv->previous_data_left);
- unsigned char *start;
- if (!mpkt) {
- assert(!priv->previous_data_left);
- start = NULL;
+ struct demux_packet *mpkt = ds_get_packet2(sh->ds, false);
+ if (!mpkt)
return -1; // error or EOF
- } else {
- assert(mpkt->len >= priv->previous_data_left);
- if (!priv->previous_data_left) {
- priv->previous_data_left = mpkt->len;
- pts = mpkt->pts;
- }
- insize = priv->previous_data_left;
- start = mpkt->buffer + mpkt->len - priv->previous_data_left;
- priv->previous_data_left -= insize;
- priv->previous_data_left = FFMAX(priv->previous_data_left, 0);
- }
AVPacket pkt;
mp_set_av_packet(&pkt, mpkt);
- pkt.data = start;
- pkt.size = insize;
- if (pts != MP_NOPTS_VALUE && !packet_already_used) {
- sh->pts = pts;
+ if (mpkt->pts != MP_NOPTS_VALUE) {
+ sh->pts = mpkt->pts;
sh->pts_bytes = 0;
}
int got_frame = 0;
@@ -414,9 +392,6 @@ static int decode_new_packet(struct sh_audio *sh)
mp_msg(MSGT_DECAUDIO, MSGL_V, "lavc_audio: error\n");
return -1;
}
- // The "insize >= ret" test is sanity check against decoder overreads
- if (insize >= ret)
- priv->previous_data_left = insize - ret;
if (!got_frame)
return 0;
uint64_t unitsize = (uint64_t)av_get_bytes_per_sample(avctx->sample_fmt) *
@@ -433,7 +408,7 @@ static int decode_new_packet(struct sh_audio *sh)
} else {
priv->output = priv->avframe->data[0];
}
- mp_dbg(MSGT_DECAUDIO, MSGL_DBG2, "Decoded %d -> %d \n", insize,
+ mp_dbg(MSGT_DECAUDIO, MSGL_DBG2, "Decoded %d -> %d \n", mpkt->len,
priv->output_left);
return 0;
}