summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Bœsch <ubitux@gmail.com>2012-10-25 00:27:10 +0200
committerClément Bœsch <ubitux@gmail.com>2012-11-10 22:43:27 +0100
commite56b0984103b981ec25fe8a22ef9c4905b9751dd (patch)
treeb88395f99d3042f36763f7f915c2f744a048d6c8
parenta1e093a6fb324612266d40e3168a14f58adab265 (diff)
lavf/srtenc: ignore invalid timed packets instead of failing.
This way we don't abort in the middle of remuxing, just warn about an event ignored. The index increment is moved to make sure the output numbers still make sense.
-rw-r--r--libavformat/srtenc.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/libavformat/srtenc.c b/libavformat/srtenc.c
index b704920be3..97b297e489 100644
--- a/libavformat/srtenc.c
+++ b/libavformat/srtenc.c
@@ -35,6 +35,8 @@ typedef struct SRTContext{
static int srt_write_header(AVFormatContext *avf)
{
+ SRTContext *srt = avf->priv_data;
+
if (avf->nb_streams != 1 ||
avf->streams[0]->codec->codec_type != AVMEDIA_TYPE_SUBTITLE) {
av_log(avf, AV_LOG_ERROR,
@@ -50,6 +52,7 @@ static int srt_write_header(AVFormatContext *avf)
return AVERROR(EINVAL);
}
avpriv_set_pts_info(avf->streams[0], 64, 1, 1000);
+ srt->index = 1;
return 0;
}
@@ -58,7 +61,6 @@ static int srt_write_packet(AVFormatContext *avf, AVPacket *pkt)
SRTContext *srt = avf->priv_data;
int write_ts = avf->streams[0]->codec->codec_id != AV_CODEC_ID_SRT;
- srt->index++;
if (write_ts) {
int64_t s = pkt->pts, e, d = pkt->duration;
@@ -66,8 +68,9 @@ static int srt_write_packet(AVFormatContext *avf, AVPacket *pkt)
/* For backward compatibility, fallback to convergence_duration. */
d = pkt->convergence_duration;
if (s == AV_NOPTS_VALUE || d < 0) {
- av_log(avf, AV_LOG_ERROR, "Insufficient timestamps.\n");
- return AVERROR(EINVAL);
+ av_log(avf, AV_LOG_WARNING,
+ "Insufficient timestamps in event number %d.\n", srt->index);
+ return 0;
}
e = s + d;
avio_printf(avf->pb, "%d\n%02d:%02d:%02d,%03d --> %02d:%02d:%02d,%03d\n",
@@ -81,6 +84,7 @@ static int srt_write_packet(AVFormatContext *avf, AVPacket *pkt)
if (write_ts)
avio_write(avf->pb, "\n\n", 2);
avio_flush(avf->pb);
+ srt->index++;
return 0;
}