Ticket #10872: 10872-v2.patch

File 10872-v2.patch, 13.0 KB (added by danielk, 12 years ago)
  • mythtv/libs/libmythtv/NuppelVideoRecorder.cpp

    diff --git a/mythtv/libs/libmythtv/NuppelVideoRecorder.cpp b/mythtv/libs/libmythtv/NuppelVideoRecorder.cpp
    index 6fc9b80..e9a1246 100644
    a b void NuppelVideoRecorder::doWriteThread(void) 
    28062806    }
    28072807}
    28082808
    2809 void NuppelVideoRecorder::SetNextRecording(const ProgramInfo *progInf,
    2810                                           RingBuffer *rb)
     2809void NuppelVideoRecorder::SetNextRecording(
     2810    const RecordingInfo *progInf, RingBuffer *rb)
    28112811{
    28122812    // First we do some of the time consuming stuff we can do now
    28132813    SavePositionMap(true);
    void NuppelVideoRecorder::SetNextRecording(const ProgramInfo *progInf, 
    28192819    QMutexLocker locker(&nextRingBufferLock);
    28202820    nextRecording = NULL;
    28212821    if (progInf)
    2822         nextRecording = new ProgramInfo(*progInf);
     2822        nextRecording = new RecordingInfo(*progInf);
    28232823    nextRingBuffer = rb;
    28242824}
    28252825
  • mythtv/libs/libmythtv/NuppelVideoRecorder.h

    diff --git a/mythtv/libs/libmythtv/NuppelVideoRecorder.h b/mythtv/libs/libmythtv/NuppelVideoRecorder.h
    index 67b7d67..33cc2a7 100644
    a b class MTV_PUBLIC NuppelVideoRecorder : public V4LRecorder, public CC608Input 
    101101    void SetVideoFilters(QString &filters);
    102102    void SetTranscoding(bool value) { transcoding = value; };
    103103
    104     void SetNextRecording(const ProgramInfo*, RingBuffer*);
     104    void SetNextRecording(const RecordingInfo*, RingBuffer*);
    105105    void ResetForNewFile(void);
    106106    void FinishRecording(void);
    107107    void StartNewFile(void);
  • mythtv/libs/libmythtv/dtvrecorder.cpp

    diff --git a/mythtv/libs/libmythtv/dtvrecorder.cpp b/mythtv/libs/libmythtv/dtvrecorder.cpp
    index fba78fc..a4e6ce8 100644
    a b bool DTVRecorder::FindOtherKeyframes(const TSPacket *tspacket) 
    688688}
    689689
    690690// documented in recorderbase.h
    691 void DTVRecorder::SetNextRecording(const ProgramInfo *progInf, RingBuffer *rb)
     691void DTVRecorder::SetNextRecording(const RecordingInfo *progInf, RingBuffer *rb)
    692692{
    693693    LOG(VB_RECORD, LOG_INFO, LOC + QString("SetNextRecord(0x%1, 0x%2)")
    694694            .arg((uint64_t)progInf,0,16).arg((uint64_t)rb,0,16));
    void DTVRecorder::SetNextRecording(const ProgramInfo *progInf, RingBuffer *rb) 
    706706
    707707    nextRecording = NULL;
    708708    if (progInf)
    709         nextRecording = new ProgramInfo(*progInf);
     709        nextRecording = new RecordingInfo(*progInf);
    710710
    711711    nextRingBuffer = rb;
    712712    nextRingBufferLock.unlock();
  • mythtv/libs/libmythtv/dtvrecorder.h

    diff --git a/mythtv/libs/libmythtv/dtvrecorder.h b/mythtv/libs/libmythtv/dtvrecorder.h
    index e2749bf..6200a13 100644
    a b class DTVRecorder : 
    5050    void Initialize(void) {;}
    5151    int GetVideoFd(void) { return _stream_fd; }
    5252
    53     virtual void SetNextRecording(const ProgramInfo*, RingBuffer*);
     53    virtual void SetNextRecording(const RecordingInfo*, RingBuffer*);
    5454    virtual void SetStreamData(void);
    5555    void SetStreamData(MPEGStreamData* sd);
    5656    MPEGStreamData *GetStreamData(void) const { return _stream_data; }
  • mythtv/libs/libmythtv/recorderbase.cpp

    diff --git a/mythtv/libs/libmythtv/recorderbase.cpp b/mythtv/libs/libmythtv/recorderbase.cpp
    index 84731c7..df5a6dd 100644
    a b void RecorderBase::SetRingBuffer(RingBuffer *rbuf) 
    8282    weMadeBuffer = false;
    8383}
    8484
    85 void RecorderBase::SetRecording(const ProgramInfo *pginfo)
     85void RecorderBase::SetRecording(const RecordingInfo *pginfo)
    8686{
    8787    if (pginfo)
    8888        LOG(VB_RECORD, LOG_INFO, LOC + QString("SetRecording(0x%1) title(%2)")
    void RecorderBase::SetRecording(const ProgramInfo *pginfo) 
    9292
    9393    ProgramInfo *oldrec = curRecording;
    9494    if (pginfo)
    95         curRecording = new ProgramInfo(*pginfo);
     95        curRecording = new RecordingInfo(*pginfo);
    9696    else
    9797        curRecording = NULL;
    9898
  • mythtv/libs/libmythtv/recorderbase.h

    diff --git a/mythtv/libs/libmythtv/recorderbase.h b/mythtv/libs/libmythtv/recorderbase.h
    index d124dbd..7dca9c7 100644
    a b  
    2020class FireWireDBOptions;
    2121class GeneralDBOptions;
    2222class RecordingProfile;
     23class RecordingInfo;
    2324class DVBDBOptions;
    2425class RecorderBase;
    2526class ChannelBase;
    26 class ProgramInfo;
    2727class RingBuffer;
    2828class TVRec;
    2929
    class MTV_PUBLIC RecorderBase : public QRunnable 
    6363     *
    6464     *  \sa ChannelNameChanged(const QString&)
    6565     */
    66     void SetRecording(const ProgramInfo *pginfo);
     66    void SetRecording(const RecordingInfo *pginfo);
    6767
    6868    /** \brief Tells recorder to use an externally created ringbuffer.
    6969     *
    class MTV_PUBLIC RecorderBase : public QRunnable 
    116116     *
    117117     *   This calls TVRec::RingBufferChanged() when the switch happens.
    118118     */
    119     virtual void SetNextRecording(const ProgramInfo*, RingBuffer*) = 0;
     119    virtual void SetNextRecording(const RecordingInfo*, RingBuffer*) = 0;
    120120
    121121    /** \brief This is called between SetOptionsFromProfile() and
    122122     *         run() to initialize any devices, etc.
    class MTV_PUBLIC RecorderBase : public QRunnable 
    276276    uint           m_videoWidth;
    277277    double         m_frameRate;
    278278
    279     ProgramInfo  *curRecording;
     279    RecordingInfo *curRecording;
    280280
    281281    // For handling pausing + stop recording
    282282    mutable QMutex pauseLock; // also used for request_recording and recording
    class MTV_PUBLIC RecorderBase : public QRunnable 
    294294    // For RingBuffer switching
    295295    QMutex         nextRingBufferLock;
    296296    RingBuffer    *nextRingBuffer;
    297     ProgramInfo  *nextRecording;
     297    RecordingInfo *nextRecording;
    298298
    299299    // Seektable  support
    300300    MarkTypes      positionMapType;
  • mythtv/libs/libmythtv/recordinginfo.cpp

    diff --git a/mythtv/libs/libmythtv/recordinginfo.cpp b/mythtv/libs/libmythtv/recordinginfo.cpp
    index 0fc9e02..39003e8 100644
    a b RecordingInfo::RecordingInfo( 
    110110    oldrecstatus(_oldrecstatus),
    111111    savedrecstatus(rsUnknown),
    112112    future(_future),
     113    desiredrecstartts(_recstartts),
     114    desiredrecendts(_recendts),
    113115    record(NULL)
    114116{
    115117    hostname = _hostname;
    RecordingInfo::RecordingInfo( 
    203205    oldrecstatus(rsUnknown),
    204206    savedrecstatus(rsUnknown),
    205207    future(false),
     208    desiredrecstartts(_recstartts),
     209    desiredrecendts(_recendts),
    206210    record(NULL)
    207211{
    208212    recpriority = _recpriority;
    void RecordingInfo::clone(const RecordingInfo &other, 
    379383        oldrecstatus   = other.oldrecstatus;
    380384        savedrecstatus = other.savedrecstatus;
    381385        future         = other.future;
     386        desiredrecstartts = other.desiredrecstartts;
     387        desiredrecendts = other.desiredrecendts;
    382388    }
    383389}
    384390
    void RecordingInfo::clone(const ProgramInfo &other, 
    403409    oldrecstatus   = rsUnknown;
    404410    savedrecstatus = rsUnknown;
    405411    future         = false;
     412    desiredrecstartts = QDateTime();
     413    desiredrecendts = QDateTime();
    406414}
    407415
    408416void RecordingInfo::clear(void)
    void RecordingInfo::clear(void) 
    415423    oldrecstatus = rsUnknown;
    416424    savedrecstatus = rsUnknown;
    417425    future = false;
     426    desiredrecstartts = QDateTime();
     427    desiredrecendts = QDateTime();
    418428}
    419429
    420430
  • mythtv/libs/libmythtv/recordinginfo.h

    diff --git a/mythtv/libs/libmythtv/recordinginfo.h b/mythtv/libs/libmythtv/recordinginfo.h
    index 4c8378a..7650e36 100644
    a b  
    11#ifndef _RECORDING_INFO_H_
    22#define _RECORDING_INFO_H_
    33
     4#include <QDateTime>
     5#include <QString>
     6
    47#include "mythtvexp.h"
    58#include "programinfo.h"
    69
    class MTV_PUBLIC RecordingInfo : public ProgramInfo 
    206209    void ApplyRecordRecPriorityChange(int);
    207210    void ToggleRecord(void);
    208211
     212    // Used in determining start and end for RecordingQuality determination
     213    void SetDesiredStartTime(const QDateTime &dt) { desiredrecstartts = dt; }
     214    void SetDesiredEndTime(const QDateTime &dt) { desiredrecendts = dt; }
     215    QDateTime GetDesiredStartTime(void) const { return desiredrecstartts; }
     216    QDateTime GetDesiredEndTime(void) const { return desiredrecendts; }
     217
    209218    // these five can be moved to programinfo
    210219    void AddHistory(bool resched = true, bool forcedup = false,
    211220                    bool future = false);//pi
    class MTV_PUBLIC RecordingInfo : public ProgramInfo 
    231240    RecStatusType oldrecstatus;
    232241    RecStatusType savedrecstatus;
    233242    bool future;
     243    QDateTime desiredrecstartts;
     244    QDateTime desiredrecendts;
    234245
    235246  private:
    236247    mutable class RecordingRule *record;
  • mythtv/libs/libmythtv/recordingquality.cpp

    diff --git a/mythtv/libs/libmythtv/recordingquality.cpp b/mythtv/libs/libmythtv/recordingquality.cpp
    index f3f79d1..9a251d8 100644
    a b using namespace std; 
    33
    44#include "recordingquality.h"
    55#include "mythcorecontext.h"
     6#include "recordinginfo.h"
    67#include "mythmiscutil.h"
    78#include "mythlogging.h"
    8 #include "programinfo.h"
    99
    1010static void merge_overlapping(RecordingGaps &gaps);
    11 static double score_gaps(const ProgramInfo*, const RecordingGaps&);
     11static double score_gaps(const RecordingInfo&, const RecordingGaps&);
     12static QDateTime get_start(const RecordingInfo&);
     13static QDateTime get_end(const RecordingInfo&);
    1214
    1315RecordingQuality::RecordingQuality(
    14     const ProgramInfo *pi, const RecordingGaps &rg,
     16    const RecordingInfo *ri, const RecordingGaps &rg,
    1517    const QDateTime &first, const QDateTime &latest) :
    1618    m_continuity_error_count(0), m_packet_count(0),
    1719    m_overall_score(1.0), m_recording_gaps(rg)
    1820{
    19     if (!pi)
     21    if (!ri)
    2022        return;
    2123
    22     m_program_key = pi->MakeUniqueKey();
     24    m_program_key = ri->MakeUniqueKey();
    2325
    2426    // trim start
    25     QDateTime start = pi->GetScheduledStartTime();
     27    QDateTime start = get_start(*ri);
    2628    while (!m_recording_gaps.empty() &&
    2729           m_recording_gaps.first().GetStart() < start)
    2830    {
    RecordingQuality::RecordingQuality( 
    3436    }
    3537
    3638    // trim end
    37     QDateTime end = pi->GetScheduledEndTime();
     39    QDateTime end = get_end(*ri);
    3840    while (!m_recording_gaps.empty() &&
    3941           m_recording_gaps.back().GetEnd() > end)
    4042    {
    RecordingQuality::RecordingQuality( 
    5860    stable_sort(m_recording_gaps.begin(), m_recording_gaps.end());
    5961    merge_overlapping(m_recording_gaps);
    6062
    61     m_overall_score = score_gaps(pi, m_recording_gaps);
     63    m_overall_score = score_gaps(*ri, m_recording_gaps);
    6264}
    6365
    6466void RecordingQuality::AddTSStatistics(
    static void merge_overlapping(RecordingGaps &gaps) 
    137139    }
    138140}
    139141
    140 static double score_gaps(const ProgramInfo *pi, const RecordingGaps &gaps)
     142static double score_gaps(const RecordingInfo &ri, const RecordingGaps &gaps)
    141143{
    142144    RecordingGaps::const_iterator it = gaps.begin();
    143145    if (it == gaps.end())
    144146        return 1.0;
    145147
    146     QDateTime start = pi->GetScheduledStartTime();
     148    QDateTime start = get_start(ri);
    147149
    148     double program_length = start.secsTo(pi->GetScheduledEndTime());
     150    double program_length = start.secsTo(get_end(ri));
    149151    if (program_length < 1.0)
    150152        return 0.0;
    151153
    static double score_gaps(const ProgramInfo *pi, const RecordingGaps &gaps) 
    190192    return (score > 0.0) ? score : 0.0;
    191193}
    192194
     195static QDateTime get_start(const RecordingInfo &ri)
     196{
     197    if (ri.GetDesiredStartTime().isValid())
     198    {
     199        return (ri.GetScheduledStartTime() > ri.GetDesiredStartTime()) ?
     200            ri.GetScheduledStartTime() : ri.GetDesiredStartTime();
     201    }
     202    else
     203    {
     204        return ri.GetScheduledStartTime();
     205    }
     206}
     207
     208static QDateTime get_end(const RecordingInfo &ri)
     209{
     210    if (ri.GetDesiredEndTime().isValid())
     211    {
     212        return (ri.GetScheduledEndTime() < ri.GetDesiredEndTime()) ?
     213            ri.GetScheduledEndTime() : ri.GetDesiredEndTime();
     214    }
     215    else
     216    {
     217        return ri.GetScheduledEndTime();
     218    }
     219}
  • mythtv/libs/libmythtv/recordingquality.h

    diff --git a/mythtv/libs/libmythtv/recordingquality.h b/mythtv/libs/libmythtv/recordingquality.h
    index e7f1361..056bbb0 100644
    a b  
    77
    88#include "mythtvexp.h"
    99
    10 class ProgramInfo;
     10class RecordingInfo;
    1111
    1212class RecordingGap
    1313{
    class MTV_PUBLIC RecordingQuality 
    3333{
    3434  public:
    3535    RecordingQuality(
    36         const ProgramInfo*, const RecordingGaps&,
     36        const RecordingInfo*, const RecordingGaps&,
    3737        const QDateTime &firstData, const QDateTime &latestData);
    3838
    3939    void AddTSStatistics(int continuity_error_count, int packet_count);
  • mythtv/libs/libmythtv/tv_rec.cpp

    diff --git a/mythtv/libs/libmythtv/tv_rec.cpp b/mythtv/libs/libmythtv/tv_rec.cpp
    index a84c078..16ba400 100644
    a b void TVRec::TuningRestartRecorder(void) 
    41454145    {
    41464146        recorder->SetRingBuffer(ringBuffer);
    41474147        ProgramInfo *progInfo = tvchain->GetProgramAt(-1);
    4148         recorder->SetRecording(progInfo);
     4148        RecordingInfo recinfo(*progInfo);
    41494149        delete progInfo;
     4150        recorder->SetRecording(&recinfo);
    41504151    }
    41514152    recorder->Reset();
    41524153