khronosfws/openmax_al/src/adptcommon/xaadptbasectx.c
changeset 25 6f7ceef7b1d1
parent 19 4a629bc82c5e
child 33 5e8b14bae8c3
equal deleted inserted replaced
21:2ed61feeead6 25:6f7ceef7b1d1
     1 /*
     1 /*
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
     2  * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3 * All rights reserved.
     3  * All rights reserved.
     4 * This component and the accompanying materials are made available
     4  * This component and the accompanying materials are made available
     5 * under the terms of "Eclipse Public License v1.0"
     5  * under the terms of "Eclipse Public License v1.0"
     6 * which accompanies this distribution, and is available
     6  * which accompanies this distribution, and is available
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
     7  * at the URL "http://www.eclipse.org/legal/epl-v10.html".
     8 *
     8  *
     9 * Initial Contributors:
     9  * Initial Contributors:
    10 * Nokia Corporation - initial contribution.
    10  * Nokia Corporation - initial contribution.
    11 *
    11  *
    12 * Contributors:
    12  * Contributors:
    13 *
    13  *
    14 * Description: 
    14  * Description: Base Adaptation Initialization Functionality
    15 *
    15  *
    16 */
    16  */
    17 
    17 
    18 #include <assert.h>
    18 #include <assert.h>
    19 #include <string.h>
    19 #include <string.h>
    20 #include "xaadptbasectx.h"
    20 #include "xaadptbasectx.h"
    21 #include "xathreadsafety.h"
    21 #include "xathreadsafety.h"
    23 /*
    23 /*
    24  * XAAdaptationBaseCtx* XAAdaptationBase_Create()
    24  * XAAdaptationBaseCtx* XAAdaptationBase_Create()
    25  * 1st phase initialization function for Adaptation Base context structure.
    25  * 1st phase initialization function for Adaptation Base context structure.
    26  * Reserves memory for base context and initializes GStreamer FW.
    26  * Reserves memory for base context and initializes GStreamer FW.
    27  */
    27  */
    28 XAresult XAAdaptationBase_Init( XAAdaptationBaseCtx* pSelf, XAuint32 ctxId )
    28 XAresult XAAdaptationBase_Init(XAAdaptationBaseCtx* pSelf, XAuint32 ctxId)
    29 {
    29     {
    30     DEBUG_API("->XAAdaptationBase_Init");
    30     DEBUG_API("->XAAdaptationBase_Init");
    31 
    31 
    32     if ( pSelf )
    32     if (pSelf)
    33     {
    33         {
    34     if(!pSelf->evtHdlrs)
    34         if (!pSelf->evtHdlrs)
    35         {
    35             {
    36         pSelf->evtHdlrs = g_array_new (FALSE, FALSE, sizeof (XAAdaptEvtHdlr));
    36             pSelf->evtHdlrs = g_array_new(FALSE, FALSE,
    37         if(!pSelf->evtHdlrs)
    37                     sizeof(XAAdaptEvtHdlr));
    38             {
    38             if (!pSelf->evtHdlrs)
    39             DEBUG_ERR("Memory allocation failure in Base Ctx.")
    39                 {
    40             return XA_RESULT_MEMORY_FAILURE;
    40                 DEBUG_ERR("Memory allocation failure in Base Ctx.")
    41             }
    41                 return XA_RESULT_MEMORY_FAILURE;
    42         }
    42                 }
    43     pSelf->ctxId = ctxId;
    43             }
    44     }
    44         pSelf->ctxId = ctxId;
       
    45         }
    45     else
    46     else
    46     {
    47         {
    47         DEBUG_ERR("Invalid Adaptation Base Context.")
    48         DEBUG_ERR("Invalid Adaptation Base Context.")
    48         return XA_RESULT_PARAMETER_INVALID;
    49         return XA_RESULT_PARAMETER_INVALID;
    49     }
    50         }
    50 
    51 
    51     DEBUG_API("<-XAAdaptationBase_Init");
    52     DEBUG_API("<-XAAdaptationBase_Init");
    52     return XA_RESULT_SUCCESS;
    53     return XA_RESULT_SUCCESS;
    53 }
    54     }
    54 
    55 
    55 /*
    56 /*
    56  * XAresult XAAdaptationBase_PostInit()
    57  * XAresult XAAdaptationBase_PostInit()
    57  * 2nd phase initialization for Adaptation Base.
    58  * 2nd phase initialization for Adaptation Base.
    58  */
    59  */
    59 XAresult XAAdaptationBase_PostInit( XAAdaptationBaseCtx* ctx )
    60 XAresult XAAdaptationBase_PostInit(XAAdaptationBaseCtx* ctx)
    60 {
    61     {
    61     XAresult ret = XA_RESULT_SUCCESS;
    62     XAresult ret = XA_RESULT_SUCCESS;
    62     DEBUG_API("->XAAdaptationBase_PostInit");
    63     DEBUG_API("->XAAdaptationBase_PostInit");
    63     DEBUG_API("<-XAAdaptationBase_PostInit");
    64     DEBUG_API("<-XAAdaptationBase_PostInit");
    64     return ret;
    65     return ret;
    65 }
    66     }
    66 
    67 
    67 /*
    68 /*
    68  * void XAAdaptationBase_Free( XAAdaptationBaseCtx* ctx )
    69  * void XAAdaptationBase_Free( XAAdaptationBaseCtx* ctx )
    69  * Frees all Base context variables .
    70  * Frees all Base context variables .
    70  */
    71  */
    71 void XAAdaptationBase_Free( XAAdaptationBaseCtx* ctx )
    72 void XAAdaptationBase_Free(XAAdaptationBaseCtx* ctx)
    72 {
    73     {
    73     g_array_free(ctx->evtHdlrs, TRUE);
    74     g_array_free(ctx->evtHdlrs, TRUE);
    74     ctx->evtHdlrs = NULL;
    75     ctx->evtHdlrs = NULL;
    75     DEBUG_API("<-XAAdaptationBase_Free");
    76     DEBUG_API("<-XAAdaptationBase_Free");
    76 }
    77     }
    77 
    78 
    78 /*
    79 /*
    79  * XAresult XAAdaptationBase_AddEventHandler
    80  * XAresult XAAdaptationBase_AddEventHandler
    80  * Adds event handler for certain event types.
    81  * Adds event handler for certain event types.
    81  */
    82  */
    82 XAresult XAAdaptationBase_AddEventHandler( XAAdaptationBaseCtx* ctx, xaAdaptEventHandler evtHandler,
    83 XAresult XAAdaptationBase_AddEventHandler(XAAdaptationBaseCtx* ctx,
    83                                     XAuint32 evtTypes, void *pHandlerCtx )
    84         xaAdaptEventHandler evtHandler, XAuint32 evtTypes, void *pHandlerCtx)
    84 {
    85     {
    85     XAuint32 i;
    86     XAuint32 i;
    86     XAAdaptEvtHdlr tmp;
    87     XAAdaptEvtHdlr tmp;
    87     DEBUG_API("->XAAdaptationBase_AddEventHandler");
    88     DEBUG_API("->XAAdaptationBase_AddEventHandler");
    88     if(!ctx)
    89     if (!ctx)
    89     {
    90         {
    90         DEBUG_ERR("no context");
    91         DEBUG_ERR("no context");
    91         return XA_RESULT_PARAMETER_INVALID;
    92         return XA_RESULT_PARAMETER_INVALID;
    92     }
    93         }
    93 
    94 
    94     for(i=0; i<ctx->evtHdlrs->len; i++)
    95     for (i = 0; i < ctx->evtHdlrs->len; i++)
    95     {
    96         {
    96         if( (g_array_index(ctx->evtHdlrs, XAAdaptEvtHdlr, i)).handlerfunc == evtHandler )
    97         if ((g_array_index(ctx->evtHdlrs, XAAdaptEvtHdlr, i)).handlerfunc
    97         {
    98                 == evtHandler)
       
    99             {
    98             return XA_RESULT_PARAMETER_INVALID;
   100             return XA_RESULT_PARAMETER_INVALID;
    99         }
   101             }
   100     }
   102         }
   101     tmp.handlerfunc = evtHandler;
   103     tmp.handlerfunc = evtHandler;
   102     tmp.handlercontext = pHandlerCtx;
   104     tmp.handlercontext = pHandlerCtx;
   103     tmp.eventtypes = evtTypes;
   105     tmp.eventtypes = evtTypes;
   104     g_array_append_val(ctx->evtHdlrs, tmp);
   106     g_array_append_val(ctx->evtHdlrs, tmp);
   105     DEBUG_API("<-XAAdaptationBase_AddEventHandler");
   107     DEBUG_API("<-XAAdaptationBase_AddEventHandler");
   106     return XA_RESULT_SUCCESS;
   108     return XA_RESULT_SUCCESS;
   107 }
   109     }
   108 
   110 
   109 /*
   111 /*
   110  * XAresult XAAdaptationBase_RemoveEventHandler
   112  * XAresult XAAdaptationBase_RemoveEventHandler
   111  * Removes event handler for certain event types.
   113  * Removes event handler for certain event types.
   112  */
   114  */
   113 XAresult XAAdaptationBase_RemoveEventHandler( XAAdaptationBaseCtx* ctx, xaAdaptEventHandler evtHandler)
   115 XAresult XAAdaptationBase_RemoveEventHandler(XAAdaptationBaseCtx* ctx,
   114 {
   116         xaAdaptEventHandler evtHandler)
       
   117     {
   115     XAuint32 i;
   118     XAuint32 i;
   116     DEBUG_API("->XAAdaptationBase_RemoveEventHandler");
   119     DEBUG_API("->XAAdaptationBase_RemoveEventHandler");
   117     if(!ctx)
   120     if (!ctx)
   118     {
   121         {
   119         DEBUG_ERR("no context");
   122         DEBUG_ERR("no context");
   120         return XA_RESULT_PARAMETER_INVALID;
   123         return XA_RESULT_PARAMETER_INVALID;
   121     }
   124         }
   122     for(i=0; i<ctx->evtHdlrs->len; i++)
   125     for (i = 0; i < ctx->evtHdlrs->len; i++)
   123     {
   126         {
   124         if( (g_array_index(ctx->evtHdlrs, XAAdaptEvtHdlr, i)).handlerfunc == evtHandler )
   127         if ((g_array_index(ctx->evtHdlrs, XAAdaptEvtHdlr, i)).handlerfunc
   125         {
   128                 == evtHandler)
       
   129             {
   126             g_array_remove_index(ctx->evtHdlrs, i);
   130             g_array_remove_index(ctx->evtHdlrs, i);
   127             return XA_RESULT_SUCCESS;
   131             return XA_RESULT_SUCCESS;
   128         }
   132             }
   129     }
   133         }
   130     DEBUG_API("<-XAAdaptationBase_RemoveEventHandler");
   134     DEBUG_API("<-XAAdaptationBase_RemoveEventHandler");
   131     /*did not find, return error*/
   135     /*did not find, return error*/
   132     return XA_RESULT_PARAMETER_INVALID;
   136     return XA_RESULT_PARAMETER_INVALID;
   133 }
   137     }
   134 
   138 
   135 void XAAdaptationBase_SendAdaptEvents(XAAdaptationBaseCtx* ctx, XAAdaptEvent* event)
   139 void XAAdaptationBase_SendAdaptEvents(XAAdaptationBaseCtx* ctx,
   136 {
   140         XAAdaptEvent* event)
       
   141     {
   137     XAuint32 i;
   142     XAuint32 i;
   138     XAAdaptEvtHdlr* tmp;
   143     XAAdaptEvtHdlr* tmp;
   139     for(i=0; i<ctx->evtHdlrs->len; i++)
   144     for (i = 0; i < ctx->evtHdlrs->len; i++)
   140     {
   145         {
   141         tmp = &g_array_index(ctx->evtHdlrs, XAAdaptEvtHdlr, i);
   146         tmp = &g_array_index(ctx->evtHdlrs, XAAdaptEvtHdlr, i);
   142         if( tmp->eventtypes & event->eventtype )
   147         if (tmp->eventtypes & event->eventtype)
   143         {
   148             {
   144             (tmp->handlerfunc)(tmp->handlercontext, event);
   149             (tmp->handlerfunc)(tmp->handlercontext, event);
   145         }
   150             }
   146     }
   151         }
   147 }
   152     }
   148 
   153 
   149 /*
   154 /*
   150  * XAresult XAEqualizerItfAdapt_ThreadEntry(XAAdaptationGstCtx *adapCtx)
   155  * XAresult XAEqualizerItfAdapt_ThreadEntry(XAAdaptationGstCtx *adapCtx)
   151  * Description: Safety thread entry
   156  * Description: Safety thread entry
   152  */
   157  */
   153 XAresult XAAdaptationBase_ThreadEntry(XAAdaptationBaseCtx *adaptCtx)
   158 XAresult XAAdaptationBase_ThreadEntry(XAAdaptationBaseCtx *adaptCtx)
   154 {
   159     {
   155     XAresult res = XA_RESULT_SUCCESS;
   160     XAresult res = XA_RESULT_SUCCESS;
   156     DEBUG_API("->XAAdaptationBase_ThreadEntry");
   161     DEBUG_API("->XAAdaptationBase_ThreadEntry");
   157     if(!adaptCtx )
   162     if (!adaptCtx)
   158     {
   163         {
   159         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
   164         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");DEBUG_API("<-XAAdaptationBase_ThreadEntry");
   160         DEBUG_API("<-XAAdaptationBase_ThreadEntry");
       
   161         /* invalid parameter */
   165         /* invalid parameter */
   162         return XA_RESULT_PARAMETER_INVALID;
   166         return XA_RESULT_PARAMETER_INVALID;
   163 
   167         }
   164     }
   168 
   165     
   169     switch (adaptCtx->ctxId)
   166     switch(adaptCtx->ctxId)
       
   167         {
   170         {
   168         case XAMediaPlayerAdaptation:
   171         case XAMediaPlayerAdaptation:
   169             XA_IMPL_THREAD_SAFETY_ENTRY(XATSMediaPlayer);
   172             XA_IMPL_THREAD_SAFETY_ENTRY(XATSMediaPlayer)
       
   173             ;
   170             break;
   174             break;
   171         case XAMediaRecorderAdaptation:
   175         case XAMediaRecorderAdaptation:
   172             XA_IMPL_THREAD_SAFETY_ENTRY(XATSMediaRecorder);
   176             XA_IMPL_THREAD_SAFETY_ENTRY(XATSMediaRecorder)
       
   177             ;
   173             break;
   178             break;
   174         case XARadioAdaptation:
   179         case XARadioAdaptation:
   175             XA_IMPL_THREAD_SAFETY_ENTRY(XATSRadio);
   180             XA_IMPL_THREAD_SAFETY_ENTRY(XATSRadio)
       
   181             ;
   176             break;
   182             break;
   177         case XACameraAdaptation:
   183         case XACameraAdaptation:
   178             XA_IMPL_THREAD_SAFETY_ENTRY(XATSCamera);
   184             XA_IMPL_THREAD_SAFETY_ENTRY(XATSCamera)
       
   185             ;
   179             break;
   186             break;
   180         case XAOutputMixAdaptation:
   187         case XAOutputMixAdaptation:
   181             XA_IMPL_THREAD_SAFETY_ENTRY(XATSOutputMix);
   188             XA_IMPL_THREAD_SAFETY_ENTRY(XATSOutputMix)
       
   189             ;
   182             break;
   190             break;
   183         case XAVibraAdaptation:
   191         case XAVibraAdaptation:
   184             XA_IMPL_THREAD_SAFETY_ENTRY(XATSVibra);
   192             XA_IMPL_THREAD_SAFETY_ENTRY(XATSVibra)
       
   193             ;
   185             break;
   194             break;
   186         case XALedArrayAdaptation:
   195         case XALedArrayAdaptation:
   187             XA_IMPL_THREAD_SAFETY_ENTRY(XATSLEDArray);
   196             XA_IMPL_THREAD_SAFETY_ENTRY(XATSLEDArray)
       
   197             ;
   188             break;
   198             break;
   189         case XAMDAdaptation:
   199         case XAMDAdaptation:
   190             XA_IMPL_THREAD_SAFETY_ENTRY(XATSMetaDataExtractor);
   200             XA_IMPL_THREAD_SAFETY_ENTRY(XATSMetaDataExtractor)
       
   201             ;
   191             break;
   202             break;
   192         case XAEngineAdaptation:
   203         case XAEngineAdaptation:
   193             XA_IMPL_THREAD_SAFETY_ENTRY(XATSEngine);
   204             XA_IMPL_THREAD_SAFETY_ENTRY(XATSEngine)
       
   205             ;
   194             break;
   206             break;
   195         default:
   207         default:
   196             DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
   208             DEBUG_ERR("XA_RESULT_PARAMETER_INVALID")
       
   209             ;
   197             /* invalid parameter */
   210             /* invalid parameter */
   198             res = XA_RESULT_PARAMETER_INVALID;
   211             res = XA_RESULT_PARAMETER_INVALID;
   199             break;
   212             break;
   200         }
   213         }
   201 
   214 
   202     DEBUG_API("<-XAAdaptationBase_ThreadEntry");
   215     DEBUG_API("<-XAAdaptationBase_ThreadEntry");
   203     return res;
   216     return res;
   204 }
   217     }
   205 /*
   218 /*
   206  * XAresult XAEqualizerItfAdapt_ThreadExit(XAAdaptationGstCtx *adaptCtx)
   219  * XAresult XAEqualizerItfAdapt_ThreadExit(XAAdaptationGstCtx *adaptCtx)
   207  * Description: Safety thread exit
   220  * Description: Safety thread exit
   208  */
   221  */
   209 XAresult XAAdaptationBase_ThreadExit(XAAdaptationBaseCtx *adaptCtx)
   222 XAresult XAAdaptationBase_ThreadExit(XAAdaptationBaseCtx *adaptCtx)
   210 {
   223     {
   211     XAresult res = XA_RESULT_SUCCESS;
   224     XAresult res = XA_RESULT_SUCCESS;
   212     DEBUG_API("->XAAdaptationBase_ThreadExit");
   225     DEBUG_API("->XAAdaptationBase_ThreadExit");
   213     if(!adaptCtx )
   226     if (!adaptCtx)
   214     {
   227         {
   215         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
   228         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");DEBUG_API("<-XAAdaptationBase_ThreadExit");
   216         DEBUG_API("<-XAAdaptationBase_ThreadExit");
       
   217         /* invalid parameter */
   229         /* invalid parameter */
   218         return XA_RESULT_PARAMETER_INVALID;
   230         return XA_RESULT_PARAMETER_INVALID;
   219 
   231         }
   220     }
   232 
   221 
   233     switch (adaptCtx->ctxId)
   222     switch(adaptCtx->ctxId)
       
   223         {
   234         {
   224         case XAMediaPlayerAdaptation:
   235         case XAMediaPlayerAdaptation:
   225             XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer);
   236             XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer)
       
   237             ;
   226             break;
   238             break;
   227         case XAMediaRecorderAdaptation:
   239         case XAMediaRecorderAdaptation:
   228             XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaRecorder);
   240             XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaRecorder)
       
   241             ;
   229             break;
   242             break;
   230         case XARadioAdaptation:
   243         case XARadioAdaptation:
   231             XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio);
   244             XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio)
       
   245             ;
   232             break;
   246             break;
   233         case XACameraAdaptation:
   247         case XACameraAdaptation:
   234             XA_IMPL_THREAD_SAFETY_EXIT(XATSCamera);
   248             XA_IMPL_THREAD_SAFETY_EXIT(XATSCamera)
       
   249             ;
   235             break;
   250             break;
   236         case XAOutputMixAdaptation:
   251         case XAOutputMixAdaptation:
   237             XA_IMPL_THREAD_SAFETY_EXIT(XATSOutputMix);
   252             XA_IMPL_THREAD_SAFETY_EXIT(XATSOutputMix)
       
   253             ;
   238             break;
   254             break;
   239         case XAVibraAdaptation:
   255         case XAVibraAdaptation:
   240             XA_IMPL_THREAD_SAFETY_EXIT(XATSVibra);
   256             XA_IMPL_THREAD_SAFETY_EXIT(XATSVibra)
       
   257             ;
   241             break;
   258             break;
   242         case XALedArrayAdaptation:
   259         case XALedArrayAdaptation:
   243             XA_IMPL_THREAD_SAFETY_EXIT(XATSLEDArray);
   260             XA_IMPL_THREAD_SAFETY_EXIT(XATSLEDArray)
       
   261             ;
   244             break;
   262             break;
   245         case XAMDAdaptation:
   263         case XAMDAdaptation:
   246             XA_IMPL_THREAD_SAFETY_EXIT(XATSMetaDataExtractor);
   264             XA_IMPL_THREAD_SAFETY_EXIT(XATSMetaDataExtractor)
       
   265             ;
   247             break;
   266             break;
   248         case XAEngineAdaptation:
   267         case XAEngineAdaptation:
   249             XA_IMPL_THREAD_SAFETY_EXIT(XATSEngine);
   268             XA_IMPL_THREAD_SAFETY_EXIT(XATSEngine)
       
   269             ;
   250             break;
   270             break;
   251         default:
   271         default:
   252             DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
   272             DEBUG_ERR("XA_RESULT_PARAMETER_INVALID")
       
   273             ;
   253             /* invalid parameter */
   274             /* invalid parameter */
   254             res = XA_RESULT_PARAMETER_INVALID;
   275             res = XA_RESULT_PARAMETER_INVALID;
   255             break;
   276             break;
   256         }
   277         }
   257 
   278 
   258     DEBUG_API("<-XAAdaptationBase_ThreadExit");
   279     DEBUG_API("<-XAAdaptationBase_ThreadExit");
   259     return res;
   280     return res;
   260 }
   281     }