|
|
|
@ -24,6 +24,7 @@ |
|
|
|
|
#include "libavutil/dict.h" |
|
|
|
|
#include "libavutil/mathematics.h" |
|
|
|
|
#include "libavutil/opt.h" |
|
|
|
|
#include "libavutil/avassert.h" |
|
|
|
|
#include "libavcodec/mpegvideo.h" |
|
|
|
|
#include "avformat.h" |
|
|
|
|
#include "internal.h" |
|
|
|
@ -1022,20 +1023,21 @@ static int mpegts_write_packet(AVFormatContext *s, AVPacket *pkt) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (st->codec->codec_type != AVMEDIA_TYPE_AUDIO) { |
|
|
|
|
// for video and subtitle, write a single pes packet
|
|
|
|
|
mpegts_write_pes(s, st, buf, size, pts, dts, pkt->flags & AV_PKT_FLAG_KEY); |
|
|
|
|
av_free(data); |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (ts_st->payload_index + size > DEFAULT_PES_PAYLOAD_SIZE) { |
|
|
|
|
if (ts_st->payload_index && ts_st->payload_index + size > DEFAULT_PES_PAYLOAD_SIZE) { |
|
|
|
|
mpegts_write_pes(s, st, ts_st->payload, ts_st->payload_index, |
|
|
|
|
ts_st->payload_pts, ts_st->payload_dts, |
|
|
|
|
ts_st->payload_flags & AV_PKT_FLAG_KEY); |
|
|
|
|
ts_st->payload_index = 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (st->codec->codec_type != AVMEDIA_TYPE_AUDIO || size > DEFAULT_PES_PAYLOAD_SIZE) { |
|
|
|
|
av_assert0(!ts_st->payload_index); |
|
|
|
|
// for video and subtitle, write a single pes packet
|
|
|
|
|
mpegts_write_pes(s, st, buf, size, pts, dts, pkt->flags & AV_PKT_FLAG_KEY); |
|
|
|
|
av_free(data); |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!ts_st->payload_index) { |
|
|
|
|
ts_st->payload_pts = pts; |
|
|
|
|
ts_st->payload_dts = dts; |
|
|
|
|