avformat/srtdec: Write duration into packet from srt demuxer.
The current demuxer does not bother to write packet durations, which makes it impossible to remux into a new format. Signed-off-by: Philip Langdale <philipl@overt.org>
This commit is contained in:
parent
18175ca9b2
commit
7b24be557f
@ -51,16 +51,23 @@ static int srt_read_header(AVFormatContext *s)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int64_t get_pts(const char *buf)
|
static int64_t get_pts(const char *buf, int *duration)
|
||||||
{
|
{
|
||||||
int i, v, hour, min, sec, hsec;
|
int i, hour, min, sec, hsec;
|
||||||
|
int he, me, se, mse;
|
||||||
|
|
||||||
for (i=0; i<2; i++) {
|
for (i=0; i<2; i++) {
|
||||||
if (sscanf(buf, "%d:%2d:%2d%*1[,.]%3d --> %*d:%*2d:%*2d%*1[,.]%3d",
|
int64_t start, end;
|
||||||
&hour, &min, &sec, &hsec, &v) == 5) {
|
if (sscanf(buf, "%d:%2d:%2d%*1[,.]%3d --> %d:%2d:%2d%*1[,.]%3d",
|
||||||
|
&hour, &min, &sec, &hsec, &he, &me, &se, &mse) == 8) {
|
||||||
min += 60*hour;
|
min += 60*hour;
|
||||||
sec += 60*min;
|
sec += 60*min;
|
||||||
return sec*1000+hsec;
|
start = sec*1000+hsec;
|
||||||
|
me += 60*he;
|
||||||
|
se += 60*me;
|
||||||
|
end = se*1000+mse;
|
||||||
|
*duration = end - start;
|
||||||
|
return start;
|
||||||
}
|
}
|
||||||
buf += strcspn(buf, "\n") + 1;
|
buf += strcspn(buf, "\n") + 1;
|
||||||
}
|
}
|
||||||
@ -87,7 +94,7 @@ static int srt_read_packet(AVFormatContext *s, AVPacket *pkt)
|
|||||||
memcpy(pkt->data, buffer, pkt->size);
|
memcpy(pkt->data, buffer, pkt->size);
|
||||||
pkt->flags |= AV_PKT_FLAG_KEY;
|
pkt->flags |= AV_PKT_FLAG_KEY;
|
||||||
pkt->pos = pos;
|
pkt->pos = pos;
|
||||||
pkt->pts = pkt->dts = get_pts(pkt->data);
|
pkt->pts = pkt->dts = get_pts(pkt->data, &(pkt->duration));
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user