Commit 14f7a3d5 authored by Stefano Sabatini's avatar Stefano Sabatini

lavc/lavf: transmit stream_id information for mpegts KLV data packets

This allows to copy information related to the stream ID from the demuxer
to the muxer, thus allowing for example to retain information related to
synchronous and asynchronous KLV data packets. This information is used
in the muxer when remuxing to distinguish the two kind of packets (if the
information is lacking, data packets are considered synchronous).

The fate reference changes are due to the use of
av_packet_merge_side_data(), which increases the size of the output
packet size, since side data is merged into the packet data.
parent 3ba57bfe
...@@ -15,6 +15,9 @@ libavutil: 2015-08-28 ...@@ -15,6 +15,9 @@ libavutil: 2015-08-28
API changes, most recent first: API changes, most recent first:
2016-02-xx - xxxxxxx - lavc 57.25.100
Add AV_PKT_DATA_MPEGTS_STREAM_ID for exporting the MPEGTS stream ID.
2016-xx-xx - lavu 55.18.100 2016-xx-xx - lavu 55.18.100
xxxxxxx audio_fifo.h - Add av_audio_fifo_peek_at(). xxxxxxx audio_fifo.h - Add av_audio_fifo_peek_at().
......
...@@ -1403,6 +1403,12 @@ enum AVPacketSideDataType { ...@@ -1403,6 +1403,12 @@ enum AVPacketSideDataType {
* side data includes updated metadata which appeared in the stream. * side data includes updated metadata which appeared in the stream.
*/ */
AV_PKT_DATA_METADATA_UPDATE, AV_PKT_DATA_METADATA_UPDATE,
/**
* MPEGTS stream ID, this is required to pass the stream ID
* information from the demuxer to the corresponding muxer.
*/
AV_PKT_DATA_MPEGTS_STREAM_ID,
}; };
#define AV_PKT_DATA_QUALITY_FACTOR AV_PKT_DATA_QUALITY_STATS //DEPRECATED #define AV_PKT_DATA_QUALITY_FACTOR AV_PKT_DATA_QUALITY_STATS //DEPRECATED
......
...@@ -351,6 +351,7 @@ const char *av_packet_side_data_name(enum AVPacketSideDataType type) ...@@ -351,6 +351,7 @@ const char *av_packet_side_data_name(enum AVPacketSideDataType type)
case AV_PKT_DATA_WEBVTT_IDENTIFIER: return "WebVTT ID"; case AV_PKT_DATA_WEBVTT_IDENTIFIER: return "WebVTT ID";
case AV_PKT_DATA_WEBVTT_SETTINGS: return "WebVTT Settings"; case AV_PKT_DATA_WEBVTT_SETTINGS: return "WebVTT Settings";
case AV_PKT_DATA_METADATA_UPDATE: return "Metadata Update"; case AV_PKT_DATA_METADATA_UPDATE: return "Metadata Update";
case AV_PKT_DATA_MPEGTS_STREAM_ID: return "MPEGTS Stream ID";
} }
return NULL; return NULL;
} }
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
#define LIBAVCODEC_VERSION_MAJOR 57 #define LIBAVCODEC_VERSION_MAJOR 57
#define LIBAVCODEC_VERSION_MINOR 24 #define LIBAVCODEC_VERSION_MINOR 24
#define LIBAVCODEC_VERSION_MICRO 105 #define LIBAVCODEC_VERSION_MICRO 106
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
LIBAVCODEC_VERSION_MINOR, \ LIBAVCODEC_VERSION_MINOR, \
......
...@@ -235,6 +235,7 @@ typedef struct PESContext { ...@@ -235,6 +235,7 @@ typedef struct PESContext {
int total_size; int total_size;
int pes_header_size; int pes_header_size;
int extended_stream_id; int extended_stream_id;
uint8_t stream_id;
int64_t pts, dts; int64_t pts, dts;
int64_t ts_packet_pos; /**< position of first TS packet of this PES packet */ int64_t ts_packet_pos; /**< position of first TS packet of this PES packet */
uint8_t header[MAX_PES_HEADER_SIZE]; uint8_t header[MAX_PES_HEADER_SIZE];
...@@ -862,8 +863,10 @@ static void reset_pes_packet_state(PESContext *pes) ...@@ -862,8 +863,10 @@ static void reset_pes_packet_state(PESContext *pes)
av_buffer_unref(&pes->buffer); av_buffer_unref(&pes->buffer);
} }
static void new_pes_packet(PESContext *pes, AVPacket *pkt) static int new_pes_packet(PESContext *pes, AVPacket *pkt)
{ {
char *sd;
av_init_packet(pkt); av_init_packet(pkt);
pkt->buf = pes->buffer; pkt->buf = pes->buffer;
...@@ -891,6 +894,13 @@ static void new_pes_packet(PESContext *pes, AVPacket *pkt) ...@@ -891,6 +894,13 @@ static void new_pes_packet(PESContext *pes, AVPacket *pkt)
pes->buffer = NULL; pes->buffer = NULL;
reset_pes_packet_state(pes); reset_pes_packet_state(pes);
sd = av_packet_new_side_data(pkt, AV_PKT_DATA_MPEGTS_STREAM_ID, 1);
if (!sd)
return AVERROR(ENOMEM);
*sd = pes->stream_id;
return 0;
} }
static uint64_t get_ts64(GetBitContext *gb, int bits) static uint64_t get_ts64(GetBitContext *gb, int bits)
...@@ -979,14 +989,16 @@ static int mpegts_push_data(MpegTSFilter *filter, ...@@ -979,14 +989,16 @@ static int mpegts_push_data(MpegTSFilter *filter,
PESContext *pes = filter->u.pes_filter.opaque; PESContext *pes = filter->u.pes_filter.opaque;
MpegTSContext *ts = pes->ts; MpegTSContext *ts = pes->ts;
const uint8_t *p; const uint8_t *p;
int len, code; int ret, len, code;
if (!ts->pkt) if (!ts->pkt)
return 0; return 0;
if (is_start) { if (is_start) {
if (pes->state == MPEGTS_PAYLOAD && pes->data_index > 0) { if (pes->state == MPEGTS_PAYLOAD && pes->data_index > 0) {
new_pes_packet(pes, ts->pkt); ret = new_pes_packet(pes, ts->pkt);
if (ret < 0)
return ret;
ts->stop_parse = 1; ts->stop_parse = 1;
} else { } else {
reset_pes_packet_state(pes); reset_pes_packet_state(pes);
...@@ -1014,6 +1026,7 @@ static int mpegts_push_data(MpegTSFilter *filter, ...@@ -1014,6 +1026,7 @@ static int mpegts_push_data(MpegTSFilter *filter,
code = pes->header[3] | 0x100; code = pes->header[3] | 0x100;
av_log(pes->stream, AV_LOG_TRACE, "pid=%x pes_code=%#x\n", pes->pid, av_log(pes->stream, AV_LOG_TRACE, "pid=%x pes_code=%#x\n", pes->pid,
code); code);
pes->stream_id = pes->header[3];
if ((pes->st && pes->st->discard == AVDISCARD_ALL && if ((pes->st && pes->st->discard == AVDISCARD_ALL &&
(!pes->sub_st || (!pes->sub_st ||
...@@ -1197,7 +1210,9 @@ skip: ...@@ -1197,7 +1210,9 @@ skip:
if (pes->buffer) { if (pes->buffer) {
if (pes->data_index > 0 && if (pes->data_index > 0 &&
pes->data_index + buf_size > pes->total_size) { pes->data_index + buf_size > pes->total_size) {
new_pes_packet(pes, ts->pkt); ret = new_pes_packet(pes, ts->pkt);
if (ret < 0)
return ret;
pes->total_size = MAX_PES_PAYLOAD; pes->total_size = MAX_PES_PAYLOAD;
pes->buffer = av_buffer_alloc(pes->total_size + pes->buffer = av_buffer_alloc(pes->total_size +
AV_INPUT_BUFFER_PADDING_SIZE); AV_INPUT_BUFFER_PADDING_SIZE);
...@@ -1220,7 +1235,9 @@ skip: ...@@ -1220,7 +1235,9 @@ skip:
if (!ts->stop_parse && pes->total_size < MAX_PES_PAYLOAD && if (!ts->stop_parse && pes->total_size < MAX_PES_PAYLOAD &&
pes->pes_header_size + pes->data_index == pes->total_size + PES_START_SIZE) { pes->pes_header_size + pes->data_index == pes->total_size + PES_START_SIZE) {
ts->stop_parse = 1; ts->stop_parse = 1;
new_pes_packet(pes, ts->pkt); ret = new_pes_packet(pes, ts->pkt);
if (ret < 0)
return ret;
} }
} }
buf_size = 0; buf_size = 0;
...@@ -2663,7 +2680,9 @@ static int mpegts_read_packet(AVFormatContext *s, AVPacket *pkt) ...@@ -2663,7 +2680,9 @@ static int mpegts_read_packet(AVFormatContext *s, AVPacket *pkt)
if (ts->pids[i] && ts->pids[i]->type == MPEGTS_PES) { if (ts->pids[i] && ts->pids[i]->type == MPEGTS_PES) {
PESContext *pes = ts->pids[i]->u.pes_filter.opaque; PESContext *pes = ts->pids[i]->u.pes_filter.opaque;
if (pes->state == MPEGTS_PAYLOAD && pes->data_index > 0) { if (pes->state == MPEGTS_PAYLOAD && pes->data_index > 0) {
new_pes_packet(pes, pkt); ret = new_pes_packet(pes, pkt);
if (ret < 0)
return ret;
pes->state = MPEGTS_SKIP; pes->state = MPEGTS_SKIP;
ret = 0; ret = 0;
break; break;
......
...@@ -1111,7 +1111,7 @@ static uint8_t *get_ts_payload_start(uint8_t *pkt) ...@@ -1111,7 +1111,7 @@ static uint8_t *get_ts_payload_start(uint8_t *pkt)
* NOTE: 'payload' contains a complete PES payload. */ * NOTE: 'payload' contains a complete PES payload. */
static void mpegts_write_pes(AVFormatContext *s, AVStream *st, static void mpegts_write_pes(AVFormatContext *s, AVStream *st,
const uint8_t *payload, int payload_size, const uint8_t *payload, int payload_size,
int64_t pts, int64_t dts, int key) int64_t pts, int64_t dts, int key, int stream_id)
{ {
MpegTSWriteStream *ts_st = st->priv_data; MpegTSWriteStream *ts_st = st->priv_data;
MpegTSWrite *ts = s->priv_data; MpegTSWrite *ts = s->priv_data;
...@@ -1208,6 +1208,11 @@ static void mpegts_write_pes(AVFormatContext *s, AVStream *st, ...@@ -1208,6 +1208,11 @@ static void mpegts_write_pes(AVFormatContext *s, AVStream *st,
st->codec->codec_id == AV_CODEC_ID_AC3 && st->codec->codec_id == AV_CODEC_ID_AC3 &&
ts->m2ts_mode) { ts->m2ts_mode) {
*q++ = 0xfd; *q++ = 0xfd;
} else if (st->codec->codec_type == AVMEDIA_TYPE_DATA) {
*q++ = stream_id != -1 ? stream_id : 0xfc;
if (stream_id == 0xbd) /* asynchronous KLV */
pts = dts = AV_NOPTS_VALUE;
} else { } else {
*q++ = 0xbd; *q++ = 0xbd;
if (st->codec->codec_type == AVMEDIA_TYPE_SUBTITLE) { if (st->codec->codec_type == AVMEDIA_TYPE_SUBTITLE) {
...@@ -1451,6 +1456,15 @@ static int mpegts_write_packet_internal(AVFormatContext *s, AVPacket *pkt) ...@@ -1451,6 +1456,15 @@ static int mpegts_write_packet_internal(AVFormatContext *s, AVPacket *pkt)
const int64_t delay = av_rescale(s->max_delay, 90000, AV_TIME_BASE) * 2; const int64_t delay = av_rescale(s->max_delay, 90000, AV_TIME_BASE) * 2;
int64_t dts = pkt->dts, pts = pkt->pts; int64_t dts = pkt->dts, pts = pkt->pts;
int opus_samples = 0; int opus_samples = 0;
int side_data_size;
char *side_data = NULL;
int stream_id = -1;
side_data = av_packet_get_side_data(pkt,
AV_PKT_DATA_MPEGTS_STREAM_ID,
&side_data_size);
if (side_data)
stream_id = side_data[0];
if (ts->reemit_pat_pmt) { if (ts->reemit_pat_pmt) {
av_log(s, AV_LOG_WARNING, av_log(s, AV_LOG_WARNING,
...@@ -1629,8 +1643,8 @@ static int mpegts_write_packet_internal(AVFormatContext *s, AVPacket *pkt) ...@@ -1629,8 +1643,8 @@ static int mpegts_write_packet_internal(AVFormatContext *s, AVPacket *pkt)
if ( ts_st2->payload_size if ( ts_st2->payload_size
&& (ts_st2->payload_dts == AV_NOPTS_VALUE || dts - ts_st2->payload_dts > delay/2)) { && (ts_st2->payload_dts == AV_NOPTS_VALUE || dts - ts_st2->payload_dts > delay/2)) {
mpegts_write_pes(s, st2, ts_st2->payload, ts_st2->payload_size, mpegts_write_pes(s, st2, ts_st2->payload, ts_st2->payload_size,
ts_st2->payload_pts, ts_st2->payload_dts, ts_st2->payload_pts, ts_st2->payload_dts,
ts_st2->payload_flags & AV_PKT_FLAG_KEY); ts_st2->payload_flags & AV_PKT_FLAG_KEY, stream_id);
ts_st2->payload_size = 0; ts_st2->payload_size = 0;
} }
} }
...@@ -1643,7 +1657,7 @@ static int mpegts_write_packet_internal(AVFormatContext *s, AVPacket *pkt) ...@@ -1643,7 +1657,7 @@ static int mpegts_write_packet_internal(AVFormatContext *s, AVPacket *pkt)
ts_st->opus_queued_samples + opus_samples >= 5760 /* 120ms */)) { ts_st->opus_queued_samples + opus_samples >= 5760 /* 120ms */)) {
mpegts_write_pes(s, st, ts_st->payload, ts_st->payload_size, mpegts_write_pes(s, st, ts_st->payload, ts_st->payload_size,
ts_st->payload_pts, ts_st->payload_dts, ts_st->payload_pts, ts_st->payload_dts,
ts_st->payload_flags & AV_PKT_FLAG_KEY); ts_st->payload_flags & AV_PKT_FLAG_KEY, stream_id);
ts_st->payload_size = 0; ts_st->payload_size = 0;
ts_st->opus_queued_samples = 0; ts_st->opus_queued_samples = 0;
} }
...@@ -1652,7 +1666,7 @@ static int mpegts_write_packet_internal(AVFormatContext *s, AVPacket *pkt) ...@@ -1652,7 +1666,7 @@ static int mpegts_write_packet_internal(AVFormatContext *s, AVPacket *pkt)
av_assert0(!ts_st->payload_size); av_assert0(!ts_st->payload_size);
// for video and subtitle, write a single pes packet // for video and subtitle, write a single pes packet
mpegts_write_pes(s, st, buf, size, pts, dts, mpegts_write_pes(s, st, buf, size, pts, dts,
pkt->flags & AV_PKT_FLAG_KEY); pkt->flags & AV_PKT_FLAG_KEY, stream_id);
ts_st->opus_queued_samples = 0; ts_st->opus_queued_samples = 0;
av_free(data); av_free(data);
return 0; return 0;
...@@ -1684,7 +1698,7 @@ static void mpegts_write_flush(AVFormatContext *s) ...@@ -1684,7 +1698,7 @@ static void mpegts_write_flush(AVFormatContext *s)
if (ts_st->payload_size > 0) { if (ts_st->payload_size > 0) {
mpegts_write_pes(s, st, ts_st->payload, ts_st->payload_size, mpegts_write_pes(s, st, ts_st->payload, ts_st->payload_size,
ts_st->payload_pts, ts_st->payload_dts, ts_st->payload_pts, ts_st->payload_dts,
ts_st->payload_flags & AV_PKT_FLAG_KEY); ts_st->payload_flags & AV_PKT_FLAG_KEY, -1);
ts_st->payload_size = 0; ts_st->payload_size = 0;
ts_st->opus_queued_samples = 0; ts_st->opus_queued_samples = 0;
} }
......
ret: 0 st: 0 flags:1 dts: 1.400000 pts: 1.440000 pos: 564 size: 24801 ret: 0 st: 0 flags:1 dts: 1.400000 pts: 1.440000 pos: 564 size: 24815
ret: 0 st:-1 flags:0 ts:-1.000000 ret: 0 st:-1 flags:0 ts:-1.000000
ret: 0 st: 0 flags:1 dts: 1.400000 pts: 1.440000 pos: 564 size: 24801 ret: 0 st: 0 flags:1 dts: 1.400000 pts: 1.440000 pos: 564 size: 24815
ret: 0 st:-1 flags:1 ts: 1.894167 ret: 0 st:-1 flags:1 ts: 1.894167
ret: 0 st: 0 flags:1 dts: 1.880000 pts: 1.920000 pos: 189692 size: 24786 ret: 0 st: 0 flags:1 dts: 1.880000 pts: 1.920000 pos: 189692 size: 24800
ret: 0 st: 0 flags:0 ts: 0.788333 ret: 0 st: 0 flags:0 ts: 0.788333
ret: 0 st: 0 flags:1 dts: 1.400000 pts: 1.440000 pos: 564 size: 24801 ret: 0 st: 0 flags:1 dts: 1.400000 pts: 1.440000 pos: 564 size: 24815
ret: 0 st: 0 flags:1 ts:-0.317500 ret: 0 st: 0 flags:1 ts:-0.317500
ret: 0 st: 0 flags:1 dts: 1.400000 pts: 1.440000 pos: 564 size: 24801 ret: 0 st: 0 flags:1 dts: 1.400000 pts: 1.440000 pos: 564 size: 24815
ret: 0 st: 1 flags:0 ts: 2.576667 ret: 0 st: 1 flags:0 ts: 2.576667
ret: 0 st: 1 flags:1 dts: 2.160522 pts: 2.160522 pos: 404576 size: 209 ret: 0 st: 1 flags:1 dts: 2.160522 pts: 2.160522 pos: 404576 size: 223
ret: 0 st: 1 flags:1 ts: 1.470833 ret: 0 st: 1 flags:1 ts: 1.470833
ret: 0 st: 1 flags:1 dts: 1.429089 pts: 1.429089 pos: 159988 size: 208 ret: 0 st: 1 flags:1 dts: 1.429089 pts: 1.429089 pos: 159988 size: 222
ret: 0 st:-1 flags:0 ts: 0.365002 ret: 0 st:-1 flags:0 ts: 0.365002
ret: 0 st: 0 flags:1 dts: 1.400000 pts: 1.440000 pos: 564 size: 24801 ret: 0 st: 0 flags:1 dts: 1.400000 pts: 1.440000 pos: 564 size: 24815
ret: 0 st:-1 flags:1 ts:-0.740831 ret: 0 st:-1 flags:1 ts:-0.740831
ret: 0 st: 0 flags:1 dts: 1.400000 pts: 1.440000 pos: 564 size: 24801 ret: 0 st: 0 flags:1 dts: 1.400000 pts: 1.440000 pos: 564 size: 24815
ret: 0 st: 0 flags:0 ts: 2.153333 ret: 0 st: 0 flags:0 ts: 2.153333
ret: 0 st: 1 flags:1 dts: 1.794811 pts: 1.794811 pos: 322608 size: 209 ret: 0 st: 1 flags:1 dts: 1.794811 pts: 1.794811 pos: 322608 size: 223
ret: 0 st: 0 flags:1 ts: 1.047500 ret: 0 st: 0 flags:1 ts: 1.047500
ret: 0 st: 0 flags:1 dts: 1.400000 pts: 1.440000 pos: 564 size: 24801 ret: 0 st: 0 flags:1 dts: 1.400000 pts: 1.440000 pos: 564 size: 24815
ret: 0 st: 1 flags:0 ts:-0.058333 ret: 0 st: 1 flags:0 ts:-0.058333
ret: 0 st: 1 flags:1 dts: 1.429089 pts: 1.429089 pos: 159988 size: 208 ret: 0 st: 1 flags:1 dts: 1.429089 pts: 1.429089 pos: 159988 size: 222
ret: 0 st: 1 flags:1 ts: 2.835833 ret: 0 st: 1 flags:1 ts: 2.835833
ret: 0 st: 1 flags:1 dts: 2.160522 pts: 2.160522 pos: 404576 size: 209 ret: 0 st: 1 flags:1 dts: 2.160522 pts: 2.160522 pos: 404576 size: 223
ret: 0 st:-1 flags:0 ts: 1.730004 ret: 0 st:-1 flags:0 ts: 1.730004
ret: 0 st: 1 flags:1 dts: 1.429089 pts: 1.429089 pos: 159988 size: 208 ret: 0 st: 1 flags:1 dts: 1.429089 pts: 1.429089 pos: 159988 size: 222
ret: 0 st:-1 flags:1 ts: 0.624171 ret: 0 st:-1 flags:1 ts: 0.624171
ret: 0 st: 0 flags:1 dts: 1.400000 pts: 1.440000 pos: 564 size: 24801 ret: 0 st: 0 flags:1 dts: 1.400000 pts: 1.440000 pos: 564 size: 24815
ret: 0 st: 0 flags:0 ts:-0.481667 ret: 0 st: 0 flags:0 ts:-0.481667
ret: 0 st: 0 flags:1 dts: 1.400000 pts: 1.440000 pos: 564 size: 24801 ret: 0 st: 0 flags:1 dts: 1.400000 pts: 1.440000 pos: 564 size: 24815
ret: 0 st: 0 flags:1 ts: 2.412500 ret: 0 st: 0 flags:1 ts: 2.412500
ret: 0 st: 1 flags:1 dts: 2.160522 pts: 2.160522 pos: 404576 size: 209 ret: 0 st: 1 flags:1 dts: 2.160522 pts: 2.160522 pos: 404576 size: 223
ret: 0 st: 1 flags:0 ts: 1.306667 ret: 0 st: 1 flags:0 ts: 1.306667
ret: 0 st: 1 flags:1 dts: 1.429089 pts: 1.429089 pos: 159988 size: 208 ret: 0 st: 1 flags:1 dts: 1.429089 pts: 1.429089 pos: 159988 size: 222
ret: 0 st: 1 flags:1 ts: 0.200844 ret: 0 st: 1 flags:1 ts: 0.200844
ret: 0 st: 1 flags:1 dts: 1.429089 pts: 1.429089 pos: 159988 size: 208 ret: 0 st: 1 flags:1 dts: 1.429089 pts: 1.429089 pos: 159988 size: 222
ret: 0 st:-1 flags:0 ts:-0.904994 ret: 0 st:-1 flags:0 ts:-0.904994
ret: 0 st: 0 flags:1 dts: 1.400000 pts: 1.440000 pos: 564 size: 24801 ret: 0 st: 0 flags:1 dts: 1.400000 pts: 1.440000 pos: 564 size: 24815
ret: 0 st:-1 flags:1 ts: 1.989173 ret: 0 st:-1 flags:1 ts: 1.989173
ret: 0 st: 0 flags:0 dts: 1.960000 pts: 2.000000 pos: 235000 size: 15019 ret: 0 st: 0 flags:0 dts: 1.960000 pts: 2.000000 pos: 235000 size: 15033
ret: 0 st: 0 flags:0 ts: 0.883344 ret: 0 st: 0 flags:0 ts: 0.883344
ret: 0 st: 0 flags:1 dts: 1.400000 pts: 1.440000 pos: 564 size: 24801 ret: 0 st: 0 flags:1 dts: 1.400000 pts: 1.440000 pos: 564 size: 24815
ret: 0 st: 0 flags:1 ts:-0.222489 ret: 0 st: 0 flags:1 ts:-0.222489
ret: 0 st: 0 flags:1 dts: 1.400000 pts: 1.440000 pos: 564 size: 24801 ret: 0 st: 0 flags:1 dts: 1.400000 pts: 1.440000 pos: 564 size: 24815
ret: 0 st: 1 flags:0 ts: 2.671678 ret: 0 st: 1 flags:0 ts: 2.671678
ret: 0 st: 1 flags:1 dts: 2.160522 pts: 2.160522 pos: 404576 size: 209 ret: 0 st: 1 flags:1 dts: 2.160522 pts: 2.160522 pos: 404576 size: 223
ret: 0 st: 1 flags:1 ts: 1.565844 ret: 0 st: 1 flags:1 ts: 1.565844
ret: 0 st: 1 flags:1 dts: 1.429089 pts: 1.429089 pos: 159988 size: 208 ret: 0 st: 1 flags:1 dts: 1.429089 pts: 1.429089 pos: 159988 size: 222
ret: 0 st:-1 flags:0 ts: 0.460008 ret: 0 st:-1 flags:0 ts: 0.460008
ret: 0 st: 0 flags:1 dts: 1.400000 pts: 1.440000 pos: 564 size: 24801 ret: 0 st: 0 flags:1 dts: 1.400000 pts: 1.440000 pos: 564 size: 24815
ret: 0 st:-1 flags:1 ts:-0.645825 ret: 0 st:-1 flags:1 ts:-0.645825
ret: 0 st: 0 flags:1 dts: 1.400000 pts: 1.440000 pos: 564 size: 24801 ret: 0 st: 0 flags:1 dts: 1.400000 pts: 1.440000 pos: 564 size: 24815
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment