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