[Opalvoip-svn] SF.net SVN: opalvoip:[34705] opal/trunk
Brought to you by:
csoutheren,
rjongbloed
From: <rjo...@us...> - 2016-03-21 12:13:09
|
Revision: 34705 http://sourceforge.net/p/opalvoip/code/34705 Author: rjongbloed Date: 2016-03-21 12:13:06 +0000 (Mon, 21 Mar 2016) Log Message: ----------- Remove hard coded YUV420P buffer size calculations and sse PVideoFrameInfo::CalculateFrameBytes() which deals correctly with odd width/height . Modified Paths: -------------- opal/trunk/include/codec/opalplugin.h opal/trunk/samples/codectest/main.cxx opal/trunk/samples/playrtp/main.cxx opal/trunk/src/codec/opalpluginmgr.cxx opal/trunk/src/ep/opalmixer.cxx opal/trunk/src/opal/recording.cxx Modified: opal/trunk/include/codec/opalplugin.h =================================================================== --- opal/trunk/include/codec/opalplugin.h 2016-03-21 12:10:22 UTC (rev 34704) +++ opal/trunk/include/codec/opalplugin.h 2016-03-21 12:13:06 UTC (rev 34705) @@ -914,8 +914,8 @@ #ifdef __cplusplus }; -inline unsigned char * OPAL_VIDEO_FRAME_DATA_PTR(struct PluginCodec_Video_FrameHeader * base) -{ return (((unsigned char *)base) + sizeof(PluginCodec_Video_FrameHeader)); } +inline size_t OPAL_VIDEO_FRAME_DATA_SIZE(const PluginCodec_Video_FrameHeader * base) +{ return ((base->width-base->x+1)&~1) * ((base->height-base->y+1)&~1) + sizeof(PluginCodec_Video_FrameHeader); } inline unsigned char * OPAL_VIDEO_FRAME_DATA_PTR(const PluginCodec_Video_FrameHeader * base) { return (((unsigned char *)base) + sizeof(PluginCodec_Video_FrameHeader)); } Modified: opal/trunk/samples/codectest/main.cxx =================================================================== --- opal/trunk/samples/codectest/main.cxx 2016-03-21 12:10:22 UTC (rev 34704) +++ opal/trunk/samples/codectest/main.cxx 2016-03-21 12:13:06 UTC (rev 34705) @@ -1278,7 +1278,7 @@ frame->x = frame->y = 0; frame->width = width; frame->height = height; - data.SetPayloadSize(sizeof(OpalVideoTranscoder::FrameHeader) + width*height*3/2); + data.SetPayloadSize(OPAL_VIDEO_FRAME_DATA_SIZE(frame)); return m_grabber->GetFrameData(OPAL_VIDEO_FRAME_DATA_PTR(frame)); } Modified: opal/trunk/samples/playrtp/main.cxx =================================================================== --- opal/trunk/samples/playrtp/main.cxx 2016-03-21 12:10:22 UTC (rev 34704) +++ opal/trunk/samples/playrtp/main.cxx 2016-03-21 12:13:06 UTC (rev 34705) @@ -637,7 +637,7 @@ else { int extendedHeight = frame->height + m_extraHeight; extendedData.CopyHeader(data); - extendedData.SetPayloadSize(sizeof(OpalVideoTranscoder::FrameHeader) + (frame->width * extendedHeight * 3 / 2)); + extendedData.SetPayloadSize(sizeof(OpalVideoTranscoder::FrameHeader) + PVideoFrameInfo::CalculateFrameBytes(frame->width, extendedHeight))); OpalVideoTranscoder::FrameHeader * extendedFrame = (OpalVideoTranscoder::FrameHeader *)extendedData.GetPayloadPtr(); *extendedFrame = *frame; extendedFrame->height = extendedHeight; Modified: opal/trunk/src/codec/opalpluginmgr.cxx =================================================================== --- opal/trunk/src/codec/opalpluginmgr.cxx 2016-03-21 12:10:22 UTC (rev 34704) +++ opal/trunk/src/codec/opalpluginmgr.cxx 2016-03-21 12:13:06 UTC (rev 34705) @@ -1192,7 +1192,7 @@ return false; } - if (payloadSize < sizeof(OpalVideoTranscoder::FrameHeader)+videoHeader->width*videoHeader->height*3/2) { + if (payloadSize < OPAL_VIDEO_FRAME_DATA_SIZE(videoHeader)) { PTRACE(1, "OpalPlugin\tInvalid video frame size, error in plug in\n" << *m_bufferRTP); return false; } Modified: opal/trunk/src/ep/opalmixer.cxx =================================================================== --- opal/trunk/src/ep/opalmixer.cxx 2016-03-21 12:10:22 UTC (rev 34704) +++ opal/trunk/src/ep/opalmixer.cxx 2016-03-21 12:13:06 UTC (rev 34705) @@ -577,7 +577,7 @@ m_width = width; m_height = height; PColourConverter::FillYUV420P(0, 0, m_width, m_height, m_width, m_height, - m_frameStore.GetPointer(m_width*m_height*3/2), + m_frameStore.GetPointer(PVideoFrameInfo::CalculateFrameBytes(m_width, m_height)), m_bgFillRed, m_bgFillGreen, m_bgFillBlue); m_mutex.Signal(); @@ -1982,7 +1982,7 @@ PTRACE(5, "Scaling video frame: " << header->width << 'x' << header->height << " to " << width << 'x' << height); rawRTP = &cachedFrameStore[frameStoreKey]; rawRTP->CopyHeader(*output); - rawRTP->SetPayloadSize(width*height*3/2+sizeof(OpalVideoTranscoder::FrameHeader)); + rawRTP->SetPayloadSize(PVideoFrameInfo::CalculateFrameBytes(width, height)+sizeof(OpalVideoTranscoder::FrameHeader)); OpalVideoTranscoder::FrameHeader * resized = (OpalVideoTranscoder::FrameHeader *)rawRTP->GetPayloadPtr(); resized->width = width; resized->height = height; Modified: opal/trunk/src/opal/recording.cxx =================================================================== --- opal/trunk/src/opal/recording.cxx 2016-03-21 12:10:22 UTC (rev 34704) +++ opal/trunk/src/opal/recording.cxx 2016-03-21 12:13:06 UTC (rev 34705) @@ -689,7 +689,7 @@ return false; } - PINDEX bytesReturned = m_options.m_videoWidth*m_options.m_videoHeight*3/2; + PINDEX bytesReturned = PVideoFrameInfo::CalculateFrameBytes(m_options.m_videoWidth, m_options.m_videoHeight); if (m_videoConverter != NULL && !m_videoConverter->Convert(OPAL_VIDEO_FRAME_DATA_PTR(header), m_videoBuffer.GetPointer(), &bytesReturned)) { PTRACE(2, "Conversion of YUV420P to RGB24 failed!"); return false; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |