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
227
APIModules/QTSSRTPFileModule/RTPFileSession.h
Normal file
227
APIModules/QTSSRTPFileModule/RTPFileSession.h
Normal file
|
@ -0,0 +1,227 @@
|
|||
/*
|
||||
*
|
||||
* @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@
|
||||
*
|
||||
*/
|
||||
/*
|
||||
File: RTPFileSession.h
|
||||
|
||||
Contains:
|
||||
|
||||
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __RTPFILESESSIONH__
|
||||
#define __RTPFILESESSIONH__
|
||||
|
||||
#include "RTPFileDefs.h"
|
||||
#include "OSHeaders.h"
|
||||
#include "OSRef.h"
|
||||
#include "QTSS.h" // This object uses QTSS API file I/O
|
||||
#include "SDPSourceInfo.h"
|
||||
|
||||
class RTPFile;
|
||||
|
||||
class RTPFileSession
|
||||
{
|
||||
public:
|
||||
|
||||
// One per client
|
||||
|
||||
RTPFileSession();
|
||||
~RTPFileSession();
|
||||
|
||||
//
|
||||
// Class error codes
|
||||
enum ErrorCode
|
||||
{
|
||||
errNoError = 0,
|
||||
errFileNotFound = 1,
|
||||
errTrackAlreadyAdded = 2,
|
||||
errTrackDoesntExist = 3,
|
||||
errSeekToNonexistentTime = 4
|
||||
};
|
||||
|
||||
//
|
||||
// INITIALIZE
|
||||
ErrorCode Initialize(StrPtrLen& inFilePath, Float32 inBufferSeconds);
|
||||
|
||||
//
|
||||
// ACCESSORS
|
||||
|
||||
//
|
||||
// Global information
|
||||
inline Float64 GetMovieDuration();
|
||||
inline StrPtrLen* GetSDPFile();
|
||||
inline SourceInfo* GetSourceInfo();
|
||||
inline StrPtrLen* GetMoviePath();
|
||||
UInt64 GetAddedTracksRTPBytes() { return fAddedTracksRTPBytes; }
|
||||
|
||||
|
||||
//
|
||||
// Track functions
|
||||
inline Float64 GetTrackDuration(UInt32 inTrackID);
|
||||
inline UInt32 GetTrackTimeScale(UInt32 inTrackID);
|
||||
|
||||
UInt16 GetNextTrackSequenceNumber(UInt32 inTrackID);
|
||||
UInt32 GetSeekTimestamp(UInt32 TrackID);
|
||||
|
||||
//
|
||||
// MODIFIERS
|
||||
|
||||
//
|
||||
// Track modifiers
|
||||
ErrorCode AddTrack(UInt32 inTrackID);
|
||||
void SetTrackSSRC(UInt32 inTrackID, UInt32 inSSRC) { fTrackInfo[inTrackID].fSSRC = inSSRC; }
|
||||
void SetTrackCookie(UInt32 inTrackID, void *inCookie){ fTrackInfo[inTrackID].fCookie = inCookie; }
|
||||
|
||||
// Seek to a time
|
||||
ErrorCode Seek(Float64 inTime);
|
||||
|
||||
// GetNextPacket. Returns the transmit time for this packet
|
||||
Float64 GetNextPacket(UInt8** outPacket, UInt32* outPacketLength, void** outCookie);
|
||||
|
||||
private:
|
||||
|
||||
// Utility functions
|
||||
void SkipToNextPacket(RTPFilePacket* inCurPacket);
|
||||
void ReadAndAdvise();
|
||||
UInt32 PowerOf2Floor(UInt32 inNumToFloor);
|
||||
|
||||
enum
|
||||
{
|
||||
kMaxDataBufferSize = 262144
|
||||
};
|
||||
|
||||
struct RTPFileSessionTrackInfo
|
||||
{
|
||||
Bool16 fEnabled;
|
||||
Bool16 fMarked; // is the seek timestamp, seq num recorded?
|
||||
UInt32 fSSRC;
|
||||
UInt32 fSeekTimestamp;
|
||||
UInt16 fSeekSeqNumber;
|
||||
void* fCookie;
|
||||
};
|
||||
|
||||
QTSS_Object fFileSource;
|
||||
//OSFileSource fFileSource;
|
||||
UInt64 fFileLength;
|
||||
UInt64 fCurrentPosition;
|
||||
|
||||
RTPFile* fFile;
|
||||
RTPFileSessionTrackInfo* fTrackInfo;
|
||||
UInt32 fNumTracksEnabled;
|
||||
|
||||
UInt8* fReadBuffer; // Buffer that file data gets read into.
|
||||
// Usually same as fDataBuffer
|
||||
UInt32 fReadBufferOffset;
|
||||
|
||||
UInt8* fDataBuffer; // Buffer for file data
|
||||
UInt32 fDataBufferSize;
|
||||
UInt32 fDataBufferLen;
|
||||
UInt8* fCurrentPacket;
|
||||
UInt64 fAddedTracksRTPBytes;
|
||||
|
||||
friend class RTPFile;
|
||||
};
|
||||
|
||||
|
||||
|
||||
class RTPFile
|
||||
{
|
||||
public:
|
||||
|
||||
// One per file
|
||||
|
||||
RTPFile();
|
||||
~RTPFile();
|
||||
|
||||
RTPFileSession::ErrorCode Initialize(const StrPtrLen& inFilePath);
|
||||
|
||||
Float64 GetMovieDuration() { return fHeader.fMovieDuration; }
|
||||
|
||||
Float64 GetTrackDuration(UInt32 inTrackID);
|
||||
UInt32 GetTrackTimeScale(UInt32 inTrackID);
|
||||
UInt64 GetTrackBytes(UInt32 inTrackID);
|
||||
Bool16 TrackExists(UInt32 inTrackID);
|
||||
UInt32 GetBytesPerSecond() { return fBytesPerSecond; }
|
||||
UInt32 GetMaxTrackNumber() { return fMaxTrackNumber; }
|
||||
|
||||
StrPtrLen* GetSDPFile() { return &fSDPData; }
|
||||
SourceInfo* GetSourceInfo() { return &fSourceInfo; }
|
||||
OSRef* GetRef() { return &fRef; }
|
||||
|
||||
// Returns the location in the file corresponding to this time,
|
||||
// rounded to the nearest start of block.
|
||||
SInt64 GetBlockLocation(Float64 inTimeInSecs);
|
||||
|
||||
private:
|
||||
|
||||
RTPFileTrackInfo* fTrackInfo;
|
||||
RTPFileHeader fHeader;
|
||||
UInt8* fBlockMap;
|
||||
StrPtrLen fSDPData;
|
||||
SDPSourceInfo fSourceInfo;
|
||||
UInt32 fBytesPerSecond;
|
||||
UInt32 fMaxTrackNumber;
|
||||
|
||||
OSRef fRef;
|
||||
StrPtrLen fFilePath;
|
||||
|
||||
friend class RTPFileSession;
|
||||
};
|
||||
|
||||
|
||||
inline StrPtrLen* RTPFileSession::GetSDPFile()
|
||||
{
|
||||
return fFile->GetSDPFile();
|
||||
}
|
||||
|
||||
inline SourceInfo* RTPFileSession::GetSourceInfo()
|
||||
{
|
||||
return &fFile->fSourceInfo;
|
||||
}
|
||||
|
||||
inline StrPtrLen* RTPFileSession::GetMoviePath()
|
||||
{
|
||||
return &fFile->fFilePath;
|
||||
}
|
||||
|
||||
inline Float64 RTPFileSession::GetMovieDuration()
|
||||
{
|
||||
return fFile->fHeader.fMovieDuration;
|
||||
}
|
||||
|
||||
inline Float64 RTPFileSession::GetTrackDuration(UInt32 inTrackID)
|
||||
{
|
||||
return fFile->GetTrackDuration(inTrackID);
|
||||
}
|
||||
|
||||
inline UInt32 RTPFileSession::GetTrackTimeScale(UInt32 inTrackID)
|
||||
{
|
||||
return fFile->GetTrackTimeScale(inTrackID);
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue