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