MythTV master
mythdvddecoder.h
Go to the documentation of this file.
1#ifndef AVFORMATDECODERDVD_H
2#define AVFORMATDECODERDVD_H
3
4// Qt
5#include <QList>
6
7// MythTV
9
10static constexpr uint32_t INVALID_LBA { 0xbfffffff };
11
12class MythDVDContext;
13
15{
16 public:
17 MythDVDDecoder(MythPlayer *Parent, const ProgramInfo &PGInfo, PlayerFlags Flags);
18 ~MythDVDDecoder() override;
19
20 void Reset (bool ResetVideoData, bool SeekReset, bool ResetFile) override;
21 bool GetFrame (DecodeType Type, bool &Retry) override;
22 void UpdateFramesPlayed(void) override;
23 int GetAudioLanguage (uint AudioIndex, uint StreamIndex) override;
25
26 protected:
27 int ReadPacket (AVFormatContext *Ctx, AVPacket *Pkt, bool &StorePacket) override;
28 bool ProcessVideoPacket(AVCodecContext* codecContext, AVStream *Stream, AVPacket *Pkt, bool &Retry) override;
29 bool ProcessVideoFrame (AVCodecContext* codecContext, AVStream *Stream, AVFrame *Frame) override;
30 bool ProcessDataPacket (AVStream *Curstream, AVPacket *Pkt, DecodeType Decodetype) override;
31 bool DoRewindSeek (long long DesiredFrame) override;
32 void DoFastForwardSeek (long long DesiredFrame, bool &NeedFlush) override;
33 void StreamChangeCheck (void) override;
34 void PostProcessTracks (void) override;
35
36 private:
37 void CheckContext (int64_t Pts);
38 void ReleaseLastVideoPkt (void);
39 static void ReleaseContext (MythDVDContext *&Context);
40 long long DVDFindPosition(long long DesiredFrame);
41
43 QList<MythDVDContext*> m_contextList;
44 AVPacket* m_lastVideoPkt { nullptr };
46 int m_framesReq { 0 };
48};
49
50#endif
AVFrame AVFrame
A decoder for media files.
void SeekReset(long long newkey, uint skipFrames, bool doFlush, bool discardFrames) override
Encapsulates playback context at any given moment.
uint32_t m_lbaLastVideoPkt
void CheckContext(int64_t Pts)
bool GetFrame(DecodeType Type, bool &Retry) override
Demux, preprocess and possibly decode a frame of video/audio.
~MythDVDDecoder() override
MythDVDContext * m_returnContext
long long DVDFindPosition(long long DesiredFrame)
int GetAudioLanguage(uint AudioIndex, uint StreamIndex) override
bool ProcessVideoFrame(AVCodecContext *codecContext, AVStream *Stream, AVFrame *Frame) override
QList< MythDVDContext * > m_contextList
MythDVDDecoder(MythPlayer *Parent, const ProgramInfo &PGInfo, PlayerFlags Flags)
bool DoRewindSeek(long long DesiredFrame) override
bool ProcessDataPacket(AVStream *Curstream, AVPacket *Pkt, DecodeType Decodetype) override
int ReadPacket(AVFormatContext *Ctx, AVPacket *Pkt, bool &StorePacket) override
MythDVDContext * m_curContext
void PostProcessTracks(void) override
void Reset(bool ResetVideoData, bool SeekReset, bool ResetFile) override
void UpdateFramesPlayed(void) override
void StreamChangeCheck(void) override
static void ReleaseContext(MythDVDContext *&Context)
AudioTrackType GetAudioTrackType(uint Index) override
void DoFastForwardSeek(long long DesiredFrame, bool &NeedFlush) override
Seeks to the keyframe just before the desiredFrame if exact seeks is enabled, or the frame just after...
AVPacket * m_lastVideoPkt
bool ProcessVideoPacket(AVCodecContext *codecContext, AVStream *Stream, AVPacket *Pkt, bool &Retry) override
void ReleaseLastVideoPkt(void)
Holds information on recordings and videos.
Definition: programinfo.h:74
unsigned int uint
Definition: compat.h:60
AudioTrackType
Definition: decoderbase.h:56
DecodeType
Definition: decoderbase.h:48
static constexpr uint32_t INVALID_LBA
PlayerFlags
Definition: mythplayer.h:64