khronosfws/openmax_al/src/common/xaimagecontrolsitf.c
changeset 12 5a06f39ad45b
child 16 43d09473c595
--- /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 <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#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");
+}