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(media::VideoFrameMetadata::COLOR_SPACE, |
| 382 &result)) { |
| 383 if (result == media::COLOR_SPACE_JPEG) { |
| 384 yuv_matrix = yuv_to_rgb_jpeg; |
| 385 yuv_adjust = yuv_adjust_full; |
| 386 } else if (result == media::COLOR_SPACE_HD_REC709) { |
| 387 yuv_matrix = yuv_to_rgb_rec709; |
| 388 } |
| 389 } |
| 390 |
377 switch (frame->format()) { | 391 switch (frame->format()) { |
378 case media::PIXEL_FORMAT_YV12: // 420 | 392 case media::PIXEL_FORMAT_YV12: // 420 |
379 case media::PIXEL_FORMAT_YV12A: | 393 case media::PIXEL_FORMAT_YV12A: |
380 case media::PIXEL_FORMAT_I420: | 394 case media::PIXEL_FORMAT_I420: |
381 uv_height_divisor_ = 2; | 395 uv_height_divisor_ = 2; |
382 uv_width_divisor_ = 2; | 396 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::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 } | |
396 break; | 397 break; |
397 case media::PIXEL_FORMAT_YV16: // 422 | 398 case media::PIXEL_FORMAT_YV16: // 422 |
398 uv_width_divisor_ = 2; | 399 uv_width_divisor_ = 2; |
399 uv_height_divisor_ = 1; | 400 uv_height_divisor_ = 1; |
400 yuv_matrix = yuv_to_rgb_rec601; | |
401 yuv_adjust = yuv_adjust_constrained; | |
402 break; | 401 break; |
403 case media::PIXEL_FORMAT_YV24: // 444 | 402 case media::PIXEL_FORMAT_YV24: // 444 |
404 uv_width_divisor_ = 1; | 403 uv_width_divisor_ = 1; |
405 uv_height_divisor_ = 1; | 404 uv_height_divisor_ = 1; |
406 yuv_matrix = yuv_to_rgb_rec601; | |
407 yuv_adjust = yuv_adjust_constrained; | |
408 break; | 405 break; |
409 | 406 |
410 default: | 407 default: |
411 NOTREACHED(); | 408 NOTREACHED(); |
412 } | 409 } |
413 | 410 |
414 video_format_ = frame->format(); | 411 video_format_ = frame->format(); |
415 | 412 |
416 // Zero these so everything is reset below. | 413 // Zero these so everything is reset below. |
417 y_width_ = y_height_ = 0; | 414 y_width_ = y_height_ = 0; |
(...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
854 codec = media::kCodecVP8; | 851 codec = media::kCodecVP8; |
855 else if (profile <= media::VP9PROFILE_MAX) | 852 else if (profile <= media::VP9PROFILE_MAX) |
856 codec = media::kCodecVP9; | 853 codec = media::kCodecVP9; |
857 DCHECK_NE(codec, media::kUnknownVideoCodec); | 854 DCHECK_NE(codec, media::kUnknownVideoCodec); |
858 | 855 |
859 if (!yuv_converter_->Initialize()) { | 856 if (!yuv_converter_->Initialize()) { |
860 return false; | 857 return false; |
861 } | 858 } |
862 | 859 |
863 media::VideoDecoderConfig config( | 860 media::VideoDecoderConfig config( |
864 codec, profile, media::PIXEL_FORMAT_YV12, | 861 codec, profile, media::PIXEL_FORMAT_YV12, media::COLOR_SPACE_UNSPECIFIED, |
865 gfx::Size(32, 24), // Small sizes that won't fail. | 862 gfx::Size(32, 24), // Small sizes that won't fail. |
866 gfx::Rect(32, 24), gfx::Size(32, 24), | 863 gfx::Rect(32, 24), gfx::Size(32, 24), |
867 NULL /* extra_data */, // TODO(bbudge) Verify this isn't needed. | 864 NULL /* extra_data */, // TODO(bbudge) Verify this isn't needed. |
868 0 /* extra_data_size */, false /* decryption */); | 865 0 /* extra_data_size */, false /* decryption */); |
869 | 866 |
870 media_task_runner_->PostTask( | 867 media_task_runner_->PostTask( |
871 FROM_HERE, | 868 FROM_HERE, |
872 base::Bind(&VideoDecoderShim::DecoderImpl::Initialize, | 869 base::Bind(&VideoDecoderShim::DecoderImpl::Initialize, |
873 base::Unretained(decoder_impl_.get()), | 870 base::Unretained(decoder_impl_.get()), |
874 config)); | 871 config)); |
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1090 void VideoDecoderShim::DeleteTexture(uint32_t texture_id) { | 1087 void VideoDecoderShim::DeleteTexture(uint32_t texture_id) { |
1091 gpu::gles2::GLES2Interface* gles2 = context_provider_->ContextGL(); | 1088 gpu::gles2::GLES2Interface* gles2 = context_provider_->ContextGL(); |
1092 gles2->DeleteTextures(1, &texture_id); | 1089 gles2->DeleteTextures(1, &texture_id); |
1093 } | 1090 } |
1094 | 1091 |
1095 void VideoDecoderShim::FlushCommandBuffer() { | 1092 void VideoDecoderShim::FlushCommandBuffer() { |
1096 context_provider_->ContextGL()->Flush(); | 1093 context_provider_->ContextGL()->Flush(); |
1097 } | 1094 } |
1098 | 1095 |
1099 } // namespace content | 1096 } // namespace content |
OLD | NEW |