khronosfws/openmax_al/src/adptcommon/xaframeworkmgr.c
branchRCL_3
changeset 20 0ac9a5310753
parent 19 095bea5f582e
child 21 999b2818a0eb
--- a/khronosfws/openmax_al/src/adptcommon/xaframeworkmgr.c	Tue Aug 31 15:43:02 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,551 +0,0 @@
-/*
- * 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: Framework Manager. Parses the CFG file
- *
- */
-
-#include <stdio.h>
-#include <string.h>
-#include "xaframeworkmgr.h"
-
-/* Default line width permitted in the cfg file + 2 to hold "\r\n"*/
-#define LINEWIDTH 82
-
-typedef enum
-    {
-    FWMgrTagNone,
-    FWMgrTagURIScheme,
-    FWMgrTagFileExt
-    } FWMgrTagType;
-
-/* Config file location */
-const char configFileLocationZ[] = "z:/openmaxal/openmaxal.cfg";
-const char configFileLocationC[] = "c:/openmaxal/openmaxal.cfg";
-
-/* Tags used for parsing */
-const char mediaPlayerBeginTag[] = "<mediaplayer>";
-const char mediaPlayerEndTag[] = "</mediaplayer>";
-const char mediaRecorderBeginTag[] = "<mediarecorder>";
-const char mediaRecorderEndTag[] = "</mediarecorder>";
-const char mediaFrameworkMmfBeginTag[] = "<mmf>";
-const char mediaFrameworkMmfEndTag[] = "</mmf>";
-const char mediaFrameworkGstBeginTag[] = "<gst>";
-const char uriSchemeBeginTag[] = "<urischeme>";
-const char uriSchemeEndTag[] = "</urischeme>";
-const char mediaFrameworkGstEndTag[] = "</gst>";
-const char fileExtBeginTag[] = "<fileext>";
-const char fileExtEndTag[] = "</fileext>";
-
-/* Local function definitions */
-/* returns FWMgrTrue if processed successfully */
-static FWMgrBool processConfigEntry(const char* buffer,
-        FWMgrMOType *mediaType, FWMgrFwType *frameworkType,
-        FWMgrTagType *tagType, FWMgrBool *newNode, FrameworkMap **node);
-
-/* returns FWMgrTrue if processed successfully */
-static FWMgrBool processTagType(const char* buffer,
-        FWMgrFwType *frameworkType, FWMgrTagType *tagType,
-        FrameworkMap **node);
-
-/* returns FWMgrTrue if processed successfully */
-static FWMgrBool tokenizeTag(FWMgrTagType tagType, const char* buffer,
-        FrameworkMap **node);
-
-/* Global functions from header file */
-
-/* FrameworkMap* XAFrameworkMgr_CreateFrameworkMap
- * Description: Creates a list of framework and use-case map.
- */
-FrameworkMap* XAFrameworkMgr_CreateFrameworkMap()
-    {
-    char buffer[LINEWIDTH];
-    int readSize;
-    int lineNumber = 0;
-    FWMgrBool processedEntry = FWMgrTrue;
-    FWMgrMOType currentMediaType = FWMgrMOUnknown;
-    FWMgrFwType currentFrameworkType = FWMgrFWUknown;
-    FWMgrTagType currentTagType = FWMgrTagNone;
-    FrameworkMap *curNode = NULL;
-    FWMgrBool newNode;
-    FrameworkMap *frameworkMap = NULL;
-
-    FILE* fp = fopen(configFileLocationC, "r");
-    if (fp == NULL)
-        {
-        fp = fopen(configFileLocationZ, "r");
-        }
-
-    if (fp != NULL)
-        {
-        while ((fgets(buffer, LINEWIDTH, fp) != NULL) && processedEntry)
-            {
-            /* keep looping until NULL pointer OR error... */
-            lineNumber++;
-            readSize = strlen(buffer);
-            /* Ignore comments line */
-            if (buffer[0] == '#')
-                continue;
-
-            /* Ignore replace "\r\n" with '\0' */
-            if ((readSize >= 2) && (buffer[readSize - 2] == '\r')
-                    && (buffer[readSize - 1] == '\n'))
-                buffer[readSize - 2] = '\0';
-
-            /* Ignore new line... */
-            if (readSize == 2)
-                continue;
-
-            processedEntry = processConfigEntry(buffer, &currentMediaType,
-                    &currentFrameworkType, &currentTagType, &newNode,
-                    &curNode);
-            if (newNode)
-                {
-                /*Just link to the last element in the chain*/
-                if (!frameworkMap)
-                    {
-                    frameworkMap = curNode;
-                    }
-                else
-                    {
-                    FrameworkMap *lastNode = frameworkMap;
-                    while (lastNode->next)
-                        {
-                        lastNode = lastNode->next;
-                        }
-                    lastNode->next = curNode;
-                    }
-                }
-            }
-        fclose(fp);
-        }
-    else
-        {
-        printf("unable to open config file!\n");
-        }
-    return frameworkMap;
-    }
-
-#ifdef _DEBUG
-/* void XAFrameworkMgr_DumpFrameworkMap
- * Description: Prints map to std console.
- */
-void XAFrameworkMgr_DumpFrameworkMap(FrameworkMap *map)
-    {
-    FrameworkMap *node = map;
-    int i;
-    int loopIndex = 0;
-    while (node)
-        {
-        loopIndex++;
-        printf("%d>", loopIndex);
-        if (node->moType == FWMgrMOPlayer)
-            printf("MediaPlayer-");
-        else if (node->moType == FWMgrMORecorder)
-            printf("MediaRecrdr-");
-        else
-            printf("UKNOWN-");
-        if (node->fwType == FWMgrFWMMF)
-            printf("MMF-");
-        else if (node->fwType == FWMgrFWGST)
-            printf("GST-");
-        else
-            printf("UKNOWN-");
-        printf("Scheme[");
-        for (i = 0; i < node->uriSchemeCount; i++)
-            printf(" %s", node->uriSchemes[i]);
-        printf("]FileExt[");
-        for (i = 0; i < node->fileExtCount; i++)
-            printf(" %s", node->fileExts[i]);
-        printf("]\n");
-        node = node->next;
-        }
-    }
-#endif
-
-/* void XAFrameworkMgr_DeleteFrameworkMap
- * Description: Deletes the list of framework and use-case map.
- */
-void XAFrameworkMgr_DeleteFrameworkMap(FrameworkMap **map)
-    {
-    FrameworkMap *node = *map;
-    FrameworkMap *nextNode = NULL;
-    int i;
-    while (node)
-        {
-        for (i = 0; i < node->uriSchemeCount; i++)
-            free(node->uriSchemes[i]);
-        free(node->uriSchemes);
-
-        for (i = 0; i < node->fileExtCount; i++)
-            free(node->fileExts[i]);
-        free(node->fileExts);
-
-        nextNode = node->next;
-        free(node);
-        node = nextNode;
-        }
-    *map = NULL;
-    }
-
-/* FWMgrFwType XAFrameworkMgr_GetFramework
- * Description: Returns the framework enum that handles uri.
- */
-FWMgrFwType XAFrameworkMgr_GetFramework(FrameworkMap *map, const char *uri,
-        FWMgrMOType mediaObject)
-    {
-    FWMgrFwType retVal = FWMgrFWUknown;
-    char fileScheme[] = "file";
-    char *uriScheme = NULL;
-    char *fileExt = NULL;
-    FrameworkMap *node = map;
-    FWMgrBool uriMatchFound = FWMgrFalse;
-    FWMgrBool fileExtMatchFound = FWMgrFalse;
-    int i = 0;
-    int copyLen = 0;
-
-    if (!map || !uri)
-        {
-        /* TODO Log invalid uri */
-        return retVal;
-        }
-
-    /* Get uri scheme */
-    uriScheme = strchr(uri, ':');
-    if (uriScheme == NULL)
-        {
-        /* TODO Log invalid uri */
-        return retVal;
-        }
-
-    copyLen = (uriScheme - uri);
-    uriScheme = (char*) calloc(copyLen + 1, sizeof(char));
-    strncpy(uriScheme, uri, copyLen);
-    uriScheme[copyLen] = '\0'; /*Null terminate it*/
-
-    if (strcasecmp(uriScheme, fileScheme) == 0)
-        {
-        /* Get uri extension */
-        char* dotLoc = strrchr(uri, '.');
-        if (dotLoc == NULL)
-            {
-            /* TODO Log invalid uri */
-            free(uriScheme);
-            return retVal;
-            }
-        /* We need to add 1 to exclude '.'*/
-        copyLen = strlen(uri) - (dotLoc + 1 - uri);
-        fileExt = (char*) calloc(copyLen + 1, sizeof(char));
-        strncpy(fileExt, dotLoc + 1, copyLen);
-        fileExt[copyLen] = '\0'; /*Null terminate it*/
-        }
-
-    while (node)
-        {
-        if (mediaObject == node->moType)
-            {
-            uriMatchFound = FWMgrFalse;
-            fileExtMatchFound = FWMgrFalse;
-            /* Match for uri*/
-            for (i = 0; i < node->uriSchemeCount; i++)
-                {
-                if (strcasecmp(uriScheme, node->uriSchemes[i]) == 0)
-                    {
-                    uriMatchFound = FWMgrTrue;
-                    break;
-                    }
-                }
-            /* if uri scheme is not file, we only need to check for uri */
-            if (!fileExt)
-                {
-                fileExtMatchFound = FWMgrTrue;
-                }
-            else
-                {
-                for (i = 0; i < node->fileExtCount; i++)
-                    {
-                    if (strcasecmp(fileExt, node->fileExts[i]) == 0)
-                        {
-                        fileExtMatchFound = FWMgrTrue;
-                        break;
-                        }
-                    }
-                }
-
-            if ((uriMatchFound == FWMgrTrue) && (fileExtMatchFound
-                    == FWMgrTrue))
-                {
-                retVal = node->fwType;
-                break;
-                }
-            }
-        node = node->next;
-        }
-    free(uriScheme);
-    free(fileExt);
-    return retVal;
-    }
-
-/* Local functions */
-
-/* FWMgrBool processConfigEntry
- * Description: Processes a single line entry from the config file.
- */
-FWMgrBool processConfigEntry(const char* buffer, FWMgrMOType *mediaType,
-        FWMgrFwType *frameworkType, FWMgrTagType *tagType,
-        FWMgrBool *newNode, FrameworkMap **node)
-    {
-    FWMgrBool processedSuccessfully = FWMgrTrue;
-
-    if (!buffer || !mediaType || !frameworkType || !tagType || !newNode)
-        {
-        processedSuccessfully = FWMgrFalse;
-        return processedSuccessfully;
-        }
-
-	*newNode = FWMgrFalse;
-    switch (*mediaType)
-        {
-        case FWMgrMOUnknown:
-            {
-            if (strcmp(buffer, mediaPlayerBeginTag) == 0)
-                {
-                *mediaType = FWMgrMOPlayer;
-                *frameworkType = FWMgrFWUknown;
-                *tagType = FWMgrTagNone;
-                *node = NULL;
-                }
-            else if (strcmp(buffer, mediaRecorderBeginTag) == 0)
-                {
-                *mediaType = FWMgrMORecorder;
-                *frameworkType = FWMgrFWUknown;
-                *tagType = FWMgrTagNone;
-                *node = NULL;
-                }
-            }
-            break;
-        case FWMgrMOPlayer:
-        case FWMgrMORecorder:
-            {
-            switch (*frameworkType)
-                {
-                case FWMgrFWUknown:
-                    {
-                    if ((*mediaType == FWMgrMOPlayer) && (strcmp(buffer,
-                            mediaPlayerEndTag) == 0))
-                        *mediaType = FWMgrMOUnknown;
-                    else if ((*mediaType == FWMgrMORecorder) && (strcmp(
-                            buffer, mediaRecorderEndTag) == 0))
-                        *mediaType = FWMgrMOUnknown;
-                    else if ((strcmp(buffer, mediaFrameworkMmfBeginTag) == 0)
-                            || (strcmp(buffer, mediaFrameworkGstBeginTag)
-                                    == 0))
-                        {
-
-                        *frameworkType = FWMgrFWMMF;
-                        if (strcmp(buffer, mediaFrameworkGstBeginTag) == 0)
-                            *frameworkType = FWMgrFWGST;
-                        if (*node)
-                            {
-                            printf(
-                                    "Fatal error error. Entry already exists and creating another one!!!");
-                            processedSuccessfully = FWMgrFalse;
-                            }
-                        else
-                            {
-                            *node = (FrameworkMap*) calloc(1,
-                                    sizeof(FrameworkMap));
-                            if (!(*node))
-                                {
-                                printf(
-                                        "Fatal error. No memory to create an Entry!!!");
-                                processedSuccessfully = FWMgrFalse;
-                                }
-                            else
-                                {
-                                *newNode = FWMgrTrue;
-                                (*node)->moType = *mediaType;
-                                (*node)->fwType = *frameworkType;
-                                }
-                            }
-                        }
-                    }
-                    break;
-                case FWMgrFWMMF:
-                    {
-                    processedSuccessfully = processTagType(buffer,
-                            frameworkType, tagType, node);
-                    }
-                    break;
-                case FWMgrFWGST:
-                    {
-                    processedSuccessfully = processTagType(buffer,
-                            frameworkType, tagType, node);
-                    }
-                    break;
-                default:
-                    processedSuccessfully = FWMgrFalse;
-                    break;
-                };
-            }
-            break;
-        default:
-            processedSuccessfully = FWMgrFalse;
-            break;
-        };
-    return processedSuccessfully;
-    }
-
-/* FWMgrBool processTagType
- * Description: Processes a framework type, uri, file tags entry from 
- * the config file.
- */
-FWMgrBool processTagType(const char* buffer, FWMgrFwType *frameworkType,
-        FWMgrTagType *tagType, FrameworkMap **node)
-    {
-    FWMgrBool processedSuccessfully = FWMgrTrue;
-
-    if (!buffer || !frameworkType || !tagType || (*node == NULL))
-        {
-        processedSuccessfully = FWMgrFalse;
-        return processedSuccessfully;
-        }
-
-    switch (*tagType)
-        {
-        case FWMgrTagNone:
-            {
-            if (((*frameworkType == FWMgrFWMMF) && (strcmp(buffer,
-                    mediaFrameworkMmfEndTag) == 0)) || ((*frameworkType
-                    == FWMgrFWGST)
-                    && (strcmp(buffer, mediaFrameworkGstEndTag) == 0)))
-                {
-                *node = NULL;
-                *frameworkType = FWMgrFWUknown;
-                }
-            else if (strcmp(buffer, uriSchemeBeginTag) == 0)
-                *tagType = FWMgrTagURIScheme;
-            else if (strcmp(buffer, fileExtBeginTag) == 0)
-                *tagType = FWMgrTagFileExt;
-            }
-            break;
-        case FWMgrTagURIScheme:
-            {
-            if (strcmp(buffer, uriSchemeEndTag) == 0)
-                *tagType = FWMgrTagNone;
-            else
-                {
-                processedSuccessfully = FWMgrFalse;
-                if (*node)
-                    processedSuccessfully = tokenizeTag(FWMgrTagURIScheme,
-                            buffer, node);
-                }
-            }
-            break;
-        case FWMgrTagFileExt:
-            {
-            if (strcmp(buffer, fileExtEndTag) == 0)
-                *tagType = FWMgrTagNone;
-            else
-                {
-                processedSuccessfully = FWMgrFalse;
-                if (*node)
-                    processedSuccessfully = tokenizeTag(FWMgrTagFileExt,
-                            buffer, node);
-                }
-            }
-            break;
-        default:
-            processedSuccessfully = FWMgrFalse;
-            break;
-        };
-    return processedSuccessfully;
-    }
-
-/* FWMgrBool processTagType
- * Description: Processes a framework type, uri, file tags entry from 
- * the config file.
- */
-FWMgrBool tokenizeTag(FWMgrTagType tagType, const char* buffer,
-        FrameworkMap **node)
-    {
-    char* tempStartPtr;
-    char* tempEndPtr;
-    int index = 0;
-    int strLen = 0;
-
-    if (!buffer || (*node == NULL))
-        {
-        return FWMgrFalse;
-        }
-
-    tempStartPtr = /*const_cast<char*>*/(char*) (buffer);
-    tempEndPtr = /*const_cast<char*>*/(char*) (buffer);
-
-    if (tagType == FWMgrTagURIScheme)
-        {
-        (*node)->uriSchemeCount = atoi(buffer);
-        (*node)->uriSchemes = (char**) calloc((*node)->uriSchemeCount,
-                sizeof(*((*node)->uriSchemes)));
-        if (!(*node)->uriSchemes)
-            {
-            printf("Fatal error. No memory to create an Entry!!!");
-            return FWMgrFalse;
-            }
-        }
-    else if (tagType == FWMgrTagFileExt)
-        {
-        (*node)->fileExtCount = atoi(buffer);
-        (*node)->fileExts = (char**) calloc((*node)->fileExtCount,
-                sizeof(*((*node)->fileExts)));
-        if (!(*node)->fileExts)
-            {
-            printf("Fatal error. No memory to create an Entry!!!");
-            return FWMgrFalse;
-            }
-        }
-    else
-        return FWMgrFalse;
-
-    /*Find the index of :*/
-    tempStartPtr = strchr(tempStartPtr, ',');
-    index = 0;
-    while (tempStartPtr && (strlen(tempStartPtr) > 1))
-        {
-        tempStartPtr++; /* Ignore separator ','*/
-        tempEndPtr = strchr(tempStartPtr, ',');
-        strLen = (tempEndPtr - tempStartPtr) + 1; /* To hold null terminator */
-        if (strLen > 0)
-            {
-            if (tagType == FWMgrTagURIScheme)
-                {
-                (*node)->uriSchemes[index] = (char*) calloc(strLen,
-                        sizeof(char));
-                strncpy((*node)->uriSchemes[index], tempStartPtr, strLen);
-                (*node)->uriSchemes[index][strLen - 1] = '\0'; /*Null terminate it*/
-                index++;
-                }
-            else if (tagType == FWMgrTagFileExt)
-                {
-                (*node)->fileExts[index] = (char*) calloc(strLen,
-                        sizeof(char));
-                strncpy((*node)->fileExts[index], tempStartPtr, strLen);
-                (*node)->fileExts[index][strLen - 1] = '\0'; /*Null terminate it*/
-                index++;
-                }
-            }
-        tempStartPtr = tempEndPtr;
-        }
-    return FWMgrTrue;
-    }
-