MythTV master
mythplayer.h
Go to the documentation of this file.
1#ifndef MYTHPLAYER_H
2#define MYTHPLAYER_H
3
4// Std
5#include <cstdint>
6#include <utility>
7#include <thread>
8
9// Qt
10#include <QCoreApplication>
11#include <QList>
12#include <QMutex>
13#include <QRecursiveMutex>
14#include <QTime>
15#include <QString>
16#include <QRect>
17#include <QSize>
18#include <QStringList>
19#include <QTimer>
20#include <QWaitCondition>
21
22// MythTV
23#include "libmythbase/mthread.h"
33#include "libmythtv/deletemap.h"
36#include "libmythtv/mythtvexp.h"
38#include "libmythtv/osd.h"
41#include "libmythtv/tv.h"
43
44class ProgramInfo;
45class InteractiveTV;
46class QThread;
47class MythMediaBuffer;
49
50using StatusCallback = void (*)(int, void*);
51
53enum TCTypes : std::uint8_t
54{
58 TC_CC
59};
60static constexpr size_t TCTYPESMAX { 4 };
61using tctype_arr = std::array<std::chrono::milliseconds,TCTYPESMAX>;
62
64{
65 kNoFlags = 0x000000,
66 kDecodeLowRes = 0x000001,
68 kDecodeFewBlocks = 0x000004,
70 kDecodeNoDecode = 0x000010,
71 kDecodeAllowGPU = 0x000020,
72 kVideoIsNull = 0x000040,
73 kAudioMuted = 0x010000,
74 kNoITV = 0x020000,
75 kMusicChoice = 0x040000,
76};
77
78// Padding between class members reduced from 113 to 73 bytes, but its
79// still higher than the default warning threshhold of 24 bytes.
80//
81// NOLINTNEXTLINE(clang-analyzer-optin.performance.Padding)
82class MTV_PUBLIC MythPlayer : public QObject
83{
84 Q_OBJECT
85
86 // Do NOT add a decoder class to this list
87 friend class PlayerContext;
88 friend class CC708Reader;
89 friend class CC608Reader;
90 friend class MythDecoderThread;
92 // TODO remove these
93 friend class TV;
94 friend class Transcode;
95
96 signals:
98 void SeekingSlow(int Count);
101 void PauseChanged(bool Paused);
103
104 public:
105 explicit MythPlayer(PlayerContext* Context, PlayerFlags Flags = kNoFlags);
106 ~MythPlayer() override;
107
108 // Initialisation
109 virtual int OpenFile(int Retries = 4);
110 virtual bool InitVideo(void);
111 virtual void ReinitVideo(bool ForceUpdate);
112 virtual void InitFrameInterval();
113
114 // Public Sets
115 void SetLength(std::chrono::seconds len) { m_totalLength = len; }
116 void SetFramesPlayed(uint64_t played);
117 void SetEof(EofState eof);
118 void SetWatchingRecording(bool mode);
119 void SetKeyframeDistance(int keyframedistance);
120 virtual void SetVideoParams(int w, int h, double fps, float aspect,
121 bool ForceUpdate, int ReferenceFrames,
122 FrameScanType /*scan*/ = kScan_Ignore,
123 const QString& codecName = QString());
124 void SetFileLength(std::chrono::seconds total, int frames);
125 void SetDuration(std::chrono::seconds duration);
126 void SetFrameRate(double fps);
127
128 // Gets
129 QSize GetVideoBufferSize(void) const { return m_videoDim; }
130 QSize GetVideoSize(void) const { return m_videoDispDim; }
131 float GetVideoAspect(void) const { return m_videoAspect; }
132 float GetFrameRate(void) const { return m_videoFrameRate; }
133 bool IsAudioNeeded(void) { return !FlagIsSet(kVideoIsNull); }
134 int GetFreeVideoFrames(void) const;
135
136 int GetFFRewSkip(void) const { return m_ffrewSkip; }
137 float GetPlaySpeed(void) const { return m_playSpeed; }
138 AudioPlayer* GetAudio(void) { return &m_audio; }
139 float GetNextPlaySpeed(void) const { return m_nextPlaySpeed; }
140 std::chrono::seconds GetLength(void) const { return m_totalLength; }
141 uint64_t GetTotalFrameCount(void) const { return m_totalFrames; }
142 uint64_t GetCurrentFrameCount(void) const;
143 uint64_t GetFramesPlayed(void) const { return m_framesPlayed; }
144 virtual uint64_t GetBookmark(void);
145 QString GetError(void) const;
146 QString GetEncodingType(void) const;
147 QString GetXDS(const QString &key) const;
148
149 // Bool Gets
150 bool IsPaused(void) const { return m_allPaused; }
151 bool GetLimitKeyRepeat(void) const { return m_limitKeyRepeat; }
152 EofState GetEof(void) const;
153 bool IsErrored(void) const;
154 bool IsPlaying(std::chrono::milliseconds wait_in_msec = 0ms,
155 bool wait_for = true) const;
156 bool AtNormalSpeed(void) const { return m_nextNormalSpeed; }
157 bool IsReallyNearEnd(void) const;
158 bool IsNearEnd(void);
159 bool HasTVChainNext(void) const;
160 bool IsWatchingInprogress(void) const;
161
162 virtual InteractiveTV *GetInteractiveTV() { return nullptr; }
163 MythVideoOutput *GetVideoOutput(void) { return m_videoOutput; }
164
165 // Title stuff
166 virtual bool SwitchTitle(int /*title*/) { return false; }
167 virtual bool NextTitle(void) { return false; }
168 virtual bool PrevTitle(void) { return false; }
169
170 // Angle stuff
171 virtual bool SwitchAngle(int /*title*/) { return false; }
172 virtual bool NextAngle(void) { return false; }
173 virtual bool PrevAngle(void) { return false; }
174
175 // Decoder stuff..
176 MythVideoFrame *GetNextVideoFrame(void);
177 void DeLimboFrame(MythVideoFrame *frame);
178 virtual void ReleaseNextVideoFrame(MythVideoFrame *buffer, std::chrono::milliseconds timecode,
179 bool wrap = true);
180 void DiscardVideoFrame(MythVideoFrame *buffer);
181 void DiscardVideoFrames(bool KeyFrame, bool Flushed);
183 DecoderBase *GetDecoder(void) { return m_decoder; }
184 virtual bool HasReachedEof(void) const;
185 void SetDisablePassThrough(bool disabled);
186 void ForceSetupAudioStream(void);
187
188 // Add data
189 virtual bool PrepareAudioSample(std::chrono::milliseconds &timecode);
190
191 // Public Closed caption and teletext stuff
192 virtual CC708Reader *GetCC708Reader(uint /*id*/=0) { return &m_cc708; }
193 virtual CC608Reader *GetCC608Reader(uint /*id*/=0) { return &m_cc608; }
194 virtual SubtitleReader *GetSubReader(uint /*id*/=0) { return &m_subReader; }
195 virtual TeletextReader *GetTeletextReader(uint /*id*/=0) { return &m_ttxReader; }
196
197 // Public Audio/Subtitle/EIA-608/EIA-708 stream selection - thread safe
198 void EnableForcedSubtitles(bool enable);
199 // How to handle forced Subtitles (i.e. when in a movie someone speaks
200 // in a different language than the rest of the movie, subtitles are
201 // forced on even if the user doesn't have them turned on.)
202 // These two functions are not thread-safe (UI thread use only).
203 bool GetAllowForcedSubtitles(void) const { return m_allowForcedSubtitles; }
204
205 virtual void tracksChanged([[maybe_unused]] uint TrackType) {}
206
207 // LiveTV public stuff
208 void CheckTVChain();
209 void FileChangedCallback();
210
211 // Chapter public stuff
212 virtual int GetNumChapters(void);
213 virtual int GetCurrentChapter(void);
214 virtual void GetChapterTimes(QList<std::chrono::seconds> &times);
215
216 // Title public stuff
217 virtual int GetNumTitles(void) const { return 0; }
218 virtual int GetCurrentTitle(void) const { return 0; }
219 virtual std::chrono::seconds GetTitleDuration(int /*title*/) const { return 0s; }
220 virtual QString GetTitleName(int /*title*/) const { return {}; }
221
222 // Angle public stuff
223 virtual int GetNumAngles(void) const { return 0; }
224 virtual int GetCurrentAngle(void) const { return 0; }
225 virtual QString GetAngleName(int /*title*/) const { return {}; }
226
227 // DVD public stuff
228 virtual bool IsInStillFrame() const { return false; }
229
230 // Position Map Stuff
231 bool PosMapFromEnc(uint64_t start, frm_pos_map_t &posMap, frm_pos_map_t &durMap);
232
233 void SaveTotalDuration(void);
234 void ResetTotalDuration(void);
235
238 static const double kInaccuracyNone;
239 static const double kInaccuracyDefault;
240 static const double kInaccuracyEditor;
241 static const double kInaccuracyFull;
242 static const double kSeekToEndOffset;
243
244 void SaveTotalFrames(void);
245 void SetErrored(const QString &reason);
246
247 protected:
248 // Initialization
249 void OpenDummy(void);
250
251 // Complicated gets
252 virtual long long CalcMaxFFTime(long long ff, bool setjump = true) const;
253 long long CalcRWTime(long long rw) const;
254 std::chrono::milliseconds TranslatePositionFrameToMs(uint64_t position,
255 bool use_cutlist) const;
256 uint64_t TranslatePositionMsToFrame(std::chrono::milliseconds position,
257 bool use_cutlist) const {
258 return m_deleteMap.TranslatePositionMsToFrame(position,
259 GetFrameRate(),
260 use_cutlist);
261 }
262 // TranslatePositionAbsToRel and TranslatePositionRelToAbs are
263 // used for frame calculations when seeking relative to a number
264 // of frames rather than by time.
265 uint64_t TranslatePositionAbsToRel(uint64_t position) const {
266 return m_deleteMap.TranslatePositionAbsToRel(position);
267 }
268 uint64_t TranslatePositionRelToAbs(uint64_t position) const {
269 return m_deleteMap.TranslatePositionRelToAbs(position);
270 }
271 float ComputeSecs(uint64_t position, bool use_cutlist) const {
272 return TranslatePositionFrameToMs(position, use_cutlist).count() / 1000.0F;
273 }
274 uint64_t FindFrame(float offset, bool use_cutlist) const;
275
276 // Commercial stuff
278 { m_commBreakMap.SetAutoCommercialSkip(autoskip, m_framesPlayed); }
279 void SkipCommercials(int direction)
280 { m_commBreakMap.SkipCommercials(direction); }
281 void SetCommBreakMap(const frm_dir_map_t& NewMap);
283 { return m_commBreakMap.GetAutoCommercialSkip(); }
284
285 // Start/Reset/Stop playing
286 virtual void ResetPlaying(bool resetframes = true);
287 virtual void StopPlaying(void);
288
289 // Pause stuff
290 bool PauseDecoder(void);
291 void UnpauseDecoder(void);
292 bool Pause(void);
293 bool Play(float speed = 1.0, bool normal = true, bool unpauseaudio = true);
294
295 // Seek stuff
296 virtual bool FastForward(float seconds);
297 virtual bool Rewind(float seconds);
298 virtual bool JumpToFrame(uint64_t frame);
299
300 // Chapter stuff
301 void JumpChapter(int chapter);
302
303 // Playback
304 virtual bool PrebufferEnoughFrames(int min_buffers = 0);
305 void SetBuffering(bool new_buffering);
306 virtual void VideoEnd(void);
307 virtual void DecoderStart(bool start_paused);
308 virtual void DecoderLoop(bool pause);
309 virtual void DecoderEnd(void);
310 virtual void DecoderPauseCheck(void);
311 virtual void AudioEnd(void);
312
313 // Edit mode stuff
314 bool GetEditMode(void) const { return m_deleteMap.IsEditing(); }
315 bool IsInDelete(uint64_t frame);
316
317 bool FlagIsSet(PlayerFlags arg) { return (m_playerFlags & arg) != 0; }
318
319 protected:
320 // Private Sets
321 void SetPlayingInfo(const ProgramInfo &pginfo);
322 void SetPlaying(bool is_playing);
323 void ResetErrored(void);
324
325 // Private pausing stuff
326 void PauseVideo(void);
327 void UnpauseVideo(void);
328 void PauseBuffer(void);
329 void UnpauseBuffer(void);
330
331 // Private decoder stuff
332 virtual void CreateDecoder(TestBufferVec & TestBuffer);
333 void SetDecoder(DecoderBase *dec);
335 const DecoderBase *GetDecoder(void) const { return m_decoder; }
336 virtual void DoFFRewSkip(void);
337 bool DecoderGetFrame(DecodeType decodetype, bool unsafe = false);
338 bool DoGetFrame(DecodeType DecodeType);
339
340 // These actually execute commands requested by public members
341 bool UpdateFFRewSkip(float ffrewScale = 1.0F);
342 virtual void ChangeSpeed(void);
343 // The "inaccuracy" argument is generally one of the kInaccuracy* values.
344 bool DoFastForward(uint64_t frames, double inaccuracy);
345 bool DoRewind(uint64_t frames, double inaccuracy);
346 void DoJumpToFrame(uint64_t frame, double inaccuracy);
347
348 // Private seeking stuff
349 void WaitForSeek(uint64_t frame, uint64_t seeksnap_wanted);
350 void ClearAfterSeek(bool clearvideobuffers = true);
351
352 // Private chapter stuff
353 virtual bool DoJumpChapter(int chapter);
354 virtual int64_t GetChapter(int chapter);
355
356 // Private A/V Sync Stuff
357 void WrapTimecode(std::chrono::milliseconds &timecode, TCTypes tc_type);
358 void SetFrameInterval(FrameScanType scan, double frame_period);
359
360 protected:
361 DecoderBase *m_decoder {nullptr};
362 mutable QRecursiveMutex m_decoderChangeLock;
363 MythVideoOutput *m_videoOutput {nullptr};
365 PlayerContext *m_playerCtx {nullptr};
366 MythDecoderThread* m_decoderThread {nullptr};
367 QThread *m_playerThread {nullptr};
368#ifdef Q_OS_ANDROID
369 int m_playerThreadId {0};
370#endif
372
373 // State
374 QWaitCondition m_decoderThreadPause;
376 mutable QMutex m_decoderPauseLock;
377 mutable QMutex m_decoderSeekLock;
378 mutable QMutex m_bufferPauseLock;
379 mutable QMutex m_videoPauseLock;
380 mutable QMutex m_pauseLock;
381 int64_t m_decoderSeek {-1};
382 bool m_totalDecoderPause {false};
383 bool m_decoderPaused {false};
384 bool m_inJumpToProgramPause {false};
385 bool m_pauseDecoder {false};
386 bool m_unpauseDecoder {false};
387 bool volatile m_killDecoder {false};
388 bool m_decodeOneFrame {false};
389 bool m_renderOneFrame {false};
390 bool m_needNewPauseFrame {false};
391 bool m_bufferPaused {false};
392 bool m_videoPaused {false};
393 bool m_allPaused {false};
394 bool m_playing {false};
395
396 mutable QWaitCondition m_playingWaitCond;
397 mutable QMutex m_vidExitLock;
398 mutable QMutex m_playingLock;
399 mutable QMutex m_errorLock;
400 QString m_errorMsg;
401 int m_errorType {kError_None};
402 bool m_liveTV {false};
403 bool m_watchingRecording {false};
404 bool m_transcoding {false};
405 bool m_hasFullPositionMap {false};
406 mutable bool m_limitKeyRepeat {false};
407
408 // Chapter stuff
409 int m_jumpChapter {0};
410
411 // Bookmark stuff
412 uint64_t m_bookmarkSeek {0};
414
415 // Seek
418 long long m_ffTime {0};
419
420 // Playback misc.
422 int m_videobufRetries {0};
423 uint64_t m_framesPlayed {0};
424 uint64_t m_totalFrames {0};
425 std::chrono::seconds m_totalLength {0s};
426 std::chrono::seconds m_totalDuration {0s};
427 long long m_rewindTime {0};
428 std::chrono::milliseconds m_latestVideoTimecode {-1ms};
429 std::chrono::milliseconds m_latestAudioTimecode {-1ms};
431
432 // -- end state stuff --
433
434 // Input Video Attributes
435 double m_videoFrameRate {29.97};
437 QString m_codecName;
438 QSize m_videoDispDim {0,0};
439 QSize m_videoDim {0,0};
440 int m_maxReferenceFrames {0};
441 float m_videoAspect {4.0F / 3.0F};
442 float m_forcedVideoAspect {-1};
443
446
447 // Buffering
448 bool m_buffering {false};
451
452 // Support for analog captions and teletext
453 // (i.e. Vertical Blanking Interval (VBI) encoded data.)
454 uint m_vbiMode {VBIMode::None};
455 int m_ttPageNum {0x888};
456
457 // Support for captions, teletext, etc. decoded by libav
462 bool m_captionsEnabledbyDefault {false};
463 bool m_enableForcedSubtitles {false};
464 bool m_disableForcedSubtitles {false};
465 bool m_allowForcedSubtitles {true};
466
467 // CC608/708
470
471 // Audio stuff
473
474 // Commercial filtering
476 bool m_forcePositionMapSync {false};
477 // Manual editing
479
480 // Playback (output) speed control
482 QRecursiveMutex m_decoderLock;
483 float m_nextPlaySpeed {1.0F};
484 float m_playSpeed {1.0F};
485 std::chrono::microseconds m_frameInterval
486 {microsecondsFromFloat(1000000.0F / 30)};
487 int m_fpsMultiplier {1};
488 int m_ffrewSkip {1};
489 int m_ffrewAdjust {0};
490 float m_ffrewScale {1.0F};
491 bool m_fileChanged {false};
492 bool m_nextNormalSpeed {true};
493 bool m_normalSpeed {true};
494
495 // Time Code stuff
496 tctype_arr m_tcWrap {};
497 std::chrono::milliseconds m_savedAudioTimecodeOffset {0ms};
498
499 // LiveTV
500 bool m_isDummy {false};
501
502 // Counter for buffering messages
503 int m_bufferingCounter {0};
504
505 private:
506 Q_DISABLE_COPY(MythPlayer)
507 void syncWithAudioStretch();
508 bool m_disablePassthrough {false};
509};
510
511#endif
This is the interface between an MHEG engine and a MythTV TV object.
Definition: interactivetv.h:18
virtual CC708Reader * GetCC708Reader(uint=0)
Definition: mythplayer.h:192
DecoderBase * GetDecoder(void)
Returns the stream decoder currently in use.
Definition: mythplayer.h:183
QMutex m_decoderPauseLock
Definition: mythplayer.h:376
virtual bool PrevTitle(void)
Definition: mythplayer.h:168
float GetNextPlaySpeed(void) const
Definition: mythplayer.h:139
QMutex m_playingLock
Definition: mythplayer.h:398
virtual int GetNumAngles(void) const
Definition: mythplayer.h:223
static const double kInaccuracyFull
Definition: mythplayer.h:241
QMutex m_bufferPauseLock
Definition: mythplayer.h:378
uint64_t GetTotalFrameCount(void) const
Definition: mythplayer.h:141
bool FlagIsSet(PlayerFlags arg)
Definition: mythplayer.h:317
uint64_t TranslatePositionAbsToRel(uint64_t position) const
Definition: mythplayer.h:265
QMutex m_vidExitLock
Definition: mythplayer.h:397
CommSkipMode GetAutoCommercialSkip(void)
Definition: mythplayer.h:282
QSize GetVideoSize(void) const
Definition: mythplayer.h:130
uint64_t TranslatePositionMsToFrame(std::chrono::milliseconds position, bool use_cutlist) const
Definition: mythplayer.h:256
virtual QString GetTitleName(int) const
Definition: mythplayer.h:220
virtual int GetNumTitles(void) const
Definition: mythplayer.h:217
virtual QString GetAngleName(int) const
Definition: mythplayer.h:225
virtual std::chrono::seconds GetTitleDuration(int) const
Definition: mythplayer.h:219
QMutex m_decoderSeekLock
Definition: mythplayer.h:377
uint64_t TranslatePositionRelToAbs(uint64_t position) const
Definition: mythplayer.h:268
virtual InteractiveTV * GetInteractiveTV()
Definition: mythplayer.h:162
DeleteMap m_deleteMap
Definition: mythplayer.h:478
static const double kInaccuracyNone
Definition: mythplayer.h:238
bool AtNormalSpeed(void) const
Definition: mythplayer.h:156
virtual int GetCurrentAngle(void) const
Definition: mythplayer.h:224
QRecursiveMutex m_decoderChangeLock
Definition: mythplayer.h:362
QTime m_bufferingStart
Definition: mythplayer.h:449
QWaitCondition m_decoderThreadPause
Definition: mythplayer.h:374
static const int kNightModeContrastAdjustment
Definition: mythplayer.h:237
AudioPlayer m_audio
Definition: mythplayer.h:472
virtual bool NextAngle(void)
Definition: mythplayer.h:172
static const double kInaccuracyEditor
Definition: mythplayer.h:240
const DecoderBase * GetDecoder(void) const
Returns the stream decoder currently in use.
Definition: mythplayer.h:335
CommBreakMap m_commBreakMap
Definition: mythplayer.h:475
void SeekingSlow(int Count)
TeletextReader m_ttxReader
Definition: mythplayer.h:459
virtual int GetCurrentTitle(void) const
Definition: mythplayer.h:218
CC708Reader m_cc708
Definition: mythplayer.h:469
QSize GetVideoBufferSize(void) const
Definition: mythplayer.h:129
void SkipCommercials(int direction)
Definition: mythplayer.h:279
MythVideoOutput * GetVideoOutput(void)
Definition: mythplayer.h:163
float GetVideoAspect(void) const
Definition: mythplayer.h:131
bool IsPaused(void) const
Definition: mythplayer.h:150
void PauseChanged(bool Paused)
QRecursiveMutex m_decoderLock
Lock for next_play_speed and next_normal_speed.
Definition: mythplayer.h:482
uint64_t GetFramesPlayed(void) const
Definition: mythplayer.h:143
QWaitCondition m_playingWaitCond
Definition: mythplayer.h:396
void RequestResetCaptions()
void SetLength(std::chrono::seconds len)
Definition: mythplayer.h:115
static const double kSeekToEndOffset
Definition: mythplayer.h:242
bool IsAudioNeeded(void)
Definition: mythplayer.h:133
PlayerFlags m_playerFlags
Definition: mythplayer.h:371
virtual bool IsInStillFrame() const
Definition: mythplayer.h:228
int m_endExitPrompt
Definition: mythplayer.h:413
bool GetLimitKeyRepeat(void) const
Definition: mythplayer.h:151
void SeekingComplete()
int GetFFRewSkip(void) const
Definition: mythplayer.h:136
MythPlayerAVSync m_avSync
Definition: mythplayer.h:430
virtual void tracksChanged(uint TrackType)
Definition: mythplayer.h:205
void CheckCallbacks()
QMutex m_errorLock
Definition: mythplayer.h:399
virtual bool PrevAngle(void)
Definition: mythplayer.h:173
QMutex m_pauseLock
Definition: mythplayer.h:380
virtual CC608Reader * GetCC608Reader(uint=0)
Definition: mythplayer.h:193
float GetPlaySpeed(void) const
Definition: mythplayer.h:137
float ComputeSecs(uint64_t position, bool use_cutlist) const
Definition: mythplayer.h:271
SubtitleReader m_subReader
Definition: mythplayer.h:458
QWaitCondition m_decoderThreadUnpause
Definition: mythplayer.h:375
virtual SubtitleReader * GetSubReader(uint=0)
Definition: mythplayer.h:194
bool GetEditMode(void) const
Definition: mythplayer.h:314
virtual bool SwitchAngle(int)
Definition: mythplayer.h:171
bool GetAllowForcedSubtitles(void) const
Definition: mythplayer.h:203
static const int kNightModeBrightenssAdjustment
Definition: mythplayer.h:236
virtual bool SwitchTitle(int)
Definition: mythplayer.h:166
CC608Reader m_cc608
Definition: mythplayer.h:468
virtual bool NextTitle(void)
Definition: mythplayer.h:167
void SeekingDone()
std::chrono::seconds GetLength(void) const
Definition: mythplayer.h:140
QTime m_bufferingLastMsg
Definition: mythplayer.h:450
QMutex m_videoPauseLock
Definition: mythplayer.h:379
AudioPlayer * GetAudio(void)
Definition: mythplayer.h:138
void SetAutoCommercialSkip(CommSkipMode autoskip)
Definition: mythplayer.h:277
QString m_codecName
Codec Name - used by playback profile.
Definition: mythplayer.h:437
float GetFrameRate(void) const
Definition: mythplayer.h:132
QString m_errorMsg
Reason why NVP exited with a error.
Definition: mythplayer.h:400
virtual TeletextReader * GetTeletextReader(uint=0)
Definition: mythplayer.h:195
static const double kInaccuracyDefault
Definition: mythplayer.h:239
static const VideoFrameTypes kDefaultRenderFormats
Definition: mythframe.h:90
Holds information on recordings and videos.
Definition: programinfo.h:70
Control TV playback.
Definition: tv_play.h:155
int m_keyframeDist
Definition: transcode.h:52
@ None
Definition: tv.h:12
unsigned int uint
Definition: compat.h:68
EofState
Definition: decoderbase.h:68
std::vector< char > TestBufferVec
Definition: decoderbase.h:23
TrackType
Track types.
Definition: decoderbase.h:27
DecodeType
Definition: decoderbase.h:48
std::enable_if_t< std::is_floating_point_v< T >, std::chrono::microseconds > microsecondsFromFloat(T value)
Helper function for convert a floating point number to a duration.
Definition: mythchrono.h:102
std::vector< VideoFrameType > VideoFrameTypes
Definition: mythframe.h:82
std::array< std::chrono::milliseconds, TCTYPESMAX > tctype_arr
Definition: mythplayer.h:61
PlayerFlags
Definition: mythplayer.h:64
@ kMusicChoice
Definition: mythplayer.h:75
@ kDecodeLowRes
Definition: mythplayer.h:66
@ kAudioMuted
Definition: mythplayer.h:73
@ kDecodeFewBlocks
Definition: mythplayer.h:68
@ kNoFlags
Definition: mythplayer.h:65
@ kDecodeAllowGPU
Definition: mythplayer.h:71
@ kDecodeNoDecode
Definition: mythplayer.h:70
@ kDecodeNoLoopFilter
Definition: mythplayer.h:69
@ kDecodeSingleThreaded
Definition: mythplayer.h:67
@ kVideoIsNull
Definition: mythplayer.h:72
@ kNoITV
Definition: mythplayer.h:74
void(*)(int, void *) StatusCallback
Definition: mythplayer.h:50
TCTypes
Timecode types.
Definition: mythplayer.h:54
@ TC_VIDEO
Definition: mythplayer.h:55
@ TC_SUB
Definition: mythplayer.h:57
@ TC_AUDIO
Definition: mythplayer.h:56
@ TC_CC
Definition: mythplayer.h:58
static constexpr size_t TCTYPESMAX
Definition: mythplayer.h:60
#define MTV_PUBLIC
Definition: mythtvexp.h:11
def scan(profile, smoonURL, gate)
Definition: scan.py:54
QMap< uint64_t, MarkTypes > frm_dir_map_t
Frame # -> Mark map.
Definition: programtypes.h:117
QMap< long long, long long > frm_pos_map_t
Frame # -> File offset map.
Definition: programtypes.h:44
CommSkipMode
Definition: tv.h:134
@ kError_None
FrameScanType
Definition: videoouttypes.h:95
@ kScan_Ignore
Definition: videoouttypes.h:96