summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2016-03-01 01:00:16 +0000
committerCarl Hetherington <cth@carlh.net>2016-03-01 01:00:16 +0000
commit0914bfdbfc498d99821c2cd0ca3a4f9a184d07b5 (patch)
treec47583043a15279e0933f6697deefb7768ba352c /src/lib
parent8b7080da3ff8b6df0df7f1858c144c163cbaf4c6 (diff)
Stop erroneous addition of text subtitles to the lists (when
an image subtitle is completed with a rect count of zero) which subsequently cause hangs while the decoder looks for these phantom text subtitles. Fixes #812.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/ffmpeg.cc3
-rw-r--r--src/lib/ffmpeg.h4
-rw-r--r--src/lib/ffmpeg_examiner.cc10
3 files changed, 9 insertions, 8 deletions
diff --git a/src/lib/ffmpeg.cc b/src/lib/ffmpeg.cc
index 29dda1b9e..9d6921dcf 100644
--- a/src/lib/ffmpeg.cc
+++ b/src/lib/ffmpeg.cc
@@ -288,8 +288,9 @@ FFmpeg::subtitle_id (AVSubtitle const & sub)
return digester.get ();
}
+/** @return true if sub starts a new image subtitle */
bool
-FFmpeg::subtitle_is_image (AVSubtitle const & sub)
+FFmpeg::subtitle_starts_image (AVSubtitle const & sub)
{
bool image = false;
bool text = false;
diff --git a/src/lib/ffmpeg.h b/src/lib/ffmpeg.h
index 9795b2229..43efcf74f 100644
--- a/src/lib/ffmpeg.h
+++ b/src/lib/ffmpeg.h
@@ -1,5 +1,5 @@
/*
- Copyright (C) 2013 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2013-2016 Carl Hetherington <cth@carlh.net>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -58,7 +58,7 @@ protected:
static FFmpegSubtitlePeriod subtitle_period (AVSubtitle const & sub);
static std::string subtitle_id (AVSubtitle const & sub);
- static bool subtitle_is_image (AVSubtitle const & sub);
+ static bool subtitle_starts_image (AVSubtitle const & sub);
boost::shared_ptr<const FFmpegContent> _ffmpeg_content;
diff --git a/src/lib/ffmpeg_examiner.cc b/src/lib/ffmpeg_examiner.cc
index 850b8ba5f..abca5fee7 100644
--- a/src/lib/ffmpeg_examiner.cc
+++ b/src/lib/ffmpeg_examiner.cc
@@ -217,13 +217,13 @@ FFmpegExaminer::subtitle_packet (AVCodecContext* context, shared_ptr<FFmpegSubti
if (avcodec_decode_subtitle2 (context, &sub, &frame_finished, &_packet) >= 0 && frame_finished) {
string id = subtitle_id (sub);
FFmpegSubtitlePeriod const period = subtitle_period (sub);
- bool const image = subtitle_is_image (sub);
+ bool const starts_image = subtitle_starts_image (sub);
LastSubtitleMap::iterator last = _last_subtitle_start.find (stream);
if (last != _last_subtitle_start.end() && last->second) {
/* We have seen the start of a subtitle but not yet the end. Whatever this is
finishes the previous subtitle, so add it */
- if (image) {
+ if (last->second->image) {
stream->add_image_subtitle (last->second->id, ContentTimePeriod (last->second->time, period.from));
} else {
stream->add_text_subtitle (last->second->id, ContentTimePeriod (last->second->time, period.from));
@@ -233,17 +233,17 @@ FFmpegExaminer::subtitle_packet (AVCodecContext* context, shared_ptr<FFmpegSubti
_last_subtitle_start[stream] = optional<SubtitleStart> ();
} else {
/* This is just another subtitle, so we start again */
- _last_subtitle_start[stream] = SubtitleStart (id, image, period.from);
+ _last_subtitle_start[stream] = SubtitleStart (id, starts_image, period.from);
}
} else if (sub.num_rects == 1) {
if (period.to) {
- if (image) {
+ if (starts_image) {
stream->add_image_subtitle (id, ContentTimePeriod (period.from, period.to.get ()));
} else {
stream->add_text_subtitle (id, ContentTimePeriod (period.from, period.to.get ()));
}
} else {
- _last_subtitle_start[stream] = SubtitleStart (id, image, period.from);
+ _last_subtitle_start[stream] = SubtitleStart (id, starts_image, period.from);
}
}