khronosfws/openmax_al/src/mmf_adaptation/xadynamicsourceitfadaptationmmf.c
author hgs
Fri, 11 Jun 2010 19:59:23 -0500
changeset 25 6f7ceef7b1d1
parent 21 2ed61feeead6
permissions -rw-r--r--
201023
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
19
hgs
parents:
diff changeset
     1
/*
25
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: Dynamic Src Itf MMF Adapt Implementation
hgs
parents: 21
diff changeset
    15
 *
hgs
parents: 21
diff changeset
    16
 */
19
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
#include "xamediaplayeradaptctxmmf.h"
hgs
parents:
diff changeset
    19
#include "xametadataadaptctxmmf.h"
hgs
parents:
diff changeset
    20
#include "xadynamicsourceitfadaptationmmf.h"
hgs
parents:
diff changeset
    21
#include "xaplayitfadaptationmmf.h"
hgs
parents:
diff changeset
    22
#include "cmmfbackendengine.h"
hgs
parents:
diff changeset
    23
#include "cmetadatautilityitf.h"
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
/*
hgs
parents:
diff changeset
    26
 * XAresult XADynamicSourceItfAdaptMMF_SetSource(XAAdaptationGstCtx *bCtx, XADataSource *pDataSource)
hgs
parents:
diff changeset
    27
 * @param XAAdaptationGstCtx *bCtx - Adaptation context, this will be casted to correct type regarding to contextID value
hgs
parents:
diff changeset
    28
 * @param XADataSource *pDataSource - new data source
hgs
parents:
diff changeset
    29
 * @return XAresult ret - Success value
hgs
parents:
diff changeset
    30
 */
25
hgs
parents: 21
diff changeset
    31
XAresult XADynamicSourceItfAdaptMMF_SetSource(XAAdaptationMMFCtx *bCtx,
hgs
parents: 21
diff changeset
    32
        XADataSource *pDataSource)
hgs
parents: 21
diff changeset
    33
    {
19
hgs
parents:
diff changeset
    34
    XAresult ret = XA_RESULT_SUCCESS;
hgs
parents:
diff changeset
    35
    XAuint32 origstate;
hgs
parents:
diff changeset
    36
    DEBUG_API("->XADynamicSourceItfAdaptMMF_SetSource");
25
hgs
parents: 21
diff changeset
    37
    if (!bCtx || !pDataSource || !pDataSource->pLocator)
hgs
parents: 21
diff changeset
    38
        {
19
hgs
parents:
diff changeset
    39
        DEBUG_ERR("Invalid NULL parameter");
hgs
parents:
diff changeset
    40
        ret = XA_RESULT_PARAMETER_INVALID;
25
hgs
parents: 21
diff changeset
    41
        }
hgs
parents: 21
diff changeset
    42
    else if (bCtx->baseObj.ctxId == XAMediaPlayerAdaptation)
hgs
parents: 21
diff changeset
    43
        {
hgs
parents: 21
diff changeset
    44
        XADataLocator_URI* tempUri =
hgs
parents: 21
diff changeset
    45
                (XADataLocator_URI*) (pDataSource->pLocator);
hgs
parents: 21
diff changeset
    46
        XADataFormat_MIME* tempFormat =
hgs
parents: 21
diff changeset
    47
                (XADataFormat_MIME*) (pDataSource->pFormat);
hgs
parents: 21
diff changeset
    48
        XAMediaPlayerAdaptationMMFCtx* mCtx =
hgs
parents: 21
diff changeset
    49
                (XAMediaPlayerAdaptationMMFCtx*) bCtx;
19
hgs
parents:
diff changeset
    50
hgs
parents:
diff changeset
    51
        ret = XAPlayItfAdaptMMF_GetPlayState(&bCtx->baseObj, &origstate);
25
hgs
parents: 21
diff changeset
    52
hgs
parents: 21
diff changeset
    53
        ret = XAPlayItfAdaptMMF_SetPlayState(&bCtx->baseObj,
hgs
parents: 21
diff changeset
    54
                XA_PLAYSTATE_STOPPED);
hgs
parents: 21
diff changeset
    55
19
hgs
parents:
diff changeset
    56
        mmf_close(mCtx->mmfContext);
hgs
parents:
diff changeset
    57
        mCtx->xaSource = pDataSource;
25
hgs
parents: 21
diff changeset
    58
        if (mCtx->xaVideoSink)
20
hgs
parents: 19
diff changeset
    59
            {
25
hgs
parents: 21
diff changeset
    60
            ret = mmf_setup_native_display(mCtx->mmfContext,
hgs
parents: 21
diff changeset
    61
                    mCtx->xaVideoSink);
20
hgs
parents: 19
diff changeset
    62
            }
hgs
parents: 19
diff changeset
    63
        if (ret == XA_RESULT_SUCCESS)
hgs
parents: 19
diff changeset
    64
            {
25
hgs
parents: 21
diff changeset
    65
            ret = mmf_set_player_uri(mCtx->mmfContext,
hgs
parents: 21
diff changeset
    66
                    (char *) (tempUri->URI), tempFormat->containerType);
20
hgs
parents: 19
diff changeset
    67
            }
25
hgs
parents: 21
diff changeset
    68
        if (ret == XA_RESULT_SUCCESS)
19
hgs
parents:
diff changeset
    69
            {
20
hgs
parents: 19
diff changeset
    70
            ret = XAPlayItfAdaptMMF_SetPlayState(&bCtx->baseObj, origstate);
hgs
parents: 19
diff changeset
    71
            }
hgs
parents: 19
diff changeset
    72
        else
hgs
parents: 19
diff changeset
    73
            {
hgs
parents: 19
diff changeset
    74
            DEBUG_ERR("Set Play state failed");
hgs
parents: 19
diff changeset
    75
            ret = XA_RESULT_INTERNAL_ERROR;
hgs
parents: 19
diff changeset
    76
            }
25
hgs
parents: 21
diff changeset
    77
        if ((ret == XA_RESULT_SUCCESS) && (mCtx->mmfMetadataContext))
20
hgs
parents: 19
diff changeset
    78
            {
25
hgs
parents: 21
diff changeset
    79
            mmf_metadata_utility_parse_source(mCtx->mmfMetadataContext,
hgs
parents: 21
diff changeset
    80
                    (char *) (tempUri->URI));
20
hgs
parents: 19
diff changeset
    81
            }
25
hgs
parents: 21
diff changeset
    82
        }
hgs
parents: 21
diff changeset
    83
    else if (bCtx->baseObj.ctxId == XAMDAdaptation)
hgs
parents: 21
diff changeset
    84
        {
hgs
parents: 21
diff changeset
    85
19
hgs
parents:
diff changeset
    86
        XAMetadataAdaptationMMFCtx* mCtx = (XAMetadataAdaptationMMFCtx*) bCtx;
25
hgs
parents: 21
diff changeset
    87
        if (mCtx->mmfContext)
hgs
parents: 21
diff changeset
    88
            {
hgs
parents: 21
diff changeset
    89
            mCtx->xaSource = pDataSource;
hgs
parents: 21
diff changeset
    90
            mmf_metadata_utility_parse_source(
hgs
parents: 21
diff changeset
    91
                    mCtx->mmfContext,
hgs
parents: 21
diff changeset
    92
                    (char *) (((XADataLocator_URI*) (pDataSource->pLocator))->URI));
hgs
parents: 21
diff changeset
    93
            }
hgs
parents: 21
diff changeset
    94
        }
19
hgs
parents:
diff changeset
    95
    DEBUG_API("<-XADynamicSourceItfAdaptMMF_SetSource");
hgs
parents:
diff changeset
    96
    return ret;
25
hgs
parents: 21
diff changeset
    97
    }
19
hgs
parents:
diff changeset
    98