void OMXReader::GetChapterName(std::string& strChapterName) { strChapterName = ""; #if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(52,14,0) int chapterIdx = GetChapter(); if(chapterIdx <= 0) { return; } #if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(52,83,0) // API added on: 2010-10-15 // (Note that while the function was available earlier, the generic // metadata tags were not populated by default) AVDictionaryEntry *titleTag = m_dllAvUtil.av_dict_get(m_pFormatContext->chapters[chapterIdx-1]->metadata, "title", NULL, 0); if (titleTag) { strChapterName = titleTag->value; } #else if (m_pFormatContext->chapters[chapterIdx-1]->title) { strChapterName = m_pFormatContext->chapters[chapterIdx-1]->title; } #endif #endif }
void CAMLPlayer::Seek(bool bPlus, bool bLargeStep) { // force updated to m_elapsed_ms, m_duration_ms. GetStatus(); CSingleLock lock(m_aml_csection); // try chapter seeking first, chapter_index is ones based. int chapter_index = GetChapter(); if (bLargeStep) { // seek to next chapter if (bPlus && (chapter_index < GetChapterCount())) { SeekChapter(chapter_index + 1); return; } // seek to previous chapter if (!bPlus && chapter_index) { SeekChapter(chapter_index - 1); return; } } int64_t seek_ms; if (g_advancedSettings.m_videoUseTimeSeeking) { if (bLargeStep && (GetTotalTime() > (2 * g_advancedSettings.m_videoTimeSeekForwardBig))) seek_ms = bPlus ? g_advancedSettings.m_videoTimeSeekForwardBig : g_advancedSettings.m_videoTimeSeekBackwardBig; else seek_ms = bPlus ? g_advancedSettings.m_videoTimeSeekForward : g_advancedSettings.m_videoTimeSeekBackward; // convert to milliseconds seek_ms *= 1000; seek_ms += m_elapsed_ms; } else { float percent; if (bLargeStep) percent = bPlus ? g_advancedSettings.m_videoPercentSeekForwardBig : g_advancedSettings.m_videoPercentSeekBackwardBig; else percent = bPlus ? g_advancedSettings.m_videoPercentSeekForward : g_advancedSettings.m_videoPercentSeekBackward; percent /= 100.0f; percent += (float)m_elapsed_ms/(float)m_duration_ms; // convert to milliseconds seek_ms = m_duration_ms * percent; } // handle stacked videos, dvdplayer does it so we do it too. if (g_application.CurrentFileItem().IsStack() && (seek_ms > m_duration_ms || seek_ms < 0)) { CLog::Log(LOGDEBUG, "CAMLPlayer::Seek: In mystery code, what did I do"); g_application.SeekTime((seek_ms - m_elapsed_ms) * 0.001 + g_application.GetTime()); // warning, don't access any object variables here as // the object may have been destroyed return; } if (seek_ms <= 1000) seek_ms = 1000; if (seek_ms > m_duration_ms) seek_ms = m_duration_ms; // do seek here g_infoManager.SetDisplayAfterSeek(100000); SeekTime(seek_ms); m_callback.OnPlayBackSeek((int)seek_ms, (int)(seek_ms - m_elapsed_ms)); g_infoManager.SetDisplayAfterSeek(); }
void CAMLPlayer::GetChapterName(CStdString& strChapterName) { if (m_chapter_count) strChapterName = m_chapters[GetChapter() - 1]->name; }