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