summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2024-12-05 00:53:34 +0100
committerCarl Hetherington <cth@carlh.net>2024-12-09 01:40:48 +0100
commit08aa3861e526cbf45ac332294a835358f3903207 (patch)
tree8a6948d9c27828ef22b32f192e5d4f12b70a3b0c
parent5a980207377e67b6aa3595d0cde441ae7659f5a6 (diff)
Fix decoding of SSA subs in files decoded by FFmpeg (#2904).
Suddenly we have 8 commas, not 9, perhaps because of 29412821241050c846dbceaad4b9752857659977 in ffmpeg (although that's strange, because it was a long time ago).
-rwxr-xr-xrun/tests2
-rw-r--r--src/lib/ffmpeg_decoder.cc4
-rw-r--r--test/ffmpeg_subtitles_test.cc60
-rw-r--r--test/wscript1
4 files changed, 64 insertions, 3 deletions
diff --git a/run/tests b/run/tests
index 8395b09d4..209c65d1d 100755
--- a/run/tests
+++ b/run/tests
@@ -3,7 +3,7 @@
# e.g. --run_tests=foo
set -e
-PRIVATE_GIT="65c6d0cf0ec188e4d53fc8c9d61958c7921219d6"
+PRIVATE_GIT="083f563af5a4b21a91aa4ea9e2749aa4f0e1bcb2"
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
source $DIR/environment
diff --git a/src/lib/ffmpeg_decoder.cc b/src/lib/ffmpeg_decoder.cc
index f57c9efe8..a8bfd2a38 100644
--- a/src/lib/ffmpeg_decoder.cc
+++ b/src/lib/ffmpeg_decoder.cc
@@ -816,9 +816,9 @@ FFmpegDecoder::process_ass_subtitle (string ass, ContentTime from)
int commas = 0;
string text;
for (size_t i = 0; i < ass.length(); ++i) {
- if (commas < 9 && ass[i] == ',') {
+ if (commas < 8 && ass[i] == ',') {
++commas;
- } else if (commas == 9) {
+ } else if (commas == 8) {
text += ass[i];
}
}
diff --git a/test/ffmpeg_subtitles_test.cc b/test/ffmpeg_subtitles_test.cc
new file mode 100644
index 000000000..da63063cb
--- /dev/null
+++ b/test/ffmpeg_subtitles_test.cc
@@ -0,0 +1,60 @@
+/*
+ Copyright (C) 2024 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#include "lib/content_factory.h"
+#include "lib/film.h"
+#include "lib/player.h"
+#include "lib/text_content.h"
+#include "test.h"
+#include <boost/optional.hpp>
+#include <boost/test/unit_test.hpp>
+
+
+using std::make_shared;
+using std::shared_ptr;
+using std::string;
+using std::vector;
+using boost::optional;
+
+
+BOOST_AUTO_TEST_CASE(decoding_ssa_subs_from_mkv)
+{
+ auto subs = content_factory(TestPaths::private_data() / "ssa_subs.mkv")[0];
+ auto film = new_test_film("decoding_ssa_subs_from_mkv", { subs });
+ subs->text[0]->set_use(true);
+
+ vector<string> lines;
+
+ auto player = make_shared<Player>(film, film->playlist());
+ player->Text.connect([&lines](PlayerText text, TextType, optional<DCPTextTrack>, dcpomatic::DCPTimePeriod) {
+ for (auto i: text.string) {
+ lines.push_back(i.text());
+ }
+ });
+
+ while (lines.size() <= 2 && !player->pass()) {}
+
+ BOOST_REQUIRE_EQUAL(lines.size(), 3U);
+ BOOST_CHECK_EQUAL(lines[0], "-You're hungry.");
+ BOOST_CHECK_EQUAL(lines[1], "-Unit 14, nothing's happening");
+ BOOST_CHECK_EQUAL(lines[2], "here, we're gonna go to the beach.");
+}
+
diff --git a/test/wscript b/test/wscript
index e9f24f0fe..e32ec9acb 100644
--- a/test/wscript
+++ b/test/wscript
@@ -94,6 +94,7 @@ def build(bld):
ffmpeg_examiner_test.cc
ffmpeg_properties_test.cc
ffmpeg_pts_offset_test.cc
+ ffmpeg_subtitles_test.cc
file_group_test.cc
file_log_test.cc
file_naming_test.cc