MythTV  master
Public Member Functions | Private Attributes | List of all members
ImportRecorder Class Reference

ImportRecorder imports files, creating a seek map and other stuff that MythTV likes to have for recording. More...

#include <importrecorder.h>

Inheritance diagram for ImportRecorder:
Inheritance graph
Collaboration diagram for ImportRecorder:
Collaboration graph

Public Member Functions

 ImportRecorder (TVRec *rec)
 ~ImportRecorder () override=default
void SetOptionsFromProfile (RecordingProfile *profile, const QString &videodev, const QString &audiodev, const QString &vbidev) override
 Sets basic recorder options. More...
void run (void) override
 run() starts the recording process, and does not exit until the recording is complete. More...
bool Open (void)
void Close (void)
void InitStreamData (void) override
long long GetFramesWritten (void) override
 Returns number of frames written to disk. More...
RecordingQualityGetRecordingQuality (const RecordingInfo *) const override
 Returns a report about the current recordings quality. More...
void UpdateRecSize ()
- Public Member Functions inherited from DTVRecorder
 DTVRecorder (TVRec *rec)
 ~DTVRecorder () override
void SetOption (const QString &name, const QString &value) override
 Set an specific option. More...
void SetOption (const QString &name, int value) override
 handles the "wait_for_seqstart" option. More...
bool IsErrored (void) override
 Tells us whether an unrecoverable error has been encountered. More...
void SetVideoFilters (QString &) override
 Tells recorder which filters to use. More...
void Initialize (void) override
 This is called between SetOptionsFromProfile() and run() to initialize any devices, etc. More...
int GetVideoFd (void) override
 Returns file descriptor of recorder device. More...
virtual void SetStreamData (MPEGStreamData *data)
MPEGStreamDataGetStreamData (void) const
void Reset (void) override
 Reset the recorder to the startup state. More...
void ClearStatistics (void) override
void HandlePAT (const ProgramAssociationTable *_pat) override
void HandleCAT (const ConditionalAccessTable *) override
void HandlePMT (uint progNum, const ProgramMapTable *_pmt) override
void HandleEncryptionStatus (uint, bool) override
void HandleSingleProgramPAT (ProgramAssociationTable *pat, bool insert) override
void HandleSingleProgramPMT (ProgramMapTable *pmt, bool insert) override
void HandleSTT (const SystemTimeTable *) override
void HandleVCT (uint, const VirtualChannelTable *) override
void HandleMGT (const MasterGuideTable *) override
void HandleTDT (const TimeDateTable *) override
void HandleNIT (const NetworkInformationTable *) override
void HandleSDT (uint, const ServiceDescriptionTable *) override
bool ProcessTSPacket (const TSPacket &tspacket) override
bool ProcessVideoTSPacket (const TSPacket &tspacket) override
bool ProcessAudioTSPacket (const TSPacket &tspacket) override
bool ProcessAVTSPacket (const TSPacket &tspacket)
 Common code for processing either audio or video packets. More...
- Public Member Functions inherited from RecorderBase
 RecorderBase (TVRec *rec)
 ~RecorderBase () override
void SetFrameRate (double rate)
 Sets the video frame rate. More...
void SetRecording (const RecordingInfo *pginfo)
 Changes the Recording from the one set initially with SetOptionsFromProfile(). More...
void SetRingBuffer (RingBuffer *rbuf)
 Tells recorder to use an externally created ringbuffer. More...
void SetBoolOption (const QString &name, bool value)
 Set an specific boolean option. More...
void SetNextRecording (const RecordingInfo *ri, RingBuffer *rb)
 Sets next recording info, to be applied as soon as practical. More...
long long GetKeyframePosition (long long desired) const
 Returns closest keyframe position before the desired frame. More...
bool GetKeyframePositions (long long start, long long end, frm_pos_map_t &map) const
bool GetKeyframeDurations (long long start, long long end, frm_pos_map_t &map) const
virtual void StopRecording (void)
 StopRecording() signals to the recorder that it should stop recording and exit cleanly. More...
virtual bool IsRecording (void)
 Tells whether the StartRecorder() loop is running. More...
virtual bool IsRecordingRequested (void)
 Tells us if StopRecording() has been called. More...
virtual void Pause (bool clear=true)
 Pause tells recorder to pause, it should not block. More...
virtual void Unpause (void)
 Unpause tells recorder to unpause. More...
virtual bool IsPaused (bool holding_lock=false) const
 Returns true iff recorder is paused. More...
virtual bool WaitForPause (int timeout=1000)
 WaitForPause blocks until recorder is actually paused, or timeout milliseconds elapse. More...
double GetFrameRate (void) const
 Returns the latest frame rate. More...
virtual bool CheckForRingBufferSwitch (void)
 If requested, switch to new RingBuffer/ProgramInfo objects. More...
void SavePositionMap (bool force=false, bool finished=false)
 Save the seektable to the DB. More...
- Public Member Functions inherited from MPEGStreamListener
virtual void HandleSplice (const SpliceInformationTable *)

Private Attributes

int m_importFd {-1}
MythCommFlagPlayerm_cfp {nullptr}
long long m_nfc {0}

Additional Inherited Members

- Public Types inherited from RecorderBase
enum  AspectRatio {
  ASPECT_UNKNOWN = 0x00, ASPECT_1_1 = 0x01, ASPECT_4_3 = 0x02, ASPECT_16_9 = 0x03,
  ASPECT_2_21_1 = 0x04, ASPECT_CUSTOM = 0x05
- Static Public Member Functions inherited from RecorderBase
static RecorderBaseCreateRecorder (TVRec *tvrec, ChannelBase *channel, RecordingProfile &profile, const GeneralDBOptions &genOpt)
- Protected Member Functions inherited from DTVRecorder
void FinishRecording (void) override
 Flushes the ringbuffer, and if this is not a live LiveTV recording saves the position map and filesize. More...
void ResetForNewFile (void) override
void HandleKeyframe (int64_t extra)
 This save the current frame to the position maps and handles ringbuffer switching. More...
void HandleTimestamps (int stream_id, int64_t pts, int64_t dts)
void UpdateFramesWritten (void)
void BufferedWrite (const TSPacket &tspacket, bool insert=false)
bool FindAudioKeyframes (const TSPacket *tspacket)
bool FindMPEG2Keyframes (const TSPacket *tspacket)
 Locates the keyframes and saves them to the position map. More...
bool FindH264Keyframes (const TSPacket *tspacket)
 This searches the TS packet to identify keyframes. More...
void HandleH264Keyframe (void)
 This save the current frame to the position maps and handles ringbuffer switching. More...
void FindPSKeyFrames (const uint8_t *buffer, uint len) override
bool FindOtherKeyframes (const TSPacket *tspacket)
 Non-Audio/Video data. More...
bool CheckCC (uint pid, uint new_cnt)
virtual QString GetSIStandard (void) const
virtual void SetCAMPMT (const ProgramMapTable *)
virtual void UpdateCAMTimeOffset (void)
- Protected Member Functions inherited from RecorderBase
void SetIntOption (RecordingProfile *profile, const QString &name)
 Convenience function used to set integer options from a profile. More...
void SetStrOption (RecordingProfile *profile, const QString &name)
 Convenience function used to set QString options from a profile. More...
virtual bool PauseAndWait (int timeout=100)
 If m_requestPause is true, sets pause and blocks up to timeout milliseconds or until unpaused, whichever is sooner. More...
virtual void SetRecordingStatus (RecStatus::Type status, const QString &file, int line)
virtual void StartNewFile (void)
void SetPositionMapType (MarkTypes type)
 Set seektable type. More...
void AspectChange (uint aspect, long long frame)
 Note a change in aspect ratio in the recordedmark table. More...
void ResolutionChange (uint width, uint height, long long frame)
 Note a change in video size in the recordedmark table. More...
void FrameRateChange (uint framerate, long long frame)
 Note a change in video frame rate in the recordedmark table. More...
void VideoCodecChange (AVCodecID vCodec)
 Note a change in video codec. More...
void AudioCodecChange (AVCodecID aCodec)
 Note a change in audio codec. More...
void SetDuration (uint64_t duration)
 Note the total duration in the recordedmark table. More...
void SetTotalFrames (uint64_t total_frames)
 Note the total frames in the recordedmark table. More...
void TryWriteProgStartMark (const frm_pos_map_t &durationDeltaCopy)
- Protected Member Functions inherited from MPEGStreamListener
virtual ~MPEGStreamListener ()=default
- Protected Member Functions inherited from MPEGSingleProgramStreamListener
virtual ~MPEGSingleProgramStreamListener ()=default
- Protected Member Functions inherited from DVBMainStreamListener
virtual ~DVBMainStreamListener ()=default
- Protected Member Functions inherited from ATSCMainStreamListener
virtual ~ATSCMainStreamListener ()=default
- Protected Member Functions inherited from TSPacketListener
virtual ~TSPacketListener ()=default
- Protected Member Functions inherited from TSPacketListenerAV
virtual ~TSPacketListenerAV ()=default
- Protected Member Functions inherited from PSStreamListener
virtual ~PSStreamListener ()=default
- Protected Attributes inherited from DTVRecorder
int m_streamFd {-1}
QString m_recordingType {"all"}
QElapsedTimer m_audioTimer
uint32_t m_startCode {0xffffffff}
int m_firstKeyframe {-1}
unsigned long long m_lastGopSeen {0}
unsigned long long m_lastSeqSeen {0}
unsigned long long m_lastKeyframeSeen {0}
unsigned int m_audioBytesRemaining {0}
unsigned int m_videoBytesRemaining {0}
unsigned int m_otherBytesRemaining {0}
int m_progressiveSequence {0}
int m_repeatPict {0}
bool m_pesSynced {false}
bool m_seenSps {false}
H264Parser m_h264Parser
bool m_waitForKeyframeOption {true}
 Wait for the a GOP/SEQ-start before sending data. More...
bool m_hasWrittenOtherKeyframe {false}
QString m_error
 non-empty iff irrecoverable recording error detected More...
MPEGStreamDatam_streamData {nullptr}
bool m_bufferPackets {false}
vector< unsigned char > m_payloadBuffer
QMutex m_pidLock {QMutex::Recursive}
ProgramAssociationTablem_inputPat {nullptr}
 PAT on input side. More...
ProgramMapTablem_inputPmt {nullptr}
 PMT on input side. More...
bool m_hasNoAV {false}
bool m_recordMpts {false}
bool m_recordMptsOnly {false}
unsigned char m_streamId [0x1fff+1] {0}
unsigned char m_pidStatus [0x1fff+1] {0}
unsigned char m_continuityCounter [0x1fff+1] {0}
vector< TSPacketm_scratch
int m_minimumRecordingQuality {95}
bool m_use_pts {false}
uint64_t m_tsCount [256] {0}
int64_t m_tsLast [256] {}
int64_t m_tsFirst [256] {}
QDateTime m_tsFirstDt [256]
QAtomicInt m_packetCount {0}
QAtomicInt m_continuityErrorCount {0}
unsigned long long m_framesSeenCount {0}
unsigned long long m_framesWrittenCount {0}
double m_totalDuration {0.0}
double m_tdBase {0.0}
uint64_t m_tdTickCount {0}
FrameRate m_tdTickFramerate {0}
bool m_musicChoice {false}
- Protected Attributes inherited from RecorderBase
TVRecm_tvrec {nullptr}
RingBufferm_ringBuffer {nullptr}
bool m_weMadeBuffer {true}
AVContainer m_containerFormat {formatUnknown}
AVCodecID m_primaryVideoCodec {AV_CODEC_ID_NONE}
AVCodecID m_primaryAudioCodec {AV_CODEC_ID_NONE}
QString m_videocodec {"rtjpeg"}
QString m_videodevice
bool m_ntsc {true}
bool m_ntscFrameRate {true}
double m_videoFrameRate {29.97}
uint m_videoAspect {0}
uint m_videoHeight {0}
uint m_videoWidth {0}
FrameRate m_frameRate {0}
RecordingInfom_curRecording {nullptr}
QMutex m_pauseLock
bool m_requestPause {false}
bool m_paused {false}
QWaitCondition m_pauseWait
QWaitCondition m_unpauseWait
bool m_requestRecording {false}
 True if API call has requested a recording be [re]started. More...
bool m_recording {false}
 True while recording is actually being performed. More...
QWaitCondition m_recordingWait
QMutex m_nextRingBufferLock
RingBufferm_nextRingBuffer {nullptr}
RecordingInfom_nextRecording {nullptr}
MythTimer m_ringBufferCheckTimer
MarkTypes m_positionMapType {MARK_GOP_BYFRAME}
QMutex m_positionMapLock
frm_pos_map_t m_positionMap
frm_pos_map_t m_positionMapDelta
frm_pos_map_t m_durationMap
frm_pos_map_t m_durationMapDelta
MythTimer m_positionMapTimer
qint64 m_estimatedProgStartMS {0}
long long m_lastSavedKeyframe {0}
long long m_lastSavedDuration {0}
QMutex m_statisticsLock
QAtomicInt m_timeOfFirstDataIsSet
QDateTime m_timeOfFirstData
QAtomicInt m_timeOfLatestDataCount
QAtomicInt m_timeOfLatestDataPacketInterval
QDateTime m_timeOfLatestData
MythTimer m_timeOfLatestDataTimer
RecordingGaps m_recordingGaps
- Static Protected Attributes inherited from DTVRecorder
static const uint kMaxKeyFrameDistance = 80
 If the number of regular frames detected since the last detected keyframe exceeds this value, then we begin marking random regular frames as keyframes. More...
static const unsigned char kPayloadStartSeen = 0x2
- Static Protected Attributes inherited from RecorderBase
static const uint kTimeOfLatestDataIntervalTarget = 5000
 timeOfLatest update interval target in milliseconds. More...

Detailed Description

ImportRecorder imports files, creating a seek map and other stuff that MythTV likes to have for recording.

This currently only supports MPEG-TS files, but the plan is to support all files that ffmpeg does.

Definition at line 23 of file importrecorder.h.

Constructor & Destructor Documentation

◆ ImportRecorder()

ImportRecorder::ImportRecorder ( TVRec rec)

Definition at line 26 of file importrecorder.h.

◆ ~ImportRecorder()

ImportRecorder::~ImportRecorder ( )

Member Function Documentation

◆ SetOptionsFromProfile()

void ImportRecorder::SetOptionsFromProfile ( RecordingProfile profile,
const QString &  videodev,
const QString &  audiodev,
const QString &  vbidev 

Sets basic recorder options.

SetOptionsFromProfile is used to tell the recorder about the recording profile as well as the devices to use.

Reimplemented from DTVRecorder.

Definition at line 48 of file importrecorder.cpp.

◆ run()

void ImportRecorder::run ( void  )

run() starts the recording process, and does not exit until the recording is complete.

See also

Implements RecorderBase.

Definition at line 92 of file importrecorder.cpp.

◆ Open()

bool ImportRecorder::Open ( void  )

Definition at line 158 of file importrecorder.cpp.

Referenced by run().

◆ Close()

void ImportRecorder::Close ( void  )

Definition at line 237 of file importrecorder.cpp.

Referenced by run().

◆ InitStreamData()

void ImportRecorder::InitStreamData ( void  )

Reimplemented from DTVRecorder.

Definition at line 40 of file importrecorder.h.

◆ GetFramesWritten()

long long ImportRecorder::GetFramesWritten ( void  )

Returns number of frames written to disk.

It is not always safe to seek up to this frame in a player because frames may not be written in display order.

Reimplemented from DTVRecorder.

Definition at line 87 of file importrecorder.cpp.

◆ GetRecordingQuality()

RecordingQuality* ImportRecorder::GetRecordingQuality ( const RecordingInfo ri) const

Returns a report about the current recordings quality.

Reimplemented from DTVRecorder.

Definition at line 43 of file importrecorder.h.

◆ UpdateRecSize()

void ImportRecorder::UpdateRecSize ( )

Definition at line 79 of file importrecorder.cpp.

Member Data Documentation

◆ m_importFd

int ImportRecorder::m_importFd {-1}

Definition at line 48 of file importrecorder.h.

Referenced by Close(), Open(), and run().

◆ m_cfp

MythCommFlagPlayer* ImportRecorder::m_cfp {nullptr}

Definition at line 49 of file importrecorder.h.

Referenced by run(), and UpdateRecSize().

◆ m_nfc

long long ImportRecorder::m_nfc {0}

Definition at line 50 of file importrecorder.h.

Referenced by GetFramesWritten(), and UpdateRecSize().

The documentation for this class was generated from the following files: