提交 760a9ef4 编写于 作者: M Michael Niedermayer

Merge remote-tracking branch 'cus/stable'

* cus/stable:
  mpegts: always reset pes packet state on new packet
  mpegts: unref buffer in reset_pes_packet_state
  mpegts: factorize pes packet state reset function
  mpegts: fix indentation after last commit
  mpegts: only emit new packets if data buffer exists
  mpegts: remove uneeded buf_size check
Merged-by: NMichael Niedermayer <michaelni@gmx.at>
......@@ -787,6 +787,15 @@ static int mpegts_set_stream_info(AVStream *st, PESContext *pes,
return 0;
}
static void reset_pes_packet_state(PESContext *pes)
{
pes->pts = AV_NOPTS_VALUE;
pes->dts = AV_NOPTS_VALUE;
pes->data_index = 0;
pes->flags = 0;
av_buffer_unref(&pes->buffer);
}
static void new_pes_packet(PESContext *pes, AVPacket *pkt)
{
av_init_packet(pkt);
......@@ -814,12 +823,8 @@ static void new_pes_packet(PESContext *pes, AVPacket *pkt)
pkt->pos = pes->ts_packet_pos;
pkt->flags = pes->flags;
/* reset pts values */
pes->pts = AV_NOPTS_VALUE;
pes->dts = AV_NOPTS_VALUE;
pes->buffer = NULL;
pes->data_index = 0;
pes->flags = 0;
reset_pes_packet_state(pes);
}
static uint64_t get_ts64(GetBitContext *gb, int bits)
......@@ -913,9 +918,10 @@ static int mpegts_push_data(MpegTSFilter *filter,
if (pes->state == MPEGTS_PAYLOAD && pes->data_index > 0) {
new_pes_packet(pes, ts->pkt);
ts->stop_parse = 1;
} else {
reset_pes_packet_state(pes);
}
pes->state = MPEGTS_HEADER;
pes->data_index = 0;
pes->ts_packet_pos = pos;
}
p = buf;
......@@ -1107,7 +1113,7 @@ skip:
}
break;
case MPEGTS_PAYLOAD:
if (buf_size > 0 && pes->buffer) {
if (pes->buffer) {
if (pes->data_index > 0 &&
pes->data_index + buf_size > pes->total_size) {
new_pes_packet(pes, ts->pkt);
......@@ -1125,8 +1131,6 @@ skip:
}
memcpy(pes->buffer->data + pes->data_index, p, buf_size);
pes->data_index += buf_size;
}
buf_size = 0;
/* emit complete packets with known packet size
* decreases demuxer delay for infrequent packets like subtitles from
* a couple of seconds to milliseconds for properly muxed files.
......@@ -1137,6 +1141,8 @@ skip:
ts->stop_parse = 1;
new_pes_packet(pes, ts->pkt);
}
}
buf_size = 0;
break;
case MPEGTS_SKIP:
buf_size = 0;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册