khronosfws/openmax_al/src/mmf_adaptation/cmetadatautilityitf.cpp
author hgs
Fri, 09 Jul 2010 16:43:35 -0500
changeset 33 5e8b14bae8c3
parent 25 6f7ceef7b1d1
permissions -rw-r--r--
201027
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
25
hgs
parents: 21
diff changeset
     1
/*
hgs
parents: 21
diff changeset
     2
 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents: 21
diff changeset
     3
 * All rights reserved.
hgs
parents: 21
diff changeset
     4
 * This component and the accompanying materials are made available
hgs
parents: 21
diff changeset
     5
 * under the terms of "Eclipse Public License v1.0"
hgs
parents: 21
diff changeset
     6
 * which accompanies this distribution, and is available
hgs
parents: 21
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents: 21
diff changeset
     8
 *
hgs
parents: 21
diff changeset
     9
 * Initial Contributors:
hgs
parents: 21
diff changeset
    10
 * Nokia Corporation - initial contribution.
hgs
parents: 21
diff changeset
    11
 *
hgs
parents: 21
diff changeset
    12
 * Contributors:
hgs
parents: 21
diff changeset
    13
 *
hgs
parents: 21
diff changeset
    14
 * Description: Metadata backend engine
hgs
parents: 21
diff changeset
    15
 *
hgs
parents: 21
diff changeset
    16
 */
hgs
parents: 21
diff changeset
    17
19
hgs
parents:
diff changeset
    18
#include <string.h>
hgs
parents:
diff changeset
    19
#include <ctype.h>
hgs
parents:
diff changeset
    20
#include <uri8.h>
25
hgs
parents: 21
diff changeset
    21
#include "cmetadatautilityitf.h"
19
hgs
parents:
diff changeset
    22
#include "profileutilmacro.h"
hgs
parents:
diff changeset
    23
25
hgs
parents: 21
diff changeset
    24
CMetadataUtilityItf::CMetadataUtilityItf() :
hgs
parents: 21
diff changeset
    25
    m_pS60Util(NULL), m_pHXUtil(NULL)
hgs
parents: 21
diff changeset
    26
    {
hgs
parents: 21
diff changeset
    27
    }
19
hgs
parents:
diff changeset
    28
hgs
parents:
diff changeset
    29
CMetadataUtilityItf::~CMetadataUtilityItf()
25
hgs
parents: 21
diff changeset
    30
    {
hgs
parents: 21
diff changeset
    31
    if (m_pS60Util)
hgs
parents: 21
diff changeset
    32
        {
hgs
parents: 21
diff changeset
    33
        delete m_pS60Util;
hgs
parents: 21
diff changeset
    34
        }
19
hgs
parents:
diff changeset
    35
25
hgs
parents: 21
diff changeset
    36
    if (m_pHXUtil)
hgs
parents: 21
diff changeset
    37
        {
hgs
parents: 21
diff changeset
    38
        delete m_pHXUtil;
hgs
parents: 21
diff changeset
    39
        }
hgs
parents: 21
diff changeset
    40
    }
19
hgs
parents:
diff changeset
    41
hgs
parents:
diff changeset
    42
CMetadataUtilityItf* CMetadataUtilityItf::New(char* uri)
25
hgs
parents: 21
diff changeset
    43
    {
hgs
parents: 21
diff changeset
    44
    CMetadataUtilityItf* p_mdutilitf = new CMetadataUtilityItf;
19
hgs
parents:
diff changeset
    45
25
hgs
parents: 21
diff changeset
    46
    p_mdutilitf->ParseSource(uri); //ignore error
hgs
parents: 21
diff changeset
    47
hgs
parents: 21
diff changeset
    48
    return p_mdutilitf;
hgs
parents: 21
diff changeset
    49
    }
19
hgs
parents:
diff changeset
    50
hgs
parents:
diff changeset
    51
TInt CMetadataUtilityItf::OpenSource(char* pOrigUri)
25
hgs
parents: 21
diff changeset
    52
    {
19
hgs
parents:
diff changeset
    53
    //Make a local copy for uri
25
hgs
parents: 21
diff changeset
    54
    if (!pOrigUri)
19
hgs
parents:
diff changeset
    55
        return XA_RESULT_PARAMETER_INVALID;
25
hgs
parents: 21
diff changeset
    56
19
hgs
parents:
diff changeset
    57
    int uriLen = strlen(pOrigUri);
25
hgs
parents: 21
diff changeset
    58
    char* uri = new char[uriLen + 1];
hgs
parents: 21
diff changeset
    59
    if (!uri)
19
hgs
parents:
diff changeset
    60
        {
hgs
parents:
diff changeset
    61
        return XA_RESULT_MEMORY_FAILURE;
hgs
parents:
diff changeset
    62
        }
hgs
parents:
diff changeset
    63
    strncpy(uri, pOrigUri, uriLen);
hgs
parents:
diff changeset
    64
    uri[uriLen] = '\0';
hgs
parents:
diff changeset
    65
    ////////////////////////////////////////////
hgs
parents:
diff changeset
    66
    _LIT8(KFileSlash,"file:///");
hgs
parents:
diff changeset
    67
    TInt fileslashlen = KFileSlash().Length();
hgs
parents:
diff changeset
    68
25
hgs
parents: 21
diff changeset
    69
    TPtr8 fileuri((TUint8*) uri, strlen(uri), strlen(uri));
hgs
parents: 21
diff changeset
    70
    TPtr8 filepath = fileuri.RightTPtr(strlen(uri) - fileslashlen);
hgs
parents: 21
diff changeset
    71
19
hgs
parents:
diff changeset
    72
    TInt pos = filepath.LocateReverse(':');
25
hgs
parents: 21
diff changeset
    73
    if (pos != KErrNotFound)
hgs
parents: 21
diff changeset
    74
        {
hgs
parents: 21
diff changeset
    75
        fileuri.Delete(fileslashlen + pos, 1);
hgs
parents: 21
diff changeset
    76
        }
19
hgs
parents:
diff changeset
    77
hgs
parents:
diff changeset
    78
    TUriParser8 localfileUri;
hgs
parents:
diff changeset
    79
    TInt ret = localfileUri.Parse(fileuri);
25
hgs
parents: 21
diff changeset
    80
    if (ret == KErrNone)
19
hgs
parents:
diff changeset
    81
        {
25
hgs
parents: 21
diff changeset
    82
        HBufC* file = NULL;
hgs
parents: 21
diff changeset
    83
        TRAP(ret,file = localfileUri.GetFileNameL());
hgs
parents: 21
diff changeset
    84
        if (ret == KErrNone)
hgs
parents: 21
diff changeset
    85
            {
hgs
parents: 21
diff changeset
    86
            if (m_pS60Util)
hgs
parents: 21
diff changeset
    87
                {
hgs
parents: 21
diff changeset
    88
                ret = m_pS60Util->ParseSource(*file);
hgs
parents: 21
diff changeset
    89
                }
hgs
parents: 21
diff changeset
    90
            else if (m_pHXUtil)
hgs
parents: 21
diff changeset
    91
                {
hgs
parents: 21
diff changeset
    92
                ret = m_pHXUtil->ParseSource(*file);
hgs
parents: 21
diff changeset
    93
                }
hgs
parents: 21
diff changeset
    94
            else
hgs
parents: 21
diff changeset
    95
                {
hgs
parents: 21
diff changeset
    96
                ret = KErrNotFound;
hgs
parents: 21
diff changeset
    97
                }
hgs
parents: 21
diff changeset
    98
            }
hgs
parents: 21
diff changeset
    99
hgs
parents: 21
diff changeset
   100
        delete file;
19
hgs
parents:
diff changeset
   101
        }
25
hgs
parents: 21
diff changeset
   102
hgs
parents: 21
diff changeset
   103
    if (uri)
hgs
parents: 21
diff changeset
   104
        {
hgs
parents: 21
diff changeset
   105
        delete[] uri;
hgs
parents: 21
diff changeset
   106
        }
hgs
parents: 21
diff changeset
   107
hgs
parents: 21
diff changeset
   108
    if (ret != KErrNone)
hgs
parents: 21
diff changeset
   109
        {
hgs
parents: 21
diff changeset
   110
        //delete the utilities
hgs
parents: 21
diff changeset
   111
        if (m_pS60Util)
hgs
parents: 21
diff changeset
   112
            {
hgs
parents: 21
diff changeset
   113
            delete m_pS60Util;
hgs
parents: 21
diff changeset
   114
            m_pS60Util = NULL;
hgs
parents: 21
diff changeset
   115
            }
hgs
parents: 21
diff changeset
   116
hgs
parents: 21
diff changeset
   117
        if (m_pHXUtil)
hgs
parents: 21
diff changeset
   118
            {
hgs
parents: 21
diff changeset
   119
            delete m_pHXUtil;
hgs
parents: 21
diff changeset
   120
            m_pHXUtil = NULL;
hgs
parents: 21
diff changeset
   121
            }
hgs
parents: 21
diff changeset
   122
hgs
parents: 21
diff changeset
   123
        }
hgs
parents: 21
diff changeset
   124
    return ret;
19
hgs
parents:
diff changeset
   125
    }
21
hgs
parents: 20
diff changeset
   126
25
hgs
parents: 21
diff changeset
   127
TInt CMetadataUtilityItf::ExtractUCS2(TDesC& inDes, char* outPtr, TInt maxLen)
hgs
parents: 21
diff changeset
   128
    {
hgs
parents: 21
diff changeset
   129
    TPtrC tempPtr = inDes.Left((maxLen / 2) - 1); //save last one for null terminator
hgs
parents: 21
diff changeset
   130
    TInt outLen = tempPtr.Length() + 1;
21
hgs
parents: 20
diff changeset
   131
25
hgs
parents: 21
diff changeset
   132
    TPtr16 outDes((unsigned short*) outPtr, outLen);
hgs
parents: 21
diff changeset
   133
    outDes.Copy(tempPtr);
hgs
parents: 21
diff changeset
   134
    outDes.ZeroTerminate();
19
hgs
parents:
diff changeset
   135
25
hgs
parents: 21
diff changeset
   136
    return outLen * 2; //return size
hgs
parents: 21
diff changeset
   137
    }
19
hgs
parents:
diff changeset
   138
hgs
parents:
diff changeset
   139
TInt CMetadataUtilityItf::CalculateNumMetadataItems(TUint*numItems)
25
hgs
parents: 21
diff changeset
   140
    {
hgs
parents: 21
diff changeset
   141
    *numItems = 0;
21
hgs
parents: 20
diff changeset
   142
25
hgs
parents: 21
diff changeset
   143
    if (m_pS60Util)
hgs
parents: 21
diff changeset
   144
        {
hgs
parents: 21
diff changeset
   145
        return m_pS60Util->CalculateNumMetadataItems(numItems);
hgs
parents: 21
diff changeset
   146
        }
hgs
parents: 21
diff changeset
   147
    else if (m_pHXUtil)
hgs
parents: 21
diff changeset
   148
        {
hgs
parents: 21
diff changeset
   149
        return m_pHXUtil->CalculateNumMetadataItems(numItems);
hgs
parents: 21
diff changeset
   150
        }
hgs
parents: 21
diff changeset
   151
hgs
parents: 21
diff changeset
   152
    return KErrNone;
hgs
parents: 21
diff changeset
   153
    }
19
hgs
parents:
diff changeset
   154
hgs
parents:
diff changeset
   155
char* CMetadataUtilityItf::GetKey(TInt index)
25
hgs
parents: 21
diff changeset
   156
    {
hgs
parents: 21
diff changeset
   157
    if (m_pS60Util)
hgs
parents: 21
diff changeset
   158
        {
hgs
parents: 21
diff changeset
   159
        return m_pS60Util->GetKey(index);
hgs
parents: 21
diff changeset
   160
        }
hgs
parents: 21
diff changeset
   161
    else if (m_pHXUtil)
hgs
parents: 21
diff changeset
   162
        {
hgs
parents: 21
diff changeset
   163
        return m_pHXUtil->GetKey(index);
hgs
parents: 21
diff changeset
   164
        }
21
hgs
parents: 20
diff changeset
   165
25
hgs
parents: 21
diff changeset
   166
    return NULL;
hgs
parents: 21
diff changeset
   167
    }
19
hgs
parents:
diff changeset
   168
hgs
parents:
diff changeset
   169
TInt CMetadataUtilityItf::GetValueSize(TInt index)
25
hgs
parents: 21
diff changeset
   170
    {
hgs
parents: 21
diff changeset
   171
    if (m_pS60Util)
hgs
parents: 21
diff changeset
   172
        {
hgs
parents: 21
diff changeset
   173
        return m_pS60Util->GetValueSize(index);
hgs
parents: 21
diff changeset
   174
        }
hgs
parents: 21
diff changeset
   175
    else if (m_pHXUtil)
hgs
parents: 21
diff changeset
   176
        {
hgs
parents: 21
diff changeset
   177
        return m_pHXUtil->GetValueSize(index);
hgs
parents: 21
diff changeset
   178
        }
21
hgs
parents: 20
diff changeset
   179
25
hgs
parents: 21
diff changeset
   180
    return 0;
hgs
parents: 21
diff changeset
   181
    }
19
hgs
parents:
diff changeset
   182
25
hgs
parents: 21
diff changeset
   183
TInt CMetadataUtilityItf::GetValue(TInt index, char* data, TInt maxLength,
hgs
parents: 21
diff changeset
   184
        TInt* outSize, TInt* encodingType)
hgs
parents: 21
diff changeset
   185
    {
hgs
parents: 21
diff changeset
   186
    if (m_pS60Util)
hgs
parents: 21
diff changeset
   187
        {
hgs
parents: 21
diff changeset
   188
        return m_pS60Util->GetValue(index, data, maxLength, outSize,
hgs
parents: 21
diff changeset
   189
                encodingType);
hgs
parents: 21
diff changeset
   190
        }
hgs
parents: 21
diff changeset
   191
    else if (m_pHXUtil)
hgs
parents: 21
diff changeset
   192
        {
hgs
parents: 21
diff changeset
   193
        return m_pHXUtil->GetValue(index, data, maxLength, outSize,
hgs
parents: 21
diff changeset
   194
                encodingType);
hgs
parents: 21
diff changeset
   195
        }
21
hgs
parents: 20
diff changeset
   196
25
hgs
parents: 21
diff changeset
   197
    return 0;
hgs
parents: 21
diff changeset
   198
    }
19
hgs
parents:
diff changeset
   199
hgs
parents:
diff changeset
   200
TInt CMetadataUtilityItf::ParseSource(char* uri)
25
hgs
parents: 21
diff changeset
   201
    {
hgs
parents: 21
diff changeset
   202
    char* tempPtr = NULL;
hgs
parents: 21
diff changeset
   203
    char extension[MAX_EXTENSION_SIZE] =
hgs
parents: 21
diff changeset
   204
        {
hgs
parents: 21
diff changeset
   205
        0
hgs
parents: 21
diff changeset
   206
        };
hgs
parents: 21
diff changeset
   207
hgs
parents: 21
diff changeset
   208
    tempPtr = strchr(uri, (int) '.');
hgs
parents: 21
diff changeset
   209
    strncpy(extension, tempPtr, sizeof(tempPtr));
19
hgs
parents:
diff changeset
   210
25
hgs
parents: 21
diff changeset
   211
    for (unsigned int i = 0; i < sizeof(extension); i++)
hgs
parents: 21
diff changeset
   212
        {
hgs
parents: 21
diff changeset
   213
        extension[i] = tolower(extension[i]);
hgs
parents: 21
diff changeset
   214
        }
hgs
parents: 21
diff changeset
   215
hgs
parents: 21
diff changeset
   216
    //if s60 util in use
hgs
parents: 21
diff changeset
   217
    if (m_pS60Util)
hgs
parents: 21
diff changeset
   218
        {
hgs
parents: 21
diff changeset
   219
        //reset existing instace
hgs
parents: 21
diff changeset
   220
        TInt ret = m_pS60Util->Reset();
hgs
parents: 21
diff changeset
   221
        if (!CS60MetadataUtilityItf::IsSupportedExtension(extension))
hgs
parents: 21
diff changeset
   222
            {
hgs
parents: 21
diff changeset
   223
            delete m_pS60Util;
hgs
parents: 21
diff changeset
   224
            m_pS60Util = NULL;
hgs
parents: 21
diff changeset
   225
            }
hgs
parents: 21
diff changeset
   226
        }
19
hgs
parents:
diff changeset
   227
25
hgs
parents: 21
diff changeset
   228
    if (m_pHXUtil)
hgs
parents: 21
diff changeset
   229
        {
hgs
parents: 21
diff changeset
   230
        //reset existing instace
hgs
parents: 21
diff changeset
   231
        TInt ret = m_pHXUtil->Reset();
hgs
parents: 21
diff changeset
   232
        if (CS60MetadataUtilityItf::IsSupportedExtension(extension))
hgs
parents: 21
diff changeset
   233
            {
hgs
parents: 21
diff changeset
   234
            delete m_pHXUtil;
hgs
parents: 21
diff changeset
   235
            m_pHXUtil = NULL;
hgs
parents: 21
diff changeset
   236
            }
hgs
parents: 21
diff changeset
   237
        }
19
hgs
parents:
diff changeset
   238
25
hgs
parents: 21
diff changeset
   239
    if (!m_pS60Util && !m_pHXUtil)
hgs
parents: 21
diff changeset
   240
        {
19
hgs
parents:
diff changeset
   241
25
hgs
parents: 21
diff changeset
   242
        if (CS60MetadataUtilityItf::IsSupportedExtension(extension))
hgs
parents: 21
diff changeset
   243
            {
hgs
parents: 21
diff changeset
   244
            m_pS60Util = CS60MetadataUtilityItf::New();
hgs
parents: 21
diff changeset
   245
            }
hgs
parents: 21
diff changeset
   246
        else
hgs
parents: 21
diff changeset
   247
            {
hgs
parents: 21
diff changeset
   248
            m_pHXUtil = CHXMetadataUtilityItf::New();
hgs
parents: 21
diff changeset
   249
            }
hgs
parents: 21
diff changeset
   250
        }
19
hgs
parents:
diff changeset
   251
25
hgs
parents: 21
diff changeset
   252
    return OpenSource(uri);
hgs
parents: 21
diff changeset
   253
    }
19
hgs
parents:
diff changeset
   254
hgs
parents:
diff changeset
   255
bool CS60MetadataUtilityItf::IsSupportedExtension(char *extn)
25
hgs
parents: 21
diff changeset
   256
    {
hgs
parents: 21
diff changeset
   257
    if ((!strcasecmp(extn, ".mp3")) || (!strcasecmp(extn, ".wma"))
hgs
parents: 21
diff changeset
   258
            || (!strcasecmp(extn, ".aac")) || (!strcasecmp(extn, ".wav"))
hgs
parents: 21
diff changeset
   259
            || (!strcasecmp(extn, ".m4a")))
hgs
parents: 21
diff changeset
   260
        {
hgs
parents: 21
diff changeset
   261
        return true;
hgs
parents: 21
diff changeset
   262
        }
19
hgs
parents:
diff changeset
   263
25
hgs
parents: 21
diff changeset
   264
    return false;
hgs
parents: 21
diff changeset
   265
    }
19
hgs
parents:
diff changeset
   266
hgs
parents:
diff changeset
   267
CS60MetadataUtilityItf* CS60MetadataUtilityItf::New()
25
hgs
parents: 21
diff changeset
   268
    {
hgs
parents: 21
diff changeset
   269
    CS60MetadataUtilityItf* self = new CS60MetadataUtilityItf();
hgs
parents: 21
diff changeset
   270
hgs
parents: 21
diff changeset
   271
    TInt err = KErrGeneral;
hgs
parents: 21
diff changeset
   272
    TRAP(err, self->ConstructL());
19
hgs
parents:
diff changeset
   273
25
hgs
parents: 21
diff changeset
   274
    if (err == KErrNone)
hgs
parents: 21
diff changeset
   275
        {
hgs
parents: 21
diff changeset
   276
        return self;
hgs
parents: 21
diff changeset
   277
        }
19
hgs
parents:
diff changeset
   278
25
hgs
parents: 21
diff changeset
   279
    delete self;
hgs
parents: 21
diff changeset
   280
    return NULL;
hgs
parents: 21
diff changeset
   281
    }
19
hgs
parents:
diff changeset
   282
25
hgs
parents: 21
diff changeset
   283
CS60MetadataUtilityItf::CS60MetadataUtilityItf() :
hgs
parents: 21
diff changeset
   284
    pMetaDataUtility(NULL)
hgs
parents: 21
diff changeset
   285
    {
hgs
parents: 21
diff changeset
   286
    }
19
hgs
parents:
diff changeset
   287
hgs
parents:
diff changeset
   288
void CS60MetadataUtilityItf::ConstructL()
25
hgs
parents: 21
diff changeset
   289
    {
hgs
parents: 21
diff changeset
   290
    TAG_TIME_PROFILING_BEGIN;
hgs
parents: 21
diff changeset
   291
    pMetaDataUtility = CMetaDataUtility::NewL();
hgs
parents: 21
diff changeset
   292
    TAG_TIME_PROFILING_END; PRINT_TO_CONSOLE_TIME_DIFF;
hgs
parents: 21
diff changeset
   293
    }
hgs
parents: 21
diff changeset
   294
19
hgs
parents:
diff changeset
   295
CS60MetadataUtilityItf::~CS60MetadataUtilityItf()
25
hgs
parents: 21
diff changeset
   296
    {
hgs
parents: 21
diff changeset
   297
    if (pMetaDataUtility)
hgs
parents: 21
diff changeset
   298
        {
hgs
parents: 21
diff changeset
   299
        TInt err = KErrGeneral;
19
hgs
parents:
diff changeset
   300
25
hgs
parents: 21
diff changeset
   301
        TAG_TIME_PROFILING_BEGIN;
hgs
parents: 21
diff changeset
   302
        TRAP(err, pMetaDataUtility->ResetL());
hgs
parents: 21
diff changeset
   303
        delete pMetaDataUtility;
hgs
parents: 21
diff changeset
   304
        TAG_TIME_PROFILING_END; PRINT_TO_CONSOLE_TIME_DIFF;
hgs
parents: 21
diff changeset
   305
        }
hgs
parents: 21
diff changeset
   306
hgs
parents: 21
diff changeset
   307
    pMetaDataUtility = NULL;
hgs
parents: 21
diff changeset
   308
    }
19
hgs
parents:
diff changeset
   309
hgs
parents:
diff changeset
   310
TInt CS60MetadataUtilityItf::ParseSource(TDesC& fileName)
25
hgs
parents: 21
diff changeset
   311
    {
hgs
parents: 21
diff changeset
   312
    TInt err = KErrGeneral;
hgs
parents: 21
diff changeset
   313
hgs
parents: 21
diff changeset
   314
    if (pMetaDataUtility)
hgs
parents: 21
diff changeset
   315
        {
19
hgs
parents:
diff changeset
   316
25
hgs
parents: 21
diff changeset
   317
        TAG_TIME_PROFILING_BEGIN;
hgs
parents: 21
diff changeset
   318
        //open with the file handle
hgs
parents: 21
diff changeset
   319
        TRAP(err, pMetaDataUtility->OpenFileL(fileName)); 
hgs
parents: 21
diff changeset
   320
        TAG_TIME_PROFILING_END; 
hgs
parents: 21
diff changeset
   321
        PRINT_TO_CONSOLE_TIME_DIFF;
19
hgs
parents:
diff changeset
   322
25
hgs
parents: 21
diff changeset
   323
        if (err == KErrNone)
hgs
parents: 21
diff changeset
   324
            {
hgs
parents: 21
diff changeset
   325
            uNumMetadataItems = pMetaDataUtility->MetaDataCount();
hgs
parents: 21
diff changeset
   326
            }
hgs
parents: 21
diff changeset
   327
        }
19
hgs
parents:
diff changeset
   328
25
hgs
parents: 21
diff changeset
   329
    return err;
hgs
parents: 21
diff changeset
   330
    }
19
hgs
parents:
diff changeset
   331
hgs
parents:
diff changeset
   332
TInt CS60MetadataUtilityItf::CalculateNumMetadataItems(TUint* numItems)
25
hgs
parents: 21
diff changeset
   333
    {
hgs
parents: 21
diff changeset
   334
    TInt err = KErrGeneral;
19
hgs
parents:
diff changeset
   335
25
hgs
parents: 21
diff changeset
   336
    if (pMetaDataUtility && numItems)
hgs
parents: 21
diff changeset
   337
        {
hgs
parents: 21
diff changeset
   338
        *numItems = uNumMetadataItems;
hgs
parents: 21
diff changeset
   339
        err = KErrNone;
hgs
parents: 21
diff changeset
   340
        }
19
hgs
parents:
diff changeset
   341
25
hgs
parents: 21
diff changeset
   342
    return err;
hgs
parents: 21
diff changeset
   343
    }
19
hgs
parents:
diff changeset
   344
hgs
parents:
diff changeset
   345
char* CS60MetadataUtilityItf::KeyMapping(TMetaDataFieldId fldID)
25
hgs
parents: 21
diff changeset
   346
    {
hgs
parents: 21
diff changeset
   347
    switch (fldID)
hgs
parents: 21
diff changeset
   348
        {
19
hgs
parents:
diff changeset
   349
25
hgs
parents: 21
diff changeset
   350
        case EMetaDataSongTitle:
hgs
parents: 21
diff changeset
   351
            {
hgs
parents: 21
diff changeset
   352
            return "KhronosTitle";
hgs
parents: 21
diff changeset
   353
            }
hgs
parents: 21
diff changeset
   354
        case EMetaDataArtist:
hgs
parents: 21
diff changeset
   355
            {
hgs
parents: 21
diff changeset
   356
            return "KhronosArtist";
hgs
parents: 21
diff changeset
   357
            }
hgs
parents: 21
diff changeset
   358
        case EMetaDataAlbum:
hgs
parents: 21
diff changeset
   359
            {
hgs
parents: 21
diff changeset
   360
            return "KhronosAlbum";
hgs
parents: 21
diff changeset
   361
            }
hgs
parents: 21
diff changeset
   362
        case EMetaDataYear:
hgs
parents: 21
diff changeset
   363
            {
hgs
parents: 21
diff changeset
   364
            return "KhronosYear";
hgs
parents: 21
diff changeset
   365
            }
hgs
parents: 21
diff changeset
   366
        case EMetaDataComment:
hgs
parents: 21
diff changeset
   367
            {
hgs
parents: 21
diff changeset
   368
            return "KhronosComment";
hgs
parents: 21
diff changeset
   369
            }
hgs
parents: 21
diff changeset
   370
        case EMetaDataAlbumTrack:
hgs
parents: 21
diff changeset
   371
            {
hgs
parents: 21
diff changeset
   372
            return "KhronosTrackNumber";
hgs
parents: 21
diff changeset
   373
            }
hgs
parents: 21
diff changeset
   374
        case EMetaDataGenre:
hgs
parents: 21
diff changeset
   375
            {
hgs
parents: 21
diff changeset
   376
            return "KhronosGenre";
hgs
parents: 21
diff changeset
   377
            }
hgs
parents: 21
diff changeset
   378
        case EMetaDataComposer:
hgs
parents: 21
diff changeset
   379
            {
hgs
parents: 21
diff changeset
   380
            return "Composer"; //Non Standard
hgs
parents: 21
diff changeset
   381
            }
hgs
parents: 21
diff changeset
   382
        case EMetaDataCopyright:
hgs
parents: 21
diff changeset
   383
            {
hgs
parents: 21
diff changeset
   384
            return "KhronosCopyright";
hgs
parents: 21
diff changeset
   385
            }
hgs
parents: 21
diff changeset
   386
        case EMetaDataOriginalArtist:
hgs
parents: 21
diff changeset
   387
            {
hgs
parents: 21
diff changeset
   388
            return "Original Artist"; //Non Standard
hgs
parents: 21
diff changeset
   389
            }
hgs
parents: 21
diff changeset
   390
        case EMetaDataUserUrl:
hgs
parents: 21
diff changeset
   391
        case EMetaDataUrl:
hgs
parents: 21
diff changeset
   392
            {
hgs
parents: 21
diff changeset
   393
            return "KhronosContentURL";
hgs
parents: 21
diff changeset
   394
            }
hgs
parents: 21
diff changeset
   395
        case EMetaDataJpeg:
hgs
parents: 21
diff changeset
   396
            {
hgs
parents: 21
diff changeset
   397
            return "attachedpicture";//"KhronosAlbumArtJPEG";
hgs
parents: 21
diff changeset
   398
            }
hgs
parents: 21
diff changeset
   399
        case EMetaDataVendor:
hgs
parents: 21
diff changeset
   400
            {
hgs
parents: 21
diff changeset
   401
            return "Vendor"; //Non Standard
hgs
parents: 21
diff changeset
   402
            }
hgs
parents: 21
diff changeset
   403
        case EMetaDataRating:
hgs
parents: 21
diff changeset
   404
            {
hgs
parents: 21
diff changeset
   405
            return "KhronosRating";
hgs
parents: 21
diff changeset
   406
            }
hgs
parents: 21
diff changeset
   407
        case EMetaDataDuration:
hgs
parents: 21
diff changeset
   408
            {
hgs
parents: 21
diff changeset
   409
            return "Duration"; //Non Standard
hgs
parents: 21
diff changeset
   410
            }
hgs
parents: 21
diff changeset
   411
        default:
hgs
parents: 21
diff changeset
   412
            {
hgs
parents: 21
diff changeset
   413
            }
hgs
parents: 21
diff changeset
   414
        }
hgs
parents: 21
diff changeset
   415
hgs
parents: 21
diff changeset
   416
    return "UnSupported";
hgs
parents: 21
diff changeset
   417
    }
19
hgs
parents:
diff changeset
   418
hgs
parents:
diff changeset
   419
TInt CS60MetadataUtilityItf::ValueEncoding(TMetaDataFieldId fldID)
25
hgs
parents: 21
diff changeset
   420
    {
hgs
parents: 21
diff changeset
   421
    switch (fldID)
hgs
parents: 21
diff changeset
   422
        {
hgs
parents: 21
diff changeset
   423
        case EMetaDataJpeg:
hgs
parents: 21
diff changeset
   424
            {
hgs
parents: 21
diff changeset
   425
            return CMetadataUtilityItf::EBinaryEncoding;
hgs
parents: 21
diff changeset
   426
            }
hgs
parents: 21
diff changeset
   427
hgs
parents: 21
diff changeset
   428
        case EMetaDataSongTitle:
hgs
parents: 21
diff changeset
   429
        case EMetaDataArtist:
hgs
parents: 21
diff changeset
   430
        case EMetaDataAlbum:
hgs
parents: 21
diff changeset
   431
        case EMetaDataYear:
hgs
parents: 21
diff changeset
   432
        case EMetaDataComment:
hgs
parents: 21
diff changeset
   433
        case EMetaDataAlbumTrack:
hgs
parents: 21
diff changeset
   434
        case EMetaDataGenre:
hgs
parents: 21
diff changeset
   435
        case EMetaDataComposer:
hgs
parents: 21
diff changeset
   436
        case EMetaDataCopyright:
hgs
parents: 21
diff changeset
   437
        case EMetaDataOriginalArtist:
hgs
parents: 21
diff changeset
   438
        case EMetaDataUserUrl:
hgs
parents: 21
diff changeset
   439
        case EMetaDataUrl:
hgs
parents: 21
diff changeset
   440
        case EMetaDataVendor:
hgs
parents: 21
diff changeset
   441
        case EMetaDataRating:
hgs
parents: 21
diff changeset
   442
        case EMetaDataDuration:
hgs
parents: 21
diff changeset
   443
        default:
hgs
parents: 21
diff changeset
   444
            {
hgs
parents: 21
diff changeset
   445
            return CMetadataUtilityItf::EUnicodeEncoding;
hgs
parents: 21
diff changeset
   446
            }
hgs
parents: 21
diff changeset
   447
        }
hgs
parents: 21
diff changeset
   448
hgs
parents: 21
diff changeset
   449
    }
19
hgs
parents:
diff changeset
   450
char* CS60MetadataUtilityItf::GetKey(TInt index)
25
hgs
parents: 21
diff changeset
   451
    {
hgs
parents: 21
diff changeset
   452
hgs
parents: 21
diff changeset
   453
    if (pMetaDataUtility && index < uNumMetadataItems)
hgs
parents: 21
diff changeset
   454
        {
hgs
parents: 21
diff changeset
   455
hgs
parents: 21
diff changeset
   456
        TMetaDataFieldId fieldId;
19
hgs
parents:
diff changeset
   457
25
hgs
parents: 21
diff changeset
   458
        TAG_TIME_PROFILING_BEGIN;
hgs
parents: 21
diff changeset
   459
        TInt err = KErrGeneral;
hgs
parents: 21
diff changeset
   460
        TRAP(err, pMetaDataUtility->MetaDataFieldsL().FieldIdAt( index, fieldId )); 
hgs
parents: 21
diff changeset
   461
        TAG_TIME_PROFILING_END; 
hgs
parents: 21
diff changeset
   462
        PRINT_TO_CONSOLE_TIME_DIFF;
hgs
parents: 21
diff changeset
   463
hgs
parents: 21
diff changeset
   464
        if ((err == KErrNone) && (fieldId != EUnknownMetaDataField))
hgs
parents: 21
diff changeset
   465
            {
hgs
parents: 21
diff changeset
   466
            return KeyMapping(fieldId);
hgs
parents: 21
diff changeset
   467
            }
hgs
parents: 21
diff changeset
   468
        }
hgs
parents: 21
diff changeset
   469
    return NULL;
hgs
parents: 21
diff changeset
   470
    }
19
hgs
parents:
diff changeset
   471
hgs
parents:
diff changeset
   472
TInt CS60MetadataUtilityItf::GetValueSize(TInt index)
25
hgs
parents: 21
diff changeset
   473
    {
hgs
parents: 21
diff changeset
   474
    if (pMetaDataUtility && index < uNumMetadataItems)
hgs
parents: 21
diff changeset
   475
        {
hgs
parents: 21
diff changeset
   476
hgs
parents: 21
diff changeset
   477
        TMetaDataFieldId fieldId;
hgs
parents: 21
diff changeset
   478
        TInt err = KErrGeneral;
hgs
parents: 21
diff changeset
   479
        TRAP(err, pMetaDataUtility->MetaDataFieldsL().FieldIdAt( index, fieldId ));
19
hgs
parents:
diff changeset
   480
25
hgs
parents: 21
diff changeset
   481
        if ((err == KErrNone) && (fieldId != EUnknownMetaDataField))
hgs
parents: 21
diff changeset
   482
            {
hgs
parents: 21
diff changeset
   483
            const CMetaDataFieldContainer* iContainer = NULL;
hgs
parents: 21
diff changeset
   484
            TRAP(err, iContainer = &pMetaDataUtility->MetaDataFieldsL());
hgs
parents: 21
diff changeset
   485
            if (err == KErrNone)
hgs
parents: 21
diff changeset
   486
                {
hgs
parents: 21
diff changeset
   487
                if (ValueEncoding(fieldId)
hgs
parents: 21
diff changeset
   488
                        == CMetadataUtilityItf::EUnicodeEncoding)
hgs
parents: 21
diff changeset
   489
                    {
hgs
parents: 21
diff changeset
   490
                    TPtrC field = iContainer->Field(fieldId);
hgs
parents: 21
diff changeset
   491
                    if (field != KNullDesC)
hgs
parents: 21
diff changeset
   492
                        {
hgs
parents: 21
diff changeset
   493
                        return field.Size() + 2; //additional character (two bytes) for null terminator
hgs
parents: 21
diff changeset
   494
                        }
hgs
parents: 21
diff changeset
   495
                    }
hgs
parents: 21
diff changeset
   496
                else //Binary
hgs
parents: 21
diff changeset
   497
                    {
hgs
parents: 21
diff changeset
   498
                    TPtrC8 field8 = iContainer->Field8(fieldId);
hgs
parents: 21
diff changeset
   499
                    if (field8 != KNullDesC8)
hgs
parents: 21
diff changeset
   500
                        {
hgs
parents: 21
diff changeset
   501
                        return field8.Size();
hgs
parents: 21
diff changeset
   502
                        }
hgs
parents: 21
diff changeset
   503
                    }
hgs
parents: 21
diff changeset
   504
                }
hgs
parents: 21
diff changeset
   505
            }
hgs
parents: 21
diff changeset
   506
        }
19
hgs
parents:
diff changeset
   507
25
hgs
parents: 21
diff changeset
   508
    return 0;
hgs
parents: 21
diff changeset
   509
    }
19
hgs
parents:
diff changeset
   510
25
hgs
parents: 21
diff changeset
   511
TInt CS60MetadataUtilityItf::GetValue(TInt index, char* data, TInt maxLength, //in params
hgs
parents: 21
diff changeset
   512
        TInt* outSize, TInt* encodingType) //out params
hgs
parents: 21
diff changeset
   513
    {
hgs
parents: 21
diff changeset
   514
hgs
parents: 21
diff changeset
   515
    TInt retValueSize = 0;
hgs
parents: 21
diff changeset
   516
    *encodingType = CMetadataUtilityItf::EUnknownEncoding;
hgs
parents: 21
diff changeset
   517
hgs
parents: 21
diff changeset
   518
    if (pMetaDataUtility && index < uNumMetadataItems)
hgs
parents: 21
diff changeset
   519
        {
19
hgs
parents:
diff changeset
   520
25
hgs
parents: 21
diff changeset
   521
        TMetaDataFieldId fieldId;
hgs
parents: 21
diff changeset
   522
        TInt err = KErrGeneral;
hgs
parents: 21
diff changeset
   523
        TRAP(err, pMetaDataUtility->MetaDataFieldsL().FieldIdAt( index, fieldId ));
hgs
parents: 21
diff changeset
   524
hgs
parents: 21
diff changeset
   525
        if ((err == KErrNone) && (fieldId != EUnknownMetaDataField))
hgs
parents: 21
diff changeset
   526
            {
hgs
parents: 21
diff changeset
   527
hgs
parents: 21
diff changeset
   528
            const CMetaDataFieldContainer* iContainer = NULL;
hgs
parents: 21
diff changeset
   529
            TRAP(err, iContainer = &pMetaDataUtility->MetaDataFieldsL());
hgs
parents: 21
diff changeset
   530
            if (err == KErrNone)
hgs
parents: 21
diff changeset
   531
                {
hgs
parents: 21
diff changeset
   532
                *encodingType = ValueEncoding(fieldId);
hgs
parents: 21
diff changeset
   533
                if (*encodingType == CMetadataUtilityItf::EUnicodeEncoding)
hgs
parents: 21
diff changeset
   534
                    {
19
hgs
parents:
diff changeset
   535
25
hgs
parents: 21
diff changeset
   536
                    TAG_TIME_PROFILING_BEGIN;
hgs
parents: 21
diff changeset
   537
                    TPtrC field = iContainer->Field(fieldId);
hgs
parents: 21
diff changeset
   538
                    TAG_TIME_PROFILING_END;
hgs
parents: 21
diff changeset
   539
                    PRINT_TO_CONSOLE_TIME_DIFF;
hgs
parents: 21
diff changeset
   540
                    if (field != KNullDesC)
hgs
parents: 21
diff changeset
   541
                        {
hgs
parents: 21
diff changeset
   542
                        *outSize = CMetadataUtilityItf::ExtractUCS2(field,
hgs
parents: 21
diff changeset
   543
                                data, maxLength);
hgs
parents: 21
diff changeset
   544
                        retValueSize = field.Size() + 2; //actual size
hgs
parents: 21
diff changeset
   545
                        }
hgs
parents: 21
diff changeset
   546
                    }
hgs
parents: 21
diff changeset
   547
                else //Binary
hgs
parents: 21
diff changeset
   548
                    {
hgs
parents: 21
diff changeset
   549
hgs
parents: 21
diff changeset
   550
                    TAG_TIME_PROFILING_BEGIN;
hgs
parents: 21
diff changeset
   551
                    TPtrC8 field8 = iContainer->Field8(fieldId);
hgs
parents: 21
diff changeset
   552
                    TAG_TIME_PROFILING_END;
hgs
parents: 21
diff changeset
   553
                    PRINT_TO_CONSOLE_TIME_DIFF;
hgs
parents: 21
diff changeset
   554
                    if (field8 != KNullDesC8)
hgs
parents: 21
diff changeset
   555
                        {
hgs
parents: 21
diff changeset
   556
                        *outSize
hgs
parents: 21
diff changeset
   557
                                = (maxLength > field8.Size())
hgs
parents: 21
diff changeset
   558
                                                              ? field8.Size()
hgs
parents: 21
diff changeset
   559
                                                                 : maxLength;
hgs
parents: 21
diff changeset
   560
                        memcpy(data, field8.Ptr(), *outSize);
hgs
parents: 21
diff changeset
   561
                        retValueSize = field8.Size();
hgs
parents: 21
diff changeset
   562
                        }
hgs
parents: 21
diff changeset
   563
                    }
hgs
parents: 21
diff changeset
   564
                }
hgs
parents: 21
diff changeset
   565
            }
hgs
parents: 21
diff changeset
   566
        }
hgs
parents: 21
diff changeset
   567
hgs
parents: 21
diff changeset
   568
    return retValueSize;
hgs
parents: 21
diff changeset
   569
    }
19
hgs
parents:
diff changeset
   570
hgs
parents:
diff changeset
   571
TInt CS60MetadataUtilityItf::Reset()
25
hgs
parents: 21
diff changeset
   572
    {
hgs
parents: 21
diff changeset
   573
    TInt err = KErrNone;
hgs
parents: 21
diff changeset
   574
    if (pMetaDataUtility)
hgs
parents: 21
diff changeset
   575
        {
hgs
parents: 21
diff changeset
   576
        TRAP(err, pMetaDataUtility->ResetL());
hgs
parents: 21
diff changeset
   577
        }
19
hgs
parents:
diff changeset
   578
25
hgs
parents: 21
diff changeset
   579
    return err;
hgs
parents: 21
diff changeset
   580
    }
19
hgs
parents:
diff changeset
   581
25
hgs
parents: 21
diff changeset
   582
CHXMetadataUtilityItf::CHXMetadataUtilityItf() :
hgs
parents: 21
diff changeset
   583
    pHXMetaDataUtility(NULL)
hgs
parents: 21
diff changeset
   584
    {
hgs
parents: 21
diff changeset
   585
    }
19
hgs
parents:
diff changeset
   586
hgs
parents:
diff changeset
   587
void CHXMetadataUtilityItf::ConstructL()
25
hgs
parents: 21
diff changeset
   588
    {
hgs
parents: 21
diff changeset
   589
    TAG_TIME_PROFILING_BEGIN;
hgs
parents: 21
diff changeset
   590
    pHXMetaDataUtility = CHXMetaDataUtility::NewL();
hgs
parents: 21
diff changeset
   591
    TAG_TIME_PROFILING_END; 
hgs
parents: 21
diff changeset
   592
    PRINT_TO_CONSOLE_TIME_DIFF;
hgs
parents: 21
diff changeset
   593
    }
19
hgs
parents:
diff changeset
   594
hgs
parents:
diff changeset
   595
CHXMetadataUtilityItf* CHXMetadataUtilityItf::New()
25
hgs
parents: 21
diff changeset
   596
    {
hgs
parents: 21
diff changeset
   597
    CHXMetadataUtilityItf* self = new CHXMetadataUtilityItf();
hgs
parents: 21
diff changeset
   598
hgs
parents: 21
diff changeset
   599
    if (self)
hgs
parents: 21
diff changeset
   600
        {
hgs
parents: 21
diff changeset
   601
        TInt err = KErrGeneral;
hgs
parents: 21
diff changeset
   602
        TRAP(err, self->ConstructL());
19
hgs
parents:
diff changeset
   603
25
hgs
parents: 21
diff changeset
   604
        if (err != KErrNone)
hgs
parents: 21
diff changeset
   605
            {
hgs
parents: 21
diff changeset
   606
            delete self;
hgs
parents: 21
diff changeset
   607
            self = NULL;
hgs
parents: 21
diff changeset
   608
            }
hgs
parents: 21
diff changeset
   609
        }
hgs
parents: 21
diff changeset
   610
hgs
parents: 21
diff changeset
   611
    return self;
hgs
parents: 21
diff changeset
   612
    }
hgs
parents: 21
diff changeset
   613
19
hgs
parents:
diff changeset
   614
CHXMetadataUtilityItf::~CHXMetadataUtilityItf()
25
hgs
parents: 21
diff changeset
   615
    {
hgs
parents: 21
diff changeset
   616
    if (pHXMetaDataUtility)
hgs
parents: 21
diff changeset
   617
        {
hgs
parents: 21
diff changeset
   618
        TInt err = KErrGeneral;
19
hgs
parents:
diff changeset
   619
25
hgs
parents: 21
diff changeset
   620
        TAG_TIME_PROFILING_BEGIN;
hgs
parents: 21
diff changeset
   621
        TRAP(err, pHXMetaDataUtility->ResetL());
hgs
parents: 21
diff changeset
   622
        delete pHXMetaDataUtility;
hgs
parents: 21
diff changeset
   623
        TAG_TIME_PROFILING_END; 
hgs
parents: 21
diff changeset
   624
        PRINT_TO_CONSOLE_TIME_DIFF;
hgs
parents: 21
diff changeset
   625
        }
hgs
parents: 21
diff changeset
   626
hgs
parents: 21
diff changeset
   627
    pHXMetaDataUtility = NULL;
hgs
parents: 21
diff changeset
   628
    }
19
hgs
parents:
diff changeset
   629
hgs
parents:
diff changeset
   630
TInt CHXMetadataUtilityItf::Reset()
25
hgs
parents: 21
diff changeset
   631
    {
hgs
parents: 21
diff changeset
   632
    TInt err = KErrNone;
hgs
parents: 21
diff changeset
   633
    if (pHXMetaDataUtility)
hgs
parents: 21
diff changeset
   634
        {
hgs
parents: 21
diff changeset
   635
        TRAP(err, pHXMetaDataUtility->ResetL());
hgs
parents: 21
diff changeset
   636
        }
19
hgs
parents:
diff changeset
   637
25
hgs
parents: 21
diff changeset
   638
    return err;
hgs
parents: 21
diff changeset
   639
    }
19
hgs
parents:
diff changeset
   640
hgs
parents:
diff changeset
   641
TInt CHXMetadataUtilityItf::ParseSource(TDesC& fileName)
25
hgs
parents: 21
diff changeset
   642
    {
hgs
parents: 21
diff changeset
   643
    TInt err = KErrGeneral;
19
hgs
parents:
diff changeset
   644
25
hgs
parents: 21
diff changeset
   645
    if (pHXMetaDataUtility)
hgs
parents: 21
diff changeset
   646
        {
hgs
parents: 21
diff changeset
   647
        //open with the file handle
hgs
parents: 21
diff changeset
   648
        TAG_TIME_PROFILING_BEGIN;
hgs
parents: 21
diff changeset
   649
        TRAP(err, pHXMetaDataUtility->OpenFileL(fileName)); 
hgs
parents: 21
diff changeset
   650
        TAG_TIME_PROFILING_END; 
hgs
parents: 21
diff changeset
   651
        PRINT_TO_CONSOLE_TIME_DIFF;
19
hgs
parents:
diff changeset
   652
25
hgs
parents: 21
diff changeset
   653
        if (err == KErrNone)
hgs
parents: 21
diff changeset
   654
            {
hgs
parents: 21
diff changeset
   655
            return pHXMetaDataUtility->GetMetaDataCount(uNumMetadataItems);
hgs
parents: 21
diff changeset
   656
            }
hgs
parents: 21
diff changeset
   657
        }
19
hgs
parents:
diff changeset
   658
25
hgs
parents: 21
diff changeset
   659
    return err;
hgs
parents: 21
diff changeset
   660
    }
19
hgs
parents:
diff changeset
   661
hgs
parents:
diff changeset
   662
TInt CHXMetadataUtilityItf::CalculateNumMetadataItems(TUint* numItems)
25
hgs
parents: 21
diff changeset
   663
    {
hgs
parents: 21
diff changeset
   664
    TInt err = KErrGeneral;
19
hgs
parents:
diff changeset
   665
25
hgs
parents: 21
diff changeset
   666
    if (pHXMetaDataUtility && numItems)
hgs
parents: 21
diff changeset
   667
        {
hgs
parents: 21
diff changeset
   668
        *numItems = uNumMetadataItems;
hgs
parents: 21
diff changeset
   669
        err = KErrNone;
hgs
parents: 21
diff changeset
   670
        }
19
hgs
parents:
diff changeset
   671
25
hgs
parents: 21
diff changeset
   672
    return err;
hgs
parents: 21
diff changeset
   673
    }
19
hgs
parents:
diff changeset
   674
hgs
parents:
diff changeset
   675
char* CHXMetadataUtilityItf::KeyMapping(HXMetaDataKeys::EHXMetaDataId fldID)
25
hgs
parents: 21
diff changeset
   676
    {
hgs
parents: 21
diff changeset
   677
hgs
parents: 21
diff changeset
   678
    switch (fldID)
hgs
parents: 21
diff changeset
   679
        {
hgs
parents: 21
diff changeset
   680
hgs
parents: 21
diff changeset
   681
        case HXMetaDataKeys::EHXTitle:
hgs
parents: 21
diff changeset
   682
            {
hgs
parents: 21
diff changeset
   683
            return "KhronosTitle";
hgs
parents: 21
diff changeset
   684
            }
hgs
parents: 21
diff changeset
   685
        case HXMetaDataKeys::EHXPerformer:
hgs
parents: 21
diff changeset
   686
            {
hgs
parents: 21
diff changeset
   687
            return "KhronosArtist";
hgs
parents: 21
diff changeset
   688
            }
hgs
parents: 21
diff changeset
   689
        case HXMetaDataKeys::EHXDescription:
hgs
parents: 21
diff changeset
   690
            {
hgs
parents: 21
diff changeset
   691
            return "KhronosComment";
hgs
parents: 21
diff changeset
   692
            }
hgs
parents: 21
diff changeset
   693
        case HXMetaDataKeys::EHXGenre:
hgs
parents: 21
diff changeset
   694
            {
hgs
parents: 21
diff changeset
   695
            return "KhronosGenre";
hgs
parents: 21
diff changeset
   696
            }
hgs
parents: 21
diff changeset
   697
        case HXMetaDataKeys::EHXAuthor:
hgs
parents: 21
diff changeset
   698
            {
hgs
parents: 21
diff changeset
   699
            return "Composer"; //Non Standard
hgs
parents: 21
diff changeset
   700
            }
hgs
parents: 21
diff changeset
   701
        case HXMetaDataKeys::EHXCopyright:
hgs
parents: 21
diff changeset
   702
            {
hgs
parents: 21
diff changeset
   703
            return "KhronosCopyright";
hgs
parents: 21
diff changeset
   704
            }
hgs
parents: 21
diff changeset
   705
        case HXMetaDataKeys::EHXContentURI:
hgs
parents: 21
diff changeset
   706
            {
hgs
parents: 21
diff changeset
   707
            return "KhronosContentURL";
hgs
parents: 21
diff changeset
   708
            }
hgs
parents: 21
diff changeset
   709
        case HXMetaDataKeys::EHXDuration:
hgs
parents: 21
diff changeset
   710
            {
hgs
parents: 21
diff changeset
   711
            return "Duration"; //Non Standard
hgs
parents: 21
diff changeset
   712
            }
hgs
parents: 21
diff changeset
   713
        case HXMetaDataKeys::EHXClipBitRate:
hgs
parents: 21
diff changeset
   714
            {
hgs
parents: 21
diff changeset
   715
            return "ClipBitRate"; //non-standard
hgs
parents: 21
diff changeset
   716
            }
hgs
parents: 21
diff changeset
   717
        case HXMetaDataKeys::EHXVideoBitRate:
hgs
parents: 21
diff changeset
   718
            {
hgs
parents: 21
diff changeset
   719
            return "VideoBitRate"; // non-standard
hgs
parents: 21
diff changeset
   720
            }
hgs
parents: 21
diff changeset
   721
        case HXMetaDataKeys::EHXAudioBitRate:
hgs
parents: 21
diff changeset
   722
            {
hgs
parents: 21
diff changeset
   723
            return "AudioBitRate";
hgs
parents: 21
diff changeset
   724
            }
hgs
parents: 21
diff changeset
   725
        case HXMetaDataKeys::EHXCodec:
hgs
parents: 21
diff changeset
   726
            {
hgs
parents: 21
diff changeset
   727
            return "Codec";
hgs
parents: 21
diff changeset
   728
            }
hgs
parents: 21
diff changeset
   729
        case HXMetaDataKeys::EHXFrameSize:
hgs
parents: 21
diff changeset
   730
            {
hgs
parents: 21
diff changeset
   731
            return "Resolution";
hgs
parents: 21
diff changeset
   732
            }
hgs
parents: 21
diff changeset
   733
        case HXMetaDataKeys::EHXFramesPerSecond:
hgs
parents: 21
diff changeset
   734
            {
hgs
parents: 21
diff changeset
   735
            return "FrameRate";
hgs
parents: 21
diff changeset
   736
            }
hgs
parents: 21
diff changeset
   737
        case HXMetaDataKeys::EHXStreamCount:
hgs
parents: 21
diff changeset
   738
            {
hgs
parents: 21
diff changeset
   739
            return "Stream Count";
hgs
parents: 21
diff changeset
   740
            }
hgs
parents: 21
diff changeset
   741
        case HXMetaDataKeys::EHXLiveStream:
hgs
parents: 21
diff changeset
   742
            {
hgs
parents: 21
diff changeset
   743
            return "Live Stream";
hgs
parents: 21
diff changeset
   744
            }
19
hgs
parents:
diff changeset
   745
        case HXMetaDataKeys::EHXSeekable:
25
hgs
parents: 21
diff changeset
   746
            {
hgs
parents: 21
diff changeset
   747
            return "Seekable";
hgs
parents: 21
diff changeset
   748
            }
19
hgs
parents:
diff changeset
   749
        case HXMetaDataKeys::EHXContentType:
25
hgs
parents: 21
diff changeset
   750
            {
hgs
parents: 21
diff changeset
   751
            return "Content Type";
hgs
parents: 21
diff changeset
   752
            }
hgs
parents: 21
diff changeset
   753
        case HXMetaDataKeys::EHXFormat:
hgs
parents: 21
diff changeset
   754
            {
hgs
parents: 21
diff changeset
   755
            return "Format";
hgs
parents: 21
diff changeset
   756
            }
19
hgs
parents:
diff changeset
   757
        case HXMetaDataKeys::EHXQuality:
25
hgs
parents: 21
diff changeset
   758
            {
hgs
parents: 21
diff changeset
   759
            return "Quality";
hgs
parents: 21
diff changeset
   760
            }
19
hgs
parents:
diff changeset
   761
        case HXMetaDataKeys::EHXAbstract:
25
hgs
parents: 21
diff changeset
   762
            {
hgs
parents: 21
diff changeset
   763
            return "Abstract";
hgs
parents: 21
diff changeset
   764
            }
hgs
parents: 21
diff changeset
   765
        case HXMetaDataKeys::EHXMimeType:
hgs
parents: 21
diff changeset
   766
            {
hgs
parents: 21
diff changeset
   767
            return "MimeType";
hgs
parents: 21
diff changeset
   768
            }
hgs
parents: 21
diff changeset
   769
        case HXMetaDataKeys::EHXIconURI:
hgs
parents: 21
diff changeset
   770
            {
hgs
parents: 21
diff changeset
   771
            return "Icon URI";
hgs
parents: 21
diff changeset
   772
            }
19
hgs
parents:
diff changeset
   773
        case HXMetaDataKeys::EHXEPreviewURI:
25
hgs
parents: 21
diff changeset
   774
            {
hgs
parents: 21
diff changeset
   775
            return "Preview URI";
hgs
parents: 21
diff changeset
   776
            }
19
hgs
parents:
diff changeset
   777
        case HXMetaDataKeys::EHXContentID:
25
hgs
parents: 21
diff changeset
   778
            {
hgs
parents: 21
diff changeset
   779
            return "Content ID";
hgs
parents: 21
diff changeset
   780
            }
19
hgs
parents:
diff changeset
   781
        case HXMetaDataKeys::EHXInfoURL:
25
hgs
parents: 21
diff changeset
   782
            {
hgs
parents: 21
diff changeset
   783
            return "Info URL";
hgs
parents: 21
diff changeset
   784
            }
hgs
parents: 21
diff changeset
   785
        default:
hgs
parents: 21
diff changeset
   786
            {
hgs
parents: 21
diff changeset
   787
            }
hgs
parents: 21
diff changeset
   788
        }
19
hgs
parents:
diff changeset
   789
25
hgs
parents: 21
diff changeset
   790
    return "UnSupported";
hgs
parents: 21
diff changeset
   791
    }
19
hgs
parents:
diff changeset
   792
hgs
parents:
diff changeset
   793
TInt CHXMetadataUtilityItf::ValueEncoding(HXMetaDataKeys::EHXMetaDataId fldID)
25
hgs
parents: 21
diff changeset
   794
    {
hgs
parents: 21
diff changeset
   795
    switch (fldID)
hgs
parents: 21
diff changeset
   796
        {
hgs
parents: 21
diff changeset
   797
        default:
hgs
parents: 21
diff changeset
   798
            {
hgs
parents: 21
diff changeset
   799
            return CMetadataUtilityItf::EUnicodeEncoding;
hgs
parents: 21
diff changeset
   800
            }
hgs
parents: 21
diff changeset
   801
        }
hgs
parents: 21
diff changeset
   802
hgs
parents: 21
diff changeset
   803
    }
19
hgs
parents:
diff changeset
   804
char* CHXMetadataUtilityItf::GetKey(TInt index)
25
hgs
parents: 21
diff changeset
   805
    {
19
hgs
parents:
diff changeset
   806
25
hgs
parents: 21
diff changeset
   807
    if (pHXMetaDataUtility && index < uNumMetadataItems)
hgs
parents: 21
diff changeset
   808
        {
hgs
parents: 21
diff changeset
   809
        HXMetaDataKeys::EHXMetaDataId id;
hgs
parents: 21
diff changeset
   810
        HBufC* pDes;
hgs
parents: 21
diff changeset
   811
hgs
parents: 21
diff changeset
   812
        TAG_TIME_PROFILING_BEGIN;
hgs
parents: 21
diff changeset
   813
        TInt err = pHXMetaDataUtility->GetMetaDataAt(index, id, pDes);
hgs
parents: 21
diff changeset
   814
        TAG_TIME_PROFILING_END; 
hgs
parents: 21
diff changeset
   815
        PRINT_TO_CONSOLE_TIME_DIFF;
hgs
parents: 21
diff changeset
   816
hgs
parents: 21
diff changeset
   817
        if (err == KErrNone)
hgs
parents: 21
diff changeset
   818
            {
hgs
parents: 21
diff changeset
   819
            return KeyMapping(id);
hgs
parents: 21
diff changeset
   820
            }
hgs
parents: 21
diff changeset
   821
        }
hgs
parents: 21
diff changeset
   822
    return NULL;
hgs
parents: 21
diff changeset
   823
    }
19
hgs
parents:
diff changeset
   824
hgs
parents:
diff changeset
   825
TInt CHXMetadataUtilityItf::GetValueSize(TInt index)
25
hgs
parents: 21
diff changeset
   826
    {
hgs
parents: 21
diff changeset
   827
    if (pHXMetaDataUtility && index < uNumMetadataItems)
hgs
parents: 21
diff changeset
   828
        {
hgs
parents: 21
diff changeset
   829
        HXMetaDataKeys::EHXMetaDataId id;
hgs
parents: 21
diff changeset
   830
        HBufC* pDes;
hgs
parents: 21
diff changeset
   831
hgs
parents: 21
diff changeset
   832
        TInt err = pHXMetaDataUtility->GetMetaDataAt(index, id, pDes);
19
hgs
parents:
diff changeset
   833
25
hgs
parents: 21
diff changeset
   834
        if (err == KErrNone)
hgs
parents: 21
diff changeset
   835
            {
hgs
parents: 21
diff changeset
   836
            if (ValueEncoding(id) == CMetadataUtilityItf::EUnicodeEncoding)
hgs
parents: 21
diff changeset
   837
                {
hgs
parents: 21
diff changeset
   838
                return pDes->Size() + 2; //additional character (two bytes) for null terminator
hgs
parents: 21
diff changeset
   839
                }
hgs
parents: 21
diff changeset
   840
            else //Binary
hgs
parents: 21
diff changeset
   841
                {
hgs
parents: 21
diff changeset
   842
                //no support
hgs
parents: 21
diff changeset
   843
                }
hgs
parents: 21
diff changeset
   844
            }
hgs
parents: 21
diff changeset
   845
        }
19
hgs
parents:
diff changeset
   846
25
hgs
parents: 21
diff changeset
   847
    return 0;
hgs
parents: 21
diff changeset
   848
    }
hgs
parents: 21
diff changeset
   849
hgs
parents: 21
diff changeset
   850
TInt CHXMetadataUtilityItf::GetValue(TInt index, char* data, TInt maxLength, //in params
hgs
parents: 21
diff changeset
   851
        TInt* outSize, TInt* encodingType) //out params
hgs
parents: 21
diff changeset
   852
    {
hgs
parents: 21
diff changeset
   853
hgs
parents: 21
diff changeset
   854
    TInt retValueSize = 0;
hgs
parents: 21
diff changeset
   855
    *encodingType = CMetadataUtilityItf::EUnknownEncoding;
19
hgs
parents:
diff changeset
   856
25
hgs
parents: 21
diff changeset
   857
    if (pHXMetaDataUtility && index < uNumMetadataItems)
hgs
parents: 21
diff changeset
   858
        {
hgs
parents: 21
diff changeset
   859
        HXMetaDataKeys::EHXMetaDataId id;
hgs
parents: 21
diff changeset
   860
        HBufC* pDes;
hgs
parents: 21
diff changeset
   861
hgs
parents: 21
diff changeset
   862
        TAG_TIME_PROFILING_BEGIN;
hgs
parents: 21
diff changeset
   863
        TInt err = pHXMetaDataUtility->GetMetaDataAt(index, id, pDes);
hgs
parents: 21
diff changeset
   864
        TAG_TIME_PROFILING_END; 
hgs
parents: 21
diff changeset
   865
        PRINT_TO_CONSOLE_TIME_DIFF;
hgs
parents: 21
diff changeset
   866
hgs
parents: 21
diff changeset
   867
        *encodingType = ValueEncoding(id);
19
hgs
parents:
diff changeset
   868
25
hgs
parents: 21
diff changeset
   869
        if (err == KErrNone)
hgs
parents: 21
diff changeset
   870
            {
hgs
parents: 21
diff changeset
   871
            if (*encodingType == CMetadataUtilityItf::EUnicodeEncoding)
hgs
parents: 21
diff changeset
   872
                {
hgs
parents: 21
diff changeset
   873
                *outSize = CMetadataUtilityItf::ExtractUCS2(*pDes, data,
hgs
parents: 21
diff changeset
   874
                        maxLength);
hgs
parents: 21
diff changeset
   875
                retValueSize = pDes->Size() + 2; //actual Size	
hgs
parents: 21
diff changeset
   876
                }
hgs
parents: 21
diff changeset
   877
            else //Binary
hgs
parents: 21
diff changeset
   878
                {
hgs
parents: 21
diff changeset
   879
                //no support
hgs
parents: 21
diff changeset
   880
                }
hgs
parents: 21
diff changeset
   881
            }
hgs
parents: 21
diff changeset
   882
        }
19
hgs
parents:
diff changeset
   883
25
hgs
parents: 21
diff changeset
   884
    return retValueSize;
hgs
parents: 21
diff changeset
   885
    }
19
hgs
parents:
diff changeset
   886
25
hgs
parents: 21
diff changeset
   887
extern "C"
hgs
parents: 21
diff changeset
   888
    {
19
hgs
parents:
diff changeset
   889
hgs
parents:
diff changeset
   890
    void* mmf_metadata_utility_init(char* uri)
25
hgs
parents: 21
diff changeset
   891
        {
hgs
parents: 21
diff changeset
   892
        return CMetadataUtilityItf::New(uri);
hgs
parents: 21
diff changeset
   893
        }
19
hgs
parents:
diff changeset
   894
hgs
parents:
diff changeset
   895
    void mmf_metadata_utility_destroy(void* context)
25
hgs
parents: 21
diff changeset
   896
        {
hgs
parents: 21
diff changeset
   897
        delete ((CMetadataUtilityItf*) context);
hgs
parents: 21
diff changeset
   898
        }
hgs
parents: 21
diff changeset
   899
hgs
parents: 21
diff changeset
   900
    XAresult mmf_metadata_utility_parse_source(void* context, char* uri)
hgs
parents: 21
diff changeset
   901
        {
hgs
parents: 21
diff changeset
   902
        TInt err = ((CMetadataUtilityItf*) context)->ParseSource(uri);
hgs
parents: 21
diff changeset
   903
hgs
parents: 21
diff changeset
   904
        if (err == KErrNone)
hgs
parents: 21
diff changeset
   905
            {
hgs
parents: 21
diff changeset
   906
            return XA_RESULT_SUCCESS;
hgs
parents: 21
diff changeset
   907
            }
19
hgs
parents:
diff changeset
   908
25
hgs
parents: 21
diff changeset
   909
        return XA_RESULT_PARAMETER_INVALID;
hgs
parents: 21
diff changeset
   910
        }
19
hgs
parents:
diff changeset
   911
25
hgs
parents: 21
diff changeset
   912
    XAresult mmf_get_item_count(void* context, XAuint32* itemCount)
hgs
parents: 21
diff changeset
   913
        {
hgs
parents: 21
diff changeset
   914
        if (itemCount)
hgs
parents: 21
diff changeset
   915
            {
hgs
parents: 21
diff changeset
   916
            TInt err =((CMetadataUtilityItf*) (context))->CalculateNumMetadataItems(
hgs
parents: 21
diff changeset
   917
                                    (TUint *) itemCount);
hgs
parents: 21
diff changeset
   918
            if (err == KErrNone)
hgs
parents: 21
diff changeset
   919
                {
hgs
parents: 21
diff changeset
   920
                return XA_RESULT_SUCCESS;
hgs
parents: 21
diff changeset
   921
                }
hgs
parents: 21
diff changeset
   922
            }
hgs
parents: 21
diff changeset
   923
hgs
parents: 21
diff changeset
   924
        return XA_RESULT_PARAMETER_INVALID;
hgs
parents: 21
diff changeset
   925
        }
19
hgs
parents:
diff changeset
   926
25
hgs
parents: 21
diff changeset
   927
    XAresult mmf_get_key_size(void* context, XAuint32 keyIndex,
hgs
parents: 21
diff changeset
   928
            XAuint32* keySize)
hgs
parents: 21
diff changeset
   929
        {
hgs
parents: 21
diff changeset
   930
        char* key = ((CMetadataUtilityItf*) (context))->GetKey(keyIndex);
hgs
parents: 21
diff changeset
   931
        if (key && keySize)
hgs
parents: 21
diff changeset
   932
            {
hgs
parents: 21
diff changeset
   933
            *keySize = (strlen(key) + sizeof(XAMetadataInfo));
hgs
parents: 21
diff changeset
   934
hgs
parents: 21
diff changeset
   935
            return XA_RESULT_SUCCESS;
hgs
parents: 21
diff changeset
   936
            }
hgs
parents: 21
diff changeset
   937
hgs
parents: 21
diff changeset
   938
        return XA_RESULT_PARAMETER_INVALID;
hgs
parents: 21
diff changeset
   939
        }
19
hgs
parents:
diff changeset
   940
25
hgs
parents: 21
diff changeset
   941
    XAresult mmf_get_key(void* context, XAuint32 index, XAuint32 keySize,
hgs
parents: 21
diff changeset
   942
            XAMetadataInfo *pKey)
hgs
parents: 21
diff changeset
   943
        {
hgs
parents: 21
diff changeset
   944
        XAresult ret = XA_RESULT_PARAMETER_INVALID;
hgs
parents: 21
diff changeset
   945
hgs
parents: 21
diff changeset
   946
        TInt keyDataSize = keySize - sizeof(XAMetadataInfo) + 1;
hgs
parents: 21
diff changeset
   947
        char* ascKey = ((CMetadataUtilityItf*) (context))->GetKey(index);
19
hgs
parents:
diff changeset
   948
25
hgs
parents: 21
diff changeset
   949
        if (ascKey && keyDataSize)
hgs
parents: 21
diff changeset
   950
            {
hgs
parents: 21
diff changeset
   951
            TInt ascKeySize = strlen(ascKey);
hgs
parents: 21
diff changeset
   952
            TInt outSize = (ascKeySize >= keyDataSize)
hgs
parents: 21
diff changeset
   953
                                                       ? (keyDataSize - 1)
hgs
parents: 21
diff changeset
   954
                                                          : ascKeySize;
hgs
parents: 21
diff changeset
   955
hgs
parents: 21
diff changeset
   956
            pKey->size = outSize + 1;
hgs
parents: 21
diff changeset
   957
            pKey->encoding = XA_CHARACTERENCODING_ASCII;
hgs
parents: 21
diff changeset
   958
            strcpy((char *) (pKey->langCountry), "en-us");
hgs
parents: 21
diff changeset
   959
            strncpy((char *) (pKey->data), ascKey, outSize);
hgs
parents: 21
diff changeset
   960
            pKey->data[outSize] = '\0';
19
hgs
parents:
diff changeset
   961
25
hgs
parents: 21
diff changeset
   962
            if (ascKeySize >= keyDataSize)
hgs
parents: 21
diff changeset
   963
                {
hgs
parents: 21
diff changeset
   964
                ret = XA_RESULT_BUFFER_INSUFFICIENT;
hgs
parents: 21
diff changeset
   965
                }
hgs
parents: 21
diff changeset
   966
            else
hgs
parents: 21
diff changeset
   967
                {
hgs
parents: 21
diff changeset
   968
                ret = XA_RESULT_SUCCESS;
hgs
parents: 21
diff changeset
   969
                }
hgs
parents: 21
diff changeset
   970
            }
hgs
parents: 21
diff changeset
   971
hgs
parents: 21
diff changeset
   972
        ret = XA_RESULT_SUCCESS;
hgs
parents: 21
diff changeset
   973
        return ret;
hgs
parents: 21
diff changeset
   974
        }
19
hgs
parents:
diff changeset
   975
25
hgs
parents: 21
diff changeset
   976
    XAresult mmf_get_value_size(void* context, XAuint32 index,
hgs
parents: 21
diff changeset
   977
            XAuint32 *pValueSize)
hgs
parents: 21
diff changeset
   978
        {
hgs
parents: 21
diff changeset
   979
        if (pValueSize)
hgs
parents: 21
diff changeset
   980
            {
hgs
parents: 21
diff changeset
   981
            *pValueSize = ((CMetadataUtilityItf*) (context))->GetValueSize(
hgs
parents: 21
diff changeset
   982
                    index) + sizeof(XAMetadataInfo) - 1; 
hgs
parents: 21
diff changeset
   983
            //XAMetadataInfo already includes one byte for Data
19
hgs
parents:
diff changeset
   984
25
hgs
parents: 21
diff changeset
   985
            return XA_RESULT_SUCCESS;
hgs
parents: 21
diff changeset
   986
            }
19
hgs
parents:
diff changeset
   987
25
hgs
parents: 21
diff changeset
   988
        return XA_RESULT_PARAMETER_INVALID;
hgs
parents: 21
diff changeset
   989
        }
19
hgs
parents:
diff changeset
   990
25
hgs
parents: 21
diff changeset
   991
    XAresult mmf_get_value(void* context, XAuint32 index, XAuint32 valueSize,
hgs
parents: 21
diff changeset
   992
            XAMetadataInfo *pValue)
hgs
parents: 21
diff changeset
   993
        {
hgs
parents: 21
diff changeset
   994
        XAresult ret = XA_RESULT_PARAMETER_INVALID;
hgs
parents: 21
diff changeset
   995
        TInt dataSize = valueSize - sizeof(XAMetadataInfo) + 1;
hgs
parents: 21
diff changeset
   996
        TInt outLen = 0, encodingType = CMetadataUtilityItf::EUnknownEncoding;
19
hgs
parents:
diff changeset
   997
25
hgs
parents: 21
diff changeset
   998
        if (dataSize > 0)
hgs
parents: 21
diff changeset
   999
            {
19
hgs
parents:
diff changeset
  1000
25
hgs
parents: 21
diff changeset
  1001
            TInt actualDataSize =
hgs
parents: 21
diff changeset
  1002
                    ((CMetadataUtilityItf*) (context))->GetValue(index,
hgs
parents: 21
diff changeset
  1003
                            (char*) pValue->data, dataSize, &outLen,
hgs
parents: 21
diff changeset
  1004
                            &encodingType);
19
hgs
parents:
diff changeset
  1005
25
hgs
parents: 21
diff changeset
  1006
            pValue->size = outLen;
hgs
parents: 21
diff changeset
  1007
            pValue->encoding
hgs
parents: 21
diff changeset
  1008
                    = (encodingType == CMetadataUtilityItf::EUnicodeEncoding) 
hgs
parents: 21
diff changeset
  1009
                    ? XA_CHARACTERENCODING_UTF16LE : XA_CHARACTERENCODING_BINARY;
hgs
parents: 21
diff changeset
  1010
            strcpy((char *) (pValue->langCountry), "en-us");
19
hgs
parents:
diff changeset
  1011
25
hgs
parents: 21
diff changeset
  1012
            if (!actualDataSize)
hgs
parents: 21
diff changeset
  1013
                {
hgs
parents: 21
diff changeset
  1014
                return XA_RESULT_INTERNAL_ERROR;
hgs
parents: 21
diff changeset
  1015
                }
hgs
parents: 21
diff changeset
  1016
            if (actualDataSize > dataSize)
hgs
parents: 21
diff changeset
  1017
                {
hgs
parents: 21
diff changeset
  1018
                ret = XA_RESULT_BUFFER_INSUFFICIENT;
hgs
parents: 21
diff changeset
  1019
                }
hgs
parents: 21
diff changeset
  1020
            else
hgs
parents: 21
diff changeset
  1021
                {
hgs
parents: 21
diff changeset
  1022
                ret = XA_RESULT_SUCCESS;
hgs
parents: 21
diff changeset
  1023
                }
hgs
parents: 21
diff changeset
  1024
            }
hgs
parents: 21
diff changeset
  1025
hgs
parents: 21
diff changeset
  1026
        return ret;
hgs
parents: 21
diff changeset
  1027
        }
hgs
parents: 21
diff changeset
  1028
    }
hgs
parents: 21
diff changeset
  1029