| 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 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 305 format_ = GL_LUMINANCE; | 305 format_ = GL_LUMINANCE; |
| 306 } | 306 } |
| 307 | 307 |
| 308 if (context_provider_->ContextCapabilities().gpu.max_texture_image_units < | 308 if (context_provider_->ContextCapabilities().gpu.max_texture_image_units < |
| 309 4) { | 309 4) { |
| 310 // We support YUVA textures and require 4 texture units in the fragment | 310 // We support YUVA textures and require 4 texture units in the fragment |
| 311 // stage. | 311 // stage. |
| 312 return false; | 312 return false; |
| 313 } | 313 } |
| 314 | 314 |
| 315 gl_->PushGroupMarkerEXT(0, "YUVConverterContext"); | 315 gl_->TraceBeginCHROMIUM("YUVConverter", "YUVConverterContext"); |
| 316 | |
| 317 gl_->GenFramebuffers(1, &frame_buffer_); | 316 gl_->GenFramebuffers(1, &frame_buffer_); |
| 318 | 317 |
| 319 y_texture_ = CreateTexture(); | 318 y_texture_ = CreateTexture(); |
| 320 u_texture_ = CreateTexture(); | 319 u_texture_ = CreateTexture(); |
| 321 v_texture_ = CreateTexture(); | 320 v_texture_ = CreateTexture(); |
| 322 a_texture_ = CreateTexture(); | 321 a_texture_ = CreateTexture(); |
| 323 | 322 |
| 324 // Vertex positions. Also converted to texcoords in vertex shader. | 323 // Vertex positions. Also converted to texcoords in vertex shader. |
| 325 GLfloat vertex_positions[] = {-1.f, -1.f, 1.f, -1.f, -1.f, 1.f, 1.f, 1.f}; | 324 GLfloat vertex_positions[] = {-1.f, -1.f, 1.f, -1.f, -1.f, 1.f, 1.f, 1.f}; |
| 326 | 325 |
| 327 gl_->GenBuffers(1, &vertex_buffer_); | 326 gl_->GenBuffers(1, &vertex_buffer_); |
| 328 gl_->BindBuffer(GL_ARRAY_BUFFER, vertex_buffer_); | 327 gl_->BindBuffer(GL_ARRAY_BUFFER, vertex_buffer_); |
| 329 gl_->BufferData(GL_ARRAY_BUFFER, 2 * sizeof(GLfloat) * 4, vertex_positions, | 328 gl_->BufferData(GL_ARRAY_BUFFER, 2 * sizeof(GLfloat) * 4, vertex_positions, |
| 330 GL_STATIC_DRAW); | 329 GL_STATIC_DRAW); |
| 331 gl_->BindBuffer(GL_ARRAY_BUFFER, 0); | 330 gl_->BindBuffer(GL_ARRAY_BUFFER, 0); |
| 332 | 331 |
| 333 program_ = CreateShader(); | 332 program_ = CreateShader(); |
| 334 | 333 |
| 335 gl_->PopGroupMarkerEXT(); | 334 gl_->TraceEndCHROMIUM(); |
| 336 | 335 |
| 337 context_provider_->InvalidateGrContext(kGrInvalidateState); | 336 context_provider_->InvalidateGrContext(kGrInvalidateState); |
| 338 | 337 |
| 339 return (program_ != 0); | 338 return (program_ != 0); |
| 340 } | 339 } |
| 341 | 340 |
| 342 void VideoDecoderShim::YUVConverter::Convert( | 341 void VideoDecoderShim::YUVConverter::Convert( |
| 343 const scoped_refptr<media::VideoFrame>& frame, | 342 const scoped_refptr<media::VideoFrame>& frame, |
| 344 GLuint tex_out) { | 343 GLuint tex_out) { |
| 345 const float* yuv_matrix = 0; | 344 const float* yuv_matrix = 0; |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 407 default: | 406 default: |
| 408 NOTREACHED(); | 407 NOTREACHED(); |
| 409 } | 408 } |
| 410 | 409 |
| 411 video_format_ = frame->format(); | 410 video_format_ = frame->format(); |
| 412 | 411 |
| 413 // Zero these so everything is reset below. | 412 // Zero these so everything is reset below. |
| 414 y_width_ = y_height_ = 0; | 413 y_width_ = y_height_ = 0; |
| 415 } | 414 } |
| 416 | 415 |
| 417 gl_->PushGroupMarkerEXT(0, "YUVConverterContext"); | 416 gl_->TraceBeginCHROMIUM("YUVConverter", "YUVConverterContext"); |
| 418 | 417 |
| 419 uint32_t ywidth = frame->coded_size().width(); | 418 uint32_t ywidth = frame->coded_size().width(); |
| 420 uint32_t yheight = frame->coded_size().height(); | 419 uint32_t yheight = frame->coded_size().height(); |
| 421 | 420 |
| 422 DCHECK_EQ(frame->stride(media::VideoFrame::kUPlane), | 421 DCHECK_EQ(frame->stride(media::VideoFrame::kUPlane), |
| 423 frame->stride(media::VideoFrame::kVPlane)); | 422 frame->stride(media::VideoFrame::kVPlane)); |
| 424 | 423 |
| 425 uint32_t ystride = frame->stride(media::VideoFrame::kYPlane); | 424 uint32_t ystride = frame->stride(media::VideoFrame::kYPlane); |
| 426 uint32_t uvstride = frame->stride(media::VideoFrame::kUPlane); | 425 uint32_t uvstride = frame->stride(media::VideoFrame::kUPlane); |
| 427 | 426 |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 558 gl_->ActiveTexture(GL_TEXTURE2); | 557 gl_->ActiveTexture(GL_TEXTURE2); |
| 559 gl_->BindTexture(GL_TEXTURE_2D, 0); | 558 gl_->BindTexture(GL_TEXTURE_2D, 0); |
| 560 | 559 |
| 561 gl_->ActiveTexture(GL_TEXTURE1); | 560 gl_->ActiveTexture(GL_TEXTURE1); |
| 562 gl_->BindTexture(GL_TEXTURE_2D, 0); | 561 gl_->BindTexture(GL_TEXTURE_2D, 0); |
| 563 | 562 |
| 564 gl_->ActiveTexture(GL_TEXTURE0); | 563 gl_->ActiveTexture(GL_TEXTURE0); |
| 565 gl_->BindTexture(GL_TEXTURE_2D, 0); | 564 gl_->BindTexture(GL_TEXTURE_2D, 0); |
| 566 gl_->PixelStorei(GL_UNPACK_ROW_LENGTH, 0); | 565 gl_->PixelStorei(GL_UNPACK_ROW_LENGTH, 0); |
| 567 | 566 |
| 568 gl_->PopGroupMarkerEXT(); | 567 gl_->TraceEndCHROMIUM(); |
| 569 | 568 |
| 570 context_provider_->InvalidateGrContext(kGrInvalidateState); | 569 context_provider_->InvalidateGrContext(kGrInvalidateState); |
| 571 } | 570 } |
| 572 | 571 |
| 573 struct VideoDecoderShim::PendingDecode { | 572 struct VideoDecoderShim::PendingDecode { |
| 574 PendingDecode(uint32_t decode_id, | 573 PendingDecode(uint32_t decode_id, |
| 575 const scoped_refptr<media::DecoderBuffer>& buffer); | 574 const scoped_refptr<media::DecoderBuffer>& buffer); |
| 576 ~PendingDecode(); | 575 ~PendingDecode(); |
| 577 | 576 |
| 578 const uint32_t decode_id; | 577 const uint32_t decode_id; |
| (...skipping 508 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1087 void VideoDecoderShim::DeleteTexture(uint32_t texture_id) { | 1086 void VideoDecoderShim::DeleteTexture(uint32_t texture_id) { |
| 1088 gpu::gles2::GLES2Interface* gles2 = context_provider_->ContextGL(); | 1087 gpu::gles2::GLES2Interface* gles2 = context_provider_->ContextGL(); |
| 1089 gles2->DeleteTextures(1, &texture_id); | 1088 gles2->DeleteTextures(1, &texture_id); |
| 1090 } | 1089 } |
| 1091 | 1090 |
| 1092 void VideoDecoderShim::FlushCommandBuffer() { | 1091 void VideoDecoderShim::FlushCommandBuffer() { |
| 1093 context_provider_->ContextGL()->Flush(); | 1092 context_provider_->ContextGL()->Flush(); |
| 1094 } | 1093 } |
| 1095 | 1094 |
| 1096 } // namespace content | 1095 } // namespace content |
| OLD | NEW |