Ticket #11233: 0001-When-processing-frames-from-DVD-Blu-ray-ringbuffer-m.patch

File 0001-When-processing-frames-from-DVD-Blu-ray-ringbuffer-m.patch, 5.1 KB (added by peper03@…, 8 years ago)
  • mythtv/libs/libmythtv/Bluray/bdringbuffer.h

    From 0228e7652d3d1eab0e6d1d41d0f987acb1287099 Mon Sep 17 00:00:00 2001
    From: Richard <peper03@yahoo.com>
    Date: Mon, 12 Nov 2012 00:28:05 +0100
    Subject: [PATCH] When processing frames from DVD/Blu-ray ringbuffer, menu
     frames are now buffered as necessary to ensure stutter-free
     playback.
    
    ---
     mythtv/libs/libmythtv/Bluray/bdringbuffer.h |    6 ++----
     mythtv/libs/libmythtv/DVD/dvdringbuffer.h   |    6 ++----
     mythtv/libs/libmythtv/avformatdecoder.cpp   |    8 ++++----
     mythtv/libs/libmythtv/ringbuffer.h          |    4 +++-
     4 files changed, 11 insertions(+), 13 deletions(-)
    
    diff --git a/mythtv/libs/libmythtv/Bluray/bdringbuffer.h b/mythtv/libs/libmythtv/Bluray/bdringbuffer.h
    index a41ed1a..8c77a90 100644
    a b class MTV_PUBLIC BDRingBuffer : public RingBuffer 
    8585    uint64_t GetChapterStartFrame(uint32_t chapter);
    8686    bool IsOpen(void)        const { return bdnav; }
    8787    bool IsHDMVNavigation(void) const { return m_isHDMVNavigation; }
    88     bool IsInMenu(void) const { return m_inMenu; }
    89     bool IsInStillFrame(void) const;
    90     virtual bool IsInDiscMenuOrStillFrame(void) const
    91         { return IsInMenu() || IsInStillFrame(); } // RingBuffer
     88    virtual bool IsInMenu(void) const { return m_inMenu; }
     89    virtual bool IsInStillFrame(void) const;
    9290    bool TitleChanged(void);
    9391
    9492    void GetDescForPos(QString &desc);
  • mythtv/libs/libmythtv/DVD/dvdringbuffer.h

    diff --git a/mythtv/libs/libmythtv/DVD/dvdringbuffer.h b/mythtv/libs/libmythtv/DVD/dvdringbuffer.h
    index 17c44aa..3a31c1b 100644
    a b class MTV_PUBLIC DVDRingBuffer : public RingBuffer 
    7171    uint GetCellStart(void);
    7272    bool PGCLengthChanged(void);
    7373    bool CellChanged(void);
    74     bool IsInStillFrame(void)   const { return m_still > 0;             }
     74    virtual bool IsInStillFrame(void)   const { return m_still > 0;             }
    7575    bool NeedsStillFrame(void) { return IsInStillFrame() || NewSequence(); }
    7676    bool NewSequence(bool new_sequence = false);
    7777    bool AudioStreamsChanged(void) const { return m_audioStreamsChanged; }
    7878    bool IsWaiting(void) const           { return m_dvdWaiting;          }
    7979    int  NumPartsInTitle(void)     const { return m_titleParts;          }
    8080    void GetMenuSPUPkt(uint8_t *buf, int len, int stream_id);
    81     virtual bool IsInDiscMenuOrStillFrame(void) const
    82         { return IsInMenu() || IsInStillFrame(); }
    8381
    8482    // Public menu/button stuff
    8583    AVSubtitle *GetMenuSubtitle(uint &version);
    8684    int         NumMenuButtons(void) const;
    8785    QRect       GetButtonCoords(void);
    8886    void        ReleaseMenuButton(void);
    89     bool        IsInMenu(void) const { return m_inMenu; }
     87    virtual bool IsInMenu(void) const { return m_inMenu; }
    9088    virtual bool HandleAction(const QStringList &actions, int64_t pts);
    9189
    9290    // Subtitles
  • mythtv/libs/libmythtv/avformatdecoder.cpp

    diff --git a/mythtv/libs/libmythtv/avformatdecoder.cpp b/mythtv/libs/libmythtv/avformatdecoder.cpp
    index 9439d39..2241fb8 100644
    a b bool AvFormatDecoder::ProcessAudioPacket(AVStream *curstream, AVPacket *pkt, 
    43284328        LOG(VB_TIMESTAMP, LOG_INFO, LOC + QString("audio timecode %1 %2 %3 %4")
    43294329                .arg(pkt->pts).arg(pkt->dts).arg(temppts).arg(lastapts));
    43304330
    4331         allowedquit |= ringBuffer->IsInDiscMenuOrStillFrame() ||
     4331        allowedquit |= ringBuffer->IsInStillFrame() ||
    43324332                       m_audio->IsBufferAlmostFull();
    43334333
    43344334        tmp_pkt.data += ret;
    bool AvFormatDecoder::GetFrame(DecodeType decodetype) 
    44454445                continue;
    44464446            }
    44474447            else if (lowbuffers && ((decodetype & kDecodeAV) == kDecodeAV) &&
    4448                      storedPackets.count() < max_video_queue_size &&
    4449                      lastapts < lastvpts + 100 &&
    4450                      !ringBuffer->IsInDiscMenuOrStillFrame())
     4448                     (storedPackets.count() < max_video_queue_size) &&
     4449                     (lastapts < lastvpts + 100) &&
     4450                     !ringBuffer->IsInStillFrame())
    44514451            {
    44524452                storevideoframes = true;
    44534453            }
  • mythtv/libs/libmythtv/ringbuffer.h

    diff --git a/mythtv/libs/libmythtv/ringbuffer.h b/mythtv/libs/libmythtv/ringbuffer.h
    index f208aed..3195163 100644
    a b class MTV_PUBLIC RingBuffer : protected MThread 
    9696    BDRingBuffer  *BD(void);
    9797    virtual bool StartFromBeginning(void)                   { return true;  }
    9898    virtual void IgnoreWaitStates(bool ignore)              { }
    99     virtual bool IsInDiscMenuOrStillFrame(void) const       { return false; }
     99    virtual bool IsInMenu(void) const                       { return false; }
     100    virtual bool IsInStillFrame(void) const                 { return false; }
     101    virtual bool IsInDiscMenuOrStillFrame(void) const       { return IsInMenu() || IsInStillFrame(); }
    100102    virtual bool HandleAction(const QStringList &, int64_t) { return false; }
    101103
    102104    // General Commands