/usr/include/avifile-0.7/videodecoder.h is in libavifile-0.7-dev 1:0.7.48~20090503.ds-19+b1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 | #ifndef AVIFILE_IVIDEODECODER_H
#define AVIFILE_IVIDEODECODER_H
#include "infotypes.h"
#include "image.h"
AVM_BEGIN_NAMESPACE;
/**
*
* Class for video decompression.
*
* Usage:
*
* IVideoDecoder::Create() call tries to load video codec
* corresponding to your format,
* Start() starts decompression and Stop() stops it.
*
* SetDestFmt() sets desired bit depth and color space of output picture.
* Returns zero on success, -1 if format is unsupported and
* +1 if there was no 'native' support for the depth and library
* is going to perform internal conversion of format. Most decoders
* support depths 15, 16, 24 or 32. Many of them also allow to use some
* YUV formats. You can check if your particular decoder is able to decode
* into the particular YUV format by calling GetCapabilities(),
* which returns bitwise OR of supported formats.
*
* DecodeFrame() decodes a single frame. Returns >=0 on success,
* of <0 on failure (it is not fatal ( maybe it was
* just one defective bit in file, after next keyframe everything
* will be OK ).
*
* SetDirection() allows to 'flip' output picture. By default picture
* is flipped ( DestFmt().biHeight<0 ), so that output image can
* be simply memcpy()'ed to the X screen. It should be turned on
* if image will be used for recompression, because some video encoders
* will refuse to encode images with negative biHeight. Call it before
* Start().
*
* Some decoders allow tweaking of their parameters. There are two ways
* of doing it. 1) Use Get/SetExtendedAttr() to store parameter values
* in registry. Decoders read these values during Start(), so you should
* perform Restart() if you need to change parameters in run-time.
*
* There's more convenient way, which is supported by a few DirectShow
* codecs. If GetRtConfig() returns nonzero, you can
* use IRtConfig methods to adjust picture properties between Start() and
* Stop(). These adjustments are applied from the first frame following
* method call.
*
* List of valid parameters is available IRtConfig::GetCodecInfo().decoder_info.
* See include/infotypes.h for details on accessing it.
*
*/
class AVMEXPORT IVideoDecoder
{
public:
/**
* internaly used flag to mark that decoder
* has not produced new picture from given data
*/
static const int NO_PICTURE = 0x40000000;
static const int NEXT_PICTURE = 0x20000000;
enum CAPS
{
CAP_NONE = 0,
// packed
CAP_IYUV = 1,
CAP_YUY2 = 2,
CAP_UYVY = 4,
CAP_YVYU = 8,
// planar
CAP_YV12 = 128,
CAP_I420 = 256,
CAP_YVU9 = 512,
// for DR1 rendering this align is needed
// this also mean codec will properly handle strides
// IT'S FOR PRIVATE USAGE and will be changed
CAP_ALIGN64 = 1 << 30,
CAP_ALIGN16 = 1 << 31
};
IVideoDecoder(const CodecInfo& info, const BITMAPINFOHEADER& format);
virtual ~IVideoDecoder();
/* Functions which may be reimplemented */
/**
* Codec's currently selected destination format
*/
virtual const BITMAPINFOHEADER& GetDestFmt() const;
/**
* Capability flags for this codec
*/
virtual CAPS GetCapabilities() const;
virtual const CodecInfo& GetCodecInfo() const;
/**
* Use this method instead of dynamic_cast - some gcc compilers
* (even the new ones seems to have some serious problems with that)
*/
virtual IRtConfig* GetRtConfig(); // can't be const
virtual void Flush(); // call after seek
virtual int Restart();
virtual int SetDirection(int dir);
virtual int Start();
virtual int Stop();
/* Functions which must be implemented by each decoder */
/**
* Passes the data to decoder.
* 'render' flag signals decoder if the frame will be rendered.
* If it is 'false', decoder may speed up the decoding process
* by not filling CImage object. This feature is available only
* for a few decoders, such as Indeo Video 5.0.
* also it will be faster with ffmpeg decoder
*
* dest - points to memory area (size respects BITMAPINFOHEADER.biSize)
* src - source of bitstream data
* size - size of bitstream data
* is_keyframe - flag to make visible to decoder that this is keyframe
* most new decoders will decide this from content
* of bitstream - but for some older codecs this
* flags is necessary
* returns <0 if some error appears
* INTERNAL flags:
* | NO_PICTURE - no picture was generated
* | NEXT_PICTURE - another picture is needed
* when picture is generated codec might actually return it
* in differenet locations (out != 0)
*/
virtual int DecodeFrame(CImage* dest, const void* src, size_t size,
int is_keyframe, bool render = true,
CImage** out = 0) =0;
/**
* Select destination decoder output
* by default it will be BGR24
*/
virtual int SetDestFmt(int bits = 24, fourcc_t csp = 0) =0;
protected:
const CodecInfo& m_Info;
BITMAPINFOHEADER* m_pFormat;
BitmapInfo m_Dest;
CImage* m_pImage; // for backward compatibility
};
// declaration of IRtConfig moved to image.h
// used also by IVideoRenderer
AVM_END_NAMESPACE;
#endif // AVIFILE_IVIDEODECODER_H
|