diff -r 71ca22bcf22a -r 5a06f39ad45b khronosfws/openmax_al/src/common/xaimagecontrolsitf.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/khronosfws/openmax_al/src/common/xaimagecontrolsitf.c Fri Apr 16 15:29:42 2010 +0300 @@ -0,0 +1,358 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include +#include +#include +#include "xaimagecontrolsitf.h" +#ifdef _GSTREAMER_BACKEND_ +#include "XAImageControlsItfAdaptation.h" +#endif +/** + * XAImageControlsItfImpl* GetImpl(XAVolumeItf self) + * Description: Validated interface pointer and cast it to implementations pointer. + **/ +static XAImageControlsItfImpl* GetImpl(XAImageControlsItf self) +{ + if(self) + { + XAImageControlsItfImpl* impl = (XAImageControlsItfImpl*)(*self); + if(impl && (impl == impl->self)) + { + return impl; + } + } + return NULL; +} + +/** + * Base interface XAImageControlsItf implementation + */ + +/** + * XAresult XAImageControlsItfImpl_SetBrightness(XAImageControlsItf self, + * XAuint32 brightness) + * Description: Sets the brightness level. + **/ +XAresult XAImageControlsItfImpl_SetBrightness(XAImageControlsItf self, + XAuint32 brightness) +{ + XAresult ret = XA_RESULT_SUCCESS; + XAImageControlsItfImpl* impl = GetImpl(self); + DEBUG_API("->XAImageControlsItfImpl_SetBrightness"); + + if(!impl || brightness > MAX_BRIGHTNESS_VALUE) + { + DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); + /* invalid parameter */ + DEBUG_API("<-XAImageControlsItfImpl_SetBrightness"); + return XA_RESULT_PARAMETER_INVALID; + } + +#ifdef _GSTREAMER_BACKEND_ + ret = XAImageControlsItfAdapt_ThreadEntry(impl->adapCtx); + if( ret == XA_RESULT_PARAMETER_INVALID || ret == XA_RESULT_PRECONDITIONS_VIOLATED ) + { + DEBUG_API("<-XAImageControlsItfImpl_SetBrightness"); + return ret; + } + ret = XAImageControlsItfAdapt_SetBrightness(impl->adapCtx, brightness); + + if(ret == XA_RESULT_SUCCESS) + { + impl->brightness = brightness; + } + + XAImageControlsItfAdapt_ThreadExit(impl->adapCtx); +#endif + DEBUG_API("<-XAImageControlsItfImpl_SetBrightness"); + return ret; +} + +/** + * XAresult XAImageControlsItfImpl_SetBrightness(XAImageControlsItf self, + * XAuint32 *pBrightness) + * Description: Gets the current brightness level. + **/ +XAresult XAImageControlsItfImpl_GetBrightness(XAImageControlsItf self, + XAuint32 *pBrightness) +{ + XAresult ret = XA_RESULT_SUCCESS; + XAImageControlsItfImpl* impl = GetImpl(self); + DEBUG_API("->XAImageControlsItfImpl_GetBrightness"); + + if(!impl || !pBrightness) + { + DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); + /* invalid parameter */ + DEBUG_API("<-XAImageControlsItfImpl_GetBrightness"); + return XA_RESULT_PARAMETER_INVALID; + } + + *pBrightness = impl->brightness; + + DEBUG_API("<-XAImageControlsItfImpl_GetBrightness"); + return ret; +} + +/** + * XAresult XAImageControlsItfImpl_SetContrast(XAImageControlsItf self, + * XAint32 contrast) + * Description: Sets the contrast level. + **/ +XAresult XAImageControlsItfImpl_SetContrast(XAImageControlsItf self, + XAint32 contrast) +{ + XAresult ret = XA_RESULT_SUCCESS; + XAImageControlsItfImpl* impl = GetImpl(self); + DEBUG_API("->XAImageControlsItfImpl_SetContrast"); + + if(!impl || (contrast < MIN_CONTRAST_VALUE || contrast > MAX_CONTRAST_VALUE)) + { + DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); + /* invalid parameter */ + DEBUG_API("<-XAImageControlsItfImpl_SetContrast"); + return XA_RESULT_PARAMETER_INVALID; + } + +#ifdef _GSTREAMER_BACKEND_ + ret = XAImageControlsItfAdapt_ThreadEntry(impl->adapCtx); + if( ret == XA_RESULT_PARAMETER_INVALID || ret == XA_RESULT_PRECONDITIONS_VIOLATED) + { + DEBUG_API("<-XAImageControlsItfImpl_SetContrast"); + return ret; + } + ret = XAImageControlsItfAdapt_SetContrast(impl->adapCtx, contrast); + + if(ret == XA_RESULT_SUCCESS) + { + impl->contrast = contrast; + } + + XAImageControlsItfAdapt_ThreadExit(impl->adapCtx); +#endif + DEBUG_API("<-XAImageControlsItfImpl_SetContrast"); + return ret; +} + +/** + * XAresult XAImageControlsItfImpl_GetContrast(XAImageControlsItf self, + * XAint32 *pContrast) + * Description: Gets the contrast level. + **/ +XAresult XAImageControlsItfImpl_GetContrast(XAImageControlsItf self, + XAint32 *pContrast) +{ + XAresult ret = XA_RESULT_SUCCESS; + XAImageControlsItfImpl* impl = GetImpl(self); + DEBUG_API("->XAImageControlsItfImpl_GetContrast"); + + if(!impl || !pContrast) + { + DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); + /* invalid parameter */ + DEBUG_API("<-XAImageControlsItfImpl_GetContrast"); + return XA_RESULT_PARAMETER_INVALID; + } + + *pContrast = impl->contrast; + + DEBUG_API("<-XAImageControlsItfImpl_GetContrast"); + return ret; +} + +/** + * XAresult XAImageControlsItfImpl_SetGamma(XAImageControlsItf self, + * XApermille gamma) + * Description: Sets the gamma level. + **/ +XAresult XAImageControlsItfImpl_SetGamma(XAImageControlsItf self, + XApermille gamma) +{ + XAresult ret = XA_RESULT_SUCCESS; + XAImageControlsItfImpl* impl = GetImpl(self); + XApermille minGammaValue = 0; + XApermille maxGammaValue = 0; + XAuint32 numSettings = 0; + DEBUG_API("->XAImageControlsItfImpl_SetGamma"); + + /* check supported min and max gamma levels */ + ret = XAImageControlsItfImpl_GetSupportedGammaSettings(self, &minGammaValue, + &maxGammaValue, &numSettings, NULL); + + if(!impl || (gamma < minGammaValue || gamma > maxGammaValue) || + ret != XA_RESULT_SUCCESS) + { + DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); + /* invalid parameter */ + DEBUG_API("<-XAImageControlsItfImpl_SetGamma"); + return XA_RESULT_PARAMETER_INVALID; + } + +#ifdef _GSTREAMER_BACKEND_ + ret = XAImageControlsItfAdapt_ThreadEntry(impl->adapCtx); + if( ret == XA_RESULT_PARAMETER_INVALID || ret == XA_RESULT_PRECONDITIONS_VIOLATED ) + { + DEBUG_API("<-XAImageControlsItfImpl_SetGamma"); + return ret; + } + ret = XAImageControlsItfAdapt_SetGamma(impl->adapCtx, gamma); + + if(ret == XA_RESULT_SUCCESS) + { + impl->gamma = gamma; + } + + XAImageControlsItfAdapt_ThreadExit(impl->adapCtx); +#endif + DEBUG_API("<-XAImageControlsItfImpl_SetGamma"); + return ret; +} + +/** + * XAresult XAImageControlsItfImpl_GetGamma(XAImageControlsItf self, + * XApermille *pGamma) + * Description: Gets the gamma level. + **/ +XAresult XAImageControlsItfImpl_GetGamma(XAImageControlsItf self, + XApermille *pGamma) +{ + XAresult ret = XA_RESULT_SUCCESS; + XAImageControlsItfImpl* impl = GetImpl(self); + DEBUG_API("->XAImageControlsItfImpl_GetGamma"); + + if(!impl || !pGamma) + { + DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); + /* invalid parameter */ + DEBUG_API("<-XAImageControlsItfImpl_GetGamma"); + return XA_RESULT_PARAMETER_INVALID; + } + + *pGamma = impl->gamma; + + DEBUG_API("<-XAImageControlsItfImpl_GetGamma"); + return ret; +} + +/** + * XAresult XAImageControlsItfImpl_GetSupportedGammaSettings(XAImageControlsItf self, + * XApermille *pMinValue, + * XApermille *pMaxValue, + * XAuint32 *pNumSettings, + * XApermille **ppSettings) + * Description: This method gets the supported gamma settings. + **/ +XAresult XAImageControlsItfImpl_GetSupportedGammaSettings(XAImageControlsItf self, + XApermille *pMinValue, + XApermille *pMaxValue, + XAuint32 *pNumSettings, + XApermille **ppSettings) +{ + XAresult ret = XA_RESULT_SUCCESS; + XAImageControlsItfImpl* impl = GetImpl(self); + DEBUG_API("->XAImageControlsItfImpl_GetSupportedGammaSettings"); + + if(!impl || !pMinValue || !pMaxValue || !pNumSettings) + { + DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); + /* invalid parameter */ + DEBUG_API("<-XAImageControlsItfImpl_GetSupportedGammaSettings"); + return XA_RESULT_PARAMETER_INVALID; + } + +#ifdef _GSTREAMER_BACKEND_ + ret = XAImageControlsItfAdapt_ThreadEntry(impl->adapCtx); + if( ret == XA_RESULT_PARAMETER_INVALID || ret == XA_RESULT_PRECONDITIONS_VIOLATED ) + { + DEBUG_API("<-XAImageControlsItfImpl_GetSupportedGammaSettings"); + return ret; + } + /* if ppSettings is non-null and non-continuos from min and max gamma value is + * supported then pnunSettings is length of the ppSettings array. Else + * pNumSettings returns the number of supported gamma settings. */ + if( ppSettings && pNumSettings != 0 ) + { + /* solve array of supported gamma settings */ + ret = XAImageControlsItfAdapt_GetSupportedGammaSettings(impl->adapCtx, + pMinValue, pMaxValue, + pNumSettings, ppSettings); + } + else + { + /* Solve min and max values and numSettings */ + ret = XAImageControlsItfAdapt_GetSupportedGammaSettings(impl->adapCtx, + pMinValue, pMaxValue, + pNumSettings, NULL); + } + + XAImageControlsItfAdapt_ThreadExit(impl->adapCtx); +#endif + DEBUG_API("<-XAImageControlsItfImpl_GetSupportedGammaSettings"); + return ret; +} + +/** + * XAImageControlsItfImpl -specific methods + **/ +#ifdef _GSTREAMER_BACKEND_ + +/** + * XAImageControlsItfImplImpl* XAImageControlsItfImpl_Create() + * @return XAImageControlsItfImplImpl* - Pointer to ImageControlsItf interface implementation + **/ +XAImageControlsItfImpl* XAImageControlsItfImpl_Create(XAAdaptationBaseCtx *adapCtx) +{ + XAImageControlsItfImpl* self = (XAImageControlsItfImpl*) + calloc(1,sizeof(XAImageControlsItfImpl)); + DEBUG_API("->XAImageControlsItfImpl_Create"); + + if(self) + { + /* init itf default implementation */ + self->itf.GetBrightness = XAImageControlsItfImpl_GetBrightness; + self->itf.GetContrast = XAImageControlsItfImpl_GetContrast; + self->itf.GetGamma = XAImageControlsItfImpl_GetGamma; + self->itf.GetSupportedGammaSettings = XAImageControlsItfImpl_GetSupportedGammaSettings; + self->itf.SetBrightness = XAImageControlsItfImpl_SetBrightness; + self->itf.SetContrast = XAImageControlsItfImpl_SetContrast; + self->itf.SetGamma = XAImageControlsItfImpl_SetGamma; + + /* init variables */ + self->brightness = DEFAULT_BRIGHTNESS_VALUE; + self->contrast = DEFAULT_CONTRAST_VALUE; + self->gamma = DEFAULT_GAMMA_VALUE; + + self->adapCtx = adapCtx; + + self->self = self; + } + DEBUG_API("<-XAImageControlsItfImpl_Create"); + return self; +} +#endif +/** + * void XAImageControlsItfImpl_Free(XAImageControlsItfImpl* self) + * @param XAImageControlsItfImpl* self - + **/ +void XAImageControlsItfImpl_Free(XAImageControlsItfImpl* self) +{ + DEBUG_API("->XAImageControlsItfImpl_Free"); + assert(self==self->self); + free(self); + DEBUG_API("<-XAImageControlsItfImpl_Free"); +}