--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/khronosfws/openmax_al/src/mediaplayer/xaprefetchstatusitf.c Fri Apr 16 15:29:42 2010 +0300
@@ -0,0 +1,276 @@
+/*
+* 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 "xaprefetchstatusitf.h"
+#ifdef _GSTREAMER_BACKEND_
+#include "XAAdaptationContextBase.h"
+#endif
+
+static XAPrefetchStatusItfImpl* GetImpl(XAPrefetchStatusItf self)
+{
+ if(self)
+ {
+ XAPrefetchStatusItfImpl* impl = (XAPrefetchStatusItfImpl*)(*self);
+ if(impl && impl == impl->self)
+ {
+ return impl;
+ }
+ }
+ return NULL;
+}
+
+XAresult XAPrefetchStatusItfImpl_GetPrefetchStatus(XAPrefetchStatusItf self,
+ XAuint32 *pStatus)
+{
+ XAresult ret = XA_RESULT_SUCCESS;
+ XAPrefetchStatusItfImpl *impl = GetImpl(self);
+ DEBUG_API("->XAPrefetchStatusItfImpl_GetPrefetchStatus");
+
+ if(!impl || !pStatus )
+ {
+ /* invalid parameter */
+ DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
+ DEBUG_API("<-XAPrefetchStatusItfImpl_GetPrefetchStatus");
+ return XA_RESULT_PARAMETER_INVALID;
+ }
+
+ *pStatus = impl->pStatus;
+
+ DEBUG_API("<-XAPrefetchStatusItfImpl_GetPrefetchStatus");
+ return ret;
+}
+
+XAresult XAPrefetchStatusItfImpl_GetFillLevel(XAPrefetchStatusItf self,
+ XApermille *pLevel)
+{
+ XAresult ret = XA_RESULT_SUCCESS;
+ XAPrefetchStatusItfImpl *impl = GetImpl(self);
+ DEBUG_API("->XAPrefetchStatusItfImpl_GetFillLevel");
+
+ if(!impl || !pLevel)
+ {
+ /* invalid parameter */
+ DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
+ DEBUG_API("<-XAPrefetchStatusItfImpl_GetFillLevel");
+ return XA_RESULT_PARAMETER_INVALID;
+ }
+
+ *pLevel = impl->pLevel;
+
+ DEBUG_API("<-XAPrefetchStatusItfImpl_GetFillLevel");
+ return ret;
+}
+
+XAresult XAPrefetchStatusItfImpl_RegisterCallback(XAPrefetchStatusItf self,
+ xaPrefetchCallback callback,
+ void *pContext)
+{
+ XAresult ret = XA_RESULT_SUCCESS;
+ XAPrefetchStatusItfImpl *impl = GetImpl(self);
+ DEBUG_API("->XAPrefetchStatusItfImpl_RegisterCallback");
+
+ if(!impl)
+ {
+ /* invalid parameter */
+ DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
+ DEBUG_API("<-XAPrefetchStatusItfImpl_RegisterCallback");
+ return XA_RESULT_PARAMETER_INVALID;
+ }
+
+ /* Can be null to reset callback */
+ impl->callback = callback;
+ impl->cbcontext = pContext;
+ impl->cbPtrToSelf = self;
+
+ DEBUG_API("<-XAPrefetchStatusItfImpl_RegisterCallback");
+ return ret;
+}
+
+XAresult XAPrefetchStatusItfImpl_SetCallbackEventsMask(XAPrefetchStatusItf self,
+ XAuint32 eventFlags)
+{
+ XAresult ret = XA_RESULT_SUCCESS;
+ XAPrefetchStatusItfImpl *impl = GetImpl(self);
+ DEBUG_API("->XAPrefetchStatusItfImpl_SetCallbackEventsMask");
+
+ if(!impl )
+ {
+ /* invalid parameter */
+ DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
+ DEBUG_API("<-XAPrefetchStatusItfImpl_SetCallbackEventsMask");
+ return XA_RESULT_PARAMETER_INVALID;
+ }
+
+ impl->eventFlags = eventFlags;
+
+ DEBUG_API("<-XAPrefetchStatusItfImpl_SetCallbackEventsMask");
+ return ret;
+}
+
+XAresult XAPrefetchStatusItfImpl_GetCallbackEventsMask(XAPrefetchStatusItf self,
+ XAuint32 *pEventFlags)
+{
+ XAresult ret = XA_RESULT_SUCCESS;
+ XAPrefetchStatusItfImpl *impl = GetImpl(self);
+ DEBUG_API("->XAPrefetchStatusItfImpl_GetCallbackEventsMask");
+
+ if(!impl || !pEventFlags)
+ {
+ /* invalid parameter */
+ DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
+ DEBUG_API("<-XAPrefetchStatusItfImpl_GetCallbackEventsMask");
+ return XA_RESULT_PARAMETER_INVALID;
+ }
+
+ *pEventFlags = impl->eventFlags;
+
+ DEBUG_API("<-XAPrefetchStatusItfImpl_GetCallbackEventsMask");
+ return ret;
+}
+
+XAresult XAPrefetchStatusItfImpl_SetFillUpdatePeriod(XAPrefetchStatusItf self,
+ XApermille period)
+{
+ XAresult ret = XA_RESULT_SUCCESS;
+ XAPrefetchStatusItfImpl *impl = GetImpl(self);
+ DEBUG_API("->XAPrefetchStatusItfImpl_SetFillUpdatePeriod");
+
+ if(!impl || period == 0 || period > 1000 )
+ {
+ /* invalid parameter */
+ DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
+ DEBUG_API("<-XAPrefetchStatusItfImpl_SetFillUpdatePeriod");
+ return XA_RESULT_PARAMETER_INVALID;
+ }
+
+ impl->fillUpdatePeriod = period;
+
+ DEBUG_API("<-XAPrefetchStatusItfImpl_SetFillUpdatePeriod");
+ return ret;
+}
+
+XAresult XAPrefetchStatusItfImpl_GetFillUpdatePeriod(XAPrefetchStatusItf self,
+ XApermille *pPeriod)
+{
+ XAresult ret = XA_RESULT_SUCCESS;
+ XAPrefetchStatusItfImpl *impl = GetImpl(self);
+ DEBUG_API("->XAPrefetchStatusItfImpl_GetFillUpdatePeriod");
+
+ if(!impl || !pPeriod)
+ {
+ /* invalid parameter */
+ DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
+ DEBUG_API("<-XAPrefetchStatusItfImpl_GetFillUpdatePeriod");
+ return XA_RESULT_PARAMETER_INVALID;
+ }
+
+ *pPeriod = impl->fillUpdatePeriod;
+
+ DEBUG_API("<-XAPrefetchStatusItfImpl_GetFillUpdatePeriod");
+ return ret;
+}
+
+#ifdef _GSTREAMER_BACKEND_
+
+/*
+ * implementation-specific methods
+ */
+XAPrefetchStatusItfImpl* XAPrefetchStatusItfImpl_Create( XAAdaptationBaseCtx* adaptationCtx )
+{
+ XAPrefetchStatusItfImpl *self = (XAPrefetchStatusItfImpl*)
+ calloc(1,sizeof(XAPrefetchStatusItfImpl));
+ DEBUG_API("->XAPrefetchStatusItfImpl_Create");
+
+ if(self)
+ {
+ /* init itf default implementation */
+ self->itf.GetCallbackEventsMask = XAPrefetchStatusItfImpl_GetCallbackEventsMask;
+ self->itf.GetFillLevel = XAPrefetchStatusItfImpl_GetFillLevel;
+ self->itf.GetFillUpdatePeriod = XAPrefetchStatusItfImpl_GetFillUpdatePeriod;
+ self->itf.GetPrefetchStatus = XAPrefetchStatusItfImpl_GetPrefetchStatus;
+ self->itf.RegisterCallback = XAPrefetchStatusItfImpl_RegisterCallback;
+ self->itf.SetCallbackEventsMask = XAPrefetchStatusItfImpl_SetCallbackEventsMask;
+ self->itf.SetFillUpdatePeriod = XAPrefetchStatusItfImpl_SetFillUpdatePeriod;
+
+ self->callback = NULL;
+ self->cbcontext = NULL;
+ self->eventFlags = 0;
+ self->fillUpdatePeriod = PREFETCHSTATUSITF_DEFAULT_UPDATE_PERIOD;
+ self->pStatus = XA_PREFETCHSTATUS_SUFFICIENTDATA;
+ self->adaptationCtx = adaptationCtx;
+ self->cbPtrToSelf = NULL;
+
+ XAAdaptationBase_AddEventHandler( adaptationCtx, &XAPrefetchStatusItfImpl_AdaptCb, XA_PREFETCHITFEVENTS, self );
+
+ self->self = self;
+ }
+
+ DEBUG_API("<-XAPrefetchStatusItfImpl_Create");
+ return self;
+}
+#endif
+
+void XAPrefetchStatusItfImpl_Free(XAPrefetchStatusItfImpl* self)
+{
+ DEBUG_API("->XAPrefetchStatusItfImpl_Free");
+ assert(self==self->self);
+#ifdef _GSTREAMER_BACKEND_
+ XAAdaptationBase_RemoveEventHandler( (XAAdaptationBaseCtx*)self->adaptationCtx, &XAPrefetchStatusItfImpl_AdaptCb );
+#endif
+ free(self);
+ DEBUG_API("<-XAPrefetchStatusItfImpl_Free");
+}
+
+#ifdef _GSTREAMER_BACKEND_
+
+/* void XAPrefetchStatusItfImpl_AdaptCb
+ * Description: Listen changes in adaptation
+ */
+void XAPrefetchStatusItfImpl_AdaptCb( void *pHandlerCtx, XAAdaptEvent *event )
+{
+ XAPrefetchStatusItfImpl* impl = (XAPrefetchStatusItfImpl*)pHandlerCtx;
+ DEBUG_API("->XAPrefetchStatusItfImpl_AdaptCb");
+ if(!impl)
+ {
+ DEBUG_ERR("XAPrefetchStatusItfImpl_AdaptCb, invalid context pointer!");
+ DEBUG_API("<-XAPrefetchStatusItfImpl_AdaptCb");
+ return;
+ }
+ assert(event);
+ if( event->eventid == XA_ADAPT_BUFFERING )
+ {
+ /* Adaptation sends percents convert it to permille */
+ impl->fillUpdatePeriod = ((*(XAint32*)(event->data))*10);
+
+ /*Check do we have to send event */
+ if( impl->callback && impl->eventFlags & XA_PREFETCHEVENT_FILLLEVELCHANGE )
+ {
+ if ( (*(XAint32*)event->data) > impl->fillUpdatePeriod / 10 )
+ {
+ impl->callback(impl->cbPtrToSelf, impl->cbcontext, XA_PREFETCHEVENT_FILLLEVELCHANGE);
+ }
+ }
+ }
+
+ DEBUG_API("<-XAPrefetchStatusItfImpl_AdaptCb");
+}
+#endif
+