AVIFileSink Class Reference

#include <AVIFileSink.hh>

Inheritance diagram for AVIFileSink:

Inheritance graph
[legend]
Collaboration diagram for AVIFileSink:

Collaboration graph
[legend]

Public Types

typedef void( afterPlayingFunc )(void *clientData)

Public Member Functions

Boolean startPlaying (afterPlayingFunc *afterFunc, void *afterClientData)
unsigned numActiveSubsessions () const
UsageEnvironmentenvir () const
char const * name () const
virtual Boolean isSource () const
virtual Boolean isSink () const
virtual Boolean isRTCPInstance () const
virtual Boolean isRTSPClient () const
virtual Boolean isRTSPServer () const
virtual Boolean isMediaSession () const
virtual Boolean isServerMediaSession () const
virtual Boolean isDarwinInjector () const

Static Public Member Functions

static AVIFileSinkcreateNew (UsageEnvironment &env, MediaSession &inputSession, char const *outputFileName, unsigned bufferSize=20000, unsigned short movieWidth=240, unsigned short movieHeight=180, unsigned movieFPS=15, Boolean packetLossCompensate=False)
static Boolean lookupByName (UsageEnvironment &env, char const *mediumName, Medium *&resultMedium)
static void close (UsageEnvironment &env, char const *mediumName)
static void close (Medium *medium)

Protected Member Functions

TaskTokennextTask ()

Private Member Functions

 AVIFileSink (UsageEnvironment &env, MediaSession &inputSession, FILE *outFid, unsigned bufferSize, unsigned short movieWidth, unsigned short movieHeight, unsigned movieFPS, Boolean packetLossCompensate)
virtual ~AVIFileSink ()
Boolean continuePlaying ()
void onSourceClosure1 ()
void completeOutputFile ()
unsigned addWord (unsigned word)
unsigned addHalfWord (unsigned short halfWord)
unsigned addByte (unsigned char byte)
unsigned addZeroWords (unsigned numWords)
unsigned add4ByteString (char const *str)
void setWord (unsigned filePosn, unsigned size)
 _header (AVI)
 _header (hdrl)
 _header (avih)
 _header (strl)
 _header (strh)
 _header (strf)
 _header (JUNK)
 _header (movi)

Static Private Member Functions

static void afterGettingFrame (void *clientData, unsigned frameSize, unsigned numTruncatedBytes, struct timeval presentationTime, unsigned durationInMicroseconds)
static void onSourceClosure (void *clientData)
static void onRTCPBye (void *clientData)

Private Attributes

MediaSessionfInputSession
FILE * fOutFid
unsigned fBufferSize
Boolean fPacketLossCompensate
Boolean fAreCurrentlyBeingPlayed
afterPlayingFuncfAfterFunc
void * fAfterClientData
unsigned fNumSubsessions
unsigned fNumBytesWritten
timeval fStartTime
Boolean fHaveCompletedOutputFile
unsigned short fMovieWidth
unsigned short fMovieHeight
unsigned fMovieFPS
unsigned fRIFFSizePosition
unsigned fRIFFSizeValue
unsigned fAVIHMaxBytesPerSecondPosition
unsigned fAVIHFrameCountPosition
unsigned fMoviSizePosition
unsigned fMoviSizeValue
AVISubsessionIOStatefCurrentIOState
unsigned fJunkNumber

Friends

class AVISubsessionIOState

Detailed Description

Definition at line 28 of file AVIFileSink.hh.


Member Typedef Documentation

typedef void( AVIFileSink::afterPlayingFunc)(void *clientData)

Definition at line 39 of file AVIFileSink.hh.


Constructor & Destructor Documentation

AVIFileSink::AVIFileSink ( UsageEnvironment env,
MediaSession inputSession,
FILE *  outFid,
unsigned  bufferSize,
unsigned short  movieWidth,
unsigned short  movieHeight,
unsigned  movieFPS,
Boolean  packetLossCompensate 
) [private]

Definition at line 99 of file AVIFileSink.cpp.

References AVISubsessionIOState, fInputSession, fMovieFPS, fMovieHeight, fMovieWidth, fNumSubsessions, iter, MediaSubsession::miscPtr, MediaSubsessionIterator::next(), NULL, onRTCPBye(), MediaSubsession::readSource(), MediaSubsession::rtcpInstance(), RTCPInstance::setByeHandler(), subsession, MediaSubsession::videoFPS(), MediaSubsession::videoHeight(), and MediaSubsession::videoWidth().

Referenced by createNew().

00105   : Medium(env), fInputSession(inputSession), fOutFid(outFid),
00106     fBufferSize(bufferSize), fPacketLossCompensate(packetLossCompensate),
00107     fAreCurrentlyBeingPlayed(False), fNumSubsessions(0), fNumBytesWritten(0),
00108     fHaveCompletedOutputFile(False),
00109     fMovieWidth(movieWidth), fMovieHeight(movieHeight), fMovieFPS(movieFPS) {
00110   // Set up I/O state for each input subsession:
00111   MediaSubsessionIterator iter(fInputSession);
00112   MediaSubsession* subsession;
00113   while ((subsession = iter.next()) != NULL) {
00114     // Ignore subsessions without a data source:
00115     FramedSource* subsessionSource = subsession->readSource();
00116     if (subsessionSource == NULL) continue;
00117 
00118     // If "subsession's" SDP description specified screen dimension
00119     // or frame rate parameters, then use these.
00120     if (subsession->videoWidth() != 0) {
00121       fMovieWidth = subsession->videoWidth();
00122     }
00123     if (subsession->videoHeight() != 0) {
00124       fMovieHeight = subsession->videoHeight();
00125     }
00126     if (subsession->videoFPS() != 0) {
00127       fMovieFPS = subsession->videoFPS();
00128     }
00129 
00130     AVISubsessionIOState* ioState
00131       = new AVISubsessionIOState(*this, *subsession);
00132     subsession->miscPtr = (void*)ioState;
00133 
00134     // Also set a 'BYE' handler for this subsession's RTCP instance:
00135     if (subsession->rtcpInstance() != NULL) {
00136       subsession->rtcpInstance()->setByeHandler(onRTCPBye, ioState);
00137     }
00138 
00139     ++fNumSubsessions;
00140   }
00141 
00142   // Begin by writing an AVI header:
00143   addFileHeader_AVI();
00144 }

AVIFileSink::~AVIFileSink (  )  [private, virtual]

Definition at line 146 of file AVIFileSink.cpp.

References completeOutputFile(), fInputSession, iter, MediaSubsession::miscPtr, MediaSubsessionIterator::next(), NULL, and subsession.

00146                           {
00147   completeOutputFile();
00148 
00149   // Then, delete each active "AVISubsessionIOState":
00150   MediaSubsessionIterator iter(fInputSession);
00151   MediaSubsession* subsession;
00152   while ((subsession = iter.next()) != NULL) {
00153     AVISubsessionIOState* ioState
00154       = (AVISubsessionIOState*)(subsession->miscPtr); 
00155     if (ioState == NULL) continue;
00156 
00157     delete ioState;
00158   }
00159 }


Member Function Documentation

AVIFileSink * AVIFileSink::createNew ( UsageEnvironment env,
MediaSession inputSession,
char const *  outputFileName,
unsigned  bufferSize = 20000,
unsigned short  movieWidth = 240,
unsigned short  movieHeight = 180,
unsigned  movieFPS = 15,
Boolean  packetLossCompensate = False 
) [static]

Definition at line 162 of file AVIFileSink.cpp.

References AVIFileSink(), env, NULL, and OpenOutputFile().

Referenced by main().

00166                                                              {
00167   do {
00168     FILE* fid = OpenOutputFile(env, outputFileName);
00169     if (fid == NULL) break;
00170 
00171     return new AVIFileSink(env, inputSession, fid, bufferSize,
00172                            movieWidth, movieHeight, movieFPS,
00173                            packetLossCompensate);
00174   } while (0);
00175 
00176   return NULL;
00177 }

Boolean AVIFileSink::startPlaying ( afterPlayingFunc afterFunc,
void *  afterClientData 
)

Definition at line 179 of file AVIFileSink.cpp.

References continuePlaying(), Medium::envir(), fAfterClientData, fAfterFunc, False, fAreCurrentlyBeingPlayed, UsageEnvironment::setResultMsg(), and True.

Referenced by main().

00180                                                          {
00181   // Make sure we're not already being played:
00182   if (fAreCurrentlyBeingPlayed) {
00183     envir().setResultMsg("This sink has already been played");
00184     return False;
00185   }
00186 
00187   fAreCurrentlyBeingPlayed = True;
00188   fAfterFunc = afterFunc;
00189   fAfterClientData = afterClientData;
00190 
00191   return continuePlaying();
00192 }

unsigned AVIFileSink::numActiveSubsessions (  )  const [inline]

Definition at line 43 of file AVIFileSink.hh.

References fNumSubsessions.

Referenced by checkForPacketArrival().

00043 { return fNumSubsessions; }

Boolean AVIFileSink::continuePlaying (  )  [private]

Definition at line 194 of file AVIFileSink.cpp.

References afterGettingFrame(), SubsessionBuffer::bytesAvailable(), SubsessionBuffer::dataEnd(), Medium::envir(), False, AVISubsessionIOState::fBuffer, fInputSession, FramedSource::getNextFrame(), FramedSource::isCurrentlyAwaitingData(), iter, MediaSubsession::miscPtr, MediaSubsessionIterator::next(), NULL, onSourceClosure(), MediaSubsession::readSource(), UsageEnvironment::setResultMsg(), subsession, and True.

Referenced by AVISubsessionIOState::afterGettingFrame(), and startPlaying().

00194                                      {
00195   // Run through each of our input session's 'subsessions',
00196   // asking for a frame from each one:
00197   Boolean haveActiveSubsessions = False; 
00198   MediaSubsessionIterator iter(fInputSession);
00199   MediaSubsession* subsession;
00200   while ((subsession = iter.next()) != NULL) {
00201     FramedSource* subsessionSource = subsession->readSource();
00202     if (subsessionSource == NULL) continue;
00203 
00204     if (subsessionSource->isCurrentlyAwaitingData()) continue;
00205 
00206     AVISubsessionIOState* ioState
00207       = (AVISubsessionIOState*)(subsession->miscPtr); 
00208     if (ioState == NULL) continue;
00209 
00210     haveActiveSubsessions = True;
00211     unsigned char* toPtr = ioState->fBuffer->dataEnd();
00212     unsigned toSize = ioState->fBuffer->bytesAvailable();
00213     subsessionSource->getNextFrame(toPtr, toSize,
00214                                    afterGettingFrame, ioState,
00215                                    onSourceClosure, ioState);
00216   }
00217   if (!haveActiveSubsessions) {
00218     envir().setResultMsg("No subsessions are currently active");
00219     return False;
00220   }
00221 
00222   return True;
00223 }

void AVIFileSink::afterGettingFrame ( void *  clientData,
unsigned  frameSize,
unsigned  numTruncatedBytes,
struct timeval  presentationTime,
unsigned  durationInMicroseconds 
) [static, private]

Definition at line 226 of file AVIFileSink.cpp.

References AVISubsessionIOState::afterGettingFrame().

Referenced by continuePlaying().

00229                                                          {
00230   AVISubsessionIOState* ioState = (AVISubsessionIOState*)clientData;
00231   ioState->afterGettingFrame(packetDataSize, presentationTime);
00232 }

void AVIFileSink::onSourceClosure ( void *  clientData  )  [static, private]

Definition at line 234 of file AVIFileSink.cpp.

References AVISubsessionIOState::onSourceClosure().

Referenced by continuePlaying().

00234                                                   {
00235   AVISubsessionIOState* ioState = (AVISubsessionIOState*)clientData;
00236   ioState->onSourceClosure();
00237 }

void AVIFileSink::onSourceClosure1 (  )  [private]

Definition at line 239 of file AVIFileSink.cpp.

References completeOutputFile(), fAfterClientData, fAfterFunc, fInputSession, AVISubsessionIOState::fOurSourceIsActive, iter, MediaSubsession::miscPtr, MediaSubsessionIterator::next(), NULL, and subsession.

Referenced by AVISubsessionIOState::onSourceClosure().

00239                                    {
00240   // Check whether *all* of the subsession sources have closed.
00241   // If not, do nothing for now:
00242   MediaSubsessionIterator iter(fInputSession);
00243   MediaSubsession* subsession;
00244   while ((subsession = iter.next()) != NULL) {
00245     AVISubsessionIOState* ioState
00246       = (AVISubsessionIOState*)(subsession->miscPtr); 
00247     if (ioState == NULL) continue;
00248 
00249     if (ioState->fOurSourceIsActive) return; // this source hasn't closed
00250   }
00251 
00252   completeOutputFile();
00253 
00254   // Call our specified 'after' function:
00255   if (fAfterFunc != NULL) {
00256     (*fAfterFunc)(fAfterClientData);
00257   }
00258 }

void AVIFileSink::onRTCPBye ( void *  clientData  )  [static, private]

Definition at line 260 of file AVIFileSink.cpp.

References MediaSubsession::codecName(), AVISubsessionIOState::envir(), AVISubsessionIOState::fOurSink, AVISubsessionIOState::fOurSubsession, fStartTime, MediaSubsession::mediumName(), NULL, AVISubsessionIOState::onSourceClosure(), and subsession.

Referenced by AVIFileSink().

00260                                             {
00261   AVISubsessionIOState* ioState = (AVISubsessionIOState*)clientData;
00262 
00263   struct timeval timeNow;
00264   gettimeofday(&timeNow, NULL);
00265   unsigned secsDiff
00266     = timeNow.tv_sec - ioState->fOurSink.fStartTime.tv_sec;
00267 
00268   MediaSubsession& subsession = ioState->fOurSubsession;
00269   ioState->envir() << "Received RTCP \"BYE\" on \""
00270                    << subsession.mediumName()
00271                    << "/" << subsession.codecName()
00272                    << "\" subsession (after "
00273                    << secsDiff << " seconds)\n";
00274 
00275   // Handle the reception of a RTCP "BYE" as if the source had closed:
00276   ioState->onSourceClosure();
00277 }

void AVIFileSink::completeOutputFile (  )  [private]

Definition at line 279 of file AVIFileSink.cpp.

References fAVIHFrameCountPosition, fAVIHMaxBytesPerSecondPosition, fHaveCompletedOutputFile, fInputSession, AVISubsessionIOState::fIsAudio, AVISubsessionIOState::fIsVideo, AVISubsessionIOState::fMaxBytesPerSecond, fMoviSizePosition, fMoviSizeValue, fNumBytesWritten, AVISubsessionIOState::fNumFrames, fOutFid, fRIFFSizePosition, fRIFFSizeValue, AVISubsessionIOState::fSTRHFrameCountPosition, iter, MediaSubsession::miscPtr, MediaSubsessionIterator::next(), NULL, setWord(), subsession, and True.

Referenced by onSourceClosure1(), and ~AVIFileSink().

00279                                      {
00280   if (fHaveCompletedOutputFile || fOutFid == NULL) return;
00281 
00282   // Update various AVI 'size' fields to take account of the codec data that
00283   // we've now written to the file:
00284   unsigned maxBytesPerSecond = 0;
00285   unsigned numVideoFrames = 0;
00286   unsigned numAudioFrames = 0;
00287 
00289   MediaSubsessionIterator iter(fInputSession);
00290   MediaSubsession* subsession;
00291   while ((subsession = iter.next()) != NULL) {
00292     AVISubsessionIOState* ioState
00293       = (AVISubsessionIOState*)(subsession->miscPtr); 
00294     if (ioState == NULL) continue;
00295 
00296     maxBytesPerSecond += ioState->fMaxBytesPerSecond;
00297 
00298     setWord(ioState->fSTRHFrameCountPosition, ioState->fNumFrames);
00299     if (ioState->fIsVideo) numVideoFrames = ioState->fNumFrames;
00300     else if (ioState->fIsAudio) numAudioFrames = ioState->fNumFrames;
00301   }
00302 
00304   fRIFFSizeValue += fNumBytesWritten;
00305   setWord(fRIFFSizePosition, fRIFFSizeValue);
00306 
00307   setWord(fAVIHMaxBytesPerSecondPosition, maxBytesPerSecond);
00308   setWord(fAVIHFrameCountPosition,
00309           numVideoFrames > 0 ? numVideoFrames : numAudioFrames);
00310 
00311   fMoviSizeValue += fNumBytesWritten;
00312   setWord(fMoviSizePosition, fMoviSizeValue);
00313 
00314   // We're done:
00315   fHaveCompletedOutputFile = True;
00316 }

unsigned AVIFileSink::addWord ( unsigned  word  )  [private]

Definition at line 486 of file AVIFileSink.cpp.

References addByte().

Referenced by addZeroWords(), if(), setWord(), and AVISubsessionIOState::useFrame().

00486                                            {
00487   // Add "word" to the file in little-endian order:
00488   addByte(word); addByte(word>>8);
00489   addByte(word>>16); addByte(word>>24);
00490 
00491   return 4;
00492 }

unsigned AVIFileSink::addHalfWord ( unsigned short  halfWord  )  [private]

Definition at line 494 of file AVIFileSink.cpp.

References addByte().

Referenced by if().

00494                                                          {
00495   // Add "halfWord" to the file in little-endian order:
00496   addByte((unsigned char)halfWord); addByte((unsigned char)(halfWord>>8));
00497 
00498   return 2;
00499 }

unsigned AVIFileSink::addByte ( unsigned char  byte  )  [inline, private]

Definition at line 82 of file AVIFileSink.hh.

References fOutFid.

Referenced by add4ByteString(), addHalfWord(), addWord(), and AVISubsessionIOState::useFrame().

00082                                        {
00083     putc(byte, fOutFid);
00084     return 1;
00085   }

unsigned AVIFileSink::addZeroWords ( unsigned  numWords  )  [private]

Definition at line 501 of file AVIFileSink.cpp.

References addWord().

Referenced by if().

00501                                                     {
00502   for (unsigned i = 0; i < numWords; ++i) {
00503     addWord(0);
00504   }
00505 
00506   return numWords*4;
00507 }

unsigned AVIFileSink::add4ByteString ( char const *  str  )  [private]

Definition at line 509 of file AVIFileSink.cpp.

References addByte().

00509                                                     {
00510   addByte(str[0]); addByte(str[1]); addByte(str[2]);
00511   addByte(str[3] == '\0' ? ' ' : str[3]); // e.g., for "AVI "
00512 
00513   return 4;
00514 }

void AVIFileSink::setWord ( unsigned  filePosn,
unsigned  size 
) [private]

Definition at line 516 of file AVIFileSink.cpp.

References addWord(), Medium::envir(), fOutFid, and UsageEnvironment::getErrno().

Referenced by completeOutputFile().

00516                                                           {
00517   do {
00518     if (fseek(fOutFid, filePosn, SEEK_SET) < 0) break;
00519     addWord(size);
00520     if (fseek(fOutFid, 0, SEEK_END) < 0) break; // go back to where we were
00521 
00522     return;
00523   } while (0);
00524 
00525   // One of the fseek()s failed, probable because we're not a seekable file
00526   envir() << "AVIFileSink::setWord(): fseek failed (err "
00527           << envir().getErrno() << ")\n";
00528 }

AVIFileSink::_header ( AVI   )  [private]

AVIFileSink::_header ( hdrl   )  [private]

AVIFileSink::_header ( avih   )  [private]

AVIFileSink::_header ( strl   )  [private]

AVIFileSink::_header ( strh   )  [private]

AVIFileSink::_header ( strf   )  [private]

AVIFileSink::_header ( JUNK   )  [private]

AVIFileSink::_header ( movi   )  [private]

Boolean Medium::lookupByName ( UsageEnvironment env,
char const *  mediumName,
Medium *&  resultMedium 
) [static, inherited]

Definition at line 65 of file Media.cpp.

References env, False, MediaLookupTable::lookup(), NULL, MediaLookupTable::ourMedia(), UsageEnvironment::setResultMsg(), and True.

Referenced by ServerMediaSession::lookupByName(), RTSPServer::lookupByName(), RTSPClient::lookupByName(), RTCPInstance::lookupByName(), MediaSource::lookupByName(), MediaSink::lookupByName(), MediaSession::lookupByName(), and DarwinInjector::lookupByName().

00066                                                          {
00067   resultMedium = MediaLookupTable::ourMedia(env)->lookup(mediumName);
00068   if (resultMedium == NULL) {
00069     env.setResultMsg("Medium ", mediumName, " does not exist");
00070     return False;
00071   }
00072 
00073   return True;
00074 }

void Medium::close ( UsageEnvironment env,
char const *  mediumName 
) [static, inherited]

Definition at line 76 of file Media.cpp.

References env, MediaLookupTable::ourMedia(), and MediaLookupTable::remove().

Referenced by afterPlaying(), Medium::close(), closeMediaSinks(), OnDemandServerMediaSubsession::closeStreamSource(), WAVAudioFileSource::createNew(), QCELPAudioRTPSource::createNew(), MP3HTTPSource::createNew(), MP3FileSource::createNew(), AMRAudioRTPSource::createNew(), WAVAudioFileServerMediaSubsession::createNewStreamSource(), MPEG1or2DemuxedServerMediaSubsession::createNewStreamSource(), MediaSubsession::deInitiate(), MediaSubsession::initiate(), MPEG1or2ProgramStreamFileDuration(), MPEG1or2Demux::noteElementaryStreamDeletion(), ByteStreamMultiFileSource::onSourceClosure1(), StreamState::reclaim(), RTSPServer::removeServerMediaSession(), OnDemandServerMediaSubsession::sdpLines(), shutdown(), H264VideoRTPSink::stopPlaying(), subsessionAfterPlaying(), ClientTrickPlayState::updateStateOnScaleChange(), AMRDeinterleaver::~AMRDeinterleaver(), ByteStreamMultiFileSource::~ByteStreamMultiFileSource(), DarwinInjector::~DarwinInjector(), FramedFilter::~FramedFilter(), H264VideoRTPSink::~H264VideoRTPSink(), InputESSourceRecord::~InputESSourceRecord(), MPEG1or2Demux::~MPEG1or2Demux(), MPEG1or2FileServerDemux::~MPEG1or2FileServerDemux(), MPEG2TransportFileServerMediaSubsession::~MPEG2TransportFileServerMediaSubsession(), MPEG2TransportStreamFromPESSource::~MPEG2TransportStreamFromPESSource(), ServerMediaSession::~ServerMediaSession(), and ServerMediaSubsession::~ServerMediaSubsession().

00076                                                           {
00077   MediaLookupTable::ourMedia(env)->remove(name);
00078 }

void Medium::close ( Medium medium  )  [static, inherited]

Definition at line 80 of file Media.cpp.

References Medium::close(), Medium::envir(), Medium::name(), and NULL.

00080                                  {
00081   if (medium == NULL) return;
00082 
00083   close(medium->envir(), medium->name());
00084 }

UsageEnvironment& Medium::envir (  )  const [inline, inherited]

Definition at line 59 of file Media.hh.

References Medium::fEnviron.

Referenced by QuickTimeFileSink::addArbitraryString(), FileSink::addData(), MPEG2IFrameIndexFromTransportStream::addToTail(), StreamParser::afterGettingBytes(), MultiFramedRTPSink::afterGettingFrame1(), InputESSourceRecord::afterGettingFrame1(), MPEG2TransportStreamFramer::afterGettingFrame1(), MPEG2IFrameIndexFromTransportStream::afterGettingFrame1(), HTTPSink::afterGettingFrame1(), BasicUDPSink::afterGettingFrame1(), MPEG4VideoFileServerMediaSubsession::afterPlayingDummy1(), MPEG4VideoStreamParser::analyzeVOLHeader(), RTSPClient::announceSDPDescription(), announceStream(), MPEG4VideoFileServerMediaSubsession::checkForAuxSDPLine1(), Medium::close(), MPEG2IFrameIndexFromTransportStream::compactParseBuffer(), QuickTimeFileSink::continuePlaying(), HTTPSink::continuePlaying(), H264VideoRTPSink::continuePlaying(), continuePlaying(), MPEG4VideoFileServerMediaSubsession::createNewRTPSink(), MPEG2TransportFileServerMediaSubsession::createNewRTPSink(), MPEG1or2VideoFileServerMediaSubsession::createNewRTPSink(), MPEG1or2DemuxedServerMediaSubsession::createNewRTPSink(), H263plusVideoFileServerMediaSubsession::createNewRTPSink(), AMRAudioFileServerMediaSubsession::createNewRTPSink(), ADTSAudioFileServerMediaSubsession::createNewRTPSink(), MPEG4VideoFileServerMediaSubsession::createNewStreamSource(), MPEG2TransportFileServerMediaSubsession::createNewStreamSource(), MPEG1or2VideoFileServerMediaSubsession::createNewStreamSource(), MPEG1or2DemuxedServerMediaSubsession::createNewStreamSource(), H263plusVideoFileServerMediaSubsession::createNewStreamSource(), AMRAudioFileServerMediaSubsession::createNewStreamSource(), ADTSAudioFileServerMediaSubsession::createNewStreamSource(), MPEG2IFrameIndexFromTransportStream::deliverIndexRecord(), SegmentQueue::dequeue(), RTSPClient::describeURL(), WAVAudioFileSource::doGetNextFrame(), MPEG2IFrameIndexFromTransportStream::doGetNextFrame(), MP3FileSource::doGetNextFrame(), H264FUAFragmenter::doGetNextFrame(), ByteStreamMultiFileSource::doGetNextFrame(), ByteStreamFileSource::doGetNextFrame(), BasicUDPSource::doGetNextFrame(), AMRAudioFileSource::doGetNextFrame(), ADTSAudioFileSource::doGetNextFrame(), MultiFramedRTPSource::doGetNextFrame1(), MP3FileSource::doGetNextFrame1(), ADUFromMP3Source::doGetNextFrame1(), SIPClient::doInviteStateMachine(), ByteStreamFileSource::doReadFromFile(), MPEG1or2VideoRTPSink::doSpecialFrameHandling(), MP3ADURTPSink::doSpecialFrameHandling(), H263plusVideoRTPSink::doSpecialFrameHandling(), ByteStreamFileSource::doStopGettingFrames(), BasicUDPSource::doStopGettingFrames(), SegmentQueue::enqueueNewSegment(), StreamParser::ensureValidBytes1(), MediaSubsession::env(), SubsessionIOState::envir(), RTSPServer::RTSPClientSession::envir(), RTSPOverHTTPServer::HTTPClientConnection::envir(), RTPInterface::envir(), AVISubsessionIOState::envir(), ServerMediaSession::generateSDPDescription(), RTPSource::getAttributes(), MP3FileSource::getAttributes(), MP3ADUTranscoder::getAttributes(), MediaSource::getAttributes(), MPEG4VideoFileServerMediaSubsession::getAuxSDPLine(), RTSPClient::getMediaSessionParameter(), getMPEG1or2TimeCode(), FramedSource::getNextFrame(), getOptionsResponse(), SIPClient::getResponse(), RTSPClient::getResponse(), RTSPClient::getResponse1(), SIPClient::getResponseCode(), getSDPDescriptionFromURL(), OnDemandServerMediaSubsession::getStreamParameters(), RTSPServer::incomingConnectionHandler1(), RTSPOverHTTPServer::incomingConnectionHandler1(), RTCPInstance::incomingReportHandler1(), RTSPClient::incomingRequestHandler1(), MP3FileSource::initializeStream(), MediaSession::initializeWithSDP(), MediaSession::initiateByMediaType(), SIPClient::invite1(), DynamicRTSPServer::lookupServerMediaSession(), MPEG4GenericRTPSource::MPEG4GenericRTPSource(), MPEG1or2FileServerDemux::newElementaryStream(), MPEG1or2Demux::newElementaryStream(), MPEG4GenericBufferedPacket::nextEnclosedFrameSize(), AMRBufferedPacket::nextEnclosedFrameSize(), RTSPClient::openConnectionFromURL(), MPEG2TransportStreamIndexFile::openFid(), MPEG2IFrameIndexFromTransportStream::parseFrame(), AC3AudioStreamParser::parseFrame(), RTSPClient::parseGetParameterHeader(), MPEGProgramStreamParser::parsePackHeader(), MPEGProgramStreamParser::parsePESPacket(), SIPClient::parseResponseCode(), RTSPClient::parseResponseCode(), MediaSession::parseSDPLine(), MPEG1or2VideoStreamParser::parseSlice(), MPEGProgramStreamParser::parseSystemHeader(), MPEG4VideoStreamParser::parseVideoObjectLayer(), MPEG4VideoStreamParser::parseVideoObjectPlane(), MPEG4VideoStreamParser::parseVisualObject(), RTSPClient::pauseMediaSession(), RTSPClient::pauseMediaSubsession(), RTSPClient::playMediaSession(),