
Public Member Functions | |
| ClientTrickPlayState (MPEG2TransportStreamIndexFile *indexFile) | |
| void | updateStateFromNPT (float npt) |
| void | updateStateOnScaleChange () |
| void | updateStateOnPlayChange (Boolean reverseToPreviousVSH) |
| void | handleStreamDeletion () |
| void | setSource (MPEG2TransportStreamFramer *framer) |
| void | setNextScale (float nextScale) |
| Boolean | areChangingScale () const |
Private Member Functions | |
| void | updateTSRecordNum () |
| void | reseekOriginalTransportStreamSource () |
Private Attributes | |
| MPEG2TransportStreamIndexFile * | fIndexFile |
| ByteStreamFileSource * | fOriginalTransportStreamSource |
| MPEG2TransportStreamTrickModeFilter * | fTrickModeFilter |
| MPEG2TransportStreamFromESSource * | fTrickPlaySource |
| MPEG2TransportStreamFramer * | fFramer |
| float | fScale |
| float | fNextScale |
| float | fNPT |
| unsigned long | fTSRecordNum |
| unsigned long | fIxRecordNum |
Definition at line 38 of file MPEG2TransportFileServerMediaSubsession.cpp.
| ClientTrickPlayState::ClientTrickPlayState | ( | MPEG2TransportStreamIndexFile * | indexFile | ) |
Definition at line 253 of file MPEG2TransportFileServerMediaSubsession.cpp.
00254 : fIndexFile(indexFile), 00255 fOriginalTransportStreamSource(NULL), 00256 fTrickModeFilter(NULL), fTrickPlaySource(NULL), 00257 fFramer(NULL), 00258 fScale(1.0f), fNextScale(1.0f), fNPT(0.0f), 00259 fTSRecordNum(0), fIxRecordNum(0) { 00260 }
| void ClientTrickPlayState::updateStateFromNPT | ( | float | npt | ) |
Definition at line 262 of file MPEG2TransportFileServerMediaSubsession.cpp.
References MPEG2TransportStreamFramer::clearPIDStatusTable(), fFramer, fIndexFile, fIxRecordNum, fNPT, fTSRecordNum, MPEG2TransportStreamIndexFile::lookupTSPacketNumFromNPT(), reseekOriginalTransportStreamSource(), and updateTSRecordNum().
Referenced by MPEG2TransportFileServerMediaSubsession::seekStream().
00262 { 00263 fNPT = npt; 00264 // Map "fNPT" to the corresponding Transport Stream and Index record numbers: 00265 unsigned long tsRecordNum, ixRecordNum; 00266 fIndexFile->lookupTSPacketNumFromNPT(fNPT, tsRecordNum, ixRecordNum); 00267 00268 updateTSRecordNum(); 00269 if (tsRecordNum != fTSRecordNum) { 00270 fTSRecordNum = tsRecordNum; 00271 fIxRecordNum = ixRecordNum; 00272 00273 // Seek the source to the new record number: 00274 reseekOriginalTransportStreamSource(); 00275 // Note: We assume that we're asked to seek only in normal 00276 // (i.e., non trick play) mode, so we don't seek within the trick 00277 // play source (if any). 00278 00279 fFramer->clearPIDStatusTable(); 00280 } 00281 }
| void ClientTrickPlayState::updateStateOnScaleChange | ( | ) |
Definition at line 283 of file MPEG2TransportFileServerMediaSubsession.cpp.
References MPEG2TransportStreamFromESSource::addNewVideoSource(), MPEG2TransportStreamFramer::changeInputSource(), Medium::close(), MPEG2TransportStreamFromESSource::createNew(), MPEG2TransportStreamTrickModeFilter::createNew(), env, Medium::envir(), fFramer, fIndexFile, fIxRecordNum, fNextScale, MPEG2TransportStreamTrickModeFilter::forgetInputSource(), fOriginalTransportStreamSource, fScale, fTrickModeFilter, fTrickPlaySource, fTSRecordNum, NULL, reseekOriginalTransportStreamSource(), MPEG2TransportStreamTrickModeFilter::seekTo(), and VIDEO_MPEG_VERSION.
Referenced by MPEG2TransportFileServerMediaSubsession::startStream().
00283 { 00284 fScale = fNextScale; 00285 00286 // Change our source objects to reflect the change in scale: 00287 // First, close the existing trick play source (if any): 00288 if (fTrickPlaySource != NULL) { 00289 fTrickModeFilter->forgetInputSource(); 00290 // so that the underlying Transport Stream source doesn't get deleted by: 00291 Medium::close(fTrickPlaySource); 00292 fTrickPlaySource = NULL; 00293 fTrickModeFilter = NULL; 00294 } 00295 if (fNextScale != 1.0f) { 00296 // Create a new trick play filter from the original Transport Stream source: 00297 UsageEnvironment& env = fIndexFile->envir(); // alias 00298 fTrickModeFilter = MPEG2TransportStreamTrickModeFilter 00299 ::createNew(env, fOriginalTransportStreamSource, fIndexFile, int(fNextScale)); 00300 fTrickModeFilter->seekTo(fTSRecordNum, fIxRecordNum); 00301 00302 // And generate a Transport Stream from this: 00303 fTrickPlaySource = MPEG2TransportStreamFromESSource::createNew(env); 00304 fTrickPlaySource->addNewVideoSource(fTrickModeFilter, VIDEO_MPEG_VERSION); 00305 00306 fFramer->changeInputSource(fTrickPlaySource); 00307 } else { 00308 // Switch back to the original Transport Stream source: 00309 reseekOriginalTransportStreamSource(); 00310 fFramer->changeInputSource(fOriginalTransportStreamSource); 00311 } 00312 }
| void ClientTrickPlayState::updateStateOnPlayChange | ( | Boolean | reverseToPreviousVSH | ) |
Definition at line 314 of file MPEG2TransportFileServerMediaSubsession.cpp.
References fIndexFile, fIxRecordNum, fNPT, fTrickModeFilter, fTrickPlaySource, fTSRecordNum, MPEG2TransportStreamIndexFile::lookupPCRFromTSPacketNum(), MPEG2TransportStreamTrickModeFilter::nextIndexRecordNum(), NULL, MPEG2TransportStreamIndexFile::readIndexRecordValues(), size, and updateTSRecordNum().
Referenced by MPEG2TransportFileServerMediaSubsession::deleteStream(), MPEG2TransportFileServerMediaSubsession::pauseStream(), and MPEG2TransportFileServerMediaSubsession::startStream().
00314 { 00315 updateTSRecordNum(); 00316 if (fTrickPlaySource == NULL) { 00317 // We were in regular (1x) play. Use the index file to look up the 00318 // index record number and npt from the current transport number: 00319 fIndexFile->lookupPCRFromTSPacketNum(fTSRecordNum, reverseToPreviousVSH, fNPT, fIxRecordNum); 00320 } else { 00321 // We were in trick mode, and so already have the index record number. 00322 // Get the transport record number and npt from this: 00323 fIxRecordNum = fTrickModeFilter->nextIndexRecordNum(); 00324 if ((long)fIxRecordNum < 0) fIxRecordNum = 0; // we were at the start of the file 00325 unsigned long transportRecordNum; 00326 float pcr; 00327 u_int8_t offset, size, recordType; // all dummy 00328 if (fIndexFile->readIndexRecordValues(fIxRecordNum, transportRecordNum, 00329 offset, size, pcr, recordType)) { 00330 fTSRecordNum = transportRecordNum; 00331 fNPT = pcr; 00332 } 00333 } 00334 }
| void ClientTrickPlayState::handleStreamDeletion | ( | ) |
| void ClientTrickPlayState::setSource | ( | MPEG2TransportStreamFramer * | framer | ) |
Definition at line 336 of file MPEG2TransportFileServerMediaSubsession.cpp.
References fFramer, fOriginalTransportStreamSource, and FramedFilter::inputSource().
Referenced by MPEG2TransportFileServerMediaSubsession::createNewStreamSource().
00336 { 00337 fFramer = framer; 00338 fOriginalTransportStreamSource = (ByteStreamFileSource*)(framer->inputSource()); 00339 }
| void ClientTrickPlayState::setNextScale | ( | float | nextScale | ) | [inline] |
Definition at line 50 of file MPEG2TransportFileServerMediaSubsession.cpp.
References fNextScale.
Referenced by MPEG2TransportFileServerMediaSubsession::setStreamScale().
00050 { fNextScale = nextScale; }
| Boolean ClientTrickPlayState::areChangingScale | ( | ) | const [inline] |
Definition at line 51 of file MPEG2TransportFileServerMediaSubsession.cpp.
References fNextScale, and fScale.
Referenced by MPEG2TransportFileServerMediaSubsession::startStream().
00051 { return fNextScale != fScale; }
| void ClientTrickPlayState::updateTSRecordNum | ( | ) | [private] |
Definition at line 341 of file MPEG2TransportFileServerMediaSubsession.cpp.
References fFramer, fTSRecordNum, NULL, and MPEG2TransportStreamFramer::tsPacketCount().
Referenced by updateStateFromNPT(), and updateStateOnPlayChange().
00341 { 00342 if (fFramer != NULL) fTSRecordNum += fFramer->tsPacketCount(); 00343 }
| void ClientTrickPlayState::reseekOriginalTransportStreamSource | ( | ) | [private] |
Definition at line 345 of file MPEG2TransportFileServerMediaSubsession.cpp.
References fOriginalTransportStreamSource, fTSRecordNum, ByteStreamFileSource::seekToByteAbsolute(), and TRANSPORT_PACKET_SIZE.
Referenced by updateStateFromNPT(), and updateStateOnScaleChange().
00345 { 00346 u_int64_t tsRecordNum64 = (u_int64_t)fTSRecordNum; 00347 fOriginalTransportStreamSource->seekToByteAbsolute(tsRecordNum64*TRANSPORT_PACKET_SIZE); 00348 }
Definition at line 58 of file MPEG2TransportFileServerMediaSubsession.cpp.
Referenced by updateStateFromNPT(), updateStateOnPlayChange(), and updateStateOnScaleChange().
Definition at line 59 of file MPEG2TransportFileServerMediaSubsession.cpp.
Referenced by reseekOriginalTransportStreamSource(), setSource(), and updateStateOnScaleChange().
Definition at line 60 of file MPEG2TransportFileServerMediaSubsession.cpp.
Referenced by updateStateOnPlayChange(), and updateStateOnScaleChange().
Definition at line 61 of file MPEG2TransportFileServerMediaSubsession.cpp.
Referenced by updateStateOnPlayChange(), and updateStateOnScaleChange().
Definition at line 62 of file MPEG2TransportFileServerMediaSubsession.cpp.
Referenced by setSource(), updateStateFromNPT(), updateStateOnScaleChange(), and updateTSRecordNum().
float ClientTrickPlayState::fScale [private] |
Definition at line 63 of file MPEG2TransportFileServerMediaSubsession.cpp.
Referenced by areChangingScale(), and updateStateOnScaleChange().
float ClientTrickPlayState::fNextScale [private] |
Definition at line 63 of file MPEG2TransportFileServerMediaSubsession.cpp.
Referenced by areChangingScale(), setNextScale(), and updateStateOnScaleChange().
float ClientTrickPlayState::fNPT [private] |
Definition at line 63 of file MPEG2TransportFileServerMediaSubsession.cpp.
Referenced by updateStateFromNPT(), and updateStateOnPlayChange().
unsigned long ClientTrickPlayState::fTSRecordNum [private] |
Definition at line 64 of file MPEG2TransportFileServerMediaSubsession.cpp.
Referenced by reseekOriginalTransportStreamSource(), updateStateFromNPT(), updateStateOnPlayChange(), updateStateOnScaleChange(), and updateTSRecordNum().
unsigned long ClientTrickPlayState::fIxRecordNum [private] |
Definition at line 64 of file MPEG2TransportFileServerMediaSubsession.cpp.
Referenced by updateStateFromNPT(), updateStateOnPlayChange(), and updateStateOnScaleChange().
1.5.2