diff --git a/mythtv/libs/libmythtv/audioplayer.h b/mythtv/libs/libmythtv/audioplayer.h index fa05ae260f0..cf25d0cd821 100644 --- a/mythtv/libs/libmythtv/audioplayer.h +++ b/mythtv/libs/libmythtv/audioplayer.h @@ -44,6 +44,7 @@ class MTV_PUBLIC AudioPlayer int GetCodec(void) { return m_codec; } int GetNumChannels(void) { return m_channels; } int GetOrigChannels(void) { return m_orig_channels; } + int GetSampleRate(void) { return m_samplerate; } uint GetVolume(void); uint AdjustVolume(int change); float GetStretchFactor(void) { return m_stretchfactor; } diff --git a/mythtv/libs/libmythtv/bdringbuffer.cpp b/mythtv/libs/libmythtv/bdringbuffer.cpp index 02da5228fed..5dffc8365db 100644 --- a/mythtv/libs/libmythtv/bdringbuffer.cpp +++ b/mythtv/libs/libmythtv/bdringbuffer.cpp @@ -273,6 +273,7 @@ void BDRingBuffer::ProgressUpdate(void) bool BDRingBuffer::OpenFile(const QString &lfilename, uint retry_ms) { + safefilename = lfilename; filename = lfilename; VERBOSE(VB_IMPORTANT, LOC + QString("Opened BDRingBuffer device at %1") diff --git a/mythtv/libs/libmythtv/dvdringbuffer.cpp b/mythtv/libs/libmythtv/dvdringbuffer.cpp index c75bfba8053..2ec8ee6c292 100644 --- a/mythtv/libs/libmythtv/dvdringbuffer.cpp +++ b/mythtv/libs/libmythtv/dvdringbuffer.cpp @@ -303,6 +303,7 @@ bool DVDRingBuffer::OpenFile(const QString &lfilename, uint retry_ms) if (m_dvdnav) CloseDVD(); + safefilename = lfilename; filename = lfilename; QByteArray fname = filename.toLocal8Bit(); diff --git a/mythtv/libs/libmythtv/fileringbuffer.cpp b/mythtv/libs/libmythtv/fileringbuffer.cpp index 08c0b5bd4ba..43169070374 100644 --- a/mythtv/libs/libmythtv/fileringbuffer.cpp +++ b/mythtv/libs/libmythtv/fileringbuffer.cpp @@ -45,6 +45,7 @@ FileRingBuffer::FileRingBuffer(const QString &lfilename, bool write, bool readahead, int timeout_ms) { startreadahead = readahead; + safefilename = lfilename; filename = lfilename; if (write) diff --git a/mythtv/libs/libmythtv/mythplayer.cpp b/mythtv/libs/libmythtv/mythplayer.cpp index bc2ea11350a..bfffd4c0a16 100644 --- a/mythtv/libs/libmythtv/mythplayer.cpp +++ b/mythtv/libs/libmythtv/mythplayer.cpp @@ -4317,6 +4317,27 @@ int MythPlayer::GetStatusbarPos(void) const return((int)spos); } +void MythPlayer::GetPlaybackData(InfoMap &infoMap) +{ + QString samplerate = RingBuffer::BitrateToString(audio.GetSampleRate()); + infoMap.insert("samplerate", samplerate); + infoMap.insert("filename", player_ctx->buffer->GetSafeFilename()); + infoMap.insert("decoderrate", player_ctx->buffer->GetDecoderRate()); + infoMap.insert("storagerate", player_ctx->buffer->GetStorageRate()); + infoMap.insert("bufferavail", player_ctx->buffer->GetAvailableBuffer()); + infoMap.insert("avsync", + QString::number((float)avsync_avg / (float)frame_interval, 'f', 2)); + if (videoOutput) + { + QString frames = QString("%1/%2").arg(videoOutput->ValidVideoFrames()) + .arg(videoOutput->FreeVideoFrames()); + infoMap.insert("videoframes", frames); + } + if (decoder) + infoMap["videodecoder"] = decoder->GetCodecDecoderName(); + GetCodecDescription(infoMap); +} + int MythPlayer::GetSecondsBehind(void) const { if (!player_ctx->recorder) diff --git a/mythtv/libs/libmythtv/mythplayer.h b/mythtv/libs/libmythtv/mythplayer.h index ca5753435ce..c9b3696163d 100644 --- a/mythtv/libs/libmythtv/mythplayer.h +++ b/mythtv/libs/libmythtv/mythplayer.h @@ -144,7 +144,7 @@ class MTV_PUBLIC MythPlayer QSize GetVideoSize(void) const { return video_disp_dim; } float GetVideoAspect(void) const { return video_aspect; } float GetFrameRate(void) const { return video_frame_rate; } - + void GetPlaybackData(InfoMap &infoMap); bool IsAudioNeeded(void) { return !using_null_videoout && player_ctx->IsAudioNeeded(); } uint GetVolume(void) { return audio.GetVolume(); } int GetSecondsBehind(void) const; diff --git a/mythtv/libs/libmythtv/ringbuffer.cpp b/mythtv/libs/libmythtv/ringbuffer.cpp index 88667c67a7d..5ac4c0b96de 100644 --- a/mythtv/libs/libmythtv/ringbuffer.cpp +++ b/mythtv/libs/libmythtv/ringbuffer.cpp @@ -172,7 +172,7 @@ RingBuffer::RingBuffer(void) : readpos(0), writepos(0), internalreadpos(0), ignorereadpos(-1), rbrpos(0), rbwpos(0), - stopreads(false), + stopreads(false), safefilename(QString()), filename(), subtitlefilename(), tfw(NULL), fd2(-1), writemode(false), remotefile(NULL), diff --git a/mythtv/libs/libmythtv/ringbuffer.h b/mythtv/libs/libmythtv/ringbuffer.h index 1532e8416f4..ad41847e941 100644 --- a/mythtv/libs/libmythtv/ringbuffer.h +++ b/mythtv/libs/libmythtv/ringbuffer.h @@ -49,6 +49,7 @@ class MTV_PUBLIC RingBuffer : protected QThread void EnableBitrateMonitor(bool enable) { bitrateMonitorEnabled = enable; } // Gets + QString GetSafeFilename(void) { return safefilename; } QString GetFilename(void) const; QString GetSubtitleFilename(void) const; /// Returns value of stopreads @@ -69,6 +70,7 @@ class MTV_PUBLIC RingBuffer : protected QThread virtual bool IsOpen(void) const = 0; virtual bool IsStreamed(void) { return LiveMode(); } virtual int BestBufferSize(void) { return 32768; } + static QString BitrateToString(uint64_t rate); // DVD and bluray methods bool IsDisc(void) const { return IsDVD() || IsBD(); } @@ -154,7 +156,6 @@ class MTV_PUBLIC RingBuffer : protected QThread void ResetReadAhead(long long newinternal); void KillReadAheadThread(void); - static QString BitrateToString(uint64_t rate); uint64_t UpdateDecoderRate(uint64_t latest = 0); uint64_t UpdateStorageRate(uint64_t latest = 0); @@ -175,6 +176,7 @@ class MTV_PUBLIC RingBuffer : protected QThread mutable QReadWriteLock rwlock; + QString safefilename; // unprotected (for debugging) QString filename; // protected by rwlock QString subtitlefilename; // protected by rwlock diff --git a/mythtv/libs/libmythtv/streamingringbuffer.cpp b/mythtv/libs/libmythtv/streamingringbuffer.cpp index bcdc84d8598..e2c04cd30c0 100644 --- a/mythtv/libs/libmythtv/streamingringbuffer.cpp +++ b/mythtv/libs/libmythtv/streamingringbuffer.cpp @@ -31,6 +31,7 @@ bool StreamingRingBuffer::OpenFile(const QString &lfilename, uint retry_ms) { av_register_all(); + safefilename = lfilename; filename = lfilename; VERBOSE(VB_GENERAL, LOC + QString("Trying %1").arg(filename)); diff --git a/mythtv/libs/libmythtv/tv_play.cpp b/mythtv/libs/libmythtv/tv_play.cpp index 2c42b602984..5a07991dfd4 100644 --- a/mythtv/libs/libmythtv/tv_play.cpp +++ b/mythtv/libs/libmythtv/tv_play.cpp @@ -6900,6 +6900,7 @@ void TV::ToggleOSD(PlayerContext *ctx, bool includeStatusOSD) void TV::ToggleOSDDebug(PlayerContext *ctx) { + bool show = false; OSD *osd = GetOSDLock(ctx); if (osd && osd->IsWindowVisible("osd_debug")) { @@ -6909,27 +6910,26 @@ void TV::ToggleOSDDebug(PlayerContext *ctx) else if (osd) { ctx->buffer->EnableBitrateMonitor(true); - InfoMap infoMap; - infoMap.insert("filename", ctx->buffer->GetFilename()); - osd->ResetWindow("osd_debug"); - osd->SetText("osd_debug", infoMap, kOSDTimeout_None); - + show = true; QMutexLocker locker(&timerIdLock); if (!updateOSDDebugTimerId) updateOSDDebugTimerId = StartTimer(250, __LINE__); } ReturnOSDLock(ctx, osd); + if (show) + UpdateOSDDebug(ctx); } void TV::UpdateOSDDebug(const PlayerContext *ctx) { - InfoMap infoMap; - infoMap.insert("decoderrate", ctx->buffer->GetDecoderRate()); - infoMap.insert("storagerate", ctx->buffer->GetStorageRate()); - infoMap.insert("bufferavail", ctx->buffer->GetAvailableBuffer()); OSD *osd = GetOSDLock(ctx); - if (osd) + if (osd && ctx->player) + { + InfoMap infoMap; + ctx->player->GetPlaybackData(infoMap); + osd->ResetWindow("osd_debug"); osd->SetText("osd_debug", infoMap, kOSDTimeout_None); + } ReturnOSDLock(ctx, osd); } diff --git a/mythtv/libs/libmythui/mythuitype.cpp b/mythtv/libs/libmythui/mythuitype.cpp index 76915a5d2ca..c546e97db01 100644 --- a/mythtv/libs/libmythui/mythuitype.cpp +++ b/mythtv/libs/libmythui/mythuitype.cpp @@ -580,9 +580,8 @@ void MythUIType::AdjustMinArea(int delta_x, int delta_y) m_MinArea.setX(m_Area.x()); m_MinArea.setY(m_Area.y()); - QSize minsize = QSize(m_MinSize.x(), m_MinSize.y()); QSize bound(m_MinArea.width(), m_MinArea.height()); - bound = bound.expandedTo(minsize); + bound = bound.expandedTo(GetMinSize()); m_MinArea.setWidth(bound.width()); m_MinArea.setHeight(bound.height()); @@ -657,9 +656,8 @@ void MythUIType::SetMinAreaParent(MythRect actual_area, MythRect allowed_area, allowed_area = allowed_area.united(area); } - QSize minsize = QSize(m_MinSize.x(), m_MinSize.y()); QSize bound(actual_area.width(), actual_area.height()); - bound = bound.expandedTo(minsize); + bound = bound.expandedTo(GetMinSize()); m_MinArea.setWidth(bound.width()); m_MinArea.setHeight(bound.height()); @@ -687,15 +685,9 @@ void MythUIType::SetMinArea(const QSize &size) * The MinArea will have the same origin as the normal Area, * but can have a smaller size. */ - QSize minsize = QSize(m_MinSize.x() + 1, m_MinSize.y() + 1); - QSize bounded(size); - if (bounded.isNull()) - bounded = minsize; - else - bounded = bounded.expandedTo(minsize); - + bounded = bounded.expandedTo(GetMinSize()); bounded = bounded.boundedTo(m_Area.size()); if (bounded == m_MinArea.size()) diff --git a/mythtv/themes/default-wide/osd.xml b/mythtv/themes/default-wide/osd.xml index e32301b30f0..f8b1952773b 100644 --- a/mythtv/themes/default-wide/osd.xml +++ b/mythtv/themes/default-wide/osd.xml @@ -6,20 +6,23 @@ 16 #FFFFFF - 50,50,800,105 + + #CCCCFF + + 50,50,1180,105 0,0,100%,100% + + + + + + + + + + + + + + + + + + + + + +