[Opalvoip-svn] SF.net SVN: opalvoip:[27721] ptlib/trunk
Brought to you by:
csoutheren,
rjongbloed
From: <rjo...@us...> - 2012-05-28 01:58:27
|
Revision: 27721 http://opalvoip.svn.sourceforge.net/opalvoip/?rev=27721&view=rev Author: rjongbloed Date: 2012-05-28 01:58:20 +0000 (Mon, 28 May 2012) Log Message: ----------- Applied modified patch ID: 3529720 "Return video device information from the converter", thanks Karl Schwerdt & Denis Loh Modified Paths: -------------- ptlib/trunk/include/ptlib/videoio.h ptlib/trunk/src/ptlib/common/videoio.cxx Modified: ptlib/trunk/include/ptlib/videoio.h =================================================================== --- ptlib/trunk/include/ptlib/videoio.h 2012-05-27 11:12:32 UTC (rev 27720) +++ ptlib/trunk/include/ptlib/videoio.h 2012-05-28 01:58:20 UTC (rev 27721) @@ -571,7 +571,7 @@ this function will fail. See SetFrameSizeConverter(). Default behaviour sets the frameWidth and frameHeight variables and - returns true. + then sets the converter sizes. */ virtual PBoolean SetFrameSize( unsigned width, ///< New width of frame @@ -579,19 +579,29 @@ ); /**Get the frame size being used. - - Default behaviour returns the value of the frameWidth and frameHeight - variable and returns true. + If a converter exists, the destination frame size of the converter + is returned, not the underlying physical device. If you wish the + physical device frame size use PVideoFrameInfo::GetFrameSize(). */ virtual PBoolean GetFrameSize( unsigned & width, unsigned & height ) const; + /**Get the colour format being used. + If a converter exists, the destination colour format of the converter + is returned, not the underlying physical device. If you wish the + physical device colout format use PVideoFrameInfo::GetColourFormat(). + */ + virtual const PString& GetColourFormat() const; + /**Get the maximum frame size in bytes. + This gets the maximum of the physical device or the converted frame + size and colour format. It is guranteed to be enought memory space for + any video grab or output. - Note a particular device may be able to provide variable length - frames (eg motion JPEG) so will be the maximum size of all frames. + Note, a particular device may be able to provide variable length + frames (eg motion JPEG) so this will be the maximum size of all frames. */ virtual PINDEX GetMaxFrameBytes() = 0; Modified: ptlib/trunk/src/ptlib/common/videoio.cxx =================================================================== --- ptlib/trunk/src/ptlib/common/videoio.cxx 2012-05-27 11:12:32 UTC (rev 27720) +++ ptlib/trunk/src/ptlib/common/videoio.cxx 2012-05-28 01:58:20 UTC (rev 27721) @@ -222,11 +222,12 @@ PBoolean PVideoFrameInfo::SetFrameSize(unsigned width, unsigned height) { - if (width < 8 || height < 8) - return PFalse; + if (!PAssert(width >= 16 && height >= 16 && width < 65536 && height < 65536, PInvalidParameter)) + return false; + frameWidth = width; frameHeight = height; - return PTrue; + return true; } @@ -253,17 +254,18 @@ return h; } + PBoolean PVideoFrameInfo::SetFrameSar(unsigned width, unsigned height) { - if(height == 0 || width == 0) - { - return PFalse; - } + if (!PAssert(width < 65536 && height < 65536, PInvalidParameter)) + return false; + sarWidth = width; sarHeight = height; return PTrue; } + PBoolean PVideoFrameInfo::GetSarSize(unsigned & width, unsigned & height) const { width = sarWidth; @@ -288,8 +290,8 @@ PBoolean PVideoFrameInfo::SetFrameRate(unsigned rate) { - if (rate < 1 || rate > 999) - return PFalse; + if (!PAssert(rate > 0 && rate < 1000, PInvalidParameter)) + return false; frameRate = rate; return PTrue; @@ -842,30 +844,39 @@ unsigned oldHeight = frameHeight; #endif - frameWidth = width; - frameHeight = height; + if (!PVideoFrameInfo::SetFrameSize(width, height)) + return false; - if (converter != NULL) { - if ((!converter->SetSrcFrameSize(width, height)) || - (!converter->SetDstFrameSize(width, height))) { - PTRACE(1, "PVidDev\tSetFrameSize with converter failed with " << width << 'x' << height); - return PFalse; - } + if (converter != NULL && !converter->SetFrameSize(width, height)) { + PTRACE(1, "PVidDev\tSetFrameSize with converter failed with " << width << 'x' << height); + return false; } PTRACE_IF(3, oldWidth != frameWidth || oldHeight != frameHeight, "PVidDev\tSetFrameSize to " << frameWidth << 'x' << frameHeight); - return PTrue; + return true; } PBoolean PVideoDevice::GetFrameSize(unsigned & width, unsigned & height) const { // Channels get very upset at this not returning the output size. - return converter != NULL ? converter->GetDstFrameSize(width, height) : PVideoFrameInfo::GetFrameSize(width, height); + if (converter == NULL) + return PVideoFrameInfo::GetFrameSize(width, height); + return CanCaptureVideo() ? converter->GetDstFrameSize(width, height) + : converter->GetSrcFrameSize(width, height); } +const PString& PVideoDevice::GetColourFormat() const +{ + if (converter == NULL) + return PVideoFrameInfo::GetColourFormat(); + return CanCaptureVideo() ? converter->GetDstColourFormat() + : converter->GetSrcColourFormat(); +} + + PINDEX PVideoDevice::GetMaxFrameBytesConverted(PINDEX rawFrameBytes) const { if (converter == NULL) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |