128 lines · 4.2 KB · C++
RawDownload
/*! * \copy *     Copyright (c)  2009-2013, Cisco Systems *     All rights reserved. * *     Redistribution and use in source and binary forms, with or without *     modification, are permitted provided that the following conditions *     are met: * *        * Redistributions of source code must retain the above copyright *          notice, this list of conditions and the following disclaimer. * *        * Redistributions in binary form must reproduce the above copyright *          notice, this list of conditions and the following disclaimer in *          the documentation and/or other materials provided with the *          distribution. * *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS *     "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT *     LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS *     FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE *     COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, *     INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, *     BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER *     CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT *     LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN *     ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE *     POSSIBILITY OF SUCH DAMAGE. * * * \file	utils.c * * \brief	common tool/function utilization * * \date	03/10/2009 Created * ************************************************************************************* */#include "utils.h"#include "crt_util_safe_x.h"	// Safe CRT routines like utils for cross platforms float WelsCalcPsnr (const void* kpTarPic,                    const int32_t kiTarStride,                    const void* kpRefPic,                    const int32_t kiRefStride,                    const int32_t kiWidth,                    const int32_t kiHeight);  static PWelsLogCallbackFunc	wlog; /*! ************************************************************************************* * \brief	set log callback from external call * * \param	_log	log function routine * * \return	NONE * * \note	N/A ************************************************************************************* */void WelsSetLogCallback (PWelsLogCallbackFunc _log) {  wlog	= _log;} void WelsLogCall (void* pCtx, int32_t iLevel, const char* kpFmt, va_list vl) {  wlog (pCtx, iLevel, kpFmt, vl);} void WelsLog (void* pCtx, int32_t iLevel, const char* kpFmt, ...) {  va_list vl;  va_start (vl, kpFmt);  WelsLogCall (pCtx, iLevel, kpFmt, vl);  va_end (vl);} #ifndef CALC_PSNR#define CONST_FACTOR_PSNR	(10.0 / log(10.0))	// for good computation#define CALC_PSNR(w, h, s)	((float)(CONST_FACTOR_PSNR * log( 65025.0 * w * h / iSqe )))#endif//CALC_PSNR /* *	PSNR calculation routines *//*! ************************************************************************************* * \brief	PSNR calculation utilization in Wels * * \param	pTarPic		target picture to be calculated in Picture pData format * \param	iTarStride	stride of target picture pData pBuffer * \param 	pRefPic		base referencing picture samples * \param	iRefStride	stride of reference picture pData pBuffer * \param	iWidth		picture iWidth in pixel * \param	iHeight		picture iHeight in pixel * * \return	actual PSNR result; * * \note	N/A ************************************************************************************* */float WelsCalcPsnr (const void* kpTarPic,                    const int32_t kiTarStride,                    const void* kpRefPic,                    const int32_t kiRefStride,                    const int32_t kiWidth,                    const int32_t kiHeight) {  int64_t	iSqe = 0;  int32_t x, y;  uint8_t* pTar = (uint8_t*)kpTarPic;  uint8_t* pRef = (uint8_t*)kpRefPic;   if (NULL == pTar || NULL == pRef)    return (-1.0f);   for (y = 0; y < kiHeight; ++ y) {	// OPTable !!    for (x = 0; x < kiWidth; ++ x) {      const int32_t kiT = pTar[y * kiTarStride + x] - pRef[y * kiRefStride + x];      iSqe	+= kiT * kiT;    }  }  if (0 == iSqe) {    return (99.99f);  }  return CALC_PSNR (kiWidth, kiHeight, iSqe);} 

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t