Add even more of the source
This should be about everything needed to build so far?
This commit is contained in:
parent
af3619d4fa
commit
849723c9cf
547 changed files with 149239 additions and 0 deletions
221
QTFileLib/QTTrack.h
Normal file
221
QTFileLib/QTTrack.h
Normal file
|
@ -0,0 +1,221 @@
|
|||
/*
|
||||
*
|
||||
* @APPLE_LICENSE_HEADER_START@
|
||||
*
|
||||
* Copyright (c) 1999-2008 Apple Inc. All Rights Reserved.
|
||||
*
|
||||
* This file contains Original Code and/or Modifications of Original Code
|
||||
* as defined in and that are subject to the Apple Public Source License
|
||||
* Version 2.0 (the 'License'). You may not use this file except in
|
||||
* compliance with the License. Please obtain a copy of the License at
|
||||
* http://www.opensource.apple.com/apsl/ and read it before using this
|
||||
* file.
|
||||
*
|
||||
* The Original Code and all software distributed under the License are
|
||||
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
|
||||
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
|
||||
* Please see the License for the specific language governing rights and
|
||||
* limitations under the License.
|
||||
*
|
||||
* @APPLE_LICENSE_HEADER_END@
|
||||
*
|
||||
*/
|
||||
//
|
||||
// QTTrack:
|
||||
// The central point of control for a track in a QTFile.
|
||||
|
||||
#ifndef QTTrack_H
|
||||
#define QTTrack_H
|
||||
|
||||
|
||||
//
|
||||
// Includes
|
||||
#include "QTAtom_dref.h"
|
||||
#include "QTAtom_elst.h"
|
||||
#include "QTAtom_mdhd.h"
|
||||
#include "QTAtom_tkhd.h"
|
||||
#include "QTAtom_stco.h"
|
||||
#include "QTAtom_stsc.h"
|
||||
#include "QTAtom_stsd.h"
|
||||
#include "QTAtom_stss.h"
|
||||
#include "QTAtom_stsz.h"
|
||||
#include "QTAtom_stts.h"
|
||||
|
||||
|
||||
//
|
||||
// External classes
|
||||
class QTFile;
|
||||
class QTFile_FileControlBlock;
|
||||
class QTAtom_stsc_SampleTableControlBlock;
|
||||
class QTAtom_stts_SampleTableControlBlock;
|
||||
|
||||
|
||||
//
|
||||
// QTTrack class
|
||||
class QTTrack {
|
||||
|
||||
public:
|
||||
//
|
||||
// Class error codes
|
||||
enum ErrorCode {
|
||||
errNoError = 0,
|
||||
errInvalidQuickTimeFile = 1,
|
||||
errParamError = 2,
|
||||
errIsSkippedPacket = 3,
|
||||
errInternalError = 100
|
||||
};
|
||||
|
||||
|
||||
public:
|
||||
//
|
||||
// Constructors and destructor.
|
||||
QTTrack(QTFile * File, QTFile::AtomTOCEntry * trakAtom,
|
||||
Bool16 Debug = false, Bool16 DeepDebug = false);
|
||||
virtual ~QTTrack(void);
|
||||
|
||||
|
||||
//
|
||||
// Initialization functions.
|
||||
virtual ErrorCode Initialize(void);
|
||||
|
||||
//
|
||||
// Accessors.
|
||||
inline Bool16 IsInitialized(void) { return fIsInitialized; }
|
||||
|
||||
inline const char *GetTrackName(void) { return (fTrackName ? fTrackName : ""); }
|
||||
inline UInt32 GetTrackID(void) { return fTrackHeaderAtom->GetTrackID(); }
|
||||
inline UInt64 GetCreationTime(void) { return fTrackHeaderAtom->GetCreationTime(); }
|
||||
inline UInt64 GetModificationTime(void) { return fTrackHeaderAtom->GetModificationTime(); }
|
||||
inline SInt64 GetDuration(void) { return (SInt64) fTrackHeaderAtom->GetDuration(); }
|
||||
inline Float64 GetTimeScale(void) { return fMediaHeaderAtom->GetTimeScale(); }
|
||||
inline Float64 GetTimeScaleRecip(void) { return fMediaHeaderAtom->GetTimeScaleRecip(); }
|
||||
inline Float64 GetDurationInSeconds(void) { return GetDuration() / (Float64)GetTimeScale(); }
|
||||
inline UInt64 GetFirstEditMovieTime(void)
|
||||
{ if(fEditListAtom != NULL) return fEditListAtom->FirstEditMovieTime();
|
||||
else return 0; }
|
||||
inline UInt32 GetFirstEditMediaTime(void) { return fFirstEditMediaTime; }
|
||||
|
||||
//
|
||||
// Sample functions
|
||||
Bool16 GetSizeOfSamplesInChunk(UInt32 chunkNumber, UInt32 * const sizePtr, UInt32 * const firstSampleNumPtr, UInt32 * const lastSampleNumPtr, QTAtom_stsc_SampleTableControlBlock * stcbPtr);
|
||||
|
||||
inline Bool16 GetChunkFirstLastSample(UInt32 chunkNumber, UInt32 *firstSample, UInt32 *lastSample,
|
||||
QTAtom_stsc_SampleTableControlBlock *STCB)
|
||||
{ return fSampleToChunkAtom->GetChunkFirstLastSample(chunkNumber,firstSample, lastSample, STCB);
|
||||
}
|
||||
|
||||
|
||||
inline Bool16 SampleToChunkInfo(UInt32 SampleNumber, UInt32 *samplesPerChunk, UInt32 *ChunkNumber, UInt32 *SampleDescriptionIndex, UInt32 *SampleOffsetInChunk,
|
||||
QTAtom_stsc_SampleTableControlBlock * STCB)
|
||||
{ return fSampleToChunkAtom->SampleToChunkInfo(SampleNumber,samplesPerChunk, ChunkNumber, SampleDescriptionIndex, SampleOffsetInChunk, STCB);
|
||||
}
|
||||
|
||||
|
||||
inline Bool16 SampleNumberToChunkNumber(UInt32 SampleNumber, UInt32 *ChunkNumber, UInt32 *SampleDescriptionIndex, UInt32 *SampleOffsetInChunk,
|
||||
QTAtom_stsc_SampleTableControlBlock * STCB)
|
||||
{ return fSampleToChunkAtom->SampleNumberToChunkNumber(SampleNumber, ChunkNumber, SampleDescriptionIndex, SampleOffsetInChunk, STCB);
|
||||
}
|
||||
|
||||
|
||||
inline UInt32 GetChunkFirstSample(UInt32 chunkNumber)
|
||||
{ return fSampleToChunkAtom->GetChunkFirstSample(chunkNumber);
|
||||
}
|
||||
|
||||
inline Bool16 ChunkOffset(UInt32 ChunkNumber, UInt64 *Offset = NULL)
|
||||
{ return fChunkOffsetAtom->ChunkOffset(ChunkNumber, Offset);
|
||||
}
|
||||
|
||||
inline Bool16 SampleSize(UInt32 SampleNumber, UInt32 *Size = NULL)
|
||||
{ return fSampleSizeAtom->SampleSize(SampleNumber, Size);
|
||||
}
|
||||
|
||||
inline Bool16 SampleRangeSize(UInt32 firstSample, UInt32 lastSample, UInt32 *sizePtr = NULL)
|
||||
{ return fSampleSizeAtom->SampleRangeSize(firstSample, lastSample, sizePtr);
|
||||
}
|
||||
|
||||
Bool16 GetSampleInfo(UInt32 SampleNumber, UInt32 * const Length, UInt64 * const Offset, UInt32 * const SampleDescriptionIndex,
|
||||
QTAtom_stsc_SampleTableControlBlock * STCB);
|
||||
|
||||
Bool16 GetSample(UInt32 SampleNumber, char * Buffer, UInt32 * Length,QTFile_FileControlBlock * FCB,
|
||||
QTAtom_stsc_SampleTableControlBlock * STCB);
|
||||
|
||||
inline Bool16 GetSampleMediaTime(UInt32 SampleNumber, UInt32 * const MediaTime,
|
||||
QTAtom_stts_SampleTableControlBlock * STCB)
|
||||
{ return fTimeToSampleAtom->SampleNumberToMediaTime(SampleNumber, MediaTime, STCB);
|
||||
}
|
||||
|
||||
inline Bool16 GetSampleNumberFromMediaTime(UInt32 MediaTime, UInt32 * const SampleNumber,
|
||||
QTAtom_stts_SampleTableControlBlock * STCB)
|
||||
{ return fTimeToSampleAtom->MediaTimeToSampleNumber(MediaTime, SampleNumber, STCB);
|
||||
}
|
||||
|
||||
|
||||
inline void GetPreviousSyncSample(UInt32 SampleNumber, UInt32 * SyncSampleNumber)
|
||||
{ if(fSyncSampleAtom != NULL) fSyncSampleAtom->PreviousSyncSample(SampleNumber, SyncSampleNumber);
|
||||
else *SyncSampleNumber = SampleNumber;
|
||||
}
|
||||
|
||||
inline void GetNextSyncSample(UInt32 SampleNumber, UInt32 * SyncSampleNumber)
|
||||
{ if(fSyncSampleAtom != NULL) fSyncSampleAtom->NextSyncSample(SampleNumber, SyncSampleNumber);
|
||||
else *SyncSampleNumber = SampleNumber + 1;
|
||||
}
|
||||
|
||||
inline Bool16 IsSyncSample(UInt32 SampleNumber, UInt32 SyncSampleCursor)
|
||||
{ if (fSyncSampleAtom != NULL) return fSyncSampleAtom->IsSyncSample(SampleNumber, SyncSampleCursor);
|
||||
else return true;
|
||||
}
|
||||
//
|
||||
// Read functions.
|
||||
inline Bool16 Read(UInt32 SampleDescriptionID, UInt64 Offset, char * const Buffer, UInt32 Length,
|
||||
QTFile_FileControlBlock * FCB = NULL)
|
||||
{ return fDataReferenceAtom->Read(fSampleDescriptionAtom->SampleDescriptionToDataReference(SampleDescriptionID), Offset, Buffer, Length, FCB);
|
||||
}
|
||||
|
||||
inline Bool16 GetSampleMediaTimeOffset(UInt32 SampleNumber, UInt32 *mediaTimeOffset, QTAtom_ctts_SampleTableControlBlock * STCB)
|
||||
{
|
||||
if (fCompTimeToSampleAtom)
|
||||
return fCompTimeToSampleAtom->SampleNumberToMediaTimeOffset(SampleNumber, mediaTimeOffset, STCB);
|
||||
else
|
||||
return false;
|
||||
}
|
||||
//
|
||||
// Debugging functions.
|
||||
virtual void DumpTrack(void);
|
||||
inline void DumpSampleToChunkTable(void) { fSampleToChunkAtom->DumpTable(); }
|
||||
inline void DumpChunkOffsetTable(void) { fChunkOffsetAtom->DumpTable(); }
|
||||
inline void DumpSampleSizeTable(void) { fSampleSizeAtom->DumpTable(); }
|
||||
inline void DumpTimeToSampleTable(void) { fTimeToSampleAtom->DumpTable(); }
|
||||
inline void DumpCompTimeToSampleTable(void) { if (fCompTimeToSampleAtom) fCompTimeToSampleAtom->DumpTable(); else printf("*** no ctts table ****\n"); }
|
||||
|
||||
|
||||
protected:
|
||||
//
|
||||
// Protected member variables.
|
||||
Bool16 fDebug, fDeepDebug;
|
||||
QTFile *fFile;
|
||||
QTFile::AtomTOCEntry fTOCEntry;
|
||||
|
||||
Bool16 fIsInitialized;
|
||||
|
||||
QTAtom_tkhd *fTrackHeaderAtom;
|
||||
char *fTrackName;
|
||||
|
||||
QTAtom_mdhd *fMediaHeaderAtom;
|
||||
|
||||
QTAtom_elst *fEditListAtom;
|
||||
QTAtom_dref *fDataReferenceAtom;
|
||||
|
||||
QTAtom_stts *fTimeToSampleAtom;
|
||||
QTAtom_ctts *fCompTimeToSampleAtom;
|
||||
QTAtom_stsc *fSampleToChunkAtom;
|
||||
QTAtom_stsd *fSampleDescriptionAtom;
|
||||
QTAtom_stco *fChunkOffsetAtom;
|
||||
QTAtom_stsz *fSampleSizeAtom;
|
||||
QTAtom_stss *fSyncSampleAtom;
|
||||
|
||||
UInt32 fFirstEditMediaTime;
|
||||
};
|
||||
|
||||
#endif // QTTrack_H
|
Loading…
Add table
Add a link
Reference in a new issue