mmlibs/mmfw/src/server/BaseClasses/mmfdatapathproxy.cpp
author hgs
Tue, 02 Nov 2010 12:13:59 +0000
changeset 5 b220a9341636
parent 0 b8ed18f6c07b
permissions -rw-r--r--
2010wk46_01
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     1
// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     2
// All rights reserved.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     7
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     8
// Initial Contributors:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    10
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    11
// Contributors:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    12
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    13
// Description:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    14
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    15
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    16
#include <e32math.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    17
#include <mmf/server/mmfdatapathproxy.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    18
#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    19
#include <mmf/server/mmfdatapathproxyserver.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    20
#endif
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    21
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    22
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    23
Constructs a datapath event monitor object.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    24
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    25
@param  aObserver
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    26
        A reference to the observer of the active object. The observer will be notified when an
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    27
        event occurs.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    28
@param  aMMFDataPathProxy
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    29
        A reference to the client datapath proxy class.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    30
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    31
@return A pointer to the new event monitor.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    32
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    33
@since 7.0s
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    34
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    35
EXPORT_C CMMFDataPathEventMonitor* CMMFDataPathEventMonitor::NewL(MMMFDataPathEventMonitorObserver& aObserver,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    36
															 RMMFDataPathProxy& aMMFDataPathProxy)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    37
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    38
	return (new(ELeave) CMMFDataPathEventMonitor(aObserver, aMMFDataPathProxy));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    39
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    40
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    41
CMMFDataPathEventMonitor::CMMFDataPathEventMonitor(MMMFDataPathEventMonitorObserver& aObserver, 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    42
													   RMMFDataPathProxy& aMMFDataPathProxy) :
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    43
	CActive(EPriorityStandard),
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    44
	iObserver(aObserver), 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    45
	iMMFDataPathProxy(aMMFDataPathProxy)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    46
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    47
	CActiveScheduler::Add(this);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    48
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    49
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    50
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    51
Destructor.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    52
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    53
Calls Cancel().
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    54
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    55
EXPORT_C CMMFDataPathEventMonitor::~CMMFDataPathEventMonitor()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    56
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    57
	Cancel();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    58
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    59
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    60
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    61
Tells the datapath event monitor to start listening for events.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    62
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    63
The datapath proxy must have been opened before this method is called.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    64
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    65
@since  7.0s
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    66
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    67
EXPORT_C void CMMFDataPathEventMonitor::Start()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    68
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    69
	iMMFDataPathProxy.ReceiveEvents(iEventPckg, iStatus);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    70
	SetActive();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    71
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    72
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    73
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    74
Internal active object function.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    75
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    76
Starts the data path event monitor and handles an event if there is no error status.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    77
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    78
Calls HandleEvent on iObserver.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    79
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    80
@since  7.0s
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    81
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    82
EXPORT_C void CMMFDataPathEventMonitor::RunL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    83
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    84
	if (iStatus.Int() == KErrNone)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    85
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    86
		iObserver.HandleEvent(iEventPckg());
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    87
		Start();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    88
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    89
	else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    90
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    91
		//something's gone wrong with trying to receive events (e.g. server died etc)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    92
		TMMFEvent event(KMMFErrorCategoryDataPathGeneralError, iStatus.Int());
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    93
		iObserver.HandleEvent(event);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    94
		//we don't want to receive events again here...
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    95
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    96
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    97
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    98
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    99
Cancels the outstanding request on iMMFDataPathProxy.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   100
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   101
@since  7.0s
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   102
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   103
void CMMFDataPathEventMonitor::DoCancel()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   104
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   105
	iMMFDataPathProxy.CancelReceiveEvents();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   106
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   107
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   108
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   109
Creates a subthread that will contain the datapath.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   110
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   111
@return An error code indicating if the function call was successful. KErrNone on success, otherwise
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   112
        another of the system-wide error codes.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   113
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   114
@since 7.0s
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   115
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   116
EXPORT_C TInt RMMFDataPathProxy::CreateSubThread()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   117
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   118
	//start the subthread with a unique name
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   119
	TName subThreadName(_L("MMFDataPathThread"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   120
	subThreadName.AppendNum(Math::Random(),EHex);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   121
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   122
	TInt error = DoCreateSubThread(subThreadName, &CMMFDataPathProxyServer::StartThread);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   123
	if (error)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   124
		return error;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   125
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   126
	//now create a session with the subthread
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   127
	error = CreateSession(subThreadName, KMMFDataPathProxyVersion);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   128
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   129
	return error;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   130
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   131
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   132
// Note: in the following, we can pass straight addresses for writing since both client and server
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   133
// are in the same process.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   134
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   135
Load the datapath in the new thread. Use this method if the codec UID is not known
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   136
and there is no datapath ambiguity, ie. only one datapath is possible.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   137
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   138
@return An error code indicating if the function call was successful. KErrNone on success, otherwise
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   139
        another of the system-wide error codes.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   140
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   141
@since 7.0s
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   142
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   143
EXPORT_C TInt RMMFDataPathProxy::LoadDataPath()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   144
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   145
	return SendReceive(EMMFDataPathProxyLoadDataPathBy);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   146
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   147
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   148
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   149
Load the datapath in the new thread. 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   150
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   151
Use this method if the codec UID is not known but the TMediaId can be used to select which codec 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   152
to use.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   153
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   154
@param  aMediaId
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   155
	    The type of media to be handled by this datapath.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   156
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   157
@return An error code indicating if the function call was successful. KErrNone on success, otherwise
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   158
        another of the system-wide error codes.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   159
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   160
@since  7.0s
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   161
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   162
EXPORT_C TInt RMMFDataPathProxy::LoadDataPath(TMediaId aMediaId)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   163
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   164
	return SendReceive (EMMFDataPathProxyLoadDataPathByMediaId, TInt(&aMediaId));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   165
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   166
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   167
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   168
Load the datapath in the new thread. 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   169
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   170
Use this method if the codec UID is known and there is no datapath ambiguity, ie. only one datapath
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   171
is possible.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   172
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   173
@param  aCodecUid
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   174
        The UID of the codec plugin to be used by the datapath.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   175
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   176
@return An error code indicating if the function call was successful. KErrNone on success, otherwise
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   177
        another of the system-wide error codes.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   178
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   179
@since  7.0s
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   180
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   181
EXPORT_C TInt RMMFDataPathProxy::LoadDataPath(TUid aCodecUid) 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   182
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   183
	return SendReceive(EMMFDataPathProxyLoadDataPathByCodecUid, TInt(&aCodecUid));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   184
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   185
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   186
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   187
Loads the datapath in the new thread. 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   188
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   189
Use this method if the codec UID is known and there is datapath ambiguity. The TMediaId will be
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   190
used to choose the correct path.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   191
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   192
@param  aCodecUid
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   193
        The UID of the codec plugin to be used by the datapath.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   194
@param  aMediaId
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   195
        The type of media to be handled by this datapath.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   196
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   197
@return An error code indicating if the function call was successful. KErrNone on success, otherwise
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   198
        another of the system-wide error codes.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   199
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   200
@since  7.0s
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   201
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   202
EXPORT_C TInt RMMFDataPathProxy::LoadDataPath(TUid aCodecUid, TMediaId aMediaId)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   203
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   204
	return SendReceive(EMMFDataPathProxyLoadDataPathByMediaIdCodecUid, TInt(&aCodecUid), TInt(&aMediaId));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   205
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   206
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   207
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   208
Specify the data source for this datapath.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   209
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   210
If the sink already exists, this function tries to establish a connection between the source and 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   211
sink. Note that only one data source can be added to the datapath.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   212
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   213
@param  aSource
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   214
        A pointer to the data source.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   215
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   216
@return An error code indicating if the function call was successful. KErrNone on success, otherwise
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   217
        another of the system-wide error codes.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   218
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   219
@since 7.0s
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   220
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   221
EXPORT_C TInt RMMFDataPathProxy::AddDataSource(MDataSource* aSource)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   222
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   223
	return SendReceive(EMMFDataPathProxyAddDataSource, TInt(aSource));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   224
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   225
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   226
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   227
Specify the data sink for this datapath.  
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   228
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   229
If the source already exists, this function tries to establish a connection between the source and 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   230
the sink. Note that only one data sink can be added to the datapath.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   231
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   232
@param  aSink
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   233
        A pointer to the data sink.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   234
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   235
@return An error code indicating if the function call was successful. KErrNone on success, otherwise
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   236
        another of the system-wide error codes.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   237
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   238
@since  7.0s
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   239
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   240
EXPORT_C TInt RMMFDataPathProxy::AddDataSink(MDataSink* aSink)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   241
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   242
	return SendReceive(EMMFDataPathProxyAddDataSink, TInt(aSink));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   243
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   244
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   245
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   246
Transfer the datapath from the stopped into the primed state.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   247
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   248
This function allocates buffers in preparation to play and must be called before calling PlayL().
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   249
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   250
@return An error code indicating if the function call was successful. KErrNone on success, otherwise
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   251
        another of the system-wide error codes.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   252
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   253
@since  7.0s
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   254
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   255
EXPORT_C TInt RMMFDataPathProxy::Prime()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   256
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   257
	return SendReceive(EMMFDataPathProxyPrime);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   258
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   259
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   260
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   261
Transfer the datapath from the primed into the playing state.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   262
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   263
This function starts an active scheduler play loop and can only play from the primed state.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   264
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   265
@return An error code indicating if the function call was successful. KErrNone on success, otherwise
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   266
        another of the system-wide error codes.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   267
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   268
@since 7.0s
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   269
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   270
EXPORT_C TInt RMMFDataPathProxy::Play()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   271
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   272
	return SendReceive(EMMFDataPathProxyPlay);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   273
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   274
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   275
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   276
Pauses playing.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   277
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   278
This function transfers the datapath from the playing into the primed state and sends 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   279
KMMFErrorCategoryDataPathGeneralError to the client if an error occurs.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   280
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   281
@return An error code indicating if the function call was successful. KErrNone on success, otherwise
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   282
        another of the system-wide error codes.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   283
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   284
@since  7.0s
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   285
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   286
EXPORT_C TInt RMMFDataPathProxy::Pause()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   287
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   288
	return SendReceive(EMMFDataPathProxyPause);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   289
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   290
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   291
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   292
Stops playing.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   293
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   294
This function transfers the datapath from the primed into the stopped state and resets the data 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   295
path position, but does not clean up buffers. It also sends KMMFErrorCategoryDataPathGeneralError 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   296
to the client if an error occurs.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   297
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   298
@return An error code indicating if the function call was successful. KErrNone on success, otherwise
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   299
        another of the system-wide error codes.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   300
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   301
@since  7.0s
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   302
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   303
EXPORT_C TInt RMMFDataPathProxy::Stop()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   304
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   305
	return SendReceive(EMMFDataPathProxyStop);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   306
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   307
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   308
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   309
Gets the current position of the datapath in units of time.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   310
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   311
@param  aPosition
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   312
        The current position in micro seconds will be copied into this variable.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   313
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   314
@return An error code indicating if the function call was successful. KErrNone on success, otherwise
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   315
        another of the system-wide error codes.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   316
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   317
@since  7.0s
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   318
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   319
EXPORT_C TInt RMMFDataPathProxy::GetPosition(TTimeIntervalMicroSeconds& aPosition) const
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   320
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   321
	return SendReceive(EMMFDataPathProxyGetPosition, TInt(&aPosition));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   322
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   323
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   324
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   325
Sets the current position of the datapath in units of time.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   326
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   327
@param  aPosition
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   328
        The required position in micro seconds.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   329
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   330
@return An error code indicating if the function call was successful. KErrNone on success, otherwise
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   331
        another of the system-wide error codes.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   332
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   333
@since 7.0s
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   334
**/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   335
EXPORT_C TInt RMMFDataPathProxy::SetPosition(const TTimeIntervalMicroSeconds& aPosition)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   336
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   337
	return SendReceive(EMMFDataPathProxySetPosition, TInt(&aPosition));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   338
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   339
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   340
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   341
Sets the play window relative to the start of the entire clip.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   342
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   343
@param  aStart
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   344
        The start position in micro seconds relative to the start of the clip.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   345
@param  aEnd
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   346
        The end position in micro seconds relative to the start of the clip.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   347
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   348
@return An error code indicating if the function call was successful. KErrNone on success, otherwise
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   349
        another of the system-wide error codes.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   350
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   351
@since  7.0s
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   352
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   353
EXPORT_C TInt RMMFDataPathProxy::SetPlayWindow( const TTimeIntervalMicroSeconds& aStart, const TTimeIntervalMicroSeconds& aEnd )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   354
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   355
	return SendReceive( EMMFDataPathProxySetPlayWindow, TInt(&aStart), TInt(&aEnd)) ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   356
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   357
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   358
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   359
Removes a previously defined play window.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   360
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   361
@return An error code indicating if the function call was successful. KErrNone on success, otherwise
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   362
        another of the system-wide error codes.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   363
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   364
@since  7.0s
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   365
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   366
EXPORT_C TInt RMMFDataPathProxy::ClearPlayWindow()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   367
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   368
	return SendReceive( EMMFDataPathProxyClearPlayWindow) ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   369
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   370
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   371
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   372
Gets the current datapath state.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   373
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   374
@param  aState
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   375
        The current state of the datapath will be copied into this variable.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   376
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   377
@return An error code indicating if the function call was successful. KErrNone on success, otherwise
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   378
        another of the system-wide error codes.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   379
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   380
@since  7.0s
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   381
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   382
EXPORT_C TInt RMMFDataPathProxy::State( TInt& aState )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   383
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   384
	return SendReceive( EMMFDataPathProxyState, TInt(&aState) ) ; // pass address, not value
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   385
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   386
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   387
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   388
Deletes the datapath and shuts down the datapath proxy thread.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   389
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   390
Calls RMMFSubThreadBase::Shutdown(). This function will not return until the subthread has 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   391
exited, or a timeout has occurred.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   392
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   393
@since  7.0s
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   394
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   395
EXPORT_C void RMMFDataPathProxy::Close()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   396
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   397
	Shutdown();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   398
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   399
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   400
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   401
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   402
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   403
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   404
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   405
CMMFDataPathProxyServer* CMMFDataPathProxyServer::NewL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   406
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   407
	CMMFDataPathProxyServer* s = new(ELeave) CMMFDataPathProxyServer();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   408
	CleanupStack::PushL(s);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   409
	s->ConstructL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   410
	CleanupStack::Pop();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   411
	return s;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   412
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   413
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   414
CMMFDataPathProxyServer::CMMFDataPathProxyServer() :
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   415
	CMMFSubThreadServer(EPriorityStandard)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   416
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   417
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   418
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   419
void CMMFDataPathProxyServer::ConstructL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   420
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   421
	//just need to call baseclass's constructL here
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   422
	CMMFSubThreadServer::ConstructL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   423
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   424
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   425
CMMFDataPathProxyServer::~CMMFDataPathProxyServer()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   426
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   427
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   428
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   429
CMmfIpcSession* CMMFDataPathProxyServer::NewSessionL(const TVersion& aVersion) const
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   430
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   431
	if (!User::QueryVersionSupported(KMMFDataPathProxyVersion, aVersion))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   432
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   433
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   434
	return CMMFDataPathProxySession::NewL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   435
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   436
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   437
TInt CMMFDataPathProxyServer::StartThread(TAny*)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   438
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   439
	TInt err = KErrNone;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   440
	//create cleanupstack
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   441
	CTrapCleanup* cleanup=CTrapCleanup::New(); // get clean-up stack
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   442
	if (!cleanup)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   443
		err = KErrNoMemory;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   444
	if (!err)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   445
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   446
		TRAP(err, DoStartThreadL());
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   447
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   448
	delete cleanup;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   449
	return err;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   450
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   451
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   452
void CMMFDataPathProxyServer::DoStartThreadL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   453
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   454
	// create and install the active scheduler we need
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   455
	CActiveScheduler* s=new(ELeave) CActiveScheduler;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   456
	CleanupStack::PushL(s);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   457
	CActiveScheduler::Install(s);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   458
	// create the server (leave it on the cleanup stack)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   459
	CleanupStack::PushL(CMMFDataPathProxyServer::NewL());
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   460
	// Initialisation complete, now signal the client
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   461
	RThread::Rendezvous(KErrNone);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   462
	// Ready to run
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   463
	CActiveScheduler::Start();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   464
	// Cleanup the server and scheduler
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   465
	CleanupStack::PopAndDestroy(2);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   466
	REComSession::FinalClose(); // fix 047933
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   467
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   468
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   469
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   470
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   471
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   472
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   473
CMMFDataPathProxySession* CMMFDataPathProxySession::NewL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   474
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   475
	return new(ELeave) CMMFDataPathProxySession();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   476
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   477
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   478
CMMFDataPathProxySession::CMMFDataPathProxySession()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   479
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   480
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   481
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   482
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   483
CMMFDataPathProxySession::~CMMFDataPathProxySession()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   484
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   485
	delete iDataPath;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   486
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   487
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   488
void CMMFDataPathProxySession::ServiceL(const RMmfIpcMessage& aMessage)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   489
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   490
	TBool complete = EFalse;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   491
	switch(aMessage.Function())
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   492
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   493
	case EMMFDataPathProxyLoadDataPathBy:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   494
		complete = LoadDataPathByL(aMessage);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   495
		break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   496
	case EMMFDataPathProxyLoadDataPathByMediaId:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   497
		complete = LoadDataPathByMediaIdL(aMessage);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   498
		break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   499
	case EMMFDataPathProxyLoadDataPathByCodecUid:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   500
		complete = LoadDataPathByCodecUidL(aMessage);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   501
		break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   502
	case EMMFDataPathProxyLoadDataPathByMediaIdCodecUid:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   503
		complete = LoadDataPathByMediaIdCodecUidL(aMessage);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   504
		break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   505
	case EMMFDataPathProxyAddDataSource:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   506
		complete = AddDataSourceL(aMessage);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   507
		break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   508
	case EMMFDataPathProxyAddDataSink:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   509
		complete = AddDataSinkL(aMessage);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   510
		break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   511
	case EMMFDataPathProxyPrime:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   512
		complete = PrimeL(aMessage);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   513
		break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   514
	case EMMFDataPathProxyPlay:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   515
		complete = PlayL(aMessage);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   516
		break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   517
	case EMMFDataPathProxyPause:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   518
		complete = PauseL(aMessage);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   519
		break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   520
	case EMMFDataPathProxyStop:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   521
		complete = StopL(aMessage);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   522
		break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   523
	case EMMFDataPathProxyGetPosition:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   524
		complete = GetPositionL(aMessage);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   525
		break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   526
	case EMMFDataPathProxySetPosition:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   527
		complete = SetPositionL(aMessage);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   528
		break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   529
	case EMMFDataPathProxySetPlayWindow :
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   530
		complete = SetPlayWindowL(aMessage) ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   531
		break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   532
	case EMMFDataPathProxyClearPlayWindow:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   533
		complete = ClearPlayWindowL(aMessage);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   534
		break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   535
	case EMMFDataPathProxyState:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   536
		complete = StateL(aMessage);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   537
		break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   538
	case EMMFSubThreadReceiveEvents:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   539
		complete = ReceiveEventsL(aMessage);//provided by baseclass
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   540
		break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   541
	case EMMFSubThreadCancelReceiveEvents:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   542
		complete = CancelReceiveEvents();//provided by baseclass
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   543
		break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   544
	case EMMFSubThreadShutdown:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   545
		complete = ShutDown();//provided by baseclass
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   546
		break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   547
	default:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   548
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   549
		break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   550
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   551
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   552
	if (complete)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   553
		aMessage.Complete(KErrNone);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   554
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   555
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   556
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   557
TBool CMMFDataPathProxySession::LoadDataPathByL(const RMmfIpcMessage& /*aMessage*/)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   558
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   559
	if (iDataPath)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   560
		User::Leave(KErrAlreadyExists);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   561
	iDataPath = CMMFDataPath::NewL(*this);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   562
	return ETrue;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   563
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   564
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   565
TBool CMMFDataPathProxySession::LoadDataPathByMediaIdL(const RMmfIpcMessage& aMessage)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   566
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   567
	if (iDataPath)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   568
		User::Leave(KErrAlreadyExists);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   569
	TMediaId* mediaId = REINTERPRET_CAST(TMediaId*, aMessage.Int0());
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   570
	iDataPath = CMMFDataPath::NewL(*mediaId, *this);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   571
	return ETrue;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   572
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   573
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   574
TBool CMMFDataPathProxySession::LoadDataPathByCodecUidL(const RMmfIpcMessage& aMessage)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   575
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   576
	if (iDataPath)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   577
		User::Leave(KErrAlreadyExists);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   578
	TUid* uid = REINTERPRET_CAST(TUid*, aMessage.Int0());
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   579
	iDataPath = CMMFDataPath::NewL(*uid, *this);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   580
	return ETrue;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   581
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   582
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   583
TBool CMMFDataPathProxySession::LoadDataPathByMediaIdCodecUidL(const RMmfIpcMessage& aMessage)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   584
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   585
	if (iDataPath)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   586
		User::Leave(KErrAlreadyExists);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   587
	TUid* uid = REINTERPRET_CAST(TUid*, aMessage.Int0());
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   588
	TMediaId* mediaId = REINTERPRET_CAST(TMediaId*, aMessage.Int1());
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   589
	iDataPath = CMMFDataPath::NewL(*uid, *mediaId, *this);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   590
	return ETrue;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   591
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   592
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   593
TBool CMMFDataPathProxySession::AddDataSourceL(const RMmfIpcMessage& aMessage)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   594
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   595
	CheckDataPathExistsL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   596
	MDataSource* source = REINTERPRET_CAST(MDataSource*, aMessage.Int0());
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   597
	iDataPath->AddDataSourceL(source);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   598
	return ETrue;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   599
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   600
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   601
TBool CMMFDataPathProxySession::AddDataSinkL(const RMmfIpcMessage& aMessage)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   602
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   603
	CheckDataPathExistsL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   604
	MDataSink* sink = REINTERPRET_CAST(MDataSink*, aMessage.Int0());
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   605
	iDataPath->AddDataSinkL(sink);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   606
	return ETrue;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   607
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   608
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   609
TBool CMMFDataPathProxySession::PrimeL(const RMmfIpcMessage& /*aMessage*/)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   610
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   611
	CheckDataPathExistsL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   612
	iDataPath->PrimeL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   613
	return ETrue;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   614
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   615
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   616
TBool CMMFDataPathProxySession::PlayL(const RMmfIpcMessage& /*aMessage*/)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   617
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   618
	CheckDataPathExistsL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   619
	iDataPath->PlayL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   620
	return ETrue;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   621
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   622
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   623
TBool CMMFDataPathProxySession::PauseL(const RMmfIpcMessage& /*aMessage*/)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   624
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   625
	CheckDataPathExistsL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   626
	iDataPath->Pause();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   627
	return ETrue;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   628
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   629
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   630
TBool CMMFDataPathProxySession::StopL(const RMmfIpcMessage& /*aMessage*/)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   631
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   632
	CheckDataPathExistsL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   633
	iDataPath->Stop();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   634
	return ETrue;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   635
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   636
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   637
TBool CMMFDataPathProxySession::GetPositionL(const RMmfIpcMessage& aMessage) const
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   638
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   639
	CheckDataPathExistsL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   640
	TTimeIntervalMicroSeconds* t = REINTERPRET_CAST(TTimeIntervalMicroSeconds*, aMessage.Int0());
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   641
	*t = iDataPath->Position();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   642
	return ETrue;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   643
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   644
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   645
TBool CMMFDataPathProxySession::SetPositionL(const RMmfIpcMessage& aMessage)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   646
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   647
	CheckDataPathExistsL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   648
	TTimeIntervalMicroSeconds* t = REINTERPRET_CAST(TTimeIntervalMicroSeconds*, aMessage.Int0());
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   649
	iDataPath->SetPositionL(*t);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   650
	return ETrue;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   651
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   652
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   653
TBool CMMFDataPathProxySession::SetPlayWindowL(const RMmfIpcMessage& aMessage) 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   654
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   655
	CheckDataPathExistsL() ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   656
	TTimeIntervalMicroSeconds* start = REINTERPRET_CAST( TTimeIntervalMicroSeconds*, aMessage.Int0() ) ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   657
	TTimeIntervalMicroSeconds* end = REINTERPRET_CAST( TTimeIntervalMicroSeconds*, aMessage.Int1() ) ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   658
	iDataPath->SetPlayWindowL( *start, *end ) ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   659
	return ETrue;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   660
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   661
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   662
TBool CMMFDataPathProxySession::ClearPlayWindowL(const RMmfIpcMessage& /*aMessage*/)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   663
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   664
	CheckDataPathExistsL() ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   665
	iDataPath->ClearPlayWindowL() ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   666
	return ETrue ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   667
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   668
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   669
TBool CMMFDataPathProxySession::StateL(const RMmfIpcMessage& aMessage)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   670
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   671
	CheckDataPathExistsL() ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   672
	TInt* state = REINTERPRET_CAST( TInt*, aMessage.Int0() ) ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   673
	*state = iDataPath->State();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   674
	return ETrue ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   675
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   676