// Destructor CompositionOffsetAtom::~CompositionOffsetAtom() { if (_psampleCountVec != NULL) PV_MP4_ARRAY_DELETE(NULL, _psampleCountVec); if (_psampleOffsetVec != NULL) PV_MP4_ARRAY_DELETE(NULL, _psampleOffsetVec); if (_stbl_fptr_vec != NULL) PV_MP4_ARRAY_DELETE(NULL, _stbl_fptr_vec); DeleteMarkerTable(); if (_fileptr != NULL) { if (_fileptr->IsOpen()) { AtomUtils::CloseMP4File(_fileptr); } oscl_free(_fileptr); } if (IsAdded()) { RemoveFromScheduler(); } }
SampleToChunkAtom::~SampleToChunkAtom() { if (_pfirstChunkVec != NULL) { PV_MP4_ARRAY_DELETE(NULL, _pfirstChunkVec); } if (_psamplesPerChunkVec != NULL) { PV_MP4_ARRAY_DELETE(NULL, _psamplesPerChunkVec); } if (_psampleDescriptionIndexVec != NULL) { PV_MP4_ARRAY_DELETE(NULL, _psampleDescriptionIndexVec); } if (_fileptr != NULL) { if (_fileptr->IsOpen()) { AtomUtils::CloseMP4File(_fileptr); } oscl_free(_fileptr); } if (_stbl_fptr_vec != NULL) PV_MP4_ARRAY_DELETE(NULL, _stbl_fptr_vec); }
void CompositionOffsetAtom::DeleteMarkerTable() { if (MT_SampleCount != NULL) PV_MP4_ARRAY_DELETE(NULL, MT_SampleCount); if (MT_EntryCount != NULL) PV_MP4_ARRAY_DELETE(NULL, MT_EntryCount); }
// Destructor AVCSampleDependencyType::~AVCSampleDependencyType() { if (_reserved != NULL) PV_MP4_ARRAY_DELETE(NULL, _reserved); if (_sample_depends_on != NULL) PV_MP4_ARRAY_DELETE(NULL, _sample_depends_on); if (_sample_is_depended_on != NULL) PV_MP4_ARRAY_DELETE(NULL, _sample_is_depended_on); }
// Destructor SyncSampleAtom::~SyncSampleAtom() { // Cleanup vector if (_psampleNumbers != NULL) { PV_MP4_ARRAY_DELETE(NULL, _psampleNumbers); _psampleNumbers = NULL; } }
// Destructor CompositionOffsetAtom::~CompositionOffsetAtom() { if (_psampleCountVec != NULL) PV_MP4_ARRAY_DELETE(NULL, _psampleCountVec); if (_psampleOffsetVec != NULL) PV_MP4_ARRAY_DELETE(NULL, _psampleOffsetVec); if (_stbl_fptr_vec != NULL) PV_MP4_ARRAY_DELETE(NULL, _stbl_fptr_vec); if (_fileptr != NULL) { if (_fileptr->IsOpen()) { AtomUtils::CloseMP4File(_fileptr); } oscl_free(_fileptr); } }
// Destructor TimeToSampleAtom::~TimeToSampleAtom() { if (_psampleCountVec != NULL) PV_MP4_ARRAY_DELETE(NULL, _psampleCountVec); if (_psampleDeltaVec != NULL) PV_MP4_ARRAY_DELETE(NULL, _psampleDeltaVec); if (_stbl_fptr_vec != NULL) PV_MP4_ARRAY_DELETE(NULL, _stbl_fptr_vec); if (_fileptr != NULL) { if (_fileptr->IsOpen()) { AtomUtils::CloseMP4File(_fileptr); } oscl_free(_fileptr); } }
// Destructor ChunkOffsetAtom::~ChunkOffsetAtom() { if (_pchunkOffsets != NULL) { // Cleanup vector PV_MP4_ARRAY_DELETE(NULL, _pchunkOffsets); } if (_parsingMode) { if (_fileptr != NULL) { if (_fileptr->IsOpen()) { AtomUtils::CloseMP4File(_fileptr); } oscl_free(_fileptr); } if (_stbl_fptr_vec != NULL) PV_MP4_ARRAY_DELETE(NULL, _stbl_fptr_vec); } }
// responsible for creation of data sturcture inside the table. PVMFStatus CompositionOffsetAtom::CreateMarkerTable() { MT_Table_Size = (_iTotalNumSamplesInTrack / MT_SAMPLECOUNT_INCREMENT); PV_MP4_FF_ARRAY_NEW(NULL, uint32, (MT_Table_Size), MT_SampleCount); if (MT_SampleCount == NULL) { PV_MP4_ARRAY_DELETE(NULL, MT_SampleCount); MT_SampleCount = NULL; _success = false; _mp4ErrorCode = MEMORY_ALLOCATION_FAILED; return PVMFFailure; } PV_MP4_FF_ARRAY_NEW(NULL, uint32, (MT_Table_Size), MT_EntryCount); if (MT_EntryCount == NULL) { PV_MP4_ARRAY_DELETE(NULL, MT_EntryCount); MT_EntryCount = NULL; PV_MP4_ARRAY_DELETE(NULL, MT_SampleCount); MT_SampleCount = NULL; _success = false; _mp4ErrorCode = MEMORY_ALLOCATION_FAILED; return PVMFFailure; } for (uint32 idx = 0; idx < MT_Table_Size; idx++) //initialization { MT_EntryCount[idx] = 0; MT_SampleCount[idx] = 0; } return PVMFSuccess; }
// Stream-in ctor CompositionOffsetAtom::CompositionOffsetAtom(MP4_FF_FILE *fp, uint32 mediaType, uint32 size, uint32 type, OSCL_wString& filename, uint32 parsingMode): FullAtom(fp, size, type), OsclTimerObject(OsclActiveObject::EPriorityNominal, "CompositionOffsetAtom") { _psampleCountVec = NULL; _psampleOffsetVec = NULL; MT_SampleCount = NULL; MT_EntryCount = NULL; iMarkerTableCreation = false; MT_Table_Size = 0; _currGetSampleCount = 0; _currGetIndex = -1; _currGetTimeOffset = 0; _currPeekSampleCount = 0; _currPeekIndex = -1; _currPeekTimeOffset = 0; MT_Counter = 1; addSampleCount = 0; prevSampleCount = 0; entrycountTraversed = 0; refSample = MT_SAMPLECOUNT_INCREMENT; MT_j = 1; _mediaType = mediaType; _parsed_entry_cnt = 0; _fileptr = NULL; _parsing_mode = 0; _parsing_mode = parsingMode; _stbl_buff_size = CTTS_MIN_SAMPLE_TABLE_SIZE; _next_buff_number = 0; _curr_buff_number = 0; _curr_entry_point = 0; _stbl_fptr_vec = NULL; iLogger = PVLogger::GetLoggerObject("mp4ffparser"); iStateVarLogger = PVLogger::GetLoggerObject("mp4ffparser_mediasamplestats"); iParsedDataLogger = PVLogger::GetLoggerObject("mp4ffparser_parseddata"); iMarkerTableCreation = false; /* Add this AO to the scheduler */ if (OsclExecScheduler::Current() != NULL) { if (!IsAdded()) { AddToScheduler(); } } if (_success) { if (!AtomUtils::read32(fp, _entryCount)) { _success = false; } PVMF_MP4FFPARSER_LOGPARSEDINFO((0, "CompositionOffsetAtom::CompositionOffsetAtom- _entryCount =%d", _entryCount)); uint32 dataSize = _size - (DEFAULT_FULL_ATOM_SIZE + 4); uint32 entrySize = (4 + 4); if ((_entryCount*entrySize) > dataSize) { _success = false; } if (_success) { if (_entryCount > 0) { if (parsingMode == 1) { // cache size is 4K so that optimization // should work if entry_count is greater than 4K if (_entryCount > _stbl_buff_size) { uint32 fptrBuffSize = (_entryCount / _stbl_buff_size) + 1; PV_MP4_FF_ARRAY_NEW(NULL, uint32, (fptrBuffSize), _stbl_fptr_vec); if (_stbl_fptr_vec == NULL) { _success = false; _mp4ErrorCode = MEMORY_ALLOCATION_FAILED; return; } PV_MP4_FF_ARRAY_NEW(NULL, uint32, (_stbl_buff_size), _psampleCountVec); if (_psampleCountVec == NULL) { _success = false; _mp4ErrorCode = MEMORY_ALLOCATION_FAILED; return; } PV_MP4_FF_ARRAY_NEW(NULL, uint32, (_stbl_buff_size), _psampleOffsetVec); if (_psampleOffsetVec == NULL) { PV_MP4_ARRAY_DELETE(NULL, _psampleOffsetVec); _psampleOffsetVec = NULL; _success = false; _mp4ErrorCode = MEMORY_ALLOCATION_FAILED; return; } for (uint32 idx = 0; idx < _stbl_buff_size; idx++) //initialization { _psampleCountVec[idx] = 0; _psampleOffsetVec[idx] = 0; } OsclAny* ptr = (MP4_FF_FILE *)(oscl_malloc(sizeof(MP4_FF_FILE))); if (ptr == NULL) { _success = false; _mp4ErrorCode = MEMORY_ALLOCATION_FAILED; return; } _fileptr = OSCL_PLACEMENT_NEW(ptr, MP4_FF_FILE()); _fileptr->_fileServSession = fp->_fileServSession; _fileptr->_pvfile.SetCPM(fp->_pvfile.GetCPM()); _fileptr->_pvfile.SetFileHandle(fp->_pvfile.iFileHandle); if (AtomUtils::OpenMP4File(filename, Oscl_File::MODE_READ | Oscl_File::MODE_BINARY, _fileptr) != 0) { _success = false; _mp4ErrorCode = FILE_OPEN_FAILED; } _fileptr->_fileSize = fp->_fileSize; int32 _head_offset = AtomUtils::getCurrentFilePosition(fp); AtomUtils::seekFromCurrPos(fp, dataSize); AtomUtils::seekFromStart(_fileptr, _head_offset); return; } else { _parsing_mode = 0; _stbl_buff_size = _entryCount; } } else { _stbl_buff_size = _entryCount; } PV_MP4_FF_ARRAY_NEW(NULL, uint32, (_entryCount), _psampleCountVec); if (_psampleCountVec == NULL) { _success = false; _mp4ErrorCode = MEMORY_ALLOCATION_FAILED; return; } PV_MP4_FF_ARRAY_NEW(NULL, uint32, (_entryCount), _psampleOffsetVec); if (_psampleOffsetVec == NULL) { PV_MP4_ARRAY_DELETE(NULL, _psampleOffsetVec); _psampleOffsetVec = NULL; _success = false; _mp4ErrorCode = MEMORY_ALLOCATION_FAILED; return; } for (uint32 idx = 0; idx < _entryCount; idx++) //initialization { _psampleCountVec[idx] = 0; _psampleOffsetVec[idx] = 0; } uint32 number = 0; uint32 offset = 0; for (_parsed_entry_cnt = 0; _parsed_entry_cnt < _entryCount; _parsed_entry_cnt++) { if (!AtomUtils::read32(fp, number)) { _success = false; break; } if (!AtomUtils::read32(fp, offset)) { _success = false; break; } _psampleCountVec[_parsed_entry_cnt] = (number); _psampleOffsetVec[_parsed_entry_cnt] = (offset); } } } if (!_success) { _mp4ErrorCode = READ_TIME_TO_SAMPLE_ATOM_FAILED; } } else { if (_mp4ErrorCode != ATOM_VERSION_NOT_SUPPORTED) _mp4ErrorCode = READ_TIME_TO_SAMPLE_ATOM_FAILED; } }
// Stream-in ctor TimeToSampleAtom::TimeToSampleAtom(MP4_FF_FILE *fp, uint32 mediaType, uint32 size, uint32 type, OSCL_wString& filename, uint32 parsingMode) : FullAtom(fp, size, type) { _psampleCountVec = NULL; _psampleDeltaVec = NULL; _currGetSampleCount = 0; _currGetIndex = -1; _currGetTimeDelta = 0; _currPeekSampleCount = 0; _currPeekIndex = -1; _currPeekTimeDelta = 0; _mediaType = mediaType; _parsed_entry_cnt = 0; _fileptr = NULL; _parsing_mode = 0; _parsing_mode = parsingMode; _stbl_buff_size = MAX_CACHED_TABLE_ENTRIES_FILE; _next_buff_number = 0; _curr_buff_number = 0; _curr_entry_point = 0; _stbl_fptr_vec = NULL; iLogger = PVLogger::GetLoggerObject("mp4ffparser"); iStateVarLogger = PVLogger::GetLoggerObject("mp4ffparser_mediasamplestats"); iParsedDataLogger = PVLogger::GetLoggerObject("mp4ffparser_parseddata"); if (_success) { if (!AtomUtils::read32(fp, _entryCount)) { _success = false; } PVMF_MP4FFPARSER_LOGPARSEDINFO((0, "TimeToSampleAtom::TimeToSampleAtom- _entryCount =%d", _entryCount)); uint32 dataSize = _size - (DEFAULT_FULL_ATOM_SIZE + 4); uint32 entrySize = (4 + 4); if ((_entryCount*entrySize) > dataSize) { _success = false; } if (_success) { if (_entryCount > 0) { if (parsingMode == 1) { // cache size is 4K so that optimization should work if entry_count is greater than 4K if ((_entryCount > _stbl_buff_size)) { uint32 fptrBuffSize = (_entryCount / _stbl_buff_size) + 1; PV_MP4_FF_ARRAY_NEW(NULL, uint32, (fptrBuffSize), _stbl_fptr_vec); if (_stbl_fptr_vec == NULL) { _success = false; _mp4ErrorCode = MEMORY_ALLOCATION_FAILED; return; } PV_MP4_FF_ARRAY_NEW(NULL, uint32, (_stbl_buff_size), _psampleCountVec); if (_psampleCountVec == NULL) { _success = false; _mp4ErrorCode = MEMORY_ALLOCATION_FAILED; return; } PV_MP4_FF_ARRAY_NEW(NULL, uint32, (_stbl_buff_size), _psampleDeltaVec); if (_psampleDeltaVec == NULL) { PV_MP4_ARRAY_DELETE(NULL, _psampleDeltaVec); _psampleDeltaVec = NULL; _success = false; _mp4ErrorCode = MEMORY_ALLOCATION_FAILED; return; } for (uint32 idx = 0; idx < _stbl_buff_size; idx++) //initialization { _psampleCountVec[idx] = 0; _psampleDeltaVec[idx] = 0; } OsclAny* ptr = (MP4_FF_FILE *)(oscl_malloc(sizeof(MP4_FF_FILE))); if (ptr == NULL) { _success = false; _mp4ErrorCode = MEMORY_ALLOCATION_FAILED; return; } _fileptr = OSCL_PLACEMENT_NEW(ptr, MP4_FF_FILE()); _fileptr->_fileServSession = fp->_fileServSession; _fileptr->_pvfile.SetCPM(fp->_pvfile.GetCPM()); _fileptr->_pvfile.SetFileHandle(fp->_pvfile.iFileHandle); if (AtomUtils::OpenMP4File(filename, Oscl_File::MODE_READ | Oscl_File::MODE_BINARY, _fileptr) != 0) { _success = false; _mp4ErrorCode = FILE_OPEN_FAILED; } _fileptr->_fileSize = fp->_fileSize; int32 _head_offset = AtomUtils::getCurrentFilePosition(fp); AtomUtils::seekFromCurrPos(fp, dataSize); AtomUtils::seekFromStart(_fileptr, _head_offset); return; } else { _parsing_mode = 0; _stbl_buff_size = _entryCount; } } else { _stbl_buff_size = _entryCount; } PV_MP4_FF_ARRAY_NEW(NULL, uint32, (_entryCount), _psampleCountVec); if (_psampleCountVec == NULL) { _success = false; _mp4ErrorCode = MEMORY_ALLOCATION_FAILED; return; } PV_MP4_FF_ARRAY_NEW(NULL, uint32, (_entryCount), _psampleDeltaVec); if (_psampleDeltaVec == NULL) { PV_MP4_ARRAY_DELETE(NULL, _psampleDeltaVec); _psampleDeltaVec = NULL; _success = false; _mp4ErrorCode = MEMORY_ALLOCATION_FAILED; return; } for (uint32 idx = 0; idx < _entryCount; idx++) //initialization { _psampleCountVec[idx] = 0; _psampleDeltaVec[idx] = 0; } uint32 number = 0; uint32 delta = 0; for (_parsed_entry_cnt = 0; _parsed_entry_cnt < _entryCount; _parsed_entry_cnt++) { if (!AtomUtils::read32(fp, number)) { _success = false; break; } if (!AtomUtils::read32(fp, delta)) { _success = false; break; } _psampleCountVec[_parsed_entry_cnt] = (number); _psampleDeltaVec[_parsed_entry_cnt] = (delta); } } } if (!_success) { _mp4ErrorCode = READ_TIME_TO_SAMPLE_ATOM_FAILED; } } else { if (_mp4ErrorCode != ATOM_VERSION_NOT_SUPPORTED) _mp4ErrorCode = READ_TIME_TO_SAMPLE_ATOM_FAILED; } }