OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "content/renderer/pepper/video_decoder_shim.h" | 5 #include "content/renderer/pepper/video_decoder_shim.h" |
6 | 6 |
7 #include <GLES2/gl2.h> | 7 #include <GLES2/gl2.h> |
8 #include <GLES2/gl2ext.h> | 8 #include <GLES2/gl2ext.h> |
9 #include <GLES2/gl2extchromium.h> | 9 #include <GLES2/gl2extchromium.h> |
10 | 10 |
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
367 // U - 128 : Turns unsigned U into signed U [-128,127] | 367 // U - 128 : Turns unsigned U into signed U [-128,127] |
368 // V - 128 : Turns unsigned V into signed V [-128,127] | 368 // V - 128 : Turns unsigned V into signed V [-128,127] |
369 const float yuv_adjust_constrained[3] = { | 369 const float yuv_adjust_constrained[3] = { |
370 -0.0625f, -0.5f, -0.5f, | 370 -0.0625f, -0.5f, -0.5f, |
371 }; | 371 }; |
372 // Same as above, but without the head and footroom. | 372 // Same as above, but without the head and footroom. |
373 const float yuv_adjust_full[3] = { | 373 const float yuv_adjust_full[3] = { |
374 0.0f, -0.5f, -0.5f, | 374 0.0f, -0.5f, -0.5f, |
375 }; | 375 }; |
376 | 376 |
377 yuv_adjust = yuv_adjust_constrained; | |
378 yuv_matrix = yuv_to_rgb_rec601; | |
379 | |
380 int result; | |
381 if (frame->metadata()->GetInteger( | |
382 media::VideoFrameMetadata::COLOR_SPACE, &result)) { | |
383 if (result == media::VideoFrame::COLOR_SPACE_JPEG) { | |
384 yuv_matrix = yuv_to_rgb_jpeg; | |
385 yuv_adjust = yuv_adjust_full; | |
386 } else if (result == media::VideoFrame::COLOR_SPACE_HD_REC709) { | |
387 yuv_matrix = yuv_to_rgb_rec709; | |
388 } | |
389 } | |
390 | |
391 switch (frame->format()) { | 377 switch (frame->format()) { |
392 case media::VideoFrame::YV12: // 420 | 378 case media::VideoFrame::YV12: // 420 |
393 case media::VideoFrame::YV12A: | 379 case media::VideoFrame::YV12A: |
394 case media::VideoFrame::I420: | 380 case media::VideoFrame::I420: |
395 uv_height_divisor_ = 2; | 381 uv_height_divisor_ = 2; |
396 uv_width_divisor_ = 2; | 382 uv_width_divisor_ = 2; |
| 383 yuv_adjust = yuv_adjust_constrained; |
| 384 int result; |
| 385 if (frame->metadata()->GetInteger( |
| 386 media::VideoFrameMetadata::COLOR_SPACE, &result)) { |
| 387 if (result == media::VideoFrame::COLOR_SPACE_JPEG) { |
| 388 yuv_matrix = yuv_to_rgb_jpeg; |
| 389 yuv_adjust = yuv_adjust_full; |
| 390 } else { |
| 391 yuv_matrix = yuv_to_rgb_rec709; |
| 392 } |
| 393 } else { |
| 394 yuv_matrix = yuv_to_rgb_rec601; |
| 395 } |
397 break; | 396 break; |
398 case media::VideoFrame::YV16: // 422 | 397 case media::VideoFrame::YV16: // 422 |
399 uv_width_divisor_ = 2; | 398 uv_width_divisor_ = 2; |
400 uv_height_divisor_ = 1; | 399 uv_height_divisor_ = 1; |
| 400 yuv_matrix = yuv_to_rgb_rec601; |
| 401 yuv_adjust = yuv_adjust_constrained; |
401 break; | 402 break; |
402 case media::VideoFrame::YV24: // 444 | 403 case media::VideoFrame::YV24: // 444 |
403 uv_width_divisor_ = 1; | 404 uv_width_divisor_ = 1; |
404 uv_height_divisor_ = 1; | 405 uv_height_divisor_ = 1; |
| 406 yuv_matrix = yuv_to_rgb_rec601; |
| 407 yuv_adjust = yuv_adjust_constrained; |
405 break; | 408 break; |
406 | 409 |
407 default: | 410 default: |
408 NOTREACHED(); | 411 NOTREACHED(); |
409 } | 412 } |
410 | 413 |
411 video_format_ = frame->format(); | 414 video_format_ = frame->format(); |
412 | 415 |
413 // Zero these so everything is reset below. | 416 // Zero these so everything is reset below. |
414 y_width_ = y_height_ = 0; | 417 y_width_ = y_height_ = 0; |
(...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
854 DCHECK_NE(codec, media::kUnknownVideoCodec); | 857 DCHECK_NE(codec, media::kUnknownVideoCodec); |
855 | 858 |
856 if (!yuv_converter_->Initialize()) { | 859 if (!yuv_converter_->Initialize()) { |
857 return false; | 860 return false; |
858 } | 861 } |
859 | 862 |
860 media::VideoDecoderConfig config( | 863 media::VideoDecoderConfig config( |
861 codec, | 864 codec, |
862 profile, | 865 profile, |
863 media::VideoFrame::YV12, | 866 media::VideoFrame::YV12, |
864 media::VideoFrame::COLOR_SPACE_UNSPECIFIED, | |
865 gfx::Size(32, 24), // Small sizes that won't fail. | 867 gfx::Size(32, 24), // Small sizes that won't fail. |
866 gfx::Rect(32, 24), | 868 gfx::Rect(32, 24), |
867 gfx::Size(32, 24), | 869 gfx::Size(32, 24), |
868 NULL /* extra_data */, // TODO(bbudge) Verify this isn't needed. | 870 NULL /* extra_data */, // TODO(bbudge) Verify this isn't needed. |
869 0 /* extra_data_size */, | 871 0 /* extra_data_size */, |
870 false /* decryption */); | 872 false /* decryption */); |
871 | 873 |
872 media_task_runner_->PostTask( | 874 media_task_runner_->PostTask( |
873 FROM_HERE, | 875 FROM_HERE, |
874 base::Bind(&VideoDecoderShim::DecoderImpl::Initialize, | 876 base::Bind(&VideoDecoderShim::DecoderImpl::Initialize, |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1092 void VideoDecoderShim::DeleteTexture(uint32_t texture_id) { | 1094 void VideoDecoderShim::DeleteTexture(uint32_t texture_id) { |
1093 gpu::gles2::GLES2Interface* gles2 = context_provider_->ContextGL(); | 1095 gpu::gles2::GLES2Interface* gles2 = context_provider_->ContextGL(); |
1094 gles2->DeleteTextures(1, &texture_id); | 1096 gles2->DeleteTextures(1, &texture_id); |
1095 } | 1097 } |
1096 | 1098 |
1097 void VideoDecoderShim::FlushCommandBuffer() { | 1099 void VideoDecoderShim::FlushCommandBuffer() { |
1098 context_provider_->ContextGL()->Flush(); | 1100 context_provider_->ContextGL()->Flush(); |
1099 } | 1101 } |
1100 | 1102 |
1101 } // namespace content | 1103 } // namespace content |
OLD | NEW |