1/* ------------------------------------------------------------------
2 * Copyright (C) 1998-2009 PacketVideo
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13 * express or implied.
14 * See the License for the specific language governing permissions
15 * and limitations under the License.
16 * -------------------------------------------------------------------
17 */
18
19#include "pvmf_metadata_infomessage.h"
20#include "oscl_mem.h"
21
22OSCL_EXPORT_REF PVMFMetadataInfoMessage::PVMFMetadataInfoMessage() :
23        iEventCode(0),
24        iRefCount(1)
25{
26    iMetadataVector.reserve(14);
27    iMetadataVector.clear();
28}
29
30OSCL_EXPORT_REF PVMFMetadataInfoMessage::PVMFMetadataInfoMessage(Oscl_Vector<PvmiKvp, OsclMemAllocator>& aMetadataVector, int32 aCode, PVUuid aUuid) :
31        iRefCount(1)
32{
33    // Save the event info
34    iEventCode = aCode;
35    iEventUuid = aUuid;
36    iMetadataVector.clear();
37    iMetadataVector = aMetadataVector;
38}
39
40OSCL_EXPORT_REF PVMFMetadataInfoMessage::~PVMFMetadataInfoMessage()
41{
42    // If the destructor is called directly (instead of via removeRef())
43    // then the ref count for the next message in the list needs to decremented
44    iMetadataVector.clear();
45}
46
47OSCL_EXPORT_REF void PVMFMetadataInfoMessage::destroy()
48{
49    OSCL_DELETE(this);
50}
51
52OSCL_EXPORT_REF void PVMFMetadataInfoMessage::SetEventCodeUUID(int32 aCode, PVUuid aUuid)
53{
54    // Set event code and UUID
55    iEventCode = aCode;
56    iEventUuid = aUuid;
57}
58
59OSCL_EXPORT_REF void PVMFMetadataInfoMessage::GetCodeUUID(int32& aCode, PVUuid& aUuid)
60{
61    // Return event code and UUID
62    aCode = iEventCode;
63    aUuid = iEventUuid;
64}
65
66OSCL_EXPORT_REF Oscl_Vector<PvmiKvp, OsclMemAllocator>& PVMFMetadataInfoMessage::GetMetadataVector()
67{
68    // Return the next message in the list
69    return iMetadataVector;
70}
71
72OSCL_EXPORT_REF void PVMFMetadataInfoMessage::addRef()
73{
74    // Increment this object's ref count
75    ++iRefCount;
76}
77
78OSCL_EXPORT_REF void PVMFMetadataInfoMessage::removeRef()
79{
80    // Decrement this object's ref count
81    --iRefCount;
82
83    // If ref count reaches 0 then destroy this object automatically
84    if (iRefCount <= 0)
85    {
86        // The next message's refcount has already been decremented so
87        // set to NULL so the destructor won't decrement again.
88        // Destroy this instance.
89        destroy();
90    }
91}
92
93OSCL_EXPORT_REF bool PVMFMetadataInfoMessage::queryInterface(const PVUuid& uuid, PVInterface*& iface)
94{
95    // Only returns the error/info message interface
96    if (uuid == PVMFMetadataInfoMessageInterfaceUUID)
97    {
98        PVMFMetadataInfoMessageInterface* myInterface = OSCL_STATIC_CAST(PVMFMetadataInfoMessageInterface*, this);
99        iface = OSCL_STATIC_CAST(PVInterface*, myInterface);
100    }
101    else
102    {
103        return false;
104    }
105    return true;
106}
107
108