PTLib
Version 2.18.8
|
This class defines a means to convert an image from one colour format to another. More...
#include <vconvert.h>
Public Member Functions | |
virtual void | PrintOn (ostream &strm) const |
Print description of converter. More... | |
bool | GetVFlipState () const |
Get the video conversion vertical flip state. More... | |
void | SetVFlipState (bool vFlipState) |
Set the video conversion vertical flip state. More... | |
virtual PBoolean | SetFrameSize (unsigned width, unsigned height) |
Set the frame size to be used. More... | |
virtual PBoolean | SetSrcFrameInfo (const PVideoFrameInfo &info) |
Set the source frame info to be used. More... | |
virtual PBoolean | SetDstFrameInfo (const PVideoFrameInfo &info) |
Set the destination frame info to be used. More... | |
virtual void | GetSrcFrameInfo (PVideoFrameInfo &info) |
Get the source frame info to be used. More... | |
virtual void | GetDstFrameInfo (PVideoFrameInfo &info) |
Get the destination frame info to be used. More... | |
virtual PBoolean | SetSrcFrameSize (unsigned width, unsigned height) |
Set the source frame size to be used. More... | |
virtual PBoolean | SetDstFrameSize (unsigned width, unsigned height) |
Set the destination frame size to be used. More... | |
virtual PBoolean | SetDstFrameSize (unsigned width, unsigned height, PBoolean bScale) |
PINDEX | GetMaxSrcFrameBytes () const |
Get the maximum frame size in bytes for source frames. More... | |
void | SetSrcFrameBytes (PINDEX frameBytes) |
Set the actual frame size in bytes for source frames. More... | |
PINDEX | GetMaxDstFrameBytes () const |
Get the maximum frame size in bytes for destination frames. More... | |
virtual PBoolean | Convert (const BYTE *srcFrameBuffer, BYTE *dstFrameBuffer, PINDEX *bytesReturned=NULL)=0 |
Convert from one colour format to another. More... | |
virtual PBoolean | ConvertInPlace (BYTE *frameBuffer, PINDEX *bytesReturned=NULL, PBoolean noIntermediateFrame=false) |
Convert from one colour format to another. More... | |
PBoolean | GetDstFrameSize (unsigned &width, unsigned &height) const |
Get the output frame size. More... | |
PBoolean | GetSrcFrameSize (unsigned &width, unsigned &height) const |
Get the input frame size. More... | |
unsigned | GetSrcFrameWidth () const |
unsigned | GetSrcFrameHeight () const |
unsigned | GetDstFrameWidth () const |
unsigned | GetDstFrameHeight () const |
void | SetResizeMode (PVideoFrameInfo::ResizeMode mode) |
Set the resize mode to be used. More... | |
PVideoFrameInfo::ResizeMode | GetResizeMode () const |
Get the resize mode to be used. More... | |
![]() | |
PColourPair (const PString &src, const PString &dst) | |
Comparison | Compare (const PObject &other) const |
Compare the two objects and return their relative rank. More... | |
const PString & | GetSrcColourFormat () const |
Get the source colour format. More... | |
const PString & | GetDstColourFormat () const |
Get the destination colour format. More... | |
![]() | |
__inline unsigned | GetTraceContextIdentifier () const |
Get PTRACE context identifier. More... | |
__inline void | SetTraceContextIdentifier (unsigned id) |
__inline void | SetTraceContextIdentifier (const PObject &obj) |
__inline void | SetTraceContextIdentifier (const PObject *obj) |
__inline void | CopyTraceContextIdentifier (PObject &obj) const |
__inline void | CopyTraceContextIdentifier (PObject *obj) const |
virtual | ~PObject () |
__inline const char * | GetClass () const |
__inline bool | IsClass (const char *name) const |
__inline const PObject * | PTraceObjectInstance () const |
virtual PObject * | Clone () const |
Create a copy of the class on the heap. More... | |
template<class CLS > | |
CLS * | CloneAs () const |
As for Clone() but converts to specified type. More... | |
virtual PINDEX | HashFunction () const |
This function yields a hash value required by the PDictionary class. More... | |
virtual Comparison | CompareObjectMemoryDirect (const PObject &obj) const |
Determine the byte wise comparison of two objects. More... | |
bool | operator== (const PObject &obj) const |
Compare the two objects. More... | |
bool | operator!= (const PObject &obj) const |
Compare the two objects. More... | |
bool | operator< (const PObject &obj) const |
Compare the two objects. More... | |
bool | operator> (const PObject &obj) const |
Compare the two objects. More... | |
bool | operator<= (const PObject &obj) const |
Compare the two objects. More... | |
bool | operator>= (const PObject &obj) const |
Compare the two objects. More... | |
virtual void | ReadFrom (istream &strm) |
Input the contents of the object from the stream. More... | |
Static Public Member Functions | |
static PColourConverter * | Create (const PVideoFrameInfo &src, const PVideoFrameInfo &dst) |
Create an instance of a colour conversion function. More... | |
static PColourConverter * | Create (const PString &srcColourFormat, const PString &destColourFormat, unsigned width, unsigned height) |
static void | RGBtoYUV (unsigned r, unsigned g, unsigned b, BYTE &y, BYTE &u, BYTE &v) |
Convert RGB to YUV. More... | |
static void | YUVtoRGB (unsigned y, unsigned u, unsigned v, BYTE &r, BYTE &g, BYTE &b) |
Convert YUV to RGB. More... | |
static bool | CopyYUV420P (unsigned srcX, unsigned srcY, unsigned srcWidth, unsigned srcHeight, unsigned srcFrameWidth, unsigned srcFrameHeight, const BYTE *srcYUV, unsigned dstX, unsigned dstY, unsigned dstWidth, unsigned dstHeight, unsigned dstFrameWidth, unsigned dstFrameHeight, BYTE *dstYUV, PVideoFrameInfo::ResizeMode resizeMode=PVideoFrameInfo::eScale, bool verticalFlip=false, std::ostream *error=NULL) |
Copy a section of the source frame to a section of the destination frame with scaling/cropping as required. More... | |
static bool | RotateYUV420P (int angle, unsigned width, unsigned height, BYTE *srcYUV, BYTE *dstYUV=NULL) |
Rotate the video buffer image. More... | |
static bool | FillYUV420P (unsigned x, unsigned y, unsigned width, unsigned height, unsigned frameWidth, unsigned frameHeight, BYTE *yuv, unsigned r_or_y, unsigned g_or_u, unsigned b_or_v, bool rgb=true) |
Fill a rectangle of the video buffer with the specified colour. More... | |
![]() | |
static __inline void | CopyTraceContextIdentifier (PObject &to, const PObject &from) |
static __inline void | CopyTraceContextIdentifier (PObject &to, const PObject *from) |
static __inline void | CopyTraceContextIdentifier (PObject *to, const PObject &from) |
static __inline void | CopyTraceContextIdentifier (PObject *to, const PObject *from) |
static __inline const char * | Class () |
static __inline const PObject * | PTraceObjectInstance (const char *) |
static __inline const PObject * | PTraceObjectInstance (const PObject *obj) |
template<typename T > | |
static Comparison | Compare2 (T v1, T v2) |
Compare two types, returning Comparison type. More... | |
static Comparison | InternalCompareObjectMemoryDirect (const PObject *obj1, const PObject *obj2, PINDEX size) |
Internal function caled from CompareObjectMemoryDirect() More... | |
Protected Member Functions | |
PColourConverter (const PColourPair &colours) | |
Create a new converter. More... | |
P_REMOVE_VIRTUAL (PBoolean, Convert(const BYTE *, BYTE *, unsigned, PINDEX *), false) | |
![]() | |
PObject () | |
Constructor for PObject, made protected so cannot ever create one on its own. More... | |
Protected Attributes | |
unsigned | m_srcFrameWidth |
unsigned | m_srcFrameHeight |
PINDEX | m_srcFrameBytes |
unsigned | m_dstFrameWidth |
unsigned | m_dstFrameHeight |
PINDEX | m_dstFrameBytes |
PVideoFrameInfo::ResizeMode | m_resizeMode |
bool | m_verticalFlip |
PBYTEArray | m_intermediateFrameStore |
![]() | |
const PString | m_srcColourFormat |
const PString | m_dstColourFormat |
![]() | |
unsigned | m_traceContextIdentifier |
This class defines a means to convert an image from one colour format to another.
It is an ancestor class for the individual formatting functions.
|
protected |
Create a new converter.
|
pure virtual |
Convert from one colour format to another.
This version will copy the data from one frame buffer to another. An implementation of this function should allow for the case of where srcFrameBuffer and dstFrameBuffer are the same, if the conversion algorithm allows for that to occur without an intermediate frame store.
The function should return false if srcFrameBuffer and dstFrameBuffer are the same and that form pf conversion is not allowed
srcFrameBuffer | Frame store for source pixels |
dstFrameBuffer | Frame store for destination pixels |
bytesReturned | Bytes written to dstFrameBuffer |
|
virtual |
Convert from one colour format to another.
This version will copy the data from one frame buffer to the same frame buffer. Not all conversions can do this so an intermediate store and copy may be required. If the noIntermediateFrame parameter is true and the conversion cannot be done in place then the function returns false. If the in place conversion can be done then that parameter is ignored.
Note that the frame should be large enough to take the destination pixels.
Default behaviour calls Convert() from the frameBuffer to itself, and if that returns false then calls it again (provided noIntermediateFrame is false) using an intermediate store, copying the intermediate store back to the original frame store.
frameBuffer | Frame buffer to translate data |
bytesReturned | Bytes written to frameBuffer |
noIntermediateFrame | Flag to use intermediate store |
|
static |
Copy a section of the source frame to a section of the destination frame with scaling/cropping as required.
|
static |
Create an instance of a colour conversion function.
Returns NULL if there is no registered colour converter between the two named formats.
src | Source frame info (colour formet, size etc) |
dst | Destination frame info |
|
static |
|
static |
Fill a rectangle of the video buffer with the specified colour.
|
inline |
References m_dstFrameHeight.
|
virtual |
Get the destination frame info to be used.
info | New info for frame |
PBoolean PColourConverter::GetDstFrameSize | ( | unsigned & | width, |
unsigned & | height | ||
) | const |
Get the output frame size.
width | Width of destination frame |
height | Height of destination frame |
|
inline |
References m_dstFrameWidth.
|
inline |
Get the maximum frame size in bytes for destination frames.
Note a particular device may be able to provide variable length frames (eg motion JPEG) so will be the maximum size of all frames.
References m_dstFrameBytes.
|
inline |
Get the maximum frame size in bytes for source frames.
Note a particular device may be able to provide variable length frames (eg motion JPEG) so will be the maximum size of all frames.
References m_srcFrameBytes.
|
inline |
Get the resize mode to be used.
References m_resizeMode.
|
inline |
References m_srcFrameHeight.
|
virtual |
Get the source frame info to be used.
info | New info for frame |
PBoolean PColourConverter::GetSrcFrameSize | ( | unsigned & | width, |
unsigned & | height | ||
) | const |
Get the input frame size.
width | Width of source frame |
height | Height of source frame |
|
inline |
References m_srcFrameWidth.
|
inline |
Get the video conversion vertical flip state.
References m_verticalFlip.
|
protected |
|
virtual |
Print description of converter.
Reimplemented from PObject.
|
static |
Convert RGB to YUV.
|
static |
Rotate the video buffer image.
At this time, the angle
may be 90, -90 or 180. Note: if dstYUV is NULL for an in-place rotation, then there may be a performance hit due to allocating an internal buffer and copying back to the source memory.
|
virtual |
Set the destination frame info to be used.
Default behaviour sets the dstFrameWidth and dstFrameHeight variables, and the scale / crop preference. It then recalculates the frame buffer size in bytes then returns true if the size was calculated correctly.
Returns false if the colour formats do not agree.
info | New info for frame |
|
virtual |
Set the destination frame size to be used.
Default behaviour sets the dstFrameWidth and dstFrameHeight variables, and the scale / crop preference. It then recalculates the frame buffer size in bytes then returns true if the size was calculated correctly.
width | New width of target frame |
height | New height of target frame |
|
virtual |
width | New width of target frame |
height | New height of target frame |
bScale | Indicate if scaling or cropping is to be used |
|
virtual |
Set the frame size to be used.
Default behaviour calls SetSrcFrameSize() and SetDstFrameSize().
width | New width of frame |
height | New height of frame |
|
inline |
Set the resize mode to be used.
References m_resizeMode.
|
inline |
Set the actual frame size in bytes for source frames.
Note a particular device may be able to provide variable length frames (eg motion JPEG) so will be the maximum size of all frames.
References m_srcFrameBytes.
|
virtual |
Set the source frame info to be used.
Default behaviour sets the srcFrameWidth and srcFrameHeight variables and recalculates the frame buffer size in bytes then returns true if the size was calculated correctly.
Returns false if the colour formats do not agree.
info | New info for frame |
|
virtual |
Set the source frame size to be used.
Default behaviour sets the srcFrameWidth and srcFrameHeight variables and recalculates the frame buffer size in bytes then returns true if the size was calculated correctly.
width | New width of frame |
height | New height of frame |
|
inline |
Set the video conversion vertical flip state.
vFlipState | New state for flipping images |
References m_verticalFlip.
|
static |
Convert YUV to RGB.
|
protected |
Referenced by GetMaxDstFrameBytes().
|
protected |
Referenced by GetDstFrameHeight().
|
protected |
Referenced by GetDstFrameWidth().
|
protected |
|
protected |
Referenced by GetResizeMode(), and SetResizeMode().
|
protected |
Referenced by GetMaxSrcFrameBytes(), and SetSrcFrameBytes().
|
protected |
Referenced by GetSrcFrameHeight().
|
protected |
Referenced by GetSrcFrameWidth().
|
protected |
Referenced by GetVFlipState(), and SetVFlipState().