Internal change PiperOrigin-RevId: 153190657 Change-Id: I3ba0b8bc16730516a6b30ee932de5ad65020d8db
diff --git a/include/mp4v2/file.h b/include/mp4v2/file.h index b2124d2..0da200e 100644 --- a/include/mp4v2/file.h +++ b/include/mp4v2/file.h
@@ -404,6 +404,19 @@ MP4FileHandle MP4Read( const char* fileName ); +/** Generalized version of above MP4Read, supporting reading a MP4 file at + * the specific file offset. + * + * @param fileName As for MP4Read + * @param fileOffset seek offset in file that MP4 container structure starts + * at. + */ + +MP4V2_EXPORT +MP4FileHandle MP4ReadFromOffset( + const char* fileName, + int64_t seekOffset); + /** Read an existing mp4 file. * * MP4ReadProvider is the first call that should be used when you want to just
diff --git a/src/mp4.cpp b/src/mp4.cpp index 80a609a..53fcdfa 100644 --- a/src/mp4.cpp +++ b/src/mp4.cpp
@@ -89,6 +89,10 @@ MP4FileHandle MP4Read( const char* fileName ) { + return MP4ReadFromOffset(fileName, 0); +} + +MP4FileHandle MP4ReadFromOffset( const char* fileName, int64_t seekOffset) { if (!fileName) return MP4_INVALID_FILE_HANDLE; @@ -99,6 +103,7 @@ try { ASSERT(pFile); + pFile->SetInitialSeekOffset( seekOffset ); pFile->Read( fileName, NULL ); return (MP4FileHandle)pFile; }
diff --git a/src/mp4file.cpp b/src/mp4file.cpp index 8597154..73772a7 100644 --- a/src/mp4file.cpp +++ b/src/mp4file.cpp
@@ -59,6 +59,7 @@ m_memoryBuffer = NULL; m_memoryBufferSize = 0; m_memoryBufferPosition = 0; + m_initialSeekOffset = 0; m_numReadBits = 0; m_bufReadBits = 0; @@ -416,8 +417,8 @@ void MP4File::ReadFromFile() { - // ensure we start at beginning of file - SetPosition(0); + // ensure we start at beginning of file or at specified seek offset. + SetPosition(m_initialSeekOffset); // create a new root atom ASSERT(m_pRootAtom == NULL); @@ -626,6 +627,10 @@ m_file = NULL; } +void MP4File::SetInitialSeekOffset(int64_t seekOffset) { + m_initialSeekOffset = seekOffset; +} + void MP4File::Rename(const char* oldFileName, const char* newFileName) { if( FileSystem::rename( oldFileName, newFileName ))
diff --git a/src/mp4file.h b/src/mp4file.h index 960505e..5c6bdaf 100644 --- a/src/mp4file.h +++ b/src/mp4file.h
@@ -91,6 +91,7 @@ bool CopyClose( const string& copyFileName ); void Dump( bool dumpImplicits = false ); void Close(uint32_t flags = 0); + void SetInitialSeekOffset(int64_t seekOffset); bool Use64Bits(const char *atomName); void Check64BitStatus(const char *atomName); @@ -954,6 +955,7 @@ File* m_file; uint64_t m_fileOriginalSize; uint32_t m_createFlags; + int64_t m_initialSeekOffset; MP4Atom* m_pRootAtom; MP4Integer32Array m_trakIds;