}
LOG_MEDIA_MESSAGE("Natural size: %" G_GUINT64_FORMAT "x%" G_GUINT64_FORMAT, width, height);
- m_videoSize = IntSize(static_cast<int>(width), static_cast<int>(height));
+#if ENABLE(TIZEN_ACCELERATED_COMPOSITING) && USE(TIZEN_TEXTURE_MAPPER) && ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE) && USE(ACCELERATED_VIDEO_VAAPI)
+ if(!m_displaySize.isEmpty())
+ m_videoSize = scaleHDVideoToDisplaySize(static_cast<int>(width), static_cast<int>(height), m_displaySize.width(), m_displaySize.height());
+ else
+#endif
+ m_videoSize = IntSize(static_cast<int>(width), static_cast<int>(height));
return m_videoSize;
}
m_videoLayer->paintCurrentFrameInContext(context, rect);
}
+#if USE(ACCELERATED_VIDEO_VAAPI)
+// Other device doesn't prefer such optimization, so enclose it in USE(ACCELERATED_VIDEO_VAAPI) macro
+IntSize MediaPlayerPrivateGStreamer::scaleHDVideoToDisplaySize(int videoWidth, int videoHeight, int displayWidth, int displayHeight) const
+{
+ int fitWidth, fitHeight;
+
+#if ENABLE(TIZEN_DLOG_SUPPORT)
+ TIZEN_LOGI("videoWidth: %d, videoHeight: %d, displayWidth: %d, displayHeight: %d ", videoWidth, videoHeight, displayWidth, displayHeight);
+#endif
+ fitWidth = videoWidth;
+ fitHeight = videoHeight;
+ if (displayWidth > 0 && displayHeight > 0) {
+ // In case video is rotated, we always use a 'better'
+ // orientation (landscape or portrait) to calculate fitWidth/fitHeight.
+ // It means we use a bigger size which doesn't lose quality
+ // in either landscape or portrait orientation
+ if ((videoWidth > videoHeight && displayWidth < displayHeight)
+ || (videoWidth < videoHeight && displayWidth > displayHeight)) {
+ int tmp;
+ tmp = displayWidth;
+ displayWidth = displayHeight;
+ displayHeight = tmp;
+ }
+
+ if (videoWidth > displayWidth || videoHeight > displayHeight) {
+ if (videoWidth * displayHeight > videoHeight * displayWidth) {
+ fitWidth = displayWidth;
+ fitHeight = videoHeight * displayWidth / videoWidth;
+ ASSERT(fitHeight <= displayHeight);
+ } else {
+ fitWidth = videoWidth * displayHeight / videoHeight;
+ fitHeight = displayHeight;
+ ASSERT(fitWidth <= displayWidth);
+ }
+ }
+ }
+
+ return IntSize(fitWidth, fitHeight);
+}
+#endif
void MediaPlayerPrivateGStreamer::xWindowIdPrepared(GstMessage* message)
{
- int width;
- int height;
- gst_structure_get_int(message->structure, "video-width", &width);
- gst_structure_get_int(message->structure, "video-height", &height);
+ int videoWidth, videoHeight;
+
+ gst_structure_get_int(message->structure, "video-width", &videoWidth);
+ gst_structure_get_int(message->structure, "video-height", &videoHeight);
#if ENABLE(TIZEN_DLOG_SUPPORT)
- TIZEN_LOGI("Width: %d, Height: %d", width, height);
+ TIZEN_LOGI("videoWidth: %d, videoHeight: %d", videoWidth, videoHeight);
#endif
- IntSize size(width, height);
- m_videoSize = size;
- m_videoLayer->setOverlay(size);
+#if USE(ACCELERATED_VIDEO_VAAPI)
+ int displayWidth, displayHeight;
+ gst_structure_get_int(message->structure, "display-width", &displayWidth);
+ gst_structure_get_int(message->structure, "display-height", &displayHeight);
+ m_displaySize = IntSize(displayWidth, displayHeight);
+ m_videoSize = scaleHDVideoToDisplaySize(videoWidth, videoHeight, displayWidth, displayHeight);
+#else
+ m_videoSize = IntSize(videoWidth, videoHeight);
+#endif
+ m_videoLayer->setOverlay(m_videoSize);
}
+
#endif // ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE)
#endif // ENABLE(TIZEN_ACCELERATED_COMPOSITING) && USE(TIZEN_TEXTURE_MAPPER)