xbmc
Classes | Public Member Functions | Protected Member Functions | Static Protected Member Functions | Protected Attributes | List of all members
CDVDVideoCodecFFmpeg Class Reference
Inheritance diagram for CDVDVideoCodecFFmpeg:
Inheritance graph
[legend]
Collaboration diagram for CDVDVideoCodecFFmpeg:
Collaboration graph
[legend]

Classes

struct  CDropControl
 

Public Member Functions

 CDVDVideoCodecFFmpeg (CProcessInfo &processInfo)
 
bool Open (CDVDStreamInfo &hints, CDVDCodecOptions &options) override
 Open the decoder, returns true on success Decoders not capable of running multiple instances should return false in case there is already a instance open. More...
 
bool AddData (const DemuxPacket &packet) override
 add data, decoder has to consume the entire packet returns true if the packet was consumed or if resubmitting it is useless More...
 
void Reset () override
 Reset the decoder. More...
 
void Reopen () override
 Re-open the decoder. More...
 
CDVDVideoCodec::VCReturn GetPicture (VideoPicture *pVideoPicture) override
 GetPicture controls decoding. More...
 
const char * GetName () override
 should return codecs name
 
unsigned GetConvergeCount () override
 How many packets should player remember, so codec can recover should something cause it to flush outside of players control.
 
unsigned GetAllowedReferences () override
 Number of references to old pictures that are allowed to be retained when calling decode on the next demux packet.
 
bool GetCodecStats (double &pts, int &droppedFrames, int &skippedPics) override
 For calculation of dropping requirements player asks for some information. More...
 
void SetCodecControl (int flags) override
 Codec can be informed by player with the following flags: More...
 
IHardwareDecoderGetHWAccel () override
 
bool GetPictureCommon (VideoPicture *pVideoPicture) override
 
- Public Member Functions inherited from CDVDVideoCodec
 CDVDVideoCodec (CProcessInfo &processInfo)
 
virtual bool Reconfigure (CDVDStreamInfo &hints)
 Reconfigure the decoder, returns true on success Decoders not capable of running multiple instances may be capable of reconfiguring the running instance. More...
 
virtual void SetSpeed (int iSpeed)
 will be called by video player indicating the playback speed. More...
 

Protected Member Functions

void Dispose ()
 
int FilterOpen (const std::string &filters, bool scale)
 
void FilterClose ()
 
CDVDVideoCodec::VCReturn FilterProcess (AVFrame *frame)
 
void SetFilters ()
 
void UpdateName ()
 
bool SetPictureParams (VideoPicture *pVideoPicture)
 
bool HasHardware ()
 
void SetHardware (IHardwareDecoder *hardware)
 

Static Protected Member Functions

static enum AVPixelFormat GetFormat (struct AVCodecContext *avctx, const AVPixelFormat *fmt)
 

Protected Attributes

AVFrame * m_pFrame = nullptr
 
AVFrame * m_pDecodedFrame = nullptr
 
AVCodecContext * m_pCodecContext = nullptr
 
std::shared_ptr< CVideoBufferPoolFFmpegm_videoBufferPool
 
std::string m_filters
 
std::string m_filters_next
 
AVFilterGraph * m_pFilterGraph = nullptr
 
AVFilterContext * m_pFilterIn = nullptr
 
AVFilterContext * m_pFilterOut = nullptr
 
AVFrame * m_pFilterFrame = nullptr
 
bool m_filterEof = false
 
bool m_eof = false
 
CDVDVideoPPFFmpeg m_postProc
 
int m_iPictureWidth = 0
 
int m_iPictureHeight = 0
 
int m_iScreenWidth = 0
 
int m_iScreenHeight = 0
 
int m_iOrientation = 0
 
std::string m_name
 
int m_decoderState
 
IHardwareDecoderm_pHardware = nullptr
 
int m_iLastKeyframe = 0
 
double m_dts = DVD_NOPTS_VALUE
 
bool m_started = false
 
bool m_startedInput = false
 
std::vector< AVPixelFormat > m_formats
 
double m_decoderPts = DVD_NOPTS_VALUE
 
int m_skippedDeint = 0
 
int m_droppedFrames = 0
 
bool m_requestSkipDeint = false
 
int m_codecControlFlags = 0
 
bool m_interlaced = false
 
double m_DAR = 1.0
 
CDVDStreamInfo m_hints
 
CDVDCodecOptions m_options
 
struct CDVDVideoCodecFFmpeg::CDropControl m_dropCtrl
 
- Protected Attributes inherited from CDVDVideoCodec
CProcessInfom_processInfo
 

Additional Inherited Members

- Public Types inherited from CDVDVideoCodec
enum  VCReturn {
  VC_NONE = 0, VC_ERROR, VC_FATAL, VC_BUFFER,
  VC_PICTURE, VC_FLUSHED, VC_NOBUFFER, VC_REOPEN,
  VC_EOF
}
 

Member Function Documentation

◆ AddData()

bool CDVDVideoCodecFFmpeg::AddData ( const DemuxPacket packet)
overridevirtual

add data, decoder has to consume the entire packet returns true if the packet was consumed or if resubmitting it is useless

Todo:
: properly handle avpkt side_data. this works around our improper use of the side_data

Implements CDVDVideoCodec.

◆ GetCodecStats()

bool CDVDVideoCodecFFmpeg::GetCodecStats ( double &  pts,
int &  droppedFrames,
int &  skippedPics 
)
overridevirtual

For calculation of dropping requirements player asks for some information.

  • pts : right after decoder, used to detect gaps (dropped frames in decoder)
  • droppedFrames : indicates if decoder has dropped a frame -1 means that decoder has no info on this.
  • skippedPics : indicates if postproc has skipped a already decoded picture -1 means that decoder has no info on this.

If codec does not implement this method, pts of decoded frame at input video player is used. In case decoder does post-proc and de-interlacing there may be quite some frames queued up between exit decoder and entry player.

Reimplemented from CDVDVideoCodec.

◆ GetPicture()

CDVDVideoCodec::VCReturn CDVDVideoCodecFFmpeg::GetPicture ( VideoPicture pVideoPicture)
overridevirtual

GetPicture controls decoding.

Player calls it on every cycle it can signal a picture, request a buffer, or return none, if nothing applies the data is valid until the next GetPicture return VC_PICTURE

Implements CDVDVideoCodec.

◆ GetPictureCommon()

bool CDVDVideoCodecFFmpeg::GetPictureCommon ( VideoPicture pVideoPicture)
overridevirtual
Todo:
: ffmpeg doesn't seem like they know how they want to handle this.

Implements ICallbackHWAccel.

◆ Open()

bool CDVDVideoCodecFFmpeg::Open ( CDVDStreamInfo hints,
CDVDCodecOptions options 
)
overridevirtual

Open the decoder, returns true on success Decoders not capable of running multiple instances should return false in case there is already a instance open.

Todo:
allow per video setting?

Implements CDVDVideoCodec.

◆ Reopen()

void CDVDVideoCodecFFmpeg::Reopen ( )
overridevirtual

Re-open the decoder.

Decoder request to re-open

Reimplemented from CDVDVideoCodec.

◆ Reset()

void CDVDVideoCodecFFmpeg::Reset ( )
overridevirtual

Reset the decoder.

Should be the same as calling Dispose and Open after each other

Implements CDVDVideoCodec.

◆ SetCodecControl()

void CDVDVideoCodecFFmpeg::SetCodecControl ( int  flags)
overridevirtual

Codec can be informed by player with the following flags:

DVD_CODEC_CTRL_NO_POSTPROC : if speed is not normal the codec can switch off postprocessing and de-interlacing

DVD_CODEC_CTRL_HURRY : codecs may do postprocessing and de-interlacing. If video buffers in RenderManager are about to run dry, this is signaled to codec. Codec can wait for post-proc to be finished instead of returning empty and getting another packet.

DVD_CODEC_CTRL_DRAIN : instruct decoder to deliver last pictures without requesting new packets

DVD_CODEC_CTRL_DROP : this packet is going to be dropped. decoder is free to use it for decoding

Reimplemented from CDVDVideoCodec.


The documentation for this class was generated from the following files: