mirror of
https://git.videolan.org/git/ffmpeg.git
synced 2024-09-13 02:35:50 +02:00
calculate pts for laced packets
Originally committed as revision 8365 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
7fde6331a7
commit
9b54ab15e7
@ -2427,7 +2427,7 @@ rv_offset(uint8_t *data, int slice, int slices)
|
|||||||
|
|
||||||
static int
|
static int
|
||||||
matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data, int size,
|
matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data, int size,
|
||||||
int64_t pos, uint64_t cluster_time,
|
int64_t pos, uint64_t cluster_time, uint64_t duration,
|
||||||
int is_keyframe, int is_bframe,
|
int is_keyframe, int is_bframe,
|
||||||
int *ptrack, AVPacket **ppkt)
|
int *ptrack, AVPacket **ppkt)
|
||||||
{
|
{
|
||||||
@ -2462,6 +2462,8 @@ matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data, int size,
|
|||||||
av_free(origdata);
|
av_free(origdata);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
if (duration == AV_NOPTS_VALUE)
|
||||||
|
duration = matroska->tracks[track]->default_duration;
|
||||||
|
|
||||||
/* block_time (relative to cluster time) */
|
/* block_time (relative to cluster time) */
|
||||||
block_time = (data[0] << 8) | data[1];
|
block_time = (data[0] << 8) | data[1];
|
||||||
@ -2597,7 +2599,8 @@ matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data, int size,
|
|||||||
else
|
else
|
||||||
matroska_queue_packet(matroska, pkt);
|
matroska_queue_packet(matroska, pkt);
|
||||||
|
|
||||||
timecode = AV_NOPTS_VALUE;
|
if (timecode != AV_NOPTS_VALUE)
|
||||||
|
timecode = duration ? timecode + duration : AV_NOPTS_VALUE;
|
||||||
}
|
}
|
||||||
data += lace_size[n];
|
data += lace_size[n];
|
||||||
}
|
}
|
||||||
@ -2686,7 +2689,8 @@ matroska_parse_blockgroup (MatroskaDemuxContext *matroska,
|
|||||||
|
|
||||||
if (size > 0)
|
if (size > 0)
|
||||||
res = matroska_parse_block(matroska, data, size, pos, cluster_time,
|
res = matroska_parse_block(matroska, data, size, pos, cluster_time,
|
||||||
is_keyframe, is_bframe, &track, &pkt);
|
duration, is_keyframe, is_bframe,
|
||||||
|
&track, &pkt);
|
||||||
|
|
||||||
if (pkt)
|
if (pkt)
|
||||||
{
|
{
|
||||||
@ -2743,7 +2747,8 @@ matroska_parse_cluster (MatroskaDemuxContext *matroska)
|
|||||||
res = ebml_read_binary(matroska, &id, &data, &size);
|
res = ebml_read_binary(matroska, &id, &data, &size);
|
||||||
if (res == 0)
|
if (res == 0)
|
||||||
res = matroska_parse_block(matroska, data, size, pos,
|
res = matroska_parse_block(matroska, data, size, pos,
|
||||||
cluster_time, -1,0, NULL, NULL);
|
cluster_time, AV_NOPTS_VALUE,
|
||||||
|
-1, 0, NULL, NULL);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
Loading…
Reference in New Issue
Block a user