khronosfws/openmax_al/src/mediaplayer/xaseekitf.c
author hgs
Fri, 11 Jun 2010 19:59:23 -0500
changeset 25 6f7ceef7b1d1
parent 19 4a629bc82c5e
child 33 5e8b14bae8c3
permissions -rw-r--r--
201023
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: Seek Itf Implementation
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 <stdio.h>
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    19
#include <stdlib.h>
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    20
#include <assert.h>
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    21
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    22
#include "xaseekitf.h"
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    23
19
hgs
parents: 12
diff changeset
    24
#include "xaseekitfadaptation.h"
hgs
parents: 12
diff changeset
    25
#include "xaplayitfadaptation.h"
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    26
#include "xathreadsafety.h"
19
hgs
parents: 12
diff changeset
    27
#include "xaplayitfadaptationmmf.h"
hgs
parents: 12
diff changeset
    28
#include "xaseekitfadaptationmmf.h"
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    29
/**
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    30
 * XASeekItfImpl* GetImpl(XASeekItf self)
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    31
 * Description: Validate interface pointer and cast it to implementation pointer.
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    32
 */
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    33
static XASeekItfImpl* GetImpl(XASeekItf self)
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    34
    {
25
hgs
parents: 19
diff changeset
    35
    if (self)
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    36
        {
25
hgs
parents: 19
diff changeset
    37
        XASeekItfImpl* impl = (XASeekItfImpl*) (*self);
hgs
parents: 19
diff changeset
    38
        if (impl && impl == impl->self)
hgs
parents: 19
diff changeset
    39
            {
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    40
            return impl;
25
hgs
parents: 19
diff changeset
    41
            }
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
    return NULL;
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    44
    }
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    45
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    46
/**
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    47
 * Base interface XASeekItf implementation
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    48
 */
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    49
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    50
/**
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    51
 * XAresult XASeekItfImpl_SetPosition(XASeekItf self, XAmillisecond pos,
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    52
 *                                    XAuint32 seekMode)
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    53
 * Description: Sets the position of the playback head.
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    54
 **/
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    55
XAresult XASeekItfImpl_SetPosition(XASeekItf self, XAmillisecond pos,
25
hgs
parents: 19
diff changeset
    56
        XAuint32 seekMode)
hgs
parents: 19
diff changeset
    57
    {
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    58
    XAresult ret = XA_RESULT_SUCCESS;
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    59
    XAmillisecond duration = 0;
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    60
    XASeekItfImpl* impl = GetImpl(self);
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    61
    DEBUG_API("->XASeekItfImpl_SetPosition");
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    62
    XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaPlayer );
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    63
25
hgs
parents: 19
diff changeset
    64
    if (!impl)
hgs
parents: 19
diff changeset
    65
        {
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    66
        /* invalid parameter */
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    67
        XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    68
        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    69
        DEBUG_API("<-XASeekItfImpl_SetPosition");
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    70
        return XA_RESULT_PARAMETER_INVALID;
25
hgs
parents: 19
diff changeset
    71
        }
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    72
25
hgs
parents: 19
diff changeset
    73
    if (impl->adapCtx->fwtype == FWMgrFWMMF)
19
hgs
parents: 12
diff changeset
    74
        {
hgs
parents: 12
diff changeset
    75
        /* Get duration of the content */
25
hgs
parents: 19
diff changeset
    76
        if (XAPlayItfAdaptMMF_GetDuration(
hgs
parents: 19
diff changeset
    77
                (XAAdaptationBaseCtx*) impl->adapCtx, &duration)
hgs
parents: 19
diff changeset
    78
                != XA_RESULT_SUCCESS)
19
hgs
parents: 12
diff changeset
    79
            {
hgs
parents: 12
diff changeset
    80
            /* invalid parameter */
hgs
parents: 12
diff changeset
    81
            XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
hgs
parents: 12
diff changeset
    82
            DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents: 12
diff changeset
    83
            DEBUG_API("<-XASeekItfImpl_SetPosition");
hgs
parents: 12
diff changeset
    84
            return XA_RESULT_PARAMETER_INVALID;
hgs
parents: 12
diff changeset
    85
            }
25
hgs
parents: 19
diff changeset
    86
        if (pos > duration)
19
hgs
parents: 12
diff changeset
    87
            {
hgs
parents: 12
diff changeset
    88
            /* invalid parameter */
hgs
parents: 12
diff changeset
    89
            XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
hgs
parents: 12
diff changeset
    90
            DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents: 12
diff changeset
    91
            DEBUG_API("<-XASeekItfImpl_SetPosition");
hgs
parents: 12
diff changeset
    92
            return XA_RESULT_PARAMETER_INVALID;
hgs
parents: 12
diff changeset
    93
            }
25
hgs
parents: 19
diff changeset
    94
hgs
parents: 19
diff changeset
    95
        if (seekMode != XA_SEEKMODE_FAST && seekMode != XA_SEEKMODE_ACCURATE)
19
hgs
parents: 12
diff changeset
    96
            {
hgs
parents: 12
diff changeset
    97
            /* seek mode unsupported */
hgs
parents: 12
diff changeset
    98
            XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
hgs
parents: 12
diff changeset
    99
            DEBUG_ERR("XA_RESULT_FEATURE_UNSUPPORTED");
hgs
parents: 12
diff changeset
   100
            DEBUG_API("<-XASeekItfImpl_SetPosition");
hgs
parents: 12
diff changeset
   101
            return XA_RESULT_FEATURE_UNSUPPORTED;
hgs
parents: 12
diff changeset
   102
            }
25
hgs
parents: 19
diff changeset
   103
19
hgs
parents: 12
diff changeset
   104
        ret = XASeekItfAdaptMMF_SetPosition(impl->adapCtx, pos, seekMode);
25
hgs
parents: 19
diff changeset
   105
        if (ret == XA_RESULT_SUCCESS)
19
hgs
parents: 12
diff changeset
   106
            {
hgs
parents: 12
diff changeset
   107
            impl->playbackPosition = pos;
hgs
parents: 12
diff changeset
   108
            impl->seekMode = seekMode;
hgs
parents: 12
diff changeset
   109
            }
hgs
parents: 12
diff changeset
   110
        }
hgs
parents: 12
diff changeset
   111
    else
hgs
parents: 12
diff changeset
   112
        {
hgs
parents: 12
diff changeset
   113
        /* Get duration of the content */
25
hgs
parents: 19
diff changeset
   114
        if (XAPlayItfAdaptGST_GetDuration(
hgs
parents: 19
diff changeset
   115
                (XAAdaptationGstCtx*) impl->adapCtx, &duration)
hgs
parents: 19
diff changeset
   116
                != XA_RESULT_SUCCESS)
19
hgs
parents: 12
diff changeset
   117
            {
hgs
parents: 12
diff changeset
   118
            /* invalid parameter */
hgs
parents: 12
diff changeset
   119
            XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
hgs
parents: 12
diff changeset
   120
            DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents: 12
diff changeset
   121
            DEBUG_API("<-XASeekItfImpl_SetPosition");
hgs
parents: 12
diff changeset
   122
            return XA_RESULT_PARAMETER_INVALID;
hgs
parents: 12
diff changeset
   123
            }
25
hgs
parents: 19
diff changeset
   124
        if (pos > duration)
19
hgs
parents: 12
diff changeset
   125
            {
hgs
parents: 12
diff changeset
   126
            /* invalid parameter */
hgs
parents: 12
diff changeset
   127
            XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
hgs
parents: 12
diff changeset
   128
            DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents: 12
diff changeset
   129
            DEBUG_API("<-XASeekItfImpl_SetPosition");
hgs
parents: 12
diff changeset
   130
            return XA_RESULT_PARAMETER_INVALID;
hgs
parents: 12
diff changeset
   131
            }
25
hgs
parents: 19
diff changeset
   132
hgs
parents: 19
diff changeset
   133
        if (seekMode != XA_SEEKMODE_FAST && seekMode != XA_SEEKMODE_ACCURATE)
19
hgs
parents: 12
diff changeset
   134
            {
hgs
parents: 12
diff changeset
   135
            /* seek mode unsupported */
hgs
parents: 12
diff changeset
   136
            XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
hgs
parents: 12
diff changeset
   137
            DEBUG_ERR("XA_RESULT_FEATURE_UNSUPPORTED");
hgs
parents: 12
diff changeset
   138
            DEBUG_API("<-XASeekItfImpl_SetPosition");
hgs
parents: 12
diff changeset
   139
            return XA_RESULT_FEATURE_UNSUPPORTED;
hgs
parents: 12
diff changeset
   140
            }
25
hgs
parents: 19
diff changeset
   141
hgs
parents: 19
diff changeset
   142
        ret = XASeekItfAdapt_SetPosition((XAAdaptationGstCtx*) impl->adapCtx,
hgs
parents: 19
diff changeset
   143
                pos, seekMode);
hgs
parents: 19
diff changeset
   144
        if (ret == XA_RESULT_SUCCESS)
19
hgs
parents: 12
diff changeset
   145
            {
hgs
parents: 12
diff changeset
   146
            impl->playbackPosition = pos;
hgs
parents: 12
diff changeset
   147
            impl->seekMode = seekMode;
hgs
parents: 12
diff changeset
   148
            }
25
hgs
parents: 19
diff changeset
   149
19
hgs
parents: 12
diff changeset
   150
        }
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   151
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   152
    XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   153
    DEBUG_API("<-XASeekItfImpl_SetPosition");
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   154
    return ret;
25
hgs
parents: 19
diff changeset
   155
    }
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   156
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   157
/**
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   158
 * XAresult XASeekItfImpl_SetLoop(XASeekItf self, XAboolean loopEnable,
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   159
 *                                XAmillisecond startPos, XAmillisecond endPos)
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   160
 * Description: Enables or disables looping and sets the start and end points of looping.
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   161
 **/
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   162
XAresult XASeekItfImpl_SetLoop(XASeekItf self, XAboolean loopEnable,
25
hgs
parents: 19
diff changeset
   163
        XAmillisecond startPos, XAmillisecond endPos)
hgs
parents: 19
diff changeset
   164
    {
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   165
    XAresult ret = XA_RESULT_SUCCESS;
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   166
    XAmillisecond duration = 0;
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   167
    XASeekItfImpl* impl = GetImpl(self);
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   168
    DEBUG_API_A2("->XASeekItfImpl_SetLoop, startPos:%lu, endPos:%lu", startPos, endPos);
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   169
    XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaPlayer );
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   170
25
hgs
parents: 19
diff changeset
   171
    if (!impl || (startPos > endPos))
hgs
parents: 19
diff changeset
   172
        {
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   173
        /* invalid parameter */
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   174
        XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   175
        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   176
        DEBUG_API("<-XASeekItfImpl_SetLoop");
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   177
        return XA_RESULT_PARAMETER_INVALID;
25
hgs
parents: 19
diff changeset
   178
        }
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   179
25
hgs
parents: 19
diff changeset
   180
    if (impl->adapCtx->fwtype == FWMgrFWMMF)
19
hgs
parents: 12
diff changeset
   181
        {
hgs
parents: 12
diff changeset
   182
        /* Get duration of the content */
25
hgs
parents: 19
diff changeset
   183
        if (XAPlayItfAdaptMMF_GetDuration(
hgs
parents: 19
diff changeset
   184
                (XAAdaptationBaseCtx*) impl->adapCtx, &duration)
hgs
parents: 19
diff changeset
   185
                != XA_RESULT_SUCCESS)
19
hgs
parents: 12
diff changeset
   186
            {
hgs
parents: 12
diff changeset
   187
            /* invalid parameter */
hgs
parents: 12
diff changeset
   188
            XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
hgs
parents: 12
diff changeset
   189
            DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents: 12
diff changeset
   190
            DEBUG_API("<-XASeekItfImpl_SetLoop");
hgs
parents: 12
diff changeset
   191
            return XA_RESULT_PARAMETER_INVALID;
hgs
parents: 12
diff changeset
   192
            }
25
hgs
parents: 19
diff changeset
   193
        if (endPos > duration && endPos != XA_TIME_UNKNOWN)
19
hgs
parents: 12
diff changeset
   194
            {
hgs
parents: 12
diff changeset
   195
            /* invalid parameter */
hgs
parents: 12
diff changeset
   196
            XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
hgs
parents: 12
diff changeset
   197
            DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents: 12
diff changeset
   198
            DEBUG_API("<-XASeekItfImpl_SetLoop");
hgs
parents: 12
diff changeset
   199
            return XA_RESULT_PARAMETER_INVALID;
hgs
parents: 12
diff changeset
   200
            }
25
hgs
parents: 19
diff changeset
   201
hgs
parents: 19
diff changeset
   202
        ret = XASeekItfAdaptMMF_SetLoop(impl->adapCtx, loopEnable, startPos,
hgs
parents: 19
diff changeset
   203
                endPos);
hgs
parents: 19
diff changeset
   204
        if (ret == XA_RESULT_SUCCESS)
19
hgs
parents: 12
diff changeset
   205
            {
hgs
parents: 12
diff changeset
   206
            impl->loopEnable = loopEnable;
hgs
parents: 12
diff changeset
   207
            impl->startPos = startPos;
hgs
parents: 12
diff changeset
   208
            impl->endPos = endPos;
25
hgs
parents: 19
diff changeset
   209
            }
19
hgs
parents: 12
diff changeset
   210
        }
hgs
parents: 12
diff changeset
   211
    else
hgs
parents: 12
diff changeset
   212
        {
hgs
parents: 12
diff changeset
   213
        /* Get duration of the content */
25
hgs
parents: 19
diff changeset
   214
        if (XAPlayItfAdaptGST_GetDuration(
hgs
parents: 19
diff changeset
   215
                (XAAdaptationGstCtx*) impl->adapCtx, &duration)
hgs
parents: 19
diff changeset
   216
                != XA_RESULT_SUCCESS)
19
hgs
parents: 12
diff changeset
   217
            {
hgs
parents: 12
diff changeset
   218
            /* invalid parameter */
hgs
parents: 12
diff changeset
   219
            XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
hgs
parents: 12
diff changeset
   220
            DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents: 12
diff changeset
   221
            DEBUG_API("<-XASeekItfImpl_SetLoop");
hgs
parents: 12
diff changeset
   222
            return XA_RESULT_PARAMETER_INVALID;
hgs
parents: 12
diff changeset
   223
            }
25
hgs
parents: 19
diff changeset
   224
        if (endPos > duration && endPos != XA_TIME_UNKNOWN)
19
hgs
parents: 12
diff changeset
   225
            {
hgs
parents: 12
diff changeset
   226
            /* invalid parameter */
hgs
parents: 12
diff changeset
   227
            XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
hgs
parents: 12
diff changeset
   228
            DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents: 12
diff changeset
   229
            DEBUG_API("<-XASeekItfImpl_SetLoop");
hgs
parents: 12
diff changeset
   230
            return XA_RESULT_PARAMETER_INVALID;
hgs
parents: 12
diff changeset
   231
            }
25
hgs
parents: 19
diff changeset
   232
hgs
parents: 19
diff changeset
   233
        ret = XASeekItfAdapt_SetLoop((XAAdaptationGstCtx*) impl->adapCtx,
hgs
parents: 19
diff changeset
   234
                loopEnable, startPos, endPos);
hgs
parents: 19
diff changeset
   235
        if (ret == XA_RESULT_SUCCESS)
19
hgs
parents: 12
diff changeset
   236
            {
hgs
parents: 12
diff changeset
   237
            impl->loopEnable = loopEnable;
hgs
parents: 12
diff changeset
   238
            impl->startPos = startPos;
hgs
parents: 12
diff changeset
   239
            impl->endPos = endPos;
hgs
parents: 12
diff changeset
   240
            }
25
hgs
parents: 19
diff changeset
   241
19
hgs
parents: 12
diff changeset
   242
        }
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   243
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   244
    XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   245
    DEBUG_API("<-XASeekItfImpl_SetLoop");
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   246
    return ret;
25
hgs
parents: 19
diff changeset
   247
    }
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   248
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   249
/**
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   250
 * XAresult XASeekItfImpl_GetLoop(XASeekItf self, XAboolean *pLoopEnabled,
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   251
 *                                XAmillisecond *pStartPos,
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   252
 *                                XAmillisecond *pEndPos)
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   253
 * Description: Queries whether looping is enabled or disabled, and retrieves loop points.
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   254
 **/
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   255
XAresult XASeekItfImpl_GetLoop(XASeekItf self, XAboolean *pLoopEnabled,
25
hgs
parents: 19
diff changeset
   256
        XAmillisecond *pStartPos, XAmillisecond *pEndPos)
hgs
parents: 19
diff changeset
   257
    {
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   258
    XAresult ret = XA_RESULT_SUCCESS;
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   259
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   260
    XASeekItfImpl* impl = GetImpl(self);
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   261
    DEBUG_API("->XASeekItfImpl_GetLoop");
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   262
25
hgs
parents: 19
diff changeset
   263
    if (!impl || !pLoopEnabled || !pStartPos || !pEndPos)
hgs
parents: 19
diff changeset
   264
        {
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   265
        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   266
        DEBUG_API("<-XASeekItfImpl_GetLoop");
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   267
        /* invalid parameter */
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   268
        return XA_RESULT_PARAMETER_INVALID;
25
hgs
parents: 19
diff changeset
   269
        }
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   270
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   271
    *pLoopEnabled = impl->loopEnable;
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   272
    *pStartPos = impl->startPos;
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   273
    *pEndPos = impl->endPos;
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   274
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   275
    DEBUG_API("<-XASeekItfImpl_GetLoop");
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   276
    return ret;
25
hgs
parents: 19
diff changeset
   277
    }
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   278
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   279
/**
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   280
 * XASeekItfImpl -specific methods
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   281
 **/
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   282
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   283
/**
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   284
 * XASeekItfImpl* XASeekItfImpl_Create()
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   285
 * Description: Allocate and initialize SeekItfImpl.
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   286
 **/
25
hgs
parents: 19
diff changeset
   287
XASeekItfImpl* XASeekItfImpl_Create(XAMediaPlayerImpl* impl)
hgs
parents: 19
diff changeset
   288
    {
hgs
parents: 19
diff changeset
   289
    XASeekItfImpl *self = (XASeekItfImpl*) calloc(1, sizeof(XASeekItfImpl));
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   290
    DEBUG_API("->XASeekItfImpl_Create");
25
hgs
parents: 19
diff changeset
   291
    if (self)
hgs
parents: 19
diff changeset
   292
        {
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   293
        /* init itf default implementation */
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   294
        self->itf.GetLoop = XASeekItfImpl_GetLoop;
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   295
        self->itf.SetLoop = XASeekItfImpl_SetLoop;
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   296
        self->itf.SetPosition = XASeekItfImpl_SetPosition;
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   297
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   298
        /* init variables */
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   299
        self->playbackPosition = 0;
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   300
        self->seekMode = 0;
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   301
        self->loopEnable = XA_BOOLEAN_FALSE;
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   302
        self->startPos = 0;
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   303
        self->endPos = 0;
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   304
19
hgs
parents: 12
diff changeset
   305
        self->adapCtx = impl->curAdaptCtx;
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   306
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   307
        self->self = self;
25
hgs
parents: 19
diff changeset
   308
        }DEBUG_API("<-XASeekItfImpl_Create");
hgs
parents: 19
diff changeset
   309
    return self;
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   310
    }
19
hgs
parents: 12
diff changeset
   311
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   312
/**
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   313
 * void XASeekItfImpl_Free(XASeekItfImpl* self)
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   314
 * Description: Free all resources reserved at XASeekItfImpl_Create.
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   315
 **/
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   316
void XASeekItfImpl_Free(XASeekItfImpl* self)
25
hgs
parents: 19
diff changeset
   317
    {
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   318
    DEBUG_API("->XASeekItfImpl_Free");
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   319
    assert(self==self->self);
25
hgs
parents: 19
diff changeset
   320
    if(self)
hgs
parents: 19
diff changeset
   321
        {
hgs
parents: 19
diff changeset
   322
        free(self);
hgs
parents: 19
diff changeset
   323
        }
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   324
    DEBUG_API("<-XASeekItfImpl_Free");
25
hgs
parents: 19
diff changeset
   325
    }