MythTV  master
mythbdplayer.cpp
Go to the documentation of this file.
1 // MythTV
2 #include "Bluray/mythbdbuffer.h"
3 #include "Bluray/mythbddecoder.h"
4 #include "Bluray/mythbdplayer.h"
5 
6 // Std
7 #include <unistd.h>
8 
9 #define LOC QString("BDPlayer: ")
10 
12  : MythPlayerUI(MainWindow, Tv, Context, Flags)
13 {
14 }
15 
17 {
18  EofState eof = GetEof();
19  // DeleteMap and EditMode from the parent MythPlayer should not be
20  // relevant here.
21  return eof != kEofStateNone && !m_allPaused;
22 }
23 
25 {
26  DisplayMenu();
27 }
28 
29 bool MythBDPlayer::GoToMenu(const QString& Menu)
30 {
31  if (!(m_playerCtx->m_buffer->BD() && m_videoOutput))
32  return false;
33 
34  int64_t pts = 0;
36  if (frame)
37  pts = static_cast<int64_t>(frame->m_timecode * 90);
38  return m_playerCtx->m_buffer->BD()->GoToMenu(Menu, pts);
39 }
40 
42 {
43  if (!m_playerCtx->m_buffer->IsBD())
44  return;
45 
46  MythBDOverlay *overlay = nullptr;
47  while (nullptr != (overlay = m_playerCtx->m_buffer->BD()->GetOverlay()))
49 }
50 
52 {
55  DisplayMenu();
57 }
58 
60 {
61  if (!m_initialBDState.isEmpty())
63 
65 }
66 
68 {
69  if (!m_playerCtx->m_buffer->IsBD())
70  {
71  SetErrored("RingBuffer is not a Blu-Ray disc.");
72  return !IsErrored();
73  }
74 
75  int nbframes = m_videoOutput ? m_videoOutput->ValidVideoFrames() : 0;
76 
77  // completely drain the video buffers for certain situations
78  if (m_playerCtx->m_buffer->BD()->BDWaitingForPlayer() && (nbframes > 0))
79  {
80  if (nbframes < 2 && m_videoOutput)
82 
83  // if we go below the pre-buffering limit, the player will pause
84  // so do this 'manually'
85  DisplayNormalFrame(false);
86  return !IsErrored();
87  }
88 
89  // clear the mythtv imposed wait state
91  {
92  LOG(VB_PLAYBACK, LOG_INFO, LOC + "Clearing Mythtv BD wait state");
94  return !IsErrored();
95  }
96 
98  {
99  if (nbframes > 1 && !m_stillFrameShowing)
100  {
102  DisplayNormalFrame(false);
103  return !IsErrored();
104  }
105 
106  if (!m_stillFrameShowing)
107  m_needNewPauseFrame = true;
108 
109  // we are in a still frame so pause video output
110  if (!m_videoPaused)
111  {
112  PauseVideo();
113  return !IsErrored();
114  }
115 
116  // flag if we have no frame
117  if (nbframes == 0)
118  {
119  LOG(VB_PLAYBACK, LOG_WARNING, LOC + "Warning: In BD Still but no video frames in queue");
120  usleep(10000);
121  return !IsErrored();
122  }
123 
124  if (!m_stillFrameShowing)
125  LOG(VB_PLAYBACK, LOG_INFO, LOC + "Entering still frame.");
126  m_stillFrameShowing = true;
127  }
128  else
129  {
131  {
132  UnpauseVideo();
133  LOG(VB_PLAYBACK, LOG_INFO, LOC + "Exiting still frame.");
134  }
135  m_stillFrameShowing = false;
136  }
137 
138  return MythPlayerUI::VideoLoop();
139 }
140 
142 {
143  if (Frame == ~0x0ULL)
144  return false;
146 }
147 
149 {
150  m_playerCtx->LockPlayingInfo(__FILE__, __LINE__);
152  {
153  QString name;
154  QString serialid;
155  if (m_playerCtx->m_playingInfo->GetTitle().isEmpty() &&
156  m_playerCtx->m_buffer->BD()->GetNameAndSerialNum(name, serialid))
157  {
159  }
160  }
161  m_playerCtx->UnlockPlayingInfo(__FILE__, __LINE__);
162 
164 }
165 
167 {
168  if (m_playerCtx->m_buffer->BD() && m_playerCtx->m_buffer->BD()->IsOpen())
169  return static_cast<int>(m_playerCtx->m_buffer->BD()->GetNumChapters());
170  return -1;
171 }
172 
174 {
175  if (m_playerCtx->m_buffer->BD() && m_playerCtx->m_buffer->BD()->IsOpen())
176  return static_cast<int>(m_playerCtx->m_buffer->BD()->GetCurrentChapter() + 1);
177  return -1;
178 }
179 
180 int64_t MythBDPlayer::GetChapter(int Chapter)
181 {
182  if (GetNumChapters() < 1)
183  return -1;
184  auto chapter = static_cast<uint32_t>(Chapter - 1);
185  return static_cast<int64_t>(m_playerCtx->m_buffer->BD()->GetChapterStartFrame(chapter));
186 }
187 
188 void MythBDPlayer::GetChapterTimes(QList<long long> &ChapterTimes)
189 {
190  uint total = static_cast<uint>(GetNumChapters());
191  for (uint i = 0; i < total; i++)
192  ChapterTimes.push_back(static_cast<long long>(m_playerCtx->m_buffer->BD()->GetChapterStartTime(i)));
193 }
194 
196 {
198  return 0;
199 
200  if (m_playerCtx->m_buffer->BD() && m_playerCtx->m_buffer->BD()->IsOpen())
201  return static_cast<int>(m_playerCtx->m_buffer->BD()->GetNumTitles());
202  return 0;
203 }
204 
206 {
207  if (m_playerCtx->m_buffer->BD() && m_playerCtx->m_buffer->BD()->IsOpen())
208  return static_cast<int>(m_playerCtx->m_buffer->BD()->GetNumAngles());
209  return 0;
210 }
211 
213 {
214  if (m_playerCtx->m_buffer->BD() && m_playerCtx->m_buffer->BD()->IsOpen())
215  return m_playerCtx->m_buffer->BD()->GetCurrentTitle();
216  return -1;
217 }
218 
220 {
221  if (m_playerCtx->m_buffer->BD() && m_playerCtx->m_buffer->BD()->IsOpen())
222  return static_cast<int>(m_playerCtx->m_buffer->BD()->GetCurrentAngle());
223  return -1;
224 }
225 
226 int MythBDPlayer::GetTitleDuration(int Title) const
227 {
228  if (m_playerCtx->m_buffer->BD() && m_playerCtx->m_buffer->BD()->IsOpen() &&
229  Title >= 0 && Title < GetNumTitles())
230  {
231  return m_playerCtx->m_buffer->BD()->GetTitleDuration(Title);
232  }
233  return 0;
234 }
235 
236 QString MythBDPlayer::GetTitleName(int Title) const
237 {
238  if (Title >= 0 && Title < GetNumTitles())
239  {
240  // BD doesn't provide title names, so show title number and duration
241  QString timestr = MythFormatTime(GetTitleDuration(Title), "HH:mm:ss");
242  QString name = QString("%1 (%2)").arg(Title+1).arg(timestr);
243  return name;
244  }
245  return QString();
246 }
247 
248 QString MythBDPlayer::GetAngleName(int Angle) const
249 {
250  if (Angle >= 1 && Angle <= GetNumAngles())
251  return tr("Angle %1").arg(Angle);
252  return QString();
253 }
254 
256 {
258  return false;
259 
260  int total = GetNumTitles();
261  if ((total < 1) || Title == GetCurrentTitle() || (Title >= total))
262  return false;
263 
264  Pause();
265 
266  bool ok = false;
267  if (m_playerCtx->m_buffer->BD()->SwitchTitle(static_cast<uint32_t>(Title)))
268  {
269  ResetCaptions();
270  if (OpenFile() != 0)
271  {
272  SetErrored(tr("Failed to switch title."));
273  }
274  else
275  {
276  ok = true;
277  m_forcePositionMapSync = true;
278  }
279  }
280 
281  Play();
282  return ok;
283 }
284 
286 {
288  return false;
289 
290  int total = GetNumTitles();
291  int next = GetCurrentTitle() + 1;
292  if ((total < 1) || (next >= total))
293  return false;
294 
295  return SwitchTitle(next);
296 }
297 
299 {
301  return false;
302 
303  uint total = static_cast<uint>(GetNumTitles());
304  int prev = GetCurrentTitle() - 1;
305  if (!total || prev < 0)
306  return false;
307 
308  return SwitchTitle(prev);
309 }
310 
312 {
313  int total = GetNumAngles();
314  if (!total || Angle == GetCurrentAngle())
315  return false;
316 
317  if (Angle >= total)
318  Angle = 0;
319 
320  return m_playerCtx->m_buffer->BD()->SwitchAngle(static_cast<uint>(Angle));
321 }
322 
324 {
325  int total = GetNumAngles();
326  int next = GetCurrentAngle() + 1;
327  if (total < 1)
328  return false;
329  if (next >= total)
330  next = 0;
331  return SwitchAngle(next);
332 }
333 
335 {
336  int total = GetNumAngles();
337  int prev = GetCurrentAngle() - 1;
338  if ((total < 1) || total == 1)
339  return false;
340  if (prev < 0)
341  prev = total;
342  return SwitchAngle(prev);
343 }
344 
346 {
348  {
349  QString name;
350  QString serialid;
351  if (!m_playerCtx->m_buffer->BD()->GetNameAndSerialNum(name, serialid))
352  {
353  LOG(VB_GENERAL, LOG_ERR, LOC + "BD has no name and serial number. Cannot set bookmark.");
354  return;
355  }
356 
357  QString bdstate;
358  if (!Clear && !m_playerCtx->m_buffer->BD()->GetBDStateSnapshot(bdstate))
359  {
360  LOG(VB_GENERAL, LOG_ERR, LOC + "Unable to retrieve BD state. Cannot set bookmark.");
361  return;
362  }
363 
364  LOG(VB_GENERAL, LOG_INFO, LOC + QString("BDState:%1").arg(bdstate));
365 
366  m_playerCtx->LockPlayingInfo(__FILE__, __LINE__);
368  {
369  QStringList fields;
370  fields += serialid;
371  fields += name;
372 
373  if (!Clear)
374  {
375  LOG(VB_PLAYBACK, LOG_INFO, LOC + "Set bookmark");
376  fields += bdstate;
377  }
378  else
379  {
380  LOG(VB_PLAYBACK, LOG_INFO, LOC + "Clear bookmark");
381  }
382 
384  }
385  m_playerCtx->UnlockPlayingInfo(__FILE__, __LINE__);
386  }
387 }
388 
390 {
391  uint64_t frames = 0;
393  return frames;
394 
395  m_playerCtx->LockPlayingInfo(__FILE__, __LINE__);
396 
398  {
399  QString name;
400  QString serialid;
401  if (!m_playerCtx->m_buffer->BD()->GetNameAndSerialNum(name, serialid))
402  {
403  m_playerCtx->UnlockPlayingInfo(__FILE__, __LINE__);
404  return frames;
405  }
406 
407  QStringList bdbookmark = m_playerCtx->m_playingInfo->QueryBDBookmark(serialid);
408 
409  if (!bdbookmark.empty())
410  {
411  m_initialBDState = bdbookmark[0];
412  frames = ~0x0ULL;
413  LOG(VB_PLAYBACK, LOG_INFO, LOC + "Get Bookmark: bookmark found");
414  }
415  }
416 
417  m_playerCtx->UnlockPlayingInfo(__FILE__, __LINE__);
418  return frames;;
419 }
420 
422 {
425 }
MythMediaBuffer::BD
const MythBDBuffer * BD(void) const
Definition: mythmediabuffer.cpp:1838
MythPlayerUI::VideoStart
virtual void VideoStart()
Definition: mythplayerui.cpp:411
MythBDPlayer::GetChapter
int64_t GetChapter(int Chapter) override
Definition: mythbdplayer.cpp:180
MythBDPlayer::GetChapterTimes
void GetChapterTimes(QList< long long > &ChapterTimes) override
Definition: mythbdplayer.cpp:188
MythBDPlayer::EventStart
void EventStart(void) override
Definition: mythbdplayer.cpp:148
MythPlayer::m_frameInterval
int m_frameInterval
always adjusted for play_speed
Definition: mythplayer.h:490
mythbddecoder.h
MythPlayer::m_videoPaused
bool m_videoPaused
Definition: mythplayer.h:395
PlayerContext::UnlockPlayingInfo
void UnlockPlayingInfo(const char *file, int line) const
Definition: playercontext.cpp:248
mythbdplayer.h
MythBDBuffer::IsHDMVNavigation
bool IsHDMVNavigation(void) const
Definition: mythbdbuffer.cpp:1215
kEofStateNone
@ kEofStateNone
Definition: decoderbase.h:69
MythBDPlayer::PrevAngle
bool PrevAngle(void) override
Definition: mythbdplayer.cpp:334
MythPlayer::m_avSync
MythPlayerAVSync m_avSync
Definition: mythplayer.h:433
MythBDBuffer::GetChapterStartTime
uint64_t GetChapterStartTime(uint32_t Chapter)
Definition: mythbdbuffer.cpp:571
MythBDPlayer::SetBookmark
void SetBookmark(bool Clear) override
Definition: mythbdplayer.cpp:345
MythBDPlayer::GetNumTitles
int GetNumTitles(void) const override
Definition: mythbdplayer.cpp:195
MythBDBuffer::GetOverlay
MythBDOverlay * GetOverlay(void)
Definition: mythbdbuffer.cpp:1350
MythPlayer::OpenFile
virtual int OpenFile(int Retries=4)
Definition: mythplayer.cpp:420
MythPlayerUI::EventStart
virtual void EventStart()
Definition: mythplayerui.cpp:470
MythPlayerUI::DisplayNormalFrame
virtual void DisplayNormalFrame(bool CheckPrebuffer=true)
Definition: mythplayerui.cpp:652
Frame
Definition: zmdefines.h:94
MythPlayer::m_forcePositionMapSync
bool m_forcePositionMapSync
Definition: mythplayer.h:481
MythPlayerAVSync::DisplayTimecode
int64_t & DisplayTimecode()
Definition: mythplayeravsync.cpp:35
MythBDBuffer::IsInStillFrame
bool IsInStillFrame(void) const override
Definition: mythbdbuffer.cpp:1163
MythBDPlayer::DisplayPauseFrame
void DisplayPauseFrame(void) override
Definition: mythbdplayer.cpp:51
MythCoreContext::IsDatabaseIgnored
bool IsDatabaseIgnored(void) const
/brief Returns true if database is being ignored.
Definition: mythcorecontext.cpp:897
MythVideoOutput::UpdatePauseFrame
virtual void UpdatePauseFrame(int64_t &, FrameScanType=kScan_Progressive)
Definition: mythvideoout.h:87
arg
arg(title).arg(filename).arg(doDelete))
MythBDBuffer::GetNumAngles
uint64_t GetNumAngles(void) const
Definition: mythbdbuffer.cpp:792
MythBDPlayer::m_stillFrameShowing
bool m_stillFrameShowing
Definition: mythbdplayer.h:53
MythBDOverlay
Definition: mythbdoverlay.h:19
MythBDBuffer::GoToMenu
bool GoToMenu(const QString &Menu, int64_t Pts)
jump to a Blu-ray root or popup menu
Definition: mythbdbuffer.cpp:949
Context
QHash< QString, Action * > Context
Definition: action.h:77
MythPlayer::IsErrored
bool IsErrored(void) const
Definition: mythplayer.cpp:1955
LOG
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:23
MythBDPlayer::GetCurrentAngle
int GetCurrentAngle(void) const override
Definition: mythbdplayer.cpp:219
MythBDBuffer::GetNumTitles
uint32_t GetNumTitles(void) const
Definition: mythbdbuffer.cpp:587
MythBDPlayer::NextTitle
bool NextTitle(void) override
Definition: mythbdplayer.cpp:285
MythCaptionsOverlay::DisplayBDOverlay
void DisplayBDOverlay(MythBDOverlay *Overlay)
Definition: mythcaptionsoverlay.cpp:226
PlayerFlags
PlayerFlags
Definition: mythplayer.h:62
MythPlayer::GetEof
EofState GetEof(void) const
Definition: mythplayer.cpp:1061
MythPlayer::Pause
bool Pause(void)
Definition: mythplayer.cpp:159
MythMediaBuffer::IsBD
bool IsBD(void) const
Definition: mythmediabuffer.cpp:1828
MythMediaBuffer::IsInMenu
virtual bool IsInMenu(void) const
Definition: mythmediabuffer.h:130
MythPlayerUI::VideoLoop
virtual bool VideoLoop()
Definition: mythplayerui.cpp:488
MythBDBuffer::GetNameAndSerialNum
bool GetNameAndSerialNum(QString &Name, QString &SerialNum) override
Definition: mythbdbuffer.cpp:1252
MythPlayer::SetErrored
void SetErrored(const QString &reason)
Definition: mythplayer.cpp:1931
MythPlayer::m_needNewPauseFrame
bool m_needNewPauseFrame
Definition: mythplayer.h:393
MythBDPlayer::DisplayMenu
void DisplayMenu(void)
Definition: mythbdplayer.cpp:41
MythPlayer::SetDecoder
void SetDecoder(DecoderBase *dec)
Sets the stream decoder, deleting any existing recorder.
Definition: mythplayer.cpp:1891
MythVideoFrame::m_timecode
long long m_timecode
Definition: mythframe.h:122
MythBDBuffer::IsOpen
bool IsOpen(void) const override
Definition: mythbdbuffer.cpp:543
EofState
EofState
Definition: decoderbase.h:68
MythBDPlayer::NextAngle
bool NextAngle(void) override
Definition: mythbdplayer.cpp:323
MythBDPlayer::CreateDecoder
void CreateDecoder(TestBufferVec &TestBuffer) override
Definition: mythbdplayer.cpp:421
MythPlayerUI
Definition: mythplayerui.h:11
MythMediaBuffer::GetFilename
QString GetFilename(void) const
Definition: mythmediabuffer.cpp:1732
MythPlayer::UnpauseVideo
void UnpauseVideo(void)
Definition: mythplayer.cpp:230
LOC
#define LOC
Definition: mythbdplayer.cpp:9
ProgramInfo::QueryBDBookmark
QStringList QueryBDBookmark(const QString &serialid) const
Queries "bdbookmark" table for bookmarking BD serial number.
Definition: programinfo.cpp:2791
MythVideoOutput::ValidVideoFrames
virtual int ValidVideoFrames() const
Returns number of frames that are fully decoded.
Definition: mythvideoout.cpp:313
MythBDBuffer::GetChapterStartFrame
uint64_t GetChapterStartFrame(uint32_t Chapter)
Definition: mythbdbuffer.cpp:579
kScan_Progressive
@ kScan_Progressive
Definition: videoouttypes.h:100
PlayerContext::m_playingInfo
ProgramInfo * m_playingInfo
Currently playing info.
Definition: playercontext.h:116
PlayerContext::LockPlayingInfo
void LockPlayingInfo(const char *file, int line) const
Definition: playercontext.cpp:236
MythBDPlayer::VideoStart
void VideoStart(void) override
Definition: mythbdplayer.cpp:59
ProgramInfo::GetTitle
QString GetTitle(void) const
Definition: programinfo.h:359
MythPlayer::m_videoOutput
MythVideoOutput * m_videoOutput
Definition: mythplayer.h:368
MythPlayerCaptionsUI::m_captionsOverlay
MythCaptionsOverlay m_captionsOverlay
Definition: mythplayercaptionsui.h:70
PlayerContext::m_buffer
MythMediaBuffer * m_buffer
Definition: playercontext.h:115
MythFormatTime
QString MythFormatTime(int secs, const QString &fmt)
Format a seconds time value.
Definition: mythmiscutil.cpp:1238
MythBDPlayer::PrevTitle
bool PrevTitle(void) override
Definition: mythbdplayer.cpp:298
MythPlayer::PauseVideo
void PauseVideo(void)
Definition: mythplayer.cpp:222
MythBDPlayer::m_initialBDState
QString m_initialBDState
Definition: mythbdplayer.h:54
MythBDPlayer::GetNumAngles
int GetNumAngles(void) const override
Definition: mythbdplayer.cpp:205
MythBDPlayer::GetTitleDuration
int GetTitleDuration(int Title) const override
Definition: mythbdplayer.cpp:226
MythVideoScanTracker::SetScanType
void SetScanType(FrameScanType Scan, MythVideoOutput *VideoOutput, int FrameInterval)
Definition: mythvideoscantracker.cpp:122
MythBDPlayer::GoToMenu
bool GoToMenu(const QString &Menu) override
Definition: mythbdplayer.cpp:29
MythBDPlayer::MythBDPlayer
MythBDPlayer(MythMainWindow *MainWindow, TV *Tv, PlayerContext *Context, PlayerFlags Flags=kNoFlags)
Definition: mythbdplayer.cpp:11
ProgramInfo::SetTitle
void SetTitle(const QString &t, const QString &st=nullptr)
Definition: programinfo.cpp:1145
TestBufferVec
std::vector< char > TestBufferVec
Definition: decoderbase.h:23
MythPlayer::m_playerCtx
PlayerContext * m_playerCtx
Definition: mythplayer.h:369
MythPlayerUI::DisplayPauseFrame
virtual void DisplayPauseFrame()
Definition: mythplayerui.cpp:630
MythBDBuffer::GetTitleDuration
int GetTitleDuration(int Title)
Definition: mythbdbuffer.cpp:603
MythBDPlayer::SwitchAngle
bool SwitchAngle(int Angle) override
Definition: mythbdplayer.cpp:311
MythBDBuffer::SwitchAngle
bool SwitchAngle(uint Angle)
Definition: mythbdbuffer.cpp:781
uint
unsigned int uint
Definition: compat.h:141
gCoreContext
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
Definition: mythcorecontext.cpp:60
MythBDBuffer::BDWaitingForPlayer
bool BDWaitingForPlayer(void) const
Definition: mythbdbuffer.cpp:249
MythPlayer::m_playerFlags
PlayerFlags m_playerFlags
Definition: mythplayer.h:375
MythBDBuffer::GetNumChapters
uint32_t GetNumChapters(void)
Definition: mythbdbuffer.cpp:548
MythBDBuffer::SkipBDWaitingForPlayer
void SkipBDWaitingForPlayer(void)
Definition: mythbdbuffer.cpp:254
MythPlayerCaptionsUI::ResetCaptions
void ResetCaptions()
Definition: mythplayercaptionsui.cpp:121
MythBDPlayer::SwitchTitle
bool SwitchTitle(int Title) override
Definition: mythbdplayer.cpp:255
MythBDPlayer::VideoLoop
bool VideoLoop(void) override
Definition: mythbdplayer.cpp:67
mythbdbuffer.h
MythMediaBuffer::IsBookmarkAllowed
virtual bool IsBookmarkAllowed(void)
Definition: mythmediabuffer.h:126
ProgramInfo::SaveBDBookmark
static void SaveBDBookmark(const QStringList &fields)
Definition: programinfo.cpp:2809
MythBDPlayer::GetAngleName
QString GetAngleName(int Angle) const override
Definition: mythbdplayer.cpp:248
MythBDBuffer::GetCurrentChapter
uint32_t GetCurrentChapter(void)
Definition: mythbdbuffer.cpp:556
Clear
#define Clear(a)
Definition: audiooutputopensles.cpp:47
MythBDPlayer::GetCurrentChapter
int GetCurrentChapter(void) override
Definition: mythbdplayer.cpp:173
MythBDPlayer::HasReachedEof
bool HasReachedEof(void) const override
Definition: mythbdplayer.cpp:16
MythBDPlayer::PreProcessNormalFrame
void PreProcessNormalFrame(void) override
Definition: mythbdplayer.cpp:24
AvFormatDecoder::CanHandle
static bool CanHandle(TestBufferVec &testbuf, const QString &filename)
Perform an av_probe_input_format on the passed data to see if we can decode it with this class.
Definition: avformatdecoder.cpp:849
MythBDBuffer::GetCurrentAngle
uint64_t GetCurrentAngle(void) const
Definition: mythbdbuffer.cpp:598
PlayerContext
Definition: playercontext.h:49
MythBDPlayer::GetCurrentTitle
int GetCurrentTitle(void) const override
Definition: mythbdplayer.cpp:212
MythBDPlayer::GetBookmark
uint64_t GetBookmark(void) override
Definition: mythbdplayer.cpp:389
MythPlayer::JumpToFrame
virtual bool JumpToFrame(uint64_t frame)
Definition: mythplayer.cpp:883
MythPlayer::m_allPaused
bool m_allPaused
Definition: mythplayer.h:396
MythBDBuffer::SwitchTitle
bool SwitchTitle(uint32_t Index)
Definition: mythbdbuffer.cpp:632
MythVideoFrame
Definition: mythframe.h:83
MythBDBuffer::GetCurrentTitle
int GetCurrentTitle(void)
Definition: mythbdbuffer.cpp:592
MythVideoOutput::GetLastShownFrame
virtual MythVideoFrame * GetLastShownFrame()
Returns frame from the head of the ready to be displayed queue, if StartDisplayingFrame has been call...
Definition: mythvideoout.cpp:351
MythBDBuffer::GetBDStateSnapshot
bool GetBDStateSnapshot(QString &State)
Get a snapshot of the current BD state.
Definition: mythbdbuffer.cpp:1263
MythBDPlayer::GetTitleName
QString GetTitleName(int Title) const override
Definition: mythbdplayer.cpp:236
MythBDBuffer::RestoreBDStateSnapshot
bool RestoreBDStateSnapshot(const QString &State)
Restore a BD snapshot.
Definition: mythbdbuffer.cpp:1277
MythBDPlayer::JumpToFrame
bool JumpToFrame(uint64_t Frame) override
Definition: mythbdplayer.cpp:141
MythMainWindow
Definition: mythmainwindow.h:35
MythPlayer::Play
bool Play(float speed=1.0, bool normal=true, bool unpauseaudio=true)
Definition: mythplayer.cpp:192
MythBDDecoder
Definition: mythbddecoder.h:8
MythBDPlayer::GetNumChapters
int GetNumChapters(void) override
Definition: mythbdplayer.cpp:166
TV
Control TV playback.
Definition: tv_play.h:153