rendered paste bodyIndex: mythtv/programs/mythfrontend/playbackbox.cpp
===================================================================
--- mythtv/programs/mythfrontend/playbackbox.cpp (revision 14863)
+++ mythtv/programs/mythfrontend/playbackbox.cpp (working copy)
@@ -238,7 +238,8 @@
drawTotalBounds(0, 0, size().width(), size().height()),
drawListBounds(0, 0, 0, 0), drawInfoBounds(0, 0, 0, 0),
drawGroupBounds(0, 0, 0, 0), drawUsageBounds(0, 0, 0, 0),
- drawVideoBounds(0, 0, 0, 0), drawCurGroupBounds(0, 0, 0, 0),
+ drawVideoBounds(0, 0, 0, 0), blackholeBounds(0, 0, 0, 0),
+ drawCurGroupBounds(0, 0, 0, 0),
// General popup support
popup(NULL), expectingPopup(false),
// Recording Group popup support
@@ -516,7 +517,7 @@
kKilled : kKilling;
/* NOTE: need unlock/process/lock here because we need
- to allow updateVideo() to run to handle changes in
+ to allow drawVideo() to run to handle changes in
previewVideoStates */
qApp->unlock();
qApp->processEvents();
@@ -572,7 +573,10 @@
if (name.lower() == "program_info_del" && context == 1 && type == Delete)
drawInfoBounds = area;
if (name.lower() == "video")
+ {
drawVideoBounds = area;
+ blackholeBounds = area;
+ }
if (name.lower() == "group_info")
drawGroupBounds = area;
if (name.lower() == "usage")
@@ -689,11 +693,16 @@
updateUsage(&p);
}
- if (r.intersects(drawVideoBounds))
+ if (r.intersects(drawVideoBounds) && !paintSkipUpdate)
{
updateVideo(&p);
}
+ if (r.intersects(blackholeBounds))
+ {
+ drawVideo(&p);
+ }
+
paintSkipCount--;
if (paintSkipCount < 0)
{
@@ -986,6 +995,30 @@
void PlaybackBox::updateVideo(QPainter *p)
{
+ if (!(previewVideoEnabled && previewPixmapEnabled))
+ {
+ return;
+ }
+
+ LayerSet *container = NULL;
+ container = theme->GetSet("video");
+ UIBlackHoleType *blackhole = NULL;
+ blackhole = (UIBlackHoleType *)container->GetType("video_blackhole");
+ if (blackhole)
+ {
+ blackholeBounds = blackhole->getScreenArea();
+ QPixmap pix(drawVideoBounds.size());
+ pix.fill(this, drawVideoBounds.topLeft());
+ QPainter tmp(&pix);
+ container->Draw(&tmp, 1, 1);
+ tmp.end();
+ p->drawPixmap(drawVideoBounds.topLeft(), pix);
+ }
+}
+
+void PlaybackBox::drawVideo(QPainter *p)
+{
+
if (playbackVideoContainer)
{
m_player->DrawUnusedRects(false);
@@ -1007,14 +1040,23 @@
if (temp.width() > 0)
{
int pixmap_y = 0;
+ int pixmap_x = 0;
- if (temp.height() < drawVideoBounds.height())
- pixmap_y = drawVideoBounds.y() +
- (drawVideoBounds.height() - temp.height())/2;
+ // Centre preview in the y axis
+ if (temp.height() < blackholeBounds.height())
+ pixmap_y = blackholeBounds.y() +
+ (blackholeBounds.height() - temp.height()) / 2;
else
- pixmap_y = drawVideoBounds.y();
+ pixmap_y = blackholeBounds.y();
- p->drawPixmap(drawVideoBounds.x(), pixmap_y, temp);
+ // Centre preview in the x axis
+ if (temp.width() < blackholeBounds.width())
+ pixmap_x = blackholeBounds.x() +
+ (blackholeBounds.width() - temp.width()) / 2;
+ else
+ pixmap_x = blackholeBounds.x();
+
+ p->drawPixmap(pixmap_x, pixmap_y, temp);
}
}
@@ -1082,7 +1124,7 @@
if (previewVideoNVP->IsPlaying())
{
previewVideoState = kPlaying;
- erase(drawVideoBounds);
+ erase(blackholeBounds);
}
}
else
@@ -1111,7 +1153,7 @@
if ((previewVideoState == kPlaying) && previewVideoNVP->IsPlaying() &&
!playingSomething)
{
- QSize size = drawVideoBounds.size();
+ QSize size = blackholeBounds.size();
float saspect = ((float)size.width() / (float)size.height()) / wmult;
float vaspect = previewVideoNVP->GetVideoAspect();
size.setHeight((int) ceil(size.height() * (saspect / vaspect) * hmult));
@@ -1120,14 +1162,23 @@
const QImage &img = previewVideoNVP->GetARGBFrame(size);
int video_y = 0;
+ int video_x = 0;
- if (img.height() < drawVideoBounds.height())
- video_y = drawVideoBounds.y() +
- (drawVideoBounds.height() - img.height())/2;
+ // Centre video in the y axis
+ if (img.height() < blackholeBounds.height())
+ video_y = blackholeBounds.y() +
+ (blackholeBounds.height() - img.height()) / 2;
else
- video_y = drawVideoBounds.y();
+ video_y = blackholeBounds.y();
- p->drawImage(drawVideoBounds.x(), video_y, img);
+ // Centre video in the x axis
+ if (img.width() < blackholeBounds.width())
+ video_x = blackholeBounds.x() +
+ (blackholeBounds.width() - img.width()) / 2;
+ else
+ video_x = blackholeBounds.x();
+
+ p->drawImage(blackholeBounds.x(), video_y, img);
}
/* have we timed out waiting for nvp to start? */
@@ -3921,7 +3972,7 @@
return;
if (previewVideoEnabled)
- update(drawVideoBounds);
+ update(blackholeBounds);
}
void PlaybackBox::processNetworkControlCommands(void)
@@ -4257,7 +4308,7 @@
}
// ask for repaint
- update(drawVideoBounds);
+ update(blackholeBounds);
}
qApp->unlock();
}
@@ -4408,20 +4459,34 @@
{
previewPixmap = new QPixmap();
- if (drawVideoBounds.width() != image->width())
+ if (blackholeBounds.width() != image->width())
{
- VERBOSE(VB_IMPORTANT, QString("%1 %2 x %3").arg(drawVideoBounds.width())
- .arg(image->width())
- .arg(image->height()));
+ float blackholeaspect = ((float)blackholeBounds.width())
+ / ((float)blackholeBounds.height());
+ float videoaspect = ((float)image->width())
+ / ((float)image->height());
- float scaleratio = ((float)drawVideoBounds.width() / wmult)
- / (float)image->width();
- int previewwidth = (int)drawVideoBounds.width();
- int previewheight = (int)(image->height() * scaleratio * hmult);
+ float scaleratio = 1;
+ int previewwidth = blackholeBounds.width();
+ int previewheight = blackholeBounds.height();
- VERBOSE(VB_IMPORTANT, QString("%1 x %2").arg(previewwidth)
- .arg(previewheight));
+ // Calculate new height orwidth according to relative aspect ratio
+ if (blackholeaspect > videoaspect)
+ {
+ scaleratio = (videoaspect / blackholeaspect) / hmult;
+ previewwidth = (int)(previewwidth * scaleratio * wmult);
+ }
+ else if (blackholeaspect < videoaspect)
+ {
+ scaleratio = (blackholeaspect / videoaspect) / wmult;
+ previewheight = (int)(previewheight * scaleratio * hmult);
+ }
+ // Ensure preview width/height are multiples of 8 to match
+ // the preview video
+ //previewwidth = ((previewwidth + 7) / 8) * 8;
+ //previewheight = ((previewheight + 7) / 8) * 8;
+
QImage tmp2 = image->smoothScale(previewwidth, previewheight);
previewPixmap->convertFromImage(tmp2);
}
@@ -4433,8 +4498,8 @@
if (!previewPixmap)
{
- previewPixmap = new QPixmap((int)(drawVideoBounds.width()),
- (int)(drawVideoBounds.height()));
+ previewPixmap = new QPixmap((int)(blackholeBounds.width()),
+ (int)(blackholeBounds.height()));
previewPixmap->fill(black);
}
Index: mythtv/programs/mythfrontend/playbackbox.h
===================================================================
--- mythtv/programs/mythfrontend/playbackbox.h (revision 14863)
+++ mythtv/programs/mythfrontend/playbackbox.h (working copy)
@@ -298,6 +298,7 @@
void grayOut(QPainter *);
void updateBackground(void);
void updateVideo(QPainter *);
+ void drawVideo(QPainter *);
void updateShowTitles(QPainter *);
void updateInfo(QPainter *);
void updateUsage(QPainter *);
@@ -367,6 +368,7 @@
QRect drawGroupBounds;
QRect drawUsageBounds;
QRect drawVideoBounds;
+ QRect blackholeBounds;
QRect drawCurGroupBounds;
// Popup support //////////////////////////////////////////////////////////