bool SubtitleReader::AddAVSubtitle(const AVSubtitle &subtitle, bool fix_position, bool allow_forced) { bool enableforced = false; if (!m_AVSubtitlesEnabled && !subtitle.forced) { FreeAVSubtitle(subtitle); return enableforced; } if (!m_AVSubtitlesEnabled && subtitle.forced) { if (!allow_forced) { LOG(VB_PLAYBACK, LOG_INFO, "SubtitleReader: Ignoring forced AV subtitle."); FreeAVSubtitle(subtitle); return enableforced; } LOG(VB_PLAYBACK, LOG_INFO, "SubtitleReader: Allowing forced AV subtitle."); enableforced = true; } bool clearsubs = false; m_AVSubtitles.lock.lock(); m_AVSubtitles.fixPosition = fix_position; m_AVSubtitles.buffers.push_back(subtitle); // in case forced subtitles aren't displayed, avoid leaking by // manually clearing the subtitles if (m_AVSubtitles.buffers.size() > 40) { LOG(VB_GENERAL, LOG_ERR, "SubtitleReader: >40 AVSubtitles queued - clearing."); clearsubs = true; } m_AVSubtitles.lock.unlock(); if (clearsubs) ClearAVSubtitles(); return enableforced; }
SubtitleReader::~SubtitleReader() { ClearAVSubtitles(); m_TextSubtitles.Clear(); ClearRawTextSubtitles(); }