PTLib  Version 2.10.11
PColourConverter Class Referenceabstract

This class defines a means to convert an image from one colour format to another. More...

#include <vconvert.h>

Inheritance diagram for PColourConverter:
PObject PSynonymColour

Public Member Functions

 PColourConverter (const PString &srcColourFormat, const PString &dstColourFormat, unsigned width, unsigned height)
 Create a new converter. More...
 
 PColourConverter (const PVideoFrameInfo &src, const PVideoFrameInfo &dst)
 
virtual void PrintOn (ostream &strm) const
 Print description of converter. More...
 
PBoolean GetVFlipState ()
 Get the video conversion vertical flip state. More...
 
void SetVFlipState (PBoolean 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)
 
const PStringGetSrcColourFormat ()
 Get the source colour format. More...
 
const PStringGetDstColourFormat ()
 Get the destination colour format. More...
 
PINDEX GetMaxSrcFrameBytes ()
 Get the maximum frame size in bytes for source frames. More...
 
PINDEX GetMaxDstFrameBytes ()
 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 Convert (const BYTE *srcFrameBuffer, BYTE *dstFrameBuffer, unsigned int srcFrameBytes, PINDEX *bytesReturned=NULL)=0
 
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...
 
- Public Member Functions inherited from PObject
virtual ~PObject ()
 
virtual PObjectClone () const
 Create a copy of the class on the heap. More...
 
virtual PINDEX HashFunction () const
 This function yields a hash value required by the PDictionary class. More...
 
virtual Comparison Compare (const PObject &obj) const
 Compare the two objects and return their relative rank. 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 const char * GetClass (unsigned ancestor=0) const
 Get the current dynamic type of the object instance. More...
 
PBoolean IsClass (const char *cls) const
 
virtual PBoolean InternalIsDescendant (const char *clsName) const
 Determine if the dynamic type of the current instance is a descendent of the specified class. More...
 
virtual void ReadFrom (istream &strm)
 Input the contents of the object from the stream. More...
 

Static Public Member Functions

static PColourConverterCreate (const PVideoFrameInfo &src, const PVideoFrameInfo &dst)
 Create an instance of a colour conversion function. More...
 
static PColourConverterCreate (const PString &srcColourFormat, const PString &destColourFormat, unsigned width, unsigned height)
 
static void RGBtoYUV (unsigned r, unsigned g, unsigned b, unsigned &y, unsigned &u, unsigned &v)
 Convert RGB to YUV. More...
 
static void RGBtoYUV (unsigned r, unsigned g, unsigned b, BYTE &y, BYTE &u, BYTE &v)
 
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)
 Copy a section of the source frame to a section of the destination frame with scaling/cropping as required. More...
 
static bool FillYUV420P (unsigned x, unsigned y, int width, int height, unsigned frameWidth, unsigned frameHeight, BYTE *yuv, unsigned r, unsigned g, unsigned b)
 
- Static Public Member Functions inherited from PObject
static Comparison InternalCompareObjectMemoryDirect (const PObject *obj1, const PObject *obj2, PINDEX size)
 Internal function caled from CompareObjectMemoryDirect() More...
 
static const char * Class ()
 Get the name of the class as a C string. More...
 

Protected Member Functions

void Construct (const PVideoFrameInfo &src, const PVideoFrameInfo &dst)
 
- Protected Member Functions inherited from PObject
 PObject ()
 Constructor for PObject, made protected so cannot ever create one on its own. More...
 

Protected Attributes

PString srcColourFormat
 
PString dstColourFormat
 
unsigned srcFrameWidth
 
unsigned srcFrameHeight
 
unsigned srcFrameBytes
 
unsigned dstFrameWidth
 
unsigned dstFrameHeight
 
unsigned dstFrameBytes
 
PVideoFrameInfo::ResizeMode resizeMode
 
PBoolean verticalFlip
 
PBYTEArray intermediateFrameStore
 
struct jdec_private * jdec
 

Additional Inherited Members

- Public Types inherited from PObject
enum  Comparison { LessThan = -1, EqualTo = 0, GreaterThan = 1 }
 Result of the comparison operation performed by the Compare() function. More...
 

Detailed Description

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.

Constructor & Destructor Documentation

§ PColourConverter() [1/2]

PColourConverter::PColourConverter ( const PString srcColourFormat,
const PString dstColourFormat,
unsigned  width,
unsigned  height 
)

Create a new converter.

Parameters
srcColourFormatName of source colour format
dstColourFormatName of destination colour format
widthWidth of frame
heightHeight of frame

§ PColourConverter() [2/2]

PColourConverter::PColourConverter ( const PVideoFrameInfo src,
const PVideoFrameInfo dst 
)
Parameters
srcSource frame info (colour formet, size etc)
dstDestination frame info

Member Function Documentation

§ Construct()

void PColourConverter::Construct ( const PVideoFrameInfo src,
const PVideoFrameInfo dst 
)
protected
Parameters
srcSource frame info (colour formet, size etc)
dstDestination frame info

§ Convert() [1/2]

virtual PBoolean PColourConverter::Convert ( const BYTE *  srcFrameBuffer,
BYTE *  dstFrameBuffer,
PINDEX *  bytesReturned = NULL 
)
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

Parameters
srcFrameBufferFrame store for source pixels
dstFrameBufferFrame store for destination pixels
bytesReturnedBytes written to dstFrameBuffer

Implemented in PSynonymColour.

§ Convert() [2/2]

virtual PBoolean PColourConverter::Convert ( const BYTE *  srcFrameBuffer,
BYTE *  dstFrameBuffer,
unsigned int  srcFrameBytes,
PINDEX *  bytesReturned = NULL 
)
pure virtual
Parameters
srcFrameBufferFrame store for source pixels
dstFrameBufferFrame store for destination pixels
srcFrameBytesBytes used in source frame buffer
bytesReturnedBytes written to dstFrameBuffer

Implemented in PSynonymColour.

§ ConvertInPlace()

virtual PBoolean PColourConverter::ConvertInPlace ( BYTE *  frameBuffer,
PINDEX *  bytesReturned = NULL,
PBoolean  noIntermediateFrame = false 
)
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.

Parameters
frameBufferFrame buffer to translate data
bytesReturnedBytes written to frameBuffer
noIntermediateFrameFlag to use intermediate store

§ CopyYUV420P()

static bool PColourConverter::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 
)
static

Copy a section of the source frame to a section of the destination frame with scaling/cropping as required.

§ Create() [1/2]

static PColourConverter* PColourConverter::Create ( const PVideoFrameInfo src,
const PVideoFrameInfo dst 
)
static

Create an instance of a colour conversion function.

Returns NULL if there is no registered colour converter between the two named formats.

Parameters
srcSource frame info (colour formet, size etc)
dstDestination frame info

§ Create() [2/2]

static PColourConverter* PColourConverter::Create ( const PString srcColourFormat,
const PString destColourFormat,
unsigned  width,
unsigned  height 
)
static

§ FillYUV420P()

static bool PColourConverter::FillYUV420P ( unsigned  x,
unsigned  y,
int  width,
int  height,
unsigned  frameWidth,
unsigned  frameHeight,
BYTE *  yuv,
unsigned  r,
unsigned  g,
unsigned  b 
)
static

§ GetDstColourFormat()

const PString& PColourConverter::GetDstColourFormat ( )
inline

Get the destination colour format.

§ GetDstFrameHeight()

unsigned PColourConverter::GetDstFrameHeight ( ) const
inline

§ GetDstFrameInfo()

virtual void PColourConverter::GetDstFrameInfo ( PVideoFrameInfo info)
virtual

Get the destination frame info to be used.

Parameters
infoNew info for frame

§ GetDstFrameSize()

PBoolean PColourConverter::GetDstFrameSize ( unsigned &  width,
unsigned &  height 
) const

Get the output frame size.

Parameters
widthWidth of destination frame
heightHeight of destination frame

§ GetDstFrameWidth()

unsigned PColourConverter::GetDstFrameWidth ( ) const
inline

§ GetMaxDstFrameBytes()

PINDEX PColourConverter::GetMaxDstFrameBytes ( )
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 PColourConverterRegistration::Create().

§ GetMaxSrcFrameBytes()

PINDEX PColourConverter::GetMaxSrcFrameBytes ( )
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.

§ GetResizeMode()

PVideoFrameInfo::ResizeMode PColourConverter::GetResizeMode ( ) const
inline

Get the resize mode to be used.

§ GetSrcColourFormat()

const PString& PColourConverter::GetSrcColourFormat ( )
inline

Get the source colour format.

§ GetSrcFrameHeight()

unsigned PColourConverter::GetSrcFrameHeight ( ) const
inline

§ GetSrcFrameInfo()

virtual void PColourConverter::GetSrcFrameInfo ( PVideoFrameInfo info)
virtual

Get the source frame info to be used.

Parameters
infoNew info for frame

§ GetSrcFrameSize()

PBoolean PColourConverter::GetSrcFrameSize ( unsigned &  width,
unsigned &  height 
) const

Get the input frame size.

Parameters
widthWidth of source frame
heightHeight of source frame

§ GetSrcFrameWidth()

unsigned PColourConverter::GetSrcFrameWidth ( ) const
inline

§ GetVFlipState()

PBoolean PColourConverter::GetVFlipState ( )
inline

Get the video conversion vertical flip state.

§ PrintOn()

virtual void PColourConverter::PrintOn ( ostream &  strm) const
virtual

Print description of converter.

Reimplemented from PObject.

§ RGBtoYUV() [1/2]

static void PColourConverter::RGBtoYUV ( unsigned  r,
unsigned  g,
unsigned  b,
unsigned &  y,
unsigned &  u,
unsigned &  v 
)
static

Convert RGB to YUV.

§ RGBtoYUV() [2/2]

static void PColourConverter::RGBtoYUV ( unsigned  r,
unsigned  g,
unsigned  b,
BYTE &  y,
BYTE &  u,
BYTE &  v 
)
static

§ SetDstFrameInfo()

virtual PBoolean PColourConverter::SetDstFrameInfo ( const PVideoFrameInfo info)
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.

Parameters
infoNew info for frame

§ SetDstFrameSize() [1/2]

virtual PBoolean PColourConverter::SetDstFrameSize ( unsigned  width,
unsigned  height 
)
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.

Parameters
widthNew width of target frame
heightNew height of target frame

§ SetDstFrameSize() [2/2]

virtual PBoolean PColourConverter::SetDstFrameSize ( unsigned  width,
unsigned  height,
PBoolean  bScale 
)
virtual
Parameters
widthNew width of target frame
heightNew height of target frame
bScaleIndicate if scaling or cropping is to be used

§ SetFrameSize()

virtual PBoolean PColourConverter::SetFrameSize ( unsigned  width,
unsigned  height 
)
virtual

Set the frame size to be used.

Default behaviour calls SetSrcFrameSize() and SetDstFrameSize().

Parameters
widthNew width of frame
heightNew height of frame

§ SetResizeMode()

void PColourConverter::SetResizeMode ( PVideoFrameInfo::ResizeMode  mode)
inline

Set the resize mode to be used.

References PVideoFrameInfo::eMaxResizeMode.

§ SetSrcFrameInfo()

virtual PBoolean PColourConverter::SetSrcFrameInfo ( const PVideoFrameInfo info)
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.

Parameters
infoNew info for frame

§ SetSrcFrameSize()

virtual PBoolean PColourConverter::SetSrcFrameSize ( unsigned  width,
unsigned  height 
)
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.

Parameters
widthNew width of frame
heightNew height of frame

§ SetVFlipState()

void PColourConverter::SetVFlipState ( PBoolean  vFlipState)
inline

Set the video conversion vertical flip state.

Parameters
vFlipStateNew state for flipping images

Member Data Documentation

§ dstColourFormat

PString PColourConverter::dstColourFormat
protected

§ dstFrameBytes

unsigned PColourConverter::dstFrameBytes
protected

§ dstFrameHeight

unsigned PColourConverter::dstFrameHeight
protected

§ dstFrameWidth

unsigned PColourConverter::dstFrameWidth
protected

§ intermediateFrameStore

PBYTEArray PColourConverter::intermediateFrameStore
protected

§ jdec

struct jdec_private* PColourConverter::jdec
protected

§ resizeMode

PVideoFrameInfo::ResizeMode PColourConverter::resizeMode
protected

§ srcColourFormat

PString PColourConverter::srcColourFormat
protected

§ srcFrameBytes

unsigned PColourConverter::srcFrameBytes
protected

§ srcFrameHeight

unsigned PColourConverter::srcFrameHeight
protected

§ srcFrameWidth

unsigned PColourConverter::srcFrameWidth
protected

§ verticalFlip

PBoolean PColourConverter::verticalFlip
protected

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