diff options
author | Philip Langdale <philipl@overt.org> | 2012-06-02 16:15:38 -0700 |
---|---|---|
committer | Philip Langdale <philipl@overt.org> | 2012-08-04 12:01:24 -0700 |
commit | 7b24be557fda34a1dc7e67d6c9f835cc4103e07e (patch) | |
tree | f5bfaca26767a7946c7e834addfb453ffa95a714 | |
parent | 18175ca9b2d9dc3b66e63b3cc461dfde788943a0 (diff) | |
download | ffmpeg-7b24be557fda34a1dc7e67d6c9f835cc4103e07e.tar.gz |
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>
-rw-r--r-- | libavformat/srtdec.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/libavformat/srtdec.c b/libavformat/srtdec.c index 8eba5abf9a..28b18b4b99 100644 --- a/libavformat/srtdec.c +++ b/libavformat/srtdec.c @@ -51,16 +51,23 @@ static int srt_read_header(AVFormatContext *s) 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++) { - if (sscanf(buf, "%d:%2d:%2d%*1[,.]%3d --> %*d:%*2d:%*2d%*1[,.]%3d", - &hour, &min, &sec, &hsec, &v) == 5) { + int64_t start, end; + 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; 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; } @@ -87,7 +94,7 @@ static int srt_read_packet(AVFormatContext *s, AVPacket *pkt) memcpy(pkt->data, buffer, pkt->size); pkt->flags |= AV_PKT_FLAG_KEY; pkt->pos = pos; - pkt->pts = pkt->dts = get_pts(pkt->data); + pkt->pts = pkt->dts = get_pts(pkt->data, &(pkt->duration)); } return res; } |