[FFmpeg-devel] [PATCH 2/2] lavc/srtdec: fix rounding errors in end times
Rodger Combs
rodger.combs at gmail.com
Mon Jan 11 10:58:18 CET 2016
---
libavcodec/srtdec.c | 4 +++
tests/ref/fate/sub-textenc | 66 ++++++++++++++++++++++----------------------
tests/ref/fate/sub-webvttenc | 66 ++++++++++++++++++++++----------------------
3 files changed, 70 insertions(+), 66 deletions(-)
diff --git a/libavcodec/srtdec.c b/libavcodec/srtdec.c
index 542dd35..285ca7b 100644
--- a/libavcodec/srtdec.c
+++ b/libavcodec/srtdec.c
@@ -81,6 +81,10 @@ static int srt_decode_frame(AVCodecContext *avctx,
avctx->time_base,
(AVRational){1,100});
+ sub->end_display_time = av_rescale_q(avpkt->duration,
+ avctx->pkt_timebase,
+ (AVRational){1,1000});
+
srt_to_ass(avctx, &buffer, avpkt->data, x1, y1, x2, y2);
ret = ff_ass_add_rect_bprint(sub, &buffer, ts_start, ts_end-ts_start);
av_bprint_finalize(&buffer, NULL);
diff --git a/tests/ref/fate/sub-textenc b/tests/ref/fate/sub-textenc
index cb0db7f..f7d82ce 100644
--- a/tests/ref/fate/sub-textenc
+++ b/tests/ref/fate/sub-textenc
@@ -16,13 +16,13 @@ If you see this with the normal font, the player don't (fully) support font face
Hidden
4
-00:00:04,501 --> 00:00:07,501
+00:00:04,501 --> 00:00:07,500
This text should be small
This text should be normal
This text should be big
5
-00:00:07,501 --> 00:00:11,501
+00:00:07,501 --> 00:00:11,500
This should be an E with an accent: È
日本語
This text should be bold, italics and underline
@@ -31,7 +31,7 @@ This text should be small and red
This text should be big and brown
6
-00:00:11,501 --> 00:00:14,501
+00:00:11,501 --> 00:00:14,500
This line should be bold
This line should be italics
This line should be underline
@@ -40,7 +40,7 @@ Both lines
should be underline
7
-00:00:14,501 --> 00:00:17,501
+00:00:14,501 --> 00:00:17,500
>
It would be a good thing to
hide invalid html tags that are closed and show the text in them
@@ -49,7 +49,7 @@ Show not opened tags</invalid_tag_not_opened>
<
8
-00:00:17,501 --> 00:00:20,501
+00:00:17,501 --> 00:00:20,500
and also
hide invalid html tags with parameters that are closed and show the text in them
<invalid_tag_uc par=5>but show un-closed invalid html tags
@@ -57,66 +57,66 @@ This text should be showed underlined without problems also: 2<3,5>1,4<6
This shouldn't be underlined
9
-00:00:20,501 --> 00:00:21,501
+00:00:20,501 --> 00:00:21,500
This text should be in the normal position...
10
-00:00:21,501 --> 00:00:22,501
+00:00:21,501 --> 00:00:22,500
This text should NOT be in the normal position
11
-00:00:22,501 --> 00:00:24,501
+00:00:22,501 --> 00:00:24,500
Implementation is the same of the ASS tag
This text should be at the
top and horizontally centered
12
-00:00:22,501 --> 00:00:24,501
+00:00:22,501 --> 00:00:24,500
This text should be at the
middle and horizontally centered
13
-00:00:22,501 --> 00:00:24,501
+00:00:22,501 --> 00:00:24,500
This text should be at the
bottom and horizontally centered
14
-00:00:24,501 --> 00:00:26,501
+00:00:24,501 --> 00:00:26,500
This text should be at the
top and horizontally at the left
15
-00:00:24,501 --> 00:00:26,501
+00:00:24,501 --> 00:00:26,500
This text should be at the
middle and horizontally at the left
(The second position must be ignored)
16
-00:00:24,501 --> 00:00:26,501
+00:00:24,501 --> 00:00:26,500
This text should be at the
bottom and horizontally at the left
17
-00:00:26,501 --> 00:00:28,501
+00:00:26,501 --> 00:00:28,500
This text should be at the
top and horizontally at the right
18
-00:00:26,501 --> 00:00:28,501
+00:00:26,501 --> 00:00:28,500
This text should be at the
middle and horizontally at the right
19
-00:00:26,501 --> 00:00:28,501
+00:00:26,501 --> 00:00:28,500
This text should be at the
bottom and horizontally at the right
20
-00:00:28,501 --> 00:00:31,501
+00:00:28,501 --> 00:00:31,500
This could be the most difficult thing to implement
21
-00:00:31,501 --> 00:00:50,501
+00:00:31,501 --> 00:00:50,500
First text
22
@@ -124,38 +124,38 @@ First text
Second, it shouldn't overlap first
23
-00:00:35,501 --> 00:00:37,501
+00:00:35,501 --> 00:00:37,500
Third, it should replace second
24
-00:00:36,501 --> 00:00:50,501
+00:00:36,501 --> 00:00:50,500
Fourth, it shouldn't overlap first and third
25
-00:00:40,501 --> 00:00:45,501
+00:00:40,501 --> 00:00:45,500
Fifth, it should replace third
26
-00:00:45,501 --> 00:00:50,501
+00:00:45,501 --> 00:00:50,500
Sixth, it shouldn't be
showed overlapped
27
-00:00:50,501 --> 00:00:52,501
+00:00:50,501 --> 00:00:52,500
TEXT 1 (bottom)
28
-00:00:50,501 --> 00:00:52,501
+00:00:50,501 --> 00:00:52,500
text 2
29
-00:00:52,501 --> 00:00:54,501
+00:00:52,501 --> 00:00:54,500
Hide these tags:
also hide these tags:
but show this: {normal text}
30
-00:00:54,501 --> 00:01:00,501
+00:00:54,501 --> 00:01:00,500
\ N is a forced line break
\ h is a hard space
@@ -163,21 +163,21 @@ Normal spaces at the start and at the end of the line are trimmed while hard spa
The\hline\hwill\hnever\hbreak\hautomatically\hright\hbefore\hor\hafter\ha\hhard\hspace.\h:-D
31
-00:00:54,501 --> 00:00:56,501
+00:00:54,501 --> 00:00:56,500
\h\h\h\h\hA (05 hard spaces followed by a letter)
A (Normal spaces followed by a letter)
A (No hard spaces followed by a letter)
32
-00:00:56,501 --> 00:00:58,501
+00:00:56,501 --> 00:00:58,500
\h\h\h\h\hA (05 hard spaces followed by a letter)
A (Normal spaces followed by a letter)
A (No hard spaces followed by a letter)
Show this: \TEST and this: \-)
33
-00:00:58,501 --> 00:01:00,501
+00:00:58,501 --> 00:01:00,500
A letter followed by 05 hard spaces: A\h\h\h\h\h
A letter followed by normal spaces: A
@@ -188,26 +188,26 @@ A letter followed by no hard spaces: A
^--Forced line break
34
-00:01:00,501 --> 00:01:02,501
+00:01:00,501 --> 00:01:02,500
Both line should be strikethrough,
yes.
Correctly closed tags
should be hidden.
35
-00:01:02,501 --> 00:01:04,501
+00:01:02,501 --> 00:01:04,500
It shouldn't be strikethrough,
not opened tag showed as text.</s>
Not opened tag showed as text.</xxxxx>
36
-00:01:04,501 --> 00:01:06,501
+00:01:04,501 --> 00:01:06,500
Three lines should be strikethrough,
yes.
<yyyy>Not closed tags showed as text
37
-00:01:06,501 --> 00:01:08,501
+00:01:06,501 --> 00:01:08,500
Both line should be strikethrough but
the wrong closing tag should be showed</b>
diff --git a/tests/ref/fate/sub-webvttenc b/tests/ref/fate/sub-webvttenc
index dbeadb0..ba567c3 100644
--- a/tests/ref/fate/sub-webvttenc
+++ b/tests/ref/fate/sub-webvttenc
@@ -14,12 +14,12 @@ If you see this with the normal font, the player don't (fully) support font face
00:04.500 --> 00:04.500
Hidden
-00:04.501 --> 00:07.501
+00:04.501 --> 00:07.500
This text should be small
This text should be normal
This text should be big
-00:07.501 --> 00:11.501
+00:07.501 --> 00:11.500
This should be an E with an accent: È
日本語
<b><i><u>This text should be bold, italics and underline</u></i></b>
@@ -27,7 +27,7 @@ This text should be small and green
This text should be small and red
This text should be big and brown
-00:11.501 --> 00:14.501
+00:11.501 --> 00:14.500
<b>This line should be bold</b>
<i>This line should be italics</i>
<u>This line should be underline</u>
@@ -35,7 +35,7 @@ This line should be strikethrough
<u>Both lines
should be underline</u>
-00:14.501 --> 00:17.501
+00:14.501 --> 00:17.500
>
It would be a good thing to
hide invalid html tags that are closed and show the text in them
@@ -43,110 +43,110 @@ hide invalid html tags that are closed and show the text in them
Show not opened tags</invalid_tag_not_opened>
<
-00:17.501 --> 00:20.501
+00:17.501 --> 00:20.500
and also
hide invalid html tags with parameters that are closed and show the text in them
<invalid_tag_uc par=5>but show un-closed invalid html tags
<u>This text should be showed underlined without problems also: 2<3,5>1,4<6</u>
This shouldn't be underlined
-00:20.501 --> 00:21.501
+00:20.501 --> 00:21.500
This text should be in the normal position...
-00:21.501 --> 00:22.501
+00:21.501 --> 00:22.500
This text should NOT be in the normal position
-00:22.501 --> 00:24.501
+00:22.501 --> 00:24.500
Implementation is the same of the ASS tag
This text should be at the
top and horizontally centered
-00:22.501 --> 00:24.501
+00:22.501 --> 00:24.500
This text should be at the
middle and horizontally centered
-00:22.501 --> 00:24.501
+00:22.501 --> 00:24.500
This text should be at the
bottom and horizontally centered
-00:24.501 --> 00:26.501
+00:24.501 --> 00:26.500
This text should be at the
top and horizontally at the left
-00:24.501 --> 00:26.501
+00:24.501 --> 00:26.500
This text should be at the
middle and horizontally at the left
(The second position must be ignored)
-00:24.501 --> 00:26.501
+00:24.501 --> 00:26.500
This text should be at the
bottom and horizontally at the left
-00:26.501 --> 00:28.501
+00:26.501 --> 00:28.500
This text should be at the
top and horizontally at the right
-00:26.501 --> 00:28.501
+00:26.501 --> 00:28.500
This text should be at the
middle and horizontally at the right
-00:26.501 --> 00:28.501
+00:26.501 --> 00:28.500
This text should be at the
bottom and horizontally at the right
-00:28.501 --> 00:31.501
+00:28.501 --> 00:31.500
This could be the most difficult thing to implement
-00:31.501 --> 00:50.501
+00:31.501 --> 00:50.500
First text
00:33.500 --> 00:35.500
Second, it shouldn't overlap first
-00:35.501 --> 00:37.501
+00:35.501 --> 00:37.500
Third, it should replace second
-00:36.501 --> 00:50.501
+00:36.501 --> 00:50.500
Fourth, it shouldn't overlap first and third
-00:40.501 --> 00:45.501
+00:40.501 --> 00:45.500
Fifth, it should replace third
-00:45.501 --> 00:50.501
+00:45.501 --> 00:50.500
Sixth, it shouldn't be
showed overlapped
-00:50.501 --> 00:52.501
+00:50.501 --> 00:52.500
TEXT 1 (bottom)
-00:50.501 --> 00:52.501
+00:50.501 --> 00:52.500
text 2
-00:52.501 --> 00:54.501
+00:52.501 --> 00:54.500
Hide these tags:
also hide these tags:
but show this: {normal text}
-00:54.501 --> 01:00.501
+00:54.501 --> 01:00.500
\ N is a forced line break
\ h is a hard space
Normal spaces at the start and at the end of the line are trimmed while hard spaces are not trimmed.
The\hline\hwill\hnever\hbreak\hautomatically\hright\hbefore\hor\hafter\ha\hhard\hspace.\h:-D
-00:54.501 --> 00:56.501
+00:54.501 --> 00:56.500
\h\h\h\h\hA (05 hard spaces followed by a letter)
A (Normal spaces followed by a letter)
A (No hard spaces followed by a letter)
-00:56.501 --> 00:58.501
+00:56.501 --> 00:58.500
\h\h\h\h\hA (05 hard spaces followed by a letter)
A (Normal spaces followed by a letter)
A (No hard spaces followed by a letter)
Show this: \TEST and this: \-)
-00:58.501 --> 01:00.501
+00:58.501 --> 01:00.500
A letter followed by 05 hard spaces: A\h\h\h\h\h
A letter followed by normal spaces: A
@@ -156,22 +156,22 @@ A letter followed by no hard spaces: A
^--Forced line break
-01:00.501 --> 01:02.501
+01:00.501 --> 01:02.500
Both line should be strikethrough,
yes.
Correctly closed tags
should be hidden.
-01:02.501 --> 01:04.501
+01:02.501 --> 01:04.500
It shouldn't be strikethrough,
not opened tag showed as text.</s>
Not opened tag showed as text.</xxxxx>
-01:04.501 --> 01:06.501
+01:04.501 --> 01:06.500
Three lines should be strikethrough,
yes.
<yyyy>Not closed tags showed as text
-01:06.501 --> 01:08.501
+01:06.501 --> 01:08.500
Both line should be strikethrough but
the wrong closing tag should be showed</b>
--
2.6.4
More information about the ffmpeg-devel
mailing list