RecorderBase Class Reference

#include <recorderbase.h>

Inheritance diagram for RecorderBase:

DTVRecorder MpegRecorder NuppelVideoRecorder DBox2Recorder DVBRecorder FirewireRecorder HDHRRecorder IPTVRecorder

List of all members.


Detailed Description

This is the abstract base class for supporting recorder hardware.

For a digital streams specialization, see the DTVRecorder. For a specialization for MPEG hardware encoded analog streams, see MpegRecorder. For a specialization for software encoding of frame grabber recorders, see NuppelVideoRecorder.

See also:
TVRec

Definition at line 32 of file recorderbase.h.


Public Member Functions

 RecorderBase (TVRec *rec)
virtual ~RecorderBase ()
void SetFrameRate (double rate)
 Sets the video frame rate.
void SetRecording (const ProgramInfo *pginfo)
 Changes the Recording from the one set initially with SetOptionsFromProfile().
void SetRingBuffer (RingBuffer *rbuf)
 Tells recorder to use an externally created ringbuffer.
virtual void SetOption (const QString &opt, const QString &value)
 Set an specific option.
virtual void SetOption (const QString &opt, int value)
 Set an specific integer option.
virtual void SetVideoFilters (QString &filters)=0
 Tells recorder which filters to use.
virtual void SetOptionsFromProfile (RecordingProfile *profile, const QString &videodev, const QString &audiodev, const QString &vbidev)=0
 Sets basic recorder options.
virtual void SetNextRecording (const ProgramInfo *, RingBuffer *)=0
 Sets next recording info, to be applied as soon as practical.
virtual void Initialize (void)=0
 This is called between SetOptionsFromProfile() and StartRecording() to initialize any devices, etc.
virtual void StartRecording (void)=0
 StartRecording() starts the recording process, and does not exit until the recording is complete.
virtual void StopRecording (void)=0
 StopRecording() signals to the StartRecording() function that it should stop recording and exit cleanly.
virtual void Reset (void)=0
 Reset the recorder to the startup state.
virtual bool IsRecording (void)=0
 Tells whether the StartRecorder() loop is running.
virtual bool IsErrored (void)=0
 Tells us whether an unrecoverable error has been encountered.
virtual long long GetFramesWritten (void)=0
 Returns number of frames written to disk.
virtual bool Open (void)=0
 Open devices needed by recorder.
virtual int GetVideoFd (void)=0
 Returns file descriptor of recorder device.
virtual long long GetKeyframePosition (long long desired)=0
 Returns closest keyframe position before the desired frame.
virtual void Pause (bool clear=true)
 Pause tells StartRecording() to pause, it should not block.
virtual void Unpause (void)
 Unpause tells StartRecording() to unpause, it should not block.
virtual bool IsPaused (void) const
 Returns true iff recorder is paused.
virtual bool WaitForPause (int timeout=1000)
 WaitForPause blocks until StartRecording() is actually paused, or timeout milliseconds elapse.
double GetFrameRate (void)
 Returns an approximation of the frame rate.
virtual void CheckForRingBufferSwitch (void)
 If requested, switch to new RingBuffer/ProgramInfo objects.
void SavePositionMap (bool force=false)
 Save the seektable to the DB.

Protected Member Functions

void SetIntOption (RecordingProfile *profile, const QString &name)
 Convenience function used to set integer options from a profile.
void SetStrOption (RecordingProfile *profile, const QString &name)
 Convenience function used to set QString options from a profile.
virtual bool PauseAndWait (int timeout=100)
 If request_pause is true Paused and blocks up to timeout milliseconds.
virtual void ResetForNewFile (void)=0
virtual void FinishRecording (void)=0
virtual void StartNewFile (void)
void SetPositionMapType (int type)
 Set seektable type.

Protected Attributes

TVRectvrec
RingBufferringBuffer
bool weMadeBuffer
QString videocodec
QString audiodevice
QString videodevice
QString vbidevice
int vbimode
bool ntsc
bool ntsc_framerate
double video_frame_rate
ProgramInfocurRecording
bool request_pause
bool paused
QWaitCondition pauseWait
QWaitCondition unpauseWait
QMutex nextRingBufferLock
RingBuffernextRingBuffer
ProgramInfonextRecording
int positionMapType
QMutex positionMapLock
QMap< long long, long long > positionMap
QMap< long long, long long > positionMapDelta

Friends

class Transcode

Constructor & Destructor Documentation

RecorderBase::RecorderBase ( TVRec rec  ) 

Definition at line 22 of file recorderbase.cpp.

RecorderBase::~RecorderBase ( void   )  [virtual]

Definition at line 34 of file recorderbase.cpp.


Member Function Documentation

void RecorderBase::SetFrameRate ( double  rate  )  [inline]

Sets the video frame rate.

Definition at line 41 of file recorderbase.h.

Referenced by SetOption(), and Transcode::TranscodeFile().

void RecorderBase::SetRecording ( const ProgramInfo pginfo  ) 

Changes the Recording from the one set initially with SetOptionsFromProfile().

This method is useful for LiveTV, when we do not want to pause the recorder for a SetOptionsFromProfile() call just because a new program is comming on.

See also:
ChannelNameChanged(const QString&)

Definition at line 61 of file recorderbase.cpp.

Referenced by TVRec::TuningNewRecorder(), and TVRec::TuningRestartRecorder().

void RecorderBase::SetRingBuffer ( RingBuffer rbuf  ) 

Tells recorder to use an externally created ringbuffer.

If this an external RingBuffer is set, it should be before any Initialize(), Open(), or StartRecorder() calls. Externally created RingBuffers are not deleted in the Recorder's destructor.

Definition at line 48 of file recorderbase.cpp.

Referenced by CheckForRingBufferSwitch(), TVRec::HandleTuning(), TVRec::SetupRecorder(), Transcode::TranscodeFile(), TVRec::TuningFrequency(), and TVRec::TuningRestartRecorder().

void RecorderBase::SetOption ( const QString &  opt,
const QString &  value 
) [virtual]

Set an specific option.

Base options include: codec, audiodevice, videodevice, vbidevice, tvformat (ntsc,ntsc-jp,pal-m), vbiformat ("none","pal teletext","ntsc").

Reimplemented in DBox2Recorder, DTVRecorder, MpegRecorder, and NuppelVideoRecorder.

Definition at line 79 of file recorderbase.cpp.

Referenced by SetIntOption(), NuppelVideoRecorder::SetOption(), MpegRecorder::SetOption(), DTVRecorder::SetOption(), SetStrOption(), and TVRec::SetupRecorder().

void RecorderBase::SetOption ( const QString &  opt,
int  value 
) [virtual]

Set an specific integer option.

There are no integer options in RecorderBase.

Reimplemented in DBox2Recorder, DTVRecorder, DVBRecorder, MpegRecorder, and NuppelVideoRecorder.

Definition at line 125 of file recorderbase.cpp.

virtual void RecorderBase::SetVideoFilters ( QString &  filters  )  [pure virtual]

Tells recorder which filters to use.

These filters are used by frame grabber encoders to lower the bitrate while keeping quality good. They must execute quickly so that frames are not lost by the recorder.

Implemented in DTVRecorder, MpegRecorder, and NuppelVideoRecorder.

Referenced by TVRec::SetVideoFiltersForChannel().

virtual void RecorderBase::SetOptionsFromProfile ( RecordingProfile profile,
const QString &  videodev,
const QString &  audiodev,
const QString &  vbidev 
) [pure virtual]

Sets basic recorder options.

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

Implemented in DBox2Recorder, DVBRecorder, FirewireRecorder, HDHRRecorder, IPTVRecorder, MpegRecorder, and NuppelVideoRecorder.

Referenced by TVRec::SetupRecorder().

virtual void RecorderBase::SetNextRecording ( const ProgramInfo ,
RingBuffer  
) [pure virtual]

Sets next recording info, to be applied as soon as practical.

This should not lose any frames on the switchover, and should initialize the RingBuffer stream with headers as appropriate.

The switch does not have to happen immediately, but should happen soon. (i.e. it can wait for a key frame..)

This calls TVRec::RingBufferChanged() when the switch happens.

Implemented in DTVRecorder, MpegRecorder, and NuppelVideoRecorder.

Referenced by TVRec::SwitchLiveTVRingBuffer().

virtual void RecorderBase::Initialize ( void   )  [pure virtual]

This is called between SetOptionsFromProfile() and StartRecording() to initialize any devices, etc.

Implemented in DTVRecorder, MpegRecorder, and NuppelVideoRecorder.

Referenced by TVRec::SetupRecorder().

virtual void RecorderBase::StartRecording ( void   )  [pure virtual]

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

See also:
StopRecording()

Implemented in DBox2Recorder, DVBRecorder, FirewireRecorder, HDHRRecorder, IPTVRecorder, MpegRecorder, and NuppelVideoRecorder.

Referenced by TVRec::RecorderThread().

virtual void RecorderBase::StopRecording ( void   )  [pure virtual]

StopRecording() signals to the StartRecording() function that it should stop recording and exit cleanly.

This function should block until StartRecording() has finished up.

Implemented in DTVRecorder, DVBRecorder, IPTVRecorder, MpegRecorder, and NuppelVideoRecorder.

Referenced by TVRec::TeardownRecorder().

virtual void RecorderBase::Reset ( void   )  [pure virtual]

Reset the recorder to the startup state.

This is used after Pause(bool), WaitForPause() and after the RingBuffer's StopReads() method has been called.

Implemented in DTVRecorder, MpegRecorder, and NuppelVideoRecorder.

Referenced by TVRec::TuningRestartRecorder().

virtual bool RecorderBase::IsRecording ( void   )  [pure virtual]

Tells whether the StartRecorder() loop is running.

Implemented in DTVRecorder, MpegRecorder, and NuppelVideoRecorder.

Referenced by TVRec::IsReallyRecording(), and TVRec::TuningNewRecorder().

virtual bool RecorderBase::IsErrored ( void   )  [pure virtual]

Tells us whether an unrecoverable error has been encountered.

Implemented in DTVRecorder, MpegRecorder, and NuppelVideoRecorder.

Referenced by TVRec::SetupRecorder(), and TVRec::TuningNewRecorder().

virtual long long RecorderBase::GetFramesWritten ( void   )  [pure virtual]

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.

Implemented in DTVRecorder, MpegRecorder, and NuppelVideoRecorder.

Referenced by TVRec::GetFramesWritten().

virtual bool RecorderBase::Open ( void   )  [pure virtual]

Open devices needed by recorder.

This is usually called by StartRecording().

Returns:
true if device was successfully opened.

Implemented in DBox2Recorder, DVBRecorder, FirewireRecorder, HDHRRecorder, IPTVRecorder, MpegRecorder, and NuppelVideoRecorder.

virtual int RecorderBase::GetVideoFd ( void   )  [pure virtual]

Returns file descriptor of recorder device.

This is used by channel when only one open file descriptor is allowed on a device node. This is the case with video4linux devices and similar devices in BSD. It is not needed by newer drivers, such as those used for DVB.

Implemented in DTVRecorder, MpegRecorder, and NuppelVideoRecorder.

Referenced by TVRec::TuningNewRecorder(), and TVRec::TuningRestartRecorder().

virtual long long RecorderBase::GetKeyframePosition ( long long  desired  )  [pure virtual]

Returns closest keyframe position before the desired frame.

This returns -1 if a keyframe position can not be found for a frame. This could be true if the keyframe has not yet been seen by the recorder(unlikely), or if a keyframe map does not exist or is not up to date. The latter can happen because the video is an external video, because the database is corrupted, or because this is a live recording and it is being read by a remote frontend faster than the keyframes can be saved to the database.

Returns:
Closest prior keyframe, or -1 if there is no prior known keyframe.

Implemented in DTVRecorder, MpegRecorder, and NuppelVideoRecorder.

Referenced by TVRec::GetKeyframePosition().

virtual void RecorderBase::Pause ( bool  clear = true  )  [inline, virtual]

Pause tells StartRecording() to pause, it should not block.

Once paused the recorder calls tvrec->RecorderPaused().

Parameters:
clear if true any generated timecodes should be reset.
See also:
Unpause(), WaitForPause()

Reimplemented in IPTVRecorder, MpegRecorder, and NuppelVideoRecorder.

Definition at line 189 of file recorderbase.h.

Referenced by IPTVRecorder::Pause(), and TVRec::PauseRecorder().

virtual void RecorderBase::Unpause ( void   )  [inline, virtual]

Unpause tells StartRecording() to unpause, it should not block.

Reimplemented in IPTVRecorder, and NuppelVideoRecorder.

Definition at line 193 of file recorderbase.h.

Referenced by TVRec::TuningRestartRecorder(), and IPTVRecorder::Unpause().

virtual bool RecorderBase::IsPaused ( void   )  const [inline, virtual]

Returns true iff recorder is paused.

Reimplemented in NuppelVideoRecorder.

Definition at line 196 of file recorderbase.h.

Referenced by IPTVRecorder::AddData(), TVRec::HandleTuning(), and WaitForPause().

bool RecorderBase::WaitForPause ( int  timeout = 1000  )  [virtual]

WaitForPause blocks until StartRecording() is actually paused, or timeout milliseconds elapse.

Parameters:
timeout number of milliseconds to wait defaults to 1000.
Returns:
true iff pause happened within timeout period.

Definition at line 158 of file recorderbase.cpp.

double RecorderBase::GetFrameRate ( void   )  [inline]

Returns an approximation of the frame rate.

Bug:
This can be off by at least half, our non-frame grabber based recorders do not not try to approximate the frame rate. So a 720p recording at 60fps will report a frame-rate of 25fps.

Definition at line 205 of file recorderbase.h.

Referenced by TVRec::GetFramerate().

void RecorderBase::CheckForRingBufferSwitch ( void   )  [virtual]

If requested, switch to new RingBuffer/ProgramInfo objects.

Definition at line 200 of file recorderbase.cpp.

Referenced by NuppelVideoRecorder::doWriteThread(), DTVRecorder::HandleH264Keyframe(), MpegRecorder::HandleKeyframe(), DTVRecorder::HandleKeyframe(), and TVRec::SwitchLiveTVRingBuffer().

void RecorderBase::SavePositionMap ( bool  force = false  ) 

Save the seektable to the DB.

This saves the postition map delta to the database if force is true or there are 30 frames in the map or there are five frames in the map with less than 30 frames in the non-delta position map.

Parameters:
force If true this forces a DB sync.

Definition at line 238 of file recorderbase.cpp.

Referenced by NuppelVideoRecorder::FinishRecording(), MpegRecorder::FinishRecording(), DTVRecorder::FinishRecording(), TVRec::RunTV(), NuppelVideoRecorder::SetNextRecording(), MpegRecorder::SetNextRecording(), and DTVRecorder::SetNextRecording().

void RecorderBase::SetIntOption ( RecordingProfile profile,
const QString &  name 
) [protected]

Convenience function used to set integer options from a profile.

See also:
SetOption(const QString&, int)

Definition at line 132 of file recorderbase.cpp.

Referenced by NuppelVideoRecorder::SetOptionsFromProfile(), MpegRecorder::SetOptionsFromProfile(), and Transcode::TranscodeFile().

void RecorderBase::SetStrOption ( RecordingProfile profile,
const QString &  name 
) [protected]

Convenience function used to set QString options from a profile.

See also:
SetOption(const QString&, const QString&)

Definition at line 142 of file recorderbase.cpp.

Referenced by MpegRecorder::SetOptionsFromProfile(), and DVBRecorder::SetOptionsFromProfile().

bool RecorderBase::PauseAndWait ( int  timeout = 100  )  [protected, virtual]

If request_pause is true Paused and blocks up to timeout milliseconds.

Parameters:
timeout number of milliseconds to wait defaults to 100.
Returns:
true if recorder is paused.

Reimplemented in DVBRecorder, FirewireRecorder, and MpegRecorder.

Definition at line 182 of file recorderbase.cpp.

Referenced by IPTVRecorder::StartRecording(), HDHRRecorder::StartRecording(), and DBox2Recorder::StartRecording().

virtual void RecorderBase::ResetForNewFile ( void   )  [protected, pure virtual]

virtual void RecorderBase::FinishRecording ( void   )  [protected, pure virtual]

virtual void RecorderBase::StartNewFile ( void   )  [inline, protected, virtual]

Reimplemented in NuppelVideoRecorder.

Definition at line 228 of file recorderbase.h.

Referenced by CheckForRingBufferSwitch().

void RecorderBase::SetPositionMapType ( int  type  )  [inline, protected]


Friends And Related Function Documentation

friend class Transcode [friend]

Definition at line 34 of file recorderbase.h.


Member Data Documentation

TVRec* RecorderBase::tvrec [protected]

QString RecorderBase::videocodec [protected]

QString RecorderBase::audiodevice [protected]

QString RecorderBase::videodevice [protected]

QString RecorderBase::vbidevice [protected]

Definition at line 241 of file recorderbase.h.

Referenced by NuppelVideoRecorder::doVbiThread(), and SetOption().

int RecorderBase::vbimode [protected]

Definition at line 243 of file recorderbase.h.

bool RecorderBase::ntsc [protected]

double RecorderBase::video_frame_rate [protected]

QWaitCondition RecorderBase::pauseWait [protected]

QWaitCondition RecorderBase::unpauseWait [protected]

Definition at line 262 of file recorderbase.h.

Referenced by SavePositionMap().

QMutex RecorderBase::positionMapLock [protected]

QMap<long long, long long> RecorderBase::positionMap [protected]

QMap<long long, long long> RecorderBase::positionMapDelta [protected]


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

Generated on Sat Dec 18 05:16:10 2010 for MythTV by  doxygen 1.5.5