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%
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+