omxil/xmltestharness/xmlclient/src/omxthreadrequest.cpp
author Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
Fri, 07 May 2010 16:25:23 +0100
branchOpenMAX-IL_SHAI
changeset 16 eedf2dcd43c6
permissions -rw-r--r--
Implementation of OpenMAX-IL with SHAI
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
16
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
     1
/*
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
     3
* All rights reserved.
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
     4
* This component and the accompanying materials are made available
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
     6
* which accompanies this distribution, and is available
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
     8
*
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
     9
* Initial Contributors:
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    11
*
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    12
* Contributors:
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    13
*
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    14
* Description:
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    15
*
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    16
*/
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    17
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    18
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    19
/**
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    20
@file
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    21
@internalComponent
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    22
*/
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    23
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    24
#include "omxthreadrequest.h"
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    25
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    26
COmxThreadRequest* COmxThreadRequest::NewL()
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    27
    {
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    28
    COmxThreadRequest* self = new (ELeave) COmxThreadRequest();
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    29
    CleanupStack::PushL(self);
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    30
    self->ConstructL();
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    31
    CleanupStack::Pop(self);
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    32
    return self;
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    33
    }
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    34
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    35
COmxThreadRequest::COmxThreadRequest()
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    36
    {
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    37
    }
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    38
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    39
void COmxThreadRequest::ConstructL()
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    40
    {
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    41
    //Parameters to send to the sub thread
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    42
    TThreadParam param;
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    43
    param.iThreadRequestObj = this;
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    44
    
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    45
    //Get a reference to this thread's heap
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    46
    RHeap& thisHeap = User::Heap();
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    47
            
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    48
    //Get the id of this thread
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    49
    RThread thisThread;
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    50
    TThreadId thisThreadId = thisThread.Id();
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    51
    param.iMainThreadId = thisThreadId;
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    52
    
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    53
    //Get a request to signal for setup completion
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    54
    TRequestStatus setupComplete = KRequestPending;
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    55
    param.iSetupComplete = &setupComplete;
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    56
    
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    57
    //current time and the "this" pointer for a unique key
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    58
    _LIT(KFormatString,"%S.%020Lu.%08X");
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    59
    TName threadName;
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    60
    TTime now;
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    61
    now.UniversalTime();
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    62
    threadName.Format(KFormatString, &KXMLClientOMXThreadName, now.Int64(), reinterpret_cast<TUint>(this));
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    63
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    64
    //Create a new thread using the same heap as this thread
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    65
    TInt result = iRequestThread.Create(threadName,
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    66
                                    ThreadCreateFunction,
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    67
                                    KDefaultStackSize,
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    68
                                    &thisHeap,
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    69
                                    &param);
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    70
    User::LeaveIfError(result);
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    71
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    72
    //Run the thread under high priority
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    73
    iRequestThread.SetPriority(EPriorityNormal); 
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    74
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    75
    //Wait for thread startup to complete
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    76
    TRequestStatus threadStatus = KRequestPending;
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    77
    iRequestThread.Logon(threadStatus);
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    78
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    79
    //Start the thread
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    80
    iRequestThread.Resume();
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    81
    User::WaitForRequest(threadStatus, setupComplete);
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    82
    if(threadStatus != KRequestPending)
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    83
        {
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    84
        //Thread creation failed
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    85
        TInt reason = iRequestThread.ExitReason();
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    86
        User::Leave(reason);
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    87
        }
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    88
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    89
    // Thread creation was successfull
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    90
    TInt error = iRequestThread.LogonCancel(threadStatus);
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    91
    User::LeaveIfError(error); // There is no outstanding request
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    92
    User::WaitForRequest(threadStatus); // Consume the signal
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    93
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    94
    iThreadCreated = ETrue;
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    95
    User::LeaveIfError(setupComplete.Int());
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    96
    }
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    97
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    98
/**
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
    99
Main thread entry point for the omx sub-thread.
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   100
Create a cleanup stack for the thread and process the commands
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   101
inside a trap for cleanup behaviour.
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   102
@internalComponent
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   103
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   104
@param aPtr Parameters to be used for creating the thread.
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   105
@return The error code for thread termination.
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   106
*/
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   107
TInt COmxThreadRequest::ThreadCreateFunction(TAny* aPtr)
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   108
    {
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   109
    TInt error = KErrNone;
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   110
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   111
    // Create a cleanup stack for the thread
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   112
    CTrapCleanup* cleanupStack = CTrapCleanup::New();
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   113
    if (cleanupStack)
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   114
        {
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   115
        if(error == KErrNone)
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   116
            {
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   117
            TRAP(error, ThreadTrapFunctionL(aPtr));
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   118
            }
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   119
        }
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   120
    else
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   121
        {
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   122
        error = KErrNoMemory;
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   123
        }
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   124
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   125
    delete cleanupStack;
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   126
    return error;
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   127
    }
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   128
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   129
/**
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   130
Function for thread execution. If the thread is successfully created signal
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   131
the main thread that the thread creation was successfull. Then enter OMX
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   132
request loop.
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   133
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   134
@internalComponent
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   135
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   136
@param aPtr A pointer to a TThreadParam object containing the startup parameters
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   137
            for the thread.
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   138
*/
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   139
void COmxThreadRequest::ThreadTrapFunctionL(TAny* aPtr)
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   140
    {
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   141
    TThreadParam* param = static_cast<TThreadParam*>(aPtr);
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   142
    COmxThreadRequest* iThreadRequestObj = param->iThreadRequestObj;
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   143
    
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   144
    // tell main thread that setup is complete
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   145
    RThread mainThread;
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   146
    mainThread.Open(param->iMainThreadId);
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   147
    mainThread.RequestComplete(param->iSetupComplete, KErrNone);
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   148
    mainThread.Close();
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   149
    
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   150
    // loop to execute OMX commands in own thread
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   151
    while(iThreadRequestObj->iFunction != EOMXFunctionCodeTerminate)
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   152
        {
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   153
        iThreadRequestObj->iRequestThreadStatus = KRequestPending;
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   154
        
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   155
        // block until client request is made
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   156
        User::WaitForRequest(iThreadRequestObj->iRequestThreadStatus);
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   157
        switch(iThreadRequestObj->iFunction)
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   158
            {
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   159
            case EOMXFunctionCodeGetHandle:
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   160
                iThreadRequestObj->iErrorType = OMX_GetHandle(
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   161
                        iThreadRequestObj->ipHandle,
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   162
                        iThreadRequestObj->icComponentName,
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   163
                        iThreadRequestObj->ipAppData,
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   164
                        iThreadRequestObj->ipCallBacks);
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   165
                break;
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   166
                
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   167
            case EOMXFunctionCodeFreeHandle:
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   168
                iThreadRequestObj->iErrorType = OMX_FreeHandle(
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   169
                        iThreadRequestObj->ihComponent);
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   170
                break;
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   171
                
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   172
            case EOMXFunctionCodeTerminate:
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   173
                break;
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   174
                
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   175
            default:
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   176
                // should never be reached
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   177
                User::Panic(_L("COmxThreadRequest"), KErrNotSupported);
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   178
            }
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   179
        
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   180
        // complete client request
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   181
        TRequestStatus *status = iThreadRequestObj->iCallingStatus;
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   182
        RThread callingThread;
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   183
        callingThread.Open(iThreadRequestObj->iCallingThreadId);
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   184
        callingThread.RequestComplete(status, KErrNone);
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   185
        callingThread.Close();
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   186
        }
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   187
    }
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   188
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   189
COmxThreadRequest::~COmxThreadRequest()
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   190
    {
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   191
    if(iThreadCreated)
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   192
        {
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   193
        TRequestStatus status;
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   194
        // Logon to ensure thread has completely terminated, not just broken out of message handling loop.
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   195
        // In particular this ensures the cleanup stack is destroyed before the heap marks are inspected.
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   196
        iRequestThread.Logon(status);
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   197
        Terminate();
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   198
        User::WaitForRequest(status);
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   199
        iThreadCreated = EFalse;
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   200
        iRequestThread.Close();
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   201
        }
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   202
    }
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   203
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   204
OMX_ERRORTYPE COmxThreadRequest::GetHandle(
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   205
        OMX_OUT OMX_HANDLETYPE* pHandle,
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   206
        OMX_IN  OMX_STRING cComponentName,
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   207
        OMX_IN  OMX_PTR pAppData,
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   208
        OMX_IN  OMX_CALLBACKTYPE* pCallBacks)
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   209
    {
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   210
    ipHandle = pHandle;
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   211
    icComponentName = cComponentName;
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   212
    ipAppData = pAppData;
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   213
    ipCallBacks = pCallBacks;
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   214
    
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   215
    iFunction = EOMXFunctionCodeGetHandle; 
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   216
    DoRequest();
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   217
    
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   218
    return iErrorType;
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   219
    }
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   220
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   221
OMX_ERRORTYPE COmxThreadRequest::FreeHandle(
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   222
    OMX_IN  OMX_HANDLETYPE hComponent)
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   223
    {
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   224
    ihComponent = hComponent;
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   225
    
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   226
    iFunction = EOMXFunctionCodeFreeHandle; 
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   227
    DoRequest();
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   228
    
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   229
    return iErrorType;
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   230
    }
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   231
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   232
void COmxThreadRequest::Terminate()
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   233
    {
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   234
    iFunction = EOMXFunctionCodeTerminate; 
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   235
    DoRequest();
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   236
    }
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   237
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   238
void COmxThreadRequest::DoRequest()
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   239
    {
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   240
    RThread me;
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   241
    iCallingThreadId = me.Id();
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   242
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   243
    TRequestStatus callingRequestStatus = KRequestPending;
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   244
    iCallingStatus = &callingRequestStatus;
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   245
      
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   246
    // send request to request thread
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   247
    RThread requestThread;
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   248
    requestThread.Open(iRequestThread.Id());
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   249
    TRequestStatus* requestStatus = &iRequestThreadStatus;
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   250
    requestThread.RequestComplete(requestStatus, KErrNone);
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   251
    requestThread.Close();
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   252
     
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   253
    // block calling request until OMX request completes
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   254
    User::WaitForRequest(callingRequestStatus);
eedf2dcd43c6 Implementation of OpenMAX-IL with SHAI
Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
parents:
diff changeset
   255
    }