Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(482)

Unified Diff: media/tools/player_x11/x11_video_renderer.cc

Issue 11269017: Plumb through cropped output size for VideoFrame (Closed) Base URL: https://git.chromium.org/git/chromium/src@git-svn
Patch Set: Found the windows failure, and fixed it. Thanks akalin@ Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/tools/player_x11/x11_video_renderer.h ('k') | media/tools/scaler_bench/scaler_bench.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/tools/player_x11/x11_video_renderer.cc
diff --git a/media/tools/player_x11/x11_video_renderer.cc b/media/tools/player_x11/x11_video_renderer.cc
index d259d6b4350ba721be93f249c1a71fb93012462c..43a18cdff568fb042387feabca698076bebbf0a1 100644
--- a/media/tools/player_x11/x11_video_renderer.cc
+++ b/media/tools/player_x11/x11_video_renderer.cc
@@ -84,16 +84,18 @@ X11VideoRenderer::~X11VideoRenderer() {
}
void X11VideoRenderer::Paint(media::VideoFrame* video_frame) {
- int width = video_frame->data_size().width();
- int height = video_frame->data_size().height();
-
if (!image_)
- Initialize(width, height);
+ Initialize(video_frame->coded_size(), video_frame->visible_rect());
+
+ const int coded_width = video_frame->coded_size().width();
+ const int coded_height = video_frame->coded_size().height();
+ const int visible_width = video_frame->visible_rect().width();
+ const int visible_height = video_frame->visible_rect().height();
// Check if we need to reallocate our XImage.
- if (image_->width != width || image_->height != height) {
+ if (image_->width != coded_width || image_->height != coded_height) {
XDestroyImage(image_);
- image_ = CreateImage(display_, width, height);
+ image_ = CreateImage(display_, coded_width, coded_height);
}
// Convert YUV frame to RGB.
@@ -109,9 +111,7 @@ void X11VideoRenderer::Paint(media::VideoFrame* video_frame) {
media::ConvertYUVToRGB32(video_frame->data(media::VideoFrame::kYPlane),
video_frame->data(media::VideoFrame::kUPlane),
video_frame->data(media::VideoFrame::kVPlane),
- (uint8*)image_->data,
- video_frame->data_size().width(),
- video_frame->data_size().height(),
+ (uint8*)image_->data, coded_width, coded_height,
video_frame->stride(media::VideoFrame::kYPlane),
video_frame->stride(media::VideoFrame::kUPlane),
image_->bytes_per_line,
@@ -125,8 +125,8 @@ void X11VideoRenderer::Paint(media::VideoFrame* video_frame) {
// Creates a XImage.
XImage image;
memset(&image, 0, sizeof(image));
- image.width = width;
- image.height = height;
+ image.width = coded_width;
+ image.height = coded_height;
image.depth = 32;
image.bits_per_pixel = 32;
image.format = ZPixmap;
@@ -140,15 +140,15 @@ void X11VideoRenderer::Paint(media::VideoFrame* video_frame) {
image.data = image_->data;
// Creates a pixmap and uploads from the XImage.
- unsigned long pixmap = XCreatePixmap(display_,
- window_,
- width,
- height,
+ unsigned long pixmap = XCreatePixmap(display_, window_,
+ visible_width, visible_height,
32);
GC gc = XCreateGC(display_, pixmap, 0, NULL);
XPutImage(display_, pixmap, gc, &image,
- 0, 0, 0, 0,
- width, height);
+ video_frame->visible_rect().x(),
+ video_frame->visible_rect().y(),
+ 0, 0,
+ visible_width, visible_height);
XFreeGC(display_, gc);
// Creates the picture representing the pixmap.
@@ -158,7 +158,7 @@ void X11VideoRenderer::Paint(media::VideoFrame* video_frame) {
// Composite the picture over the picture representing the window.
XRenderComposite(display_, PictOpSrc, picture, 0,
picture_, 0, 0, 0, 0, 0, 0,
- width, height);
+ visible_width, visible_height);
XRenderFreePicture(display_, picture);
XFreePixmap(display_, pixmap);
@@ -171,18 +171,21 @@ void X11VideoRenderer::Paint(media::VideoFrame* video_frame) {
// to the window.
GC gc = XCreateGC(display_, window_, 0, NULL);
XPutImage(display_, window_, gc, image_,
- 0, 0, 0, 0, width, height);
+ video_frame->visible_rect().x(),
+ video_frame->visible_rect().y(),
+ 0, 0, visible_width, visible_height);
XFlush(display_);
XFreeGC(display_, gc);
}
-void X11VideoRenderer::Initialize(int width, int height) {
+void X11VideoRenderer::Initialize(gfx::Size coded_size,
+ gfx::Rect visible_rect) {
CHECK(!image_);
LOG(INFO) << "Initializing X11 Renderer...";
// Resize the window to fit that of the video.
- XResizeWindow(display_, window_, width, height);
- image_ = CreateImage(display_, width, height);
+ XResizeWindow(display_, window_, visible_rect.width(), visible_rect.height());
+ image_ = CreateImage(display_, coded_size.width(), coded_size.height());
// Testing XRender support. We'll use the very basic of XRender
// so if it presents it is already good enough. We don't need
« no previous file with comments | « media/tools/player_x11/x11_video_renderer.h ('k') | media/tools/scaler_bench/scaler_bench.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698