Kodi Documentation 22.0
Kodi is an open source media player and entertainment hub.
Loading...
Searching...
No Matches
CDVDVideoCodecFFmpeg Class Reference

#include <DVDVideoCodecFFmpeg.h>

Inheritance diagram for CDVDVideoCodecFFmpeg:
CDVDVideoCodec ICallbackHWAccel

Classes

struct  CDropControl
 

Public Member Functions

 CDVDVideoCodecFFmpeg (CProcessInfo &processInfo)
 
 ~CDVDVideoCodecFFmpeg () override
 
bool Open (CDVDStreamInfo &hints, CDVDCodecOptions &options) override
 
bool AddData (const DemuxPacket &packet) override
 
void Reset () override
 
void Reopen () override
 
CDVDVideoCodec::VCReturn GetPicture (VideoPicture *pVideoPicture) override
 
const char * GetName () override
 
unsigned GetConvergeCount () override
 
unsigned GetAllowedReferences () override
 
bool GetCodecStats (double &pts, int &droppedFrames, int &skippedPics) override
 
void SetCodecControl (int flags) override
 
IHardwareDecoderGetHWAccel () override
 
bool GetPictureCommon (VideoPicture *pVideoPicture) override
 
- Public Member Functions inherited from CDVDVideoCodec
 CDVDVideoCodec (CProcessInfo &processInfo)
 
virtual ~CDVDVideoCodec ()=default
 
virtual bool Reconfigure (CDVDStreamInfo &hints)
 
virtual void SetSpeed (int iSpeed)
 
- Public Member Functions inherited from ICallbackHWAccel
virtual ~ICallbackHWAccel ()=default
 

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
}
 

Constructor & Destructor Documentation

◆ CDVDVideoCodecFFmpeg()

CDVDVideoCodecFFmpeg::CDVDVideoCodecFFmpeg ( CProcessInfo & processInfo)
explicit

◆ ~CDVDVideoCodecFFmpeg()

CDVDVideoCodecFFmpeg::~CDVDVideoCodecFFmpeg ( )
override

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.

◆ Dispose()

void CDVDVideoCodecFFmpeg::Dispose ( )
protected

◆ FilterClose()

void CDVDVideoCodecFFmpeg::FilterClose ( )
protected

◆ FilterOpen()

int CDVDVideoCodecFFmpeg::FilterOpen ( const std::string & filters,
bool scale )
protected

◆ FilterProcess()

CDVDVideoCodec::VCReturn CDVDVideoCodecFFmpeg::FilterProcess ( AVFrame * frame)
protected

◆ GetAllowedReferences()

unsigned CDVDVideoCodecFFmpeg::GetAllowedReferences ( )
overridevirtual

Number of references to old pictures that are allowed to be retained when calling decode on the next demux packet

Reimplemented from 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.

◆ GetConvergeCount()

unsigned CDVDVideoCodecFFmpeg::GetConvergeCount ( )
overridevirtual

How many packets should player remember, so codec can recover should something cause it to flush outside of players control

Reimplemented from CDVDVideoCodec.

◆ GetFormat()

enum AVPixelFormat CDVDVideoCodecFFmpeg::GetFormat ( struct AVCodecContext * avctx,
const AVPixelFormat * fmt )
staticprotected

◆ GetHWAccel()

IHardwareDecoder * CDVDVideoCodecFFmpeg::GetHWAccel ( )
overridevirtual

Implements ICallbackHWAccel.

◆ GetName()

const char * CDVDVideoCodecFFmpeg::GetName ( )
inlineoverridevirtual

should return codecs name

Implements 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.

◆ HasHardware()

bool CDVDVideoCodecFFmpeg::HasHardware ( )
inlineprotected

◆ 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.

◆ SetFilters()

void CDVDVideoCodecFFmpeg::SetFilters ( )
protected

◆ SetHardware()

void CDVDVideoCodecFFmpeg::SetHardware ( IHardwareDecoder * hardware)
protected

◆ SetPictureParams()

bool CDVDVideoCodecFFmpeg::SetPictureParams ( VideoPicture * pVideoPicture)
protected

◆ UpdateName()

void CDVDVideoCodecFFmpeg::UpdateName ( )
protected

Member Data Documentation

◆ m_codecControlFlags

int CDVDVideoCodecFFmpeg::m_codecControlFlags = 0
protected

◆ m_DAR

double CDVDVideoCodecFFmpeg::m_DAR = 1.0
protected

◆ m_decoderPts

double CDVDVideoCodecFFmpeg::m_decoderPts = DVD_NOPTS_VALUE
protected

◆ m_decoderState

int CDVDVideoCodecFFmpeg::m_decoderState
protected

◆ m_dropCtrl

struct CDVDVideoCodecFFmpeg::CDropControl CDVDVideoCodecFFmpeg::m_dropCtrl
protected

◆ m_droppedFrames

int CDVDVideoCodecFFmpeg::m_droppedFrames = 0
protected

◆ m_dts

double CDVDVideoCodecFFmpeg::m_dts = DVD_NOPTS_VALUE
protected

◆ m_eof

bool CDVDVideoCodecFFmpeg::m_eof = false
protected

◆ m_filterEof

bool CDVDVideoCodecFFmpeg::m_filterEof = false
protected

◆ m_filters

std::string CDVDVideoCodecFFmpeg::m_filters
protected

◆ m_filters_next

std::string CDVDVideoCodecFFmpeg::m_filters_next
protected

◆ m_formats

std::vector<AVPixelFormat> CDVDVideoCodecFFmpeg::m_formats
protected

◆ m_hints

CDVDStreamInfo CDVDVideoCodecFFmpeg::m_hints
protected

◆ m_iLastKeyframe

int CDVDVideoCodecFFmpeg::m_iLastKeyframe = 0
protected

◆ m_interlaced

bool CDVDVideoCodecFFmpeg::m_interlaced = false
protected

◆ m_iOrientation

int CDVDVideoCodecFFmpeg::m_iOrientation = 0
protected

◆ m_iPictureHeight

int CDVDVideoCodecFFmpeg::m_iPictureHeight = 0
protected

◆ m_iPictureWidth

int CDVDVideoCodecFFmpeg::m_iPictureWidth = 0
protected

◆ m_iScreenHeight

int CDVDVideoCodecFFmpeg::m_iScreenHeight = 0
protected

◆ m_iScreenWidth

int CDVDVideoCodecFFmpeg::m_iScreenWidth = 0
protected

◆ m_name

std::string CDVDVideoCodecFFmpeg::m_name
protected

◆ m_options

CDVDCodecOptions CDVDVideoCodecFFmpeg::m_options
protected

◆ m_pCodecContext

AVCodecContext* CDVDVideoCodecFFmpeg::m_pCodecContext = nullptr
protected

◆ m_pDecodedFrame

AVFrame* CDVDVideoCodecFFmpeg::m_pDecodedFrame = nullptr
protected

◆ m_pFilterFrame

AVFrame* CDVDVideoCodecFFmpeg::m_pFilterFrame = nullptr
protected

◆ m_pFilterGraph

AVFilterGraph* CDVDVideoCodecFFmpeg::m_pFilterGraph = nullptr
protected

◆ m_pFilterIn

AVFilterContext* CDVDVideoCodecFFmpeg::m_pFilterIn = nullptr
protected

◆ m_pFilterOut

AVFilterContext* CDVDVideoCodecFFmpeg::m_pFilterOut = nullptr
protected

◆ m_pFrame

AVFrame* CDVDVideoCodecFFmpeg::m_pFrame = nullptr
protected

◆ m_pHardware

IHardwareDecoder* CDVDVideoCodecFFmpeg::m_pHardware = nullptr
protected

◆ m_postProc

CDVDVideoPPFFmpeg CDVDVideoCodecFFmpeg::m_postProc
protected

◆ m_requestSkipDeint

bool CDVDVideoCodecFFmpeg::m_requestSkipDeint = false
protected

◆ m_skippedDeint

int CDVDVideoCodecFFmpeg::m_skippedDeint = 0
protected

◆ m_started

bool CDVDVideoCodecFFmpeg::m_started = false
protected

◆ m_startedInput

bool CDVDVideoCodecFFmpeg::m_startedInput = false
protected

◆ m_videoBufferPool

std::shared_ptr<CVideoBufferPoolFFmpeg> CDVDVideoCodecFFmpeg::m_videoBufferPool
protected

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