khronosfws/openmax_al/src/mmf_adaptation/xamediarecorderadaptctxmmf.c
author hgs
Tue, 21 Sep 2010 11:38:43 -0500
changeset 53 eabc8c503852
parent 33 5e8b14bae8c3
permissions -rw-r--r--
201037
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     1
/*
25
hgs
parents: 19
diff changeset
     2
 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents: 19
diff changeset
     3
 * All rights reserved.
hgs
parents: 19
diff changeset
     4
 * This component and the accompanying materials are made available
hgs
parents: 19
diff changeset
     5
 * under the terms of "Eclipse Public License v1.0"
hgs
parents: 19
diff changeset
     6
 * which accompanies this distribution, and is available
hgs
parents: 19
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents: 19
diff changeset
     8
 *
hgs
parents: 19
diff changeset
     9
 * Initial Contributors:
hgs
parents: 19
diff changeset
    10
 * Nokia Corporation - initial contribution.
hgs
parents: 19
diff changeset
    11
 *
hgs
parents: 19
diff changeset
    12
 * Contributors:
hgs
parents: 19
diff changeset
    13
 *
hgs
parents: 19
diff changeset
    14
 * Description: MediaRecorder MMF Adaptation
hgs
parents: 19
diff changeset
    15
 *
hgs
parents: 19
diff changeset
    16
 */
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    17
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    18
#include <string.h>
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    19
#include "xamediarecorderadaptctxmmf.h"
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    20
#include "xaadaptationmmf.h"
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    21
#include "cmmfbackendengine.h"
19
hgs
parents: 12
diff changeset
    22
#include "xaadptbasectx.h"
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    23
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    24
/*
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    25
 * XAAdaptationBaseCtx* XAMediaRecorderAdaptMMF_Create()
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    26
 * Allocates memory for Media Recorder Adaptation Context and makes 1st phase initialization
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    27
 * @param XADataSource *pAudioSrc - pointer to OMX-AL audio source
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    28
 * @param XADataSource *pImageVideoSrc - pointer image/video source
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    29
 * @param XADataSink *pDataSnk - pointer to OMX-AL sink
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    30
 * @returns XAMediaRecorderAdaptationMMFCtx* - Pointer to created context, NULL if error occurs.
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    31
 */
19
hgs
parents: 12
diff changeset
    32
XAAdaptationBaseCtx* XAMediaRecorderAdaptMMF_Create(XADataSource* pAudioSrc,
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    33
        XADataSource* pImageVideoSrc, XADataSink* pDataSnk, XAuint8 recModes)
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    34
    {
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    35
    XAMediaRecorderAdaptationMMFCtx *pSelf = NULL;
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    36
    XAresult res;
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    37
    DEBUG_API("->XAMediaRecorderAdaptMMF_Create");
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    38
25
hgs
parents: 19
diff changeset
    39
    pSelf = (XAMediaRecorderAdaptationMMFCtx*) calloc(1,
hgs
parents: 19
diff changeset
    40
            sizeof(XAMediaRecorderAdaptationMMFCtx));
53
hgs
parents: 33
diff changeset
    41
    if (!pSelf)
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    42
        {
25
hgs
parents: 19
diff changeset
    43
        DEBUG_ERR("Failed to create XAMediaRecorderAdaptationMMFCtx !!!");
53
hgs
parents: 33
diff changeset
    44
        DEBUG_API("<-XAMediaRecorderAdaptMMF_Create");
hgs
parents: 33
diff changeset
    45
        return NULL;
hgs
parents: 33
diff changeset
    46
        }
hgs
parents: 33
diff changeset
    47
hgs
parents: 33
diff changeset
    48
    if (XAAdaptationBaseMMF_Init(&(pSelf->baseObj),
hgs
parents: 33
diff changeset
    49
            XAMediaRecorderAdaptation) != XA_RESULT_SUCCESS)
hgs
parents: 33
diff changeset
    50
        {
hgs
parents: 33
diff changeset
    51
        free(pSelf);
hgs
parents: 33
diff changeset
    52
        DEBUG_ERR("Failed to init base context!!!");
hgs
parents: 33
diff changeset
    53
        DEBUG_API("<-XAMediaRecorderAdaptMMF_Create");
25
hgs
parents: 19
diff changeset
    54
        return NULL;
hgs
parents: 19
diff changeset
    55
        }
hgs
parents: 19
diff changeset
    56
53
hgs
parents: 33
diff changeset
    57
    pSelf->xaAudioSource = pAudioSrc;
hgs
parents: 33
diff changeset
    58
    pSelf->xaVideoSource = pImageVideoSrc;
hgs
parents: 33
diff changeset
    59
    pSelf->xaSink = pDataSnk;
hgs
parents: 33
diff changeset
    60
    pSelf->xaRecordState = XA_RECORDSTATE_STOPPED;
hgs
parents: 33
diff changeset
    61
    pSelf->curMirror = XA_VIDEOMIRROR_NONE;
hgs
parents: 33
diff changeset
    62
    pSelf->curRotation = 0;
hgs
parents: 33
diff changeset
    63
    pSelf->recModes = recModes;
hgs
parents: 33
diff changeset
    64
    pSelf->isRecord = XA_BOOLEAN_FALSE;
hgs
parents: 33
diff changeset
    65
hgs
parents: 33
diff changeset
    66
    /* defaults from API spec */
hgs
parents: 33
diff changeset
    67
    pSelf->imageEncSettings.width = 640;
hgs
parents: 33
diff changeset
    68
    pSelf->imageEncSettings.height = 480;
hgs
parents: 33
diff changeset
    69
    pSelf->imageEncSettings.compressionLevel = 0;
hgs
parents: 33
diff changeset
    70
    pSelf->imageEncSettings.encoderId = XA_IMAGECODEC_JPEG;
hgs
parents: 33
diff changeset
    71
    pSelf->imageEncSettings.colorFormat = XA_COLORFORMAT_UNUSED;
hgs
parents: 33
diff changeset
    72
    /* no specified defaults for rest, determined later from container type */
hgs
parents: 33
diff changeset
    73
    pSelf->videoEncSettings.encoderId = XA_ADAPTID_UNINITED;
hgs
parents: 33
diff changeset
    74
    pSelf->videoEncSettings.width = 640;
hgs
parents: 33
diff changeset
    75
    pSelf->videoEncSettings.height = 480;
hgs
parents: 33
diff changeset
    76
    pSelf->videoEncSettings.frameRate = 15;
hgs
parents: 33
diff changeset
    77
    pSelf->audioEncSettings.encoderId = XA_ADAPTID_UNINITED;
hgs
parents: 33
diff changeset
    78
    pSelf->audioEncSettings.channelsIn = 2;
hgs
parents: 33
diff changeset
    79
    pSelf->audioEncSettings.channelsOut = 2;
hgs
parents: 33
diff changeset
    80
    pSelf->audioEncSettings.bitsPerSample = 8;
hgs
parents: 33
diff changeset
    81
    pSelf->audioEncSettings.bitRate = 128;
hgs
parents: 33
diff changeset
    82
    pSelf->audioEncSettings.sampleRate = 44100;
hgs
parents: 33
diff changeset
    83
hgs
parents: 33
diff changeset
    84
    res = mmf_backend_engine_init(&(pSelf->mmfContext));
hgs
parents: 33
diff changeset
    85
    if (!(pSelf->mmfContext) || (res != XA_RESULT_SUCCESS))
25
hgs
parents: 19
diff changeset
    86
        {
53
hgs
parents: 33
diff changeset
    87
        free(pSelf);
hgs
parents: 33
diff changeset
    88
        DEBUG_ERR("Failed to init mmf context!!!");
hgs
parents: 33
diff changeset
    89
        DEBUG_API("<-XAMediaRecorderAdaptMMF_Create");
hgs
parents: 33
diff changeset
    90
        return NULL;
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    91
        }
25
hgs
parents: 19
diff changeset
    92
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    93
    DEBUG_API("<-XAMediaRecorderAdaptMMF_Create");
19
hgs
parents: 12
diff changeset
    94
    return (XAAdaptationBaseCtx*) (&pSelf->baseObj.baseObj);
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    95
    }
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    96
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    97
/*
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    98
 * XAresult XAMediaRecorderAdaptMMF_PostInit()
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    99
 * 2nd phase initialization of Media Recorder Adaptation Context
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   100
 * @param XAAdaptationBaseCtx* ctx - pointer to Media Recorder adaptation context
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   101
 * @return XAresult - Success value
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   102
 */
19
hgs
parents: 12
diff changeset
   103
XAresult XAMediaRecorderAdaptMMF_PostInit(XAAdaptationMMFCtx* bCtx)
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   104
    {
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   105
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   106
    XAresult ret = XA_RESULT_SUCCESS;
25
hgs
parents: 19
diff changeset
   107
    XADataLocator_URI* tempUri;
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   108
    XADataFormat_MIME* tempFormat;
25
hgs
parents: 19
diff changeset
   109
    XAMediaRecorderAdaptationMMFCtx *pSelf;
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   110
    DEBUG_API("->XAMediaRecorderAdapt_PostInit");
33
hgs
parents: 25
diff changeset
   111
    if(!bCtx)
25
hgs
parents: 19
diff changeset
   112
        {
hgs
parents: 19
diff changeset
   113
        ret = XA_RESULT_PARAMETER_INVALID;
53
hgs
parents: 33
diff changeset
   114
        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents: 33
diff changeset
   115
        DEBUG_API("<-XAMediaRecorderAdapt_PostInit");
25
hgs
parents: 19
diff changeset
   116
        return ret;
hgs
parents: 19
diff changeset
   117
        }
hgs
parents: 19
diff changeset
   118
    
hgs
parents: 19
diff changeset
   119
    pSelf = (XAMediaRecorderAdaptationMMFCtx*) bCtx;
hgs
parents: 19
diff changeset
   120
    if (pSelf->mmfContext)
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   121
        {
25
hgs
parents: 19
diff changeset
   122
        tempUri = (XADataLocator_URI*) (pSelf->xaSink->pLocator);
hgs
parents: 19
diff changeset
   123
        tempFormat = (XADataFormat_MIME*) (pSelf->xaSink->pFormat);
hgs
parents: 19
diff changeset
   124
        ret = mmf_set_recorder_uri(pSelf->mmfContext, (char *) (tempUri->URI),
hgs
parents: 19
diff changeset
   125
                tempFormat->containerType);
53
hgs
parents: 33
diff changeset
   126
        if (ret != XA_RESULT_SUCCESS)
25
hgs
parents: 19
diff changeset
   127
            {
53
hgs
parents: 33
diff changeset
   128
            DEBUG_ERR("Failed to set recorder uri on mmf!!!");
hgs
parents: 33
diff changeset
   129
            DEBUG_API("<-XAMediaRecorderAdapt_PostInit");
hgs
parents: 33
diff changeset
   130
            return ret;
hgs
parents: 33
diff changeset
   131
            }
hgs
parents: 33
diff changeset
   132
        ret = mmf_set_adapt_context(pSelf->mmfContext, &(pSelf->baseObj));
hgs
parents: 33
diff changeset
   133
        if (ret != XA_RESULT_SUCCESS)
hgs
parents: 33
diff changeset
   134
            {
hgs
parents: 33
diff changeset
   135
            DEBUG_ERR("Failed to set adapt context on mmf!!!");
hgs
parents: 33
diff changeset
   136
            DEBUG_API("<-XAMediaRecorderAdapt_PostInit");
hgs
parents: 33
diff changeset
   137
            return ret;
25
hgs
parents: 19
diff changeset
   138
            }
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   139
        }
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   140
    DEBUG_API("<-XAMediaRecorderAdapt_PostInit");
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   141
    return ret;
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   142
    }
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   143
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   144
/*
19
hgs
parents: 12
diff changeset
   145
 * void XAMediaRecorderAdaptMMF_Destroy( XAAdaptationMMFCtx* bCtx )
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   146
 * Destroys Media Recorder Adaptation Context
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   147
 * @param ctx - Media Recorder Adaptation context to be destroyed
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   148
 */
19
hgs
parents: 12
diff changeset
   149
void XAMediaRecorderAdaptMMF_Destroy(XAAdaptationMMFCtx* bCtx)
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   150
    {
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   151
    XAMediaRecorderAdaptationMMFCtx* ctx = NULL;
25
hgs
parents: 19
diff changeset
   152
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   153
    DEBUG_API("->XAMediaRecorderAdaptMMF_Destroy");
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   154
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   155
    if (bCtx == NULL)
25
hgs
parents: 19
diff changeset
   156
        {
hgs
parents: 19
diff changeset
   157
        DEBUG_ERR("Invalid parameter!!");
hgs
parents: 19
diff changeset
   158
        DEBUG_API("<-XAMediaRecorderAdaptMMF_Destroy");
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   159
        return;
25
hgs
parents: 19
diff changeset
   160
        }
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   161
    ctx = (XAMediaRecorderAdaptationMMFCtx*) bCtx;
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   162
25
hgs
parents: 19
diff changeset
   163
    if (ctx->mmfContext)
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   164
        {
19
hgs
parents: 12
diff changeset
   165
        mmf_backend_engine_deinit(ctx->mmfContext);
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   166
        }
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   167
    XAAdaptationBaseMMF_Free(bCtx);
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   168
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   169
    free(ctx);
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   170
    ctx = NULL;
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   171
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   172
    DEBUG_API("<-XAMediaRecorderAdaptMMF_Destroy");
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   173
    }
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   174