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_AudioSampleEntry Class is used for visual streams. 20*/ 21 22#define IMPLEMENT_AudioSampleEntry 23 24#include "audiosampleentry.h" 25#include "atomutils.h" 26#include "a_atomdefs.h" 27 28 29// Constructor 30PVA_FF_AudioSampleEntry::PVA_FF_AudioSampleEntry(int32 codecType) 31 : PVA_FF_SampleEntry(FourCharConstToUint32('m', 'p', '4', 'a')) 32{ 33 PV_MP4_FF_NEW(fp->auditCB, PVA_FF_ESDAtom, (MEDIA_TYPE_AUDIO, codecType), _pes); 34 35 init(); 36 recomputeSize(); 37 38 _pes->setParent(this); 39} 40 41// Destructor 42PVA_FF_AudioSampleEntry::~PVA_FF_AudioSampleEntry() 43{ 44 // Cleanup PVA_FF_ESDAtom 45 PV_MP4_FF_DELETE(NULL, PVA_FF_ESDAtom, _pes); 46} 47 48void 49PVA_FF_AudioSampleEntry::init() 50{ 51 _reserved1[0] = 0; 52 _reserved1[1] = 0; 53 54 _reserved2 = 2; 55 _reserved3 = 16; 56 _reserved4 = 0; 57 58 _timeScale = 0; 59 60 _reserved5 = 0; 61} 62 63// Rendering the PVA_FF_Atom in proper format (bitlengths, etc.) to an ostream 64bool 65PVA_FF_AudioSampleEntry::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp) 66{ 67 int32 rendered = 0; 68 69 if (!renderAtomBaseMembers(fp)) 70 { 71 return false; 72 } 73 rendered += getDefaultSize(); 74 75 // From PVA_FF_SampleEntry base class 76 for (int32 i = 0; i < 6; i++) 77 { 78 if (! PVA_FF_AtomUtils::render8(fp, _reserved[i])) 79 { 80 return false; 81 } 82 rendered += 1; 83 } 84 if (!PVA_FF_AtomUtils::render16(fp, _dataReferenceIndex)) 85 { 86 return false; 87 } 88 89 if (!PVA_FF_AtomUtils::render32(fp, _reserved1[0])) 90 { 91 return false; 92 } 93 if (!PVA_FF_AtomUtils::render32(fp, _reserved1[1])) 94 { 95 return false; 96 } 97 rendered += 8; 98 99 if (!PVA_FF_AtomUtils::render16(fp, _reserved2)) 100 { 101 return false; 102 } 103 if (!PVA_FF_AtomUtils::render16(fp, _reserved3)) 104 { 105 return false; 106 } 107 if (!PVA_FF_AtomUtils::render32(fp, _reserved4)) 108 { 109 return false; 110 } 111 rendered += 8; 112 113 if (!PVA_FF_AtomUtils::render16(fp, _timeScale)) 114 { 115 return false; 116 } 117 rendered += 2; 118 119 if (!PVA_FF_AtomUtils::render16(fp, _reserved5)) 120 { 121 return false; 122 } 123 rendered += 2; 124 125 if (!_pes->renderToFileStream(fp)) 126 { 127 return false; 128 } 129 rendered += getESDAtom().getSize(); 130 131 return true; 132} 133 134 135void 136PVA_FF_AudioSampleEntry::recomputeSize() 137{ 138 int32 size = getDefaultSize(); 139 140 size += 8; // For reserved and dataRefIndex of PVA_FF_SampleEntry base class 141 142 size += 16; // For reserved1 - reserved4 143 size += 2; // For timescale 144 size += 2; // For reserved5 145 size += getESDAtom().getSize(); 146 147 _size = size; 148 149 if (_pparent != NULL) 150 { 151 _pparent->recomputeSize(); 152 } 153} 154