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 This PVA_FF_MediaDataAtom Class contains the media data. 20 */ 21 22 23 #ifndef __MediaDataAtom_H__ 24 #define __MediaDataAtom_H__ 25 26 #include "atom.h" 27 #include "a_isucceedfail.h" 28 29 #include "a_atomdefs.h" 30 #include "renderable.h" 31 #include "trackatom.h" 32 33 #include <stdio.h> 34 35 class PVA_FF_MediaDataAtom : public PVA_FF_Atom, public PVA_FF_ISucceedFail 36 { 37 38 public: 39 // 03/21/01 Pass the postfixed string to the obejct 40 // PVA_FF_MediaDataAtom(int32 type = MEDIA_DATA_IN_MEMORY); // Constructor 41 // 03/21/01 Generate the temporary files into the output path 42 // PVA_FF_MediaDataAtom(OSCL_wString postfixString, int32 type = MEDIA_DATA_IN_MEMORY); // Constructor 43 PVA_FF_MediaDataAtom(PVA_FF_UNICODE_STRING_PARAM outputPathString, 44 PVA_FF_UNICODE_STRING_PARAM postfixString, 45 int32 tempFileIndex, 46 int32 type = MEDIA_DATA_IN_MEMORY, 47 void* osclFileServerSession = NULL, 48 uint32 aCacheSize = 0); // Constructor 49 50 PVA_FF_MediaDataAtom(PVA_FF_UNICODE_STRING_PARAM targetFileName, 51 void* osclFileServerSession = NULL, 52 uint32 aCacheSize = 0); // Constructor 53 54 PVA_FF_MediaDataAtom(MP4_AUTHOR_FF_FILE_HANDLE targetFileHandle, 55 void* osclFileServerSession = NULL, 56 uint32 aCacheSize = 0); // Constructor 57 58 virtual ~PVA_FF_MediaDataAtom(); 59 60 // Add actual media sample to atom and return the size of the data 61 bool addRawSample(void *psample, uint32 length = 0); 62 // accepts memory fragments 63 bool addRawSample(Oscl_Vector <OsclMemoryFragment, OsclMemAllocator>& fragmentList, 64 uint32 length, int32 mediaType, int32 codecType); 65 66 int32 addRenderableSample(PVA_FF_Renderable *psample); // Adds to vector of renderables 67 68 // Get and set the file offset where the chunks (data) start setFileOffsetForChunkStart(uint32 offset)69 void setFileOffsetForChunkStart(uint32 offset) 70 { 71 _fileOffsetForChunkStart = offset; 72 } getFileOffsetForChunkStart()73 uint32 getFileOffsetForChunkStart() const 74 { 75 return _fileOffsetForChunkStart; 76 } 77 78 // The trackReferencePtr keeps a ptr to the actual track that contains 79 // the meta data for this media data atom setTrackReferencePtr(PVA_FF_TrackAtom * ta)80 void setTrackReferencePtr(PVA_FF_TrackAtom *ta) 81 { 82 _ptrackReferencePtr = ta; 83 _ptrackReferencePtrVec->push_back(ta); 84 } getTrackReferencePtr()85 virtual void *getTrackReferencePtr() 86 { 87 return (void*)_ptrackReferencePtr; 88 } 89 getTrackReferencePtrVec()90 virtual Oscl_Vector<PVA_FF_TrackAtom*, OsclMemAllocator> *getTrackReferencePtrVec() 91 { 92 return _ptrackReferencePtrVec; 93 } getRenderables()94 const Oscl_Vector<PVA_FF_Renderable*, OsclMemAllocator> &getRenderables() 95 { 96 return *_prenderables; 97 } 98 void reserveBuffer(int32 size); 99 100 // These are for FINAL rendering once the file data is complete 101 // Rendering the PVA_FF_Atom in proper format (bitlengths, etc.) to an ostream 102 virtual bool renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp); 103 104 bool _targetFileWriteError; 105 106 uint32 getMediaDataSize(); 107 108 bool prepareTargetFile(uint32 mediaOffset); 109 uint32 prepareTargetFileForFragments(uint32 mediaStartOffset); 110 bool closeTargetFile(); 111 IsTargetRender()112 bool IsTargetRender() 113 { 114 return _directRender; 115 } 116 getTotalDataRenderedToTargetFileInDirectRenderMode()117 uint32 getTotalDataRenderedToTargetFileInDirectRenderMode() 118 { 119 return _totalDataRenderedToTargetFile; 120 } 121 122 Oscl_File* getTargetFilePtr(); 123 getMediaStorageType()124 int32 getMediaStorageType() 125 { 126 return _type; 127 } 128 private: 129 virtual void recomputeSize(); 130 void prepareTempFile(uint32 aCache = 0); 131 132 int32 _type; // Either MEDIA_DATA_IN_MEMORY or MEDIA_DATA_ON_DISK 133 134 uint32 _fileSize; // Size (in bytes) of actual media data stored within the atom 135 uint32 _fileOffsetForChunkStart; 136 uint32 _fileOffsetForAtomStart; 137 PVA_FF_TrackAtom *_ptrackReferencePtr; 138 139 Oscl_Vector<PVA_FF_TrackAtom*, OsclMemAllocator> *_ptrackReferencePtrVec; 140 PVA_FF_UNICODE_HEAP_STRING _tempFilename; 141 MP4_AUTHOR_FF_FILE_IO_WRAP _pofstream; // Pointer to file stream that is temp storing the actual media data 142 143 int32 _tempFileIndex; 144 145 // 03/21/01 Add postfix string to handle multiple instances of the output filter, 146 // the temporary file names will be different for every instances 147 PVA_FF_UNICODE_HEAP_STRING _tempFilePostfix; 148 149 Oscl_Vector<PVA_FF_Renderable*, OsclMemAllocator> *_prenderables; 150 bool _fileWriteError; 151 bool _directRender; 152 153 154 void* _osclFileServerSession; 155 uint32 _targetFileMediaStartOffset; 156 uint32 _totalDataRenderedToTargetFile; 157 bool _oIsFileOpen; 158 }; 159 160 161 162 #endif 163 164