OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "media/cast/test/linux_output_window.h" | 5 #include "media/cast/test/linux_output_window.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "media/base/video_frame.h" | 8 #include "media/base/video_frame.h" |
9 #include "third_party/libyuv/include/libyuv/convert.h" | 9 #include "third_party/libyuv/include/libyuv/convert.h" |
10 #include "ui/gfx/size.h" | 10 #include "ui/gfx/size.h" |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
99 // create shared memory image | 99 // create shared memory image |
100 image_ = XShmCreateImage( | 100 image_ = XShmCreateImage( |
101 display_, CopyFromParent, 24, ZPixmap, NULL, &shminfo_, width, height); | 101 display_, CopyFromParent, 24, ZPixmap, NULL, &shminfo_, width, height); |
102 shminfo_.shmid = shmget( | 102 shminfo_.shmid = shmget( |
103 IPC_PRIVATE, (image_->bytes_per_line * image_->height), IPC_CREAT | 0777); | 103 IPC_PRIVATE, (image_->bytes_per_line * image_->height), IPC_CREAT | 0777); |
104 shminfo_.shmaddr = image_->data = (char*)shmat(shminfo_.shmid, 0, 0); | 104 shminfo_.shmaddr = image_->data = (char*)shmat(shminfo_.shmid, 0, 0); |
105 if (image_->data == reinterpret_cast<char*>(-1)) { | 105 if (image_->data == reinterpret_cast<char*>(-1)) { |
106 VLOG(1) << "XShmCreateImage failed"; | 106 VLOG(1) << "XShmCreateImage failed"; |
107 NOTREACHED(); | 107 NOTREACHED(); |
108 } | 108 } |
109 render_buffer_ = reinterpret_cast<uint8_t*>(image_->data); | |
110 shminfo_.readOnly = false; | 109 shminfo_.readOnly = false; |
111 | 110 |
112 // Attach image to display. | 111 // Attach image to display. |
113 if (!XShmAttach(display_, &shminfo_)) { | 112 if (!XShmAttach(display_, &shminfo_)) { |
114 VLOG(1) << "XShmAttach failed"; | 113 VLOG(1) << "XShmAttach failed"; |
115 NOTREACHED(); | 114 NOTREACHED(); |
116 } | 115 } |
117 XSync(display_, false); | 116 XSync(display_, false); |
118 } | 117 } |
119 | 118 |
120 void LinuxOutputWindow::RenderFrame( | 119 void LinuxOutputWindow::RenderFrame( |
121 const scoped_refptr<media::VideoFrame>& video_frame) { | 120 const scoped_refptr<media::VideoFrame>& video_frame) { |
| 121 CHECK_LE(video_frame->coded_size().width(), image_->width); |
| 122 CHECK_LE(video_frame->coded_size().height(), image_->height); |
122 libyuv::I420ToARGB(video_frame->data(VideoFrame::kYPlane), | 123 libyuv::I420ToARGB(video_frame->data(VideoFrame::kYPlane), |
123 video_frame->stride(VideoFrame::kYPlane), | 124 video_frame->stride(VideoFrame::kYPlane), |
124 video_frame->data(VideoFrame::kUPlane), | 125 video_frame->data(VideoFrame::kUPlane), |
125 video_frame->stride(VideoFrame::kUPlane), | 126 video_frame->stride(VideoFrame::kUPlane), |
126 video_frame->data(VideoFrame::kVPlane), | 127 video_frame->data(VideoFrame::kVPlane), |
127 video_frame->stride(VideoFrame::kVPlane), | 128 video_frame->stride(VideoFrame::kVPlane), |
128 render_buffer_, | 129 reinterpret_cast<uint8_t*>(image_->data), |
129 video_frame->stride(VideoFrame::kYPlane) * 4, | 130 image_->bytes_per_line, |
130 video_frame->coded_size().width(), | 131 video_frame->coded_size().width(), |
131 video_frame->coded_size().height()); | 132 video_frame->coded_size().height()); |
132 | 133 |
133 // Place image in window. | 134 // Place image in window. |
134 XShmPutImage(display_, | 135 XShmPutImage(display_, |
135 window_, | 136 window_, |
136 gc_, | 137 gc_, |
137 image_, | 138 image_, |
138 0, | 139 0, |
139 0, | 140 0, |
140 0, | 141 0, |
141 0, | 142 0, |
142 video_frame->coded_size().width(), | 143 video_frame->coded_size().width(), |
143 video_frame->coded_size().height(), | 144 video_frame->coded_size().height(), |
144 true); | 145 true); |
145 | 146 |
146 // Very important for the image to update properly! | 147 // Very important for the image to update properly! |
147 XSync(display_, false); | 148 XSync(display_, false); |
148 } | 149 } |
149 | 150 |
150 } // namespace test | 151 } // namespace test |
151 } // namespace cast | 152 } // namespace cast |
152 } // namespace media | 153 } // namespace media |
OLD | NEW |