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

Side by Side Diff: media/tools/player_wtl/view.h

Issue 1226001: Merged VideoSurface, VideoFrame and VideoFrameImpl in VideoFrame. (Closed)
Patch Set: Created 10 years, 9 months 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 unified diff | Download patch
« no previous file with comments | « media/media.gyp ('k') | media/tools/player_x11/x11_video_renderer.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. Use of this
2 // source code is governed by a BSD-style license that can be found in the 2 // source code is governed by a BSD-style license that can be found in the
3 // LICENSE file. 3 // LICENSE file.
4 4
5 #ifndef MEDIA_TOOLS_PLAYER_WTL_VIEW_H_ 5 #ifndef MEDIA_TOOLS_PLAYER_WTL_VIEW_H_
6 #define MEDIA_TOOLS_PLAYER_WTL_VIEW_H_ 6 #define MEDIA_TOOLS_PLAYER_WTL_VIEW_H_
7 7
8 #include <stdio.h> 8 #include <stdio.h>
9 #include <process.h> 9 #include <process.h>
10 #include <string.h> 10 #include <string.h>
11 11
12 #include "media/base/buffers.h" 12 #include "media/base/video_frame.h"
13 #include "media/base/yuv_convert.h" 13 #include "media/base/yuv_convert.h"
14 #include "media/tools/player_wtl/movie.h" 14 #include "media/tools/player_wtl/movie.h"
15 #include "media/tools/player_wtl/player_wtl.h" 15 #include "media/tools/player_wtl/player_wtl.h"
16 #include "media/tools/player_wtl/wtl_renderer.h" 16 #include "media/tools/player_wtl/wtl_renderer.h"
17 17
18 // Fetchs current time as milliseconds. 18 // Fetchs current time as milliseconds.
19 // Returns as double for high duration and precision. 19 // Returns as double for high duration and precision.
20 inline double GetTime() { 20 inline double GetTime() {
21 LARGE_INTEGER perf_time, perf_hz; 21 LARGE_INTEGER perf_time, perf_hz;
22 QueryPerformanceFrequency(&perf_hz); // May change with speed step. 22 QueryPerformanceFrequency(&perf_hz); // May change with speed step.
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 } 114 }
115 if (!bmp_.IsNull()) { 115 if (!bmp_.IsNull()) {
116 dc.MoveTo(size_.cx, 0); 116 dc.MoveTo(size_.cx, 0);
117 dc.LineTo(size_.cx, size_.cy); 117 dc.LineTo(size_.cx, size_.cy);
118 dc.LineTo(0, size_.cy); 118 dc.LineTo(0, size_.cy);
119 } 119 }
120 return 0; 120 return 0;
121 } 121 }
122 122
123 // Convert the video frame to RGB and Blit. 123 // Convert the video frame to RGB and Blit.
124 void ConvertFrame(media::VideoFrame * video_frame) { 124 void ConvertFrame(media::VideoFrame* video_frame) {
125 media::VideoSurface frame_in;
126 bool lock_result = video_frame->Lock(&frame_in);
127 DCHECK(lock_result);
128 BITMAP bm; 125 BITMAP bm;
129 bmp_.GetBitmap(&bm); 126 bmp_.GetBitmap(&bm);
130 int dibwidth = bm.bmWidth; 127 int dibwidth = bm.bmWidth;
131 int dibheight = bm.bmHeight; 128 int dibheight = bm.bmHeight;
132 129
133 uint8 *movie_dib_bits = reinterpret_cast<uint8 *>(bm.bmBits) + 130 uint8 *movie_dib_bits = reinterpret_cast<uint8 *>(bm.bmBits) +
134 bm.bmWidthBytes * (bm.bmHeight - 1); 131 bm.bmWidthBytes * (bm.bmHeight - 1);
135 int dibrowbytes = -bm.bmWidthBytes; 132 int dibrowbytes = -bm.bmWidthBytes;
136 int clipped_width = frame_in.width; 133 int clipped_width = video_frame->width();
137 if (dibwidth < clipped_width) { 134 if (dibwidth < clipped_width) {
138 clipped_width = dibwidth; 135 clipped_width = dibwidth;
139 } 136 }
140 int clipped_height = frame_in.height; 137 int clipped_height = video_frame->height();
141 if (dibheight < clipped_height) { 138 if (dibheight < clipped_height) {
142 clipped_height = dibheight; 139 clipped_height = dibheight;
143 } 140 }
144 141
145 int scaled_width = clipped_width; 142 int scaled_width = clipped_width;
146 int scaled_height = clipped_height; 143 int scaled_height = clipped_height;
147 switch (view_size_) { 144 switch (view_size_) {
148 case 0: 145 case 0:
149 scaled_width = clipped_width / 4; 146 scaled_width = clipped_width / 4;
150 scaled_height = clipped_height / 4; 147 scaled_height = clipped_height / 4;
(...skipping 28 matching lines...) Expand all
179 scaled_width = clipped_width; 176 scaled_width = clipped_width;
180 scaled_height = clipped_height; 177 scaled_height = clipped_height;
181 clipped_width = scaled_width / 4; 178 clipped_width = scaled_width / 4;
182 clipped_height = scaled_height / 4; 179 clipped_height = scaled_height / 4;
183 break; 180 break;
184 } 181 }
185 182
186 // Append each frame to end of file. 183 // Append each frame to end of file.
187 bool enable_dump_yuv_file = media::Movie::get()->GetDumpYuvFileEnable(); 184 bool enable_dump_yuv_file = media::Movie::get()->GetDumpYuvFileEnable();
188 if (enable_dump_yuv_file) { 185 if (enable_dump_yuv_file) {
189 DumpYUV(frame_in); 186 DumpYUV(video_frame);
190 } 187 }
191 188
192 #ifdef TESTING 189 #ifdef TESTING
193 double yuv_time_start = GetTime(); // Start timer. 190 double yuv_time_start = GetTime(); // Start timer.
194 #endif 191 #endif
195 192
196 bool enable_draw = media::Movie::get()->GetDrawEnable(); 193 bool enable_draw = media::Movie::get()->GetDrawEnable();
197 if (enable_draw) { 194 if (enable_draw) {
198 DCHECK(bm.bmBitsPixel == 32); 195 DCHECK(bm.bmBitsPixel == 32);
199 DrawYUV(frame_in, 196 DrawYUV(video_frame,
200 movie_dib_bits, 197 movie_dib_bits,
201 dibrowbytes, 198 dibrowbytes,
202 clipped_width, 199 clipped_width,
203 clipped_height, 200 clipped_height,
204 scaled_width, 201 scaled_width,
205 scaled_height); 202 scaled_height);
206 } 203 }
207 #ifdef TESTING 204 #ifdef TESTING
208 double yuv_time_end = GetTime(); 205 double yuv_time_end = GetTime();
209 static int yuv_time_count = 0; 206 static int yuv_time_count = 0;
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
337 private: 334 private:
338 HBITMAP hbmp_; // For Images 335 HBITMAP hbmp_; // For Images
339 // View Size: 0=1/4, 1=0.5, 2=normal, 3=2x, 4=3x, 5=4x, 3=fit, 4=full. 336 // View Size: 0=1/4, 1=0.5, 2=normal, 3=2x, 4=3x, 5=4x, 3=fit, 4=full.
340 int view_size_; 337 int view_size_;
341 338
342 // View Rotate 0-5 for ID_VIEW_ROTATE0 to ID_VIEW_MIRROR_VERTICAL 339 // View Rotate 0-5 for ID_VIEW_ROTATE0 to ID_VIEW_MIRROR_VERTICAL
343 media::Rotate view_rotate_; 340 media::Rotate view_rotate_;
344 341
345 // Draw a frame of YUV to an RGB buffer with scaling. 342 // Draw a frame of YUV to an RGB buffer with scaling.
346 // Handles different YUV formats. 343 // Handles different YUV formats.
347 void DrawYUV(const media::VideoSurface &frame_in, 344 void DrawYUV(const media::VideoFrame* video_frame,
348 uint8 *movie_dib_bits, 345 uint8 *movie_dib_bits,
349 int dibrowbytes, 346 int dibrowbytes,
350 int clipped_width, 347 int clipped_width,
351 int clipped_height, 348 int clipped_height,
352 int scaled_width, 349 int scaled_width,
353 int scaled_height) { 350 int scaled_height) {
354 media::YUVType yuv_type = (frame_in.format == media::VideoSurface::YV12) ? 351 media::YUVType yuv_type =
355 media::YV12 : media::YV16; 352 (video_frame->format() == media::VideoFrame::YV12) ?
353 media::YV12 : media::YV16;
356 354
357 // Simple convert is not necessary for performance, but allows 355 // Simple convert is not necessary for performance, but allows
358 // easier alternative implementations. 356 // easier alternative implementations.
359 if ((view_rotate_ == media::ROTATE_0) && // Not scaled or rotated 357 if ((view_rotate_ == media::ROTATE_0) && // Not scaled or rotated
360 (view_size_ == 2)) { 358 (view_size_ == 2)) {
361 media::ConvertYUVToRGB32(frame_in.data[0], 359 media::ConvertYUVToRGB32(video_frame->data(0),
362 frame_in.data[1], 360 video_frame->data(1),
363 frame_in.data[2], 361 video_frame->data(2),
364 movie_dib_bits, 362 movie_dib_bits,
365 scaled_width, scaled_height, 363 scaled_width, scaled_height,
366 frame_in.strides[0], 364 video_frame->stride(0),
367 frame_in.strides[1], 365 video_frame->stride(1),
368 dibrowbytes, 366 dibrowbytes,
369 yuv_type); 367 yuv_type);
370 } else { 368 } else {
371 media::ScaleYUVToRGB32(frame_in.data[0], 369 media::ScaleYUVToRGB32(video_frame->data(0),
372 frame_in.data[1], 370 video_frame->data(1),
373 frame_in.data[2], 371 video_frame->data(2),
374 movie_dib_bits, 372 movie_dib_bits,
375 clipped_width, clipped_height, 373 clipped_width, clipped_height,
376 scaled_width, scaled_height, 374 scaled_width, scaled_height,
377 frame_in.strides[0], 375 video_frame->stride(0),
378 frame_in.strides[1], 376 video_frame->stride(1),
379 dibrowbytes, 377 dibrowbytes,
380 yuv_type, 378 yuv_type,
381 view_rotate_); 379 view_rotate_);
382 } 380 }
383 } 381 }
384 382
385 // Diagnostic function to write out YUV in format compatible with PYUV tool. 383 // Diagnostic function to write out YUV in format compatible with PYUV tool.
386 void DumpYUV(const media::VideoSurface &frame_in) { 384 void DumpYUV(const media::VideoFrame* video_frame) {
387 FILE * file_yuv = fopen("raw.yuv", "ab+"); // Open for append binary. 385 FILE * file_yuv = fopen("raw.yuv", "ab+"); // Open for append binary.
388 if (file_yuv != NULL) { 386 if (file_yuv != NULL) {
389 fseek(file_yuv, 0, SEEK_END); 387 fseek(file_yuv, 0, SEEK_END);
390 const size_t frame_size = frame_in.width * frame_in.height; 388 const size_t frame_size =
391 for (size_t y = 0; y < frame_in.height; ++y) 389 video_frame->width() * video_frame->height();
392 fwrite(frame_in.data[0]+frame_in.strides[0]*y, 390 for (size_t y = 0; y < video_frame->height(); ++y)
393 frame_in.width, sizeof(uint8), file_yuv); 391 fwrite(video_frame->data(0) + video_frame->stride(0)*y,
394 for (size_t y = 0; y < frame_in.height/2; ++y) 392 video_frame->width(), sizeof(uint8), file_yuv);
395 fwrite(frame_in.data[1]+frame_in.strides[1]*y, 393 for (size_t y = 0; y < video_frame->height()/2; ++y)
396 frame_in.width/2, sizeof(uint8), file_yuv); 394 fwrite(video_frame->data(1) + video_frame->stride(1)*y,
397 for (size_t y = 0; y < frame_in.height/2; ++y) 395 video_frame->width() / 2, sizeof(uint8), file_yuv);
398 fwrite(frame_in.data[2]+frame_in.strides[2]*y, 396 for (size_t y = 0; y < video_frame->height()/2; ++y)
399 frame_in.width/2, sizeof(uint8), file_yuv); 397 fwrite(video_frame->data(2) + video_frame->stride(2)*y,
398 video_frame->width() / 2, sizeof(uint8), file_yuv);
400 fclose(file_yuv); 399 fclose(file_yuv);
401 400
402 #if TESTING 401 #if TESTING
403 static int frame_dump_count = 0; 402 static int frame_dump_count = 0;
404 char outputbuf[512]; 403 char outputbuf[512];
405 _snprintf_s(outputbuf, sizeof(outputbuf), "yuvdump %4d %dx%d stride %d\n", 404 _snprintf_s(outputbuf, sizeof(outputbuf), "yuvdump %4d %dx%d stride %d\n",
406 frame_dump_count, frame_in.width, frame_in.height, 405 frame_dump_count, video_frame->width(),
407 frame_in.strides[0]); 406 video_frame->height(),
407 video_frame->stride(0));
408 OutputDebugStringA(outputbuf); 408 OutputDebugStringA(outputbuf);
409 ++frame_dump_count; 409 ++frame_dump_count;
410 #endif 410 #endif
411 } 411 }
412 } 412 }
413 413
414 media::VideoFrame* last_frame_; 414 media::VideoFrame* last_frame_;
415 base::TimeDelta last_timestamp_; 415 base::TimeDelta last_timestamp_;
416 416
417 DISALLOW_COPY_AND_ASSIGN(WtlVideoWindow); 417 DISALLOW_COPY_AND_ASSIGN(WtlVideoWindow);
418 }; 418 };
419 419
420 #endif // MEDIA_TOOLS_PLAYER_WTL_VIEW_H_ 420 #endif // MEDIA_TOOLS_PLAYER_WTL_VIEW_H_
OLDNEW
« no previous file with comments | « media/media.gyp ('k') | media/tools/player_x11/x11_video_renderer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698