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

Unified Diff: ppapi/examples/media_stream_video/media_stream_video.cc

Issue 212533007: Sync NaCl MediaStream Video example with ppapi/examples/media_stream_video (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix review issue Created 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « native_client_sdk/src/examples/api/media_stream_video/media_stream_video.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ppapi/examples/media_stream_video/media_stream_video.cc
diff --git a/ppapi/examples/media_stream_video/media_stream_video.cc b/ppapi/examples/media_stream_video/media_stream_video.cc
index adb1ebab3307a60a4a2f01353d4f7748742d6890..727077bfdd353fdb05f7bb7c7646bd038e2683e5 100644
--- a/ppapi/examples/media_stream_video/media_stream_video.cc
+++ b/ppapi/examples/media_stream_video/media_stream_video.cc
@@ -2,6 +2,10 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include <GLES2/gl2.h>
+#include <GLES2/gl2ext.h>
+#include <string.h>
+
#include <vector>
#include "ppapi/c/pp_errors.h"
@@ -15,8 +19,7 @@
#include "ppapi/cpp/rect.h"
#include "ppapi/cpp/var.h"
#include "ppapi/cpp/video_frame.h"
-#include "ppapi/lib/gl/include/GLES2/gl2.h"
-#include "ppapi/lib/gl/include/GLES2/gl2ext.h"
+#include "ppapi/lib/gl/gles2/gl2ext_ppapi.h"
#include "ppapi/utility/completion_callback_factory.h"
// When compiling natively on Windows, PostMessage can be #define-d to
@@ -28,7 +31,7 @@
// Assert |context_| isn't holding any GL Errors. Done as a macro instead of a
// function to preserve line number information in the failure message.
#define AssertNoGLError() \
- PP_DCHECK(!gles2_if_->GetError(context_->pp_resource()));
+ PP_DCHECK(!glGetError());
namespace {
@@ -69,7 +72,7 @@ class MediaStreamVideoDemoInstance : public pp::Instance,
void InitGL();
GLuint CreateTexture(int32_t width, int32_t height, int unit, bool rgba);
void CreateGLObjects();
- void CreateShader(GLuint program, GLenum type, const char* source, int size);
+ void CreateShader(GLuint program, GLenum type, const char* source);
void PaintFinished(int32_t result);
void CreateTextures();
void ConfigureTrack();
@@ -100,9 +103,6 @@ class MediaStreamVideoDemoInstance : public pp::Instance,
int32_t attrib_width_;
int32_t attrib_height_;
- // Unowned pointers.
- const struct PPB_OpenGLES2* gles2_if_;
-
// Owned data.
pp::Graphics3D* context_;
@@ -126,9 +126,10 @@ MediaStreamVideoDemoInstance::MediaStreamVideoDemoInstance(
attrib_width_(0),
attrib_height_(0),
context_(NULL) {
- gles2_if_ = static_cast<const struct PPB_OpenGLES2*>(
- module->GetBrowserInterface(PPB_OPENGLES2_INTERFACE));
- PP_DCHECK(gles2_if_);
+ if (!glInitializePPAPI(pp::Module::Get()->get_browser_interface())) {
+ LogToConsole(PP_LOGLEVEL_ERROR, pp::Var("Unable to initialize GL PPAPI!"));
+ assert(false);
+ }
}
MediaStreamVideoDemoInstance::~MediaStreamVideoDemoInstance() {
@@ -150,8 +151,10 @@ void MediaStreamVideoDemoInstance::DidChangeView(
}
void MediaStreamVideoDemoInstance::HandleMessage(const pp::Var& var_message) {
- if (!var_message.is_dictionary())
+ if (!var_message.is_dictionary()) {
+ LogToConsole(PP_LOGLEVEL_ERROR, pp::Var("Invalid message!"));
return;
+ }
pp::VarDictionary var_dictionary_message(var_message);
std::string command = var_dictionary_message.Get("command").AsString();
@@ -164,7 +167,7 @@ void MediaStreamVideoDemoInstance::HandleMessage(const pp::Var& var_message) {
video_track_ = pp::MediaStreamVideoTrack(resource_track);
ConfigureTrack();
} else if (command == "format") {
- std::string str_format = var_dictionary_message.Get("format").AsString();
+ std::string str_format = var_dictionary_message.Get("format").AsString();
if (str_format == "YV12") {
attrib_format_ = PP_VIDEOFRAME_FORMAT_YV12;
} else if (str_format == "I420") {
@@ -179,6 +182,8 @@ void MediaStreamVideoDemoInstance::HandleMessage(const pp::Var& var_message) {
attrib_width_ = var_dictionary_message.Get("width").AsInt();
attrib_height_ = var_dictionary_message.Get("height").AsInt();
need_config_ = true;
+ } else {
+ LogToConsole(PP_LOGLEVEL_ERROR, pp::Var("Invalid command!"));
}
}
@@ -203,11 +208,12 @@ void MediaStreamVideoDemoInstance::InitGL() {
context_ = new pp::Graphics3D(this, attributes);
PP_DCHECK(!context_->is_null());
+ glSetCurrentContextPPAPI(context_->pp_resource());
+
// Set viewport window size and clear color bit.
- gles2_if_->ClearColor(context_->pp_resource(), 1, 0, 0, 1);
- gles2_if_->Clear(context_->pp_resource(), GL_COLOR_BUFFER_BIT);
- gles2_if_->Viewport(context_->pp_resource(), 0, 0,
- position_size_.width(), position_size_.height());
+ glClearColor(1, 0, 0, 1);
+ glClear(GL_COLOR_BUFFER_BIT);
+ glViewport(0, 0, position_size_.width(), position_size_.height());
BindGraphics(*context_);
AssertNoGLError();
@@ -216,66 +222,50 @@ void MediaStreamVideoDemoInstance::InitGL() {
}
void MediaStreamVideoDemoInstance::DrawYUV() {
- PP_Resource context = context_->pp_resource();
static const float kColorMatrix[9] = {
1.1643828125f, 1.1643828125f, 1.1643828125f,
0.0f, -0.39176171875f, 2.017234375f,
1.59602734375f, -0.81296875f, 0.0f
};
- gles2_if_->UseProgram(context, program_yuv_);
- gles2_if_->Uniform1i(context, gles2_if_->GetUniformLocation(
- context, program_yuv_, "y_texture"), 0);
- gles2_if_->Uniform1i(context, gles2_if_->GetUniformLocation(
- context, program_yuv_, "u_texture"), 1);
- gles2_if_->Uniform1i(context, gles2_if_->GetUniformLocation(
- context, program_yuv_, "v_texture"), 2);
- gles2_if_->UniformMatrix3fv(
- context,
- gles2_if_->GetUniformLocation(context, program_yuv_, "color_matrix"),
+ glUseProgram(program_yuv_);
+ glUniform1i(glGetUniformLocation(program_yuv_, "y_texture"), 0);
+ glUniform1i(glGetUniformLocation(program_yuv_, "u_texture"), 1);
+ glUniform1i(glGetUniformLocation(program_yuv_, "v_texture"), 2);
+ glUniformMatrix3fv(glGetUniformLocation(program_yuv_, "color_matrix"),
1, GL_FALSE, kColorMatrix);
AssertNoGLError();
- GLint pos_location = gles2_if_->GetAttribLocation(
- context, program_yuv_, "a_position");
- GLint tc_location = gles2_if_->GetAttribLocation(
- context, program_yuv_, "a_texCoord");
+ GLint pos_location = glGetAttribLocation(program_yuv_, "a_position");
+ GLint tc_location = glGetAttribLocation(program_yuv_, "a_texCoord");
AssertNoGLError();
- gles2_if_->EnableVertexAttribArray(context, pos_location);
- gles2_if_->VertexAttribPointer(context, pos_location, 2,
- GL_FLOAT, GL_FALSE, 0, 0);
- gles2_if_->EnableVertexAttribArray(context, tc_location);
- gles2_if_->VertexAttribPointer(
- context, tc_location, 2, GL_FLOAT, GL_FALSE, 0,
+ glEnableVertexAttribArray(pos_location);
+ glVertexAttribPointer(pos_location, 2, GL_FLOAT, GL_FALSE, 0, 0);
+ glEnableVertexAttribArray(tc_location);
+ glVertexAttribPointer(tc_location, 2, GL_FLOAT, GL_FALSE, 0,
static_cast<float*>(0) + 16); // Skip position coordinates.
AssertNoGLError();
- gles2_if_->DrawArrays(context, GL_TRIANGLE_STRIP, 0, 4);
+ glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
AssertNoGLError();
}
void MediaStreamVideoDemoInstance::DrawRGB() {
- PP_Resource context = context_->pp_resource();
- gles2_if_->UseProgram(context, program_rgb_);
- gles2_if_->Uniform1i(context,
- gles2_if_->GetUniformLocation(context, program_rgb_, "rgb_texture"), 3);
+ glUseProgram(program_rgb_);
+ glUniform1i(glGetUniformLocation(program_rgb_, "rgb_texture"), 3);
AssertNoGLError();
- GLint pos_location = gles2_if_->GetAttribLocation(
- context, program_rgb_, "a_position");
- GLint tc_location = gles2_if_->GetAttribLocation(
- context, program_rgb_, "a_texCoord");
+ GLint pos_location = glGetAttribLocation(program_rgb_, "a_position");
+ GLint tc_location = glGetAttribLocation(program_rgb_, "a_texCoord");
AssertNoGLError();
- gles2_if_->EnableVertexAttribArray(context, pos_location);
- gles2_if_->VertexAttribPointer(context, pos_location, 2,
- GL_FLOAT, GL_FALSE, 0, 0);
- gles2_if_->EnableVertexAttribArray(context, tc_location);
- gles2_if_->VertexAttribPointer(
- context, tc_location, 2, GL_FLOAT, GL_FALSE, 0,
+ glEnableVertexAttribArray(pos_location);
+ glVertexAttribPointer(pos_location, 2, GL_FLOAT, GL_FALSE, 0, 0);
+ glEnableVertexAttribArray(tc_location);
+ glVertexAttribPointer(tc_location, 2, GL_FLOAT, GL_FALSE, 0,
static_cast<float*>(0) + 16); // Skip position coordinates.
AssertNoGLError();
- gles2_if_->DrawArrays(context, GL_TRIANGLE_STRIP, 4, 4);
+ glDrawArrays(GL_TRIANGLE_STRIP, 4, 4);
}
void MediaStreamVideoDemoInstance::Render() {
@@ -287,7 +277,7 @@ void MediaStreamVideoDemoInstance::Render() {
DrawRGB();
DrawYUV();
} else {
- gles2_if_->Clear(context_->pp_resource(), GL_COLOR_BUFFER_BIT);
+ glClear(GL_COLOR_BUFFER_BIT);
}
pp::CompletionCallback cb = callback_factory_.NewCallback(
&MediaStreamVideoDemoInstance::PaintFinished);
@@ -303,30 +293,21 @@ void MediaStreamVideoDemoInstance::PaintFinished(int32_t result) {
GLuint MediaStreamVideoDemoInstance::CreateTexture(
int32_t width, int32_t height, int unit, bool rgba) {
GLuint texture_id;
- gles2_if_->GenTextures(context_->pp_resource(), 1, &texture_id);
+ glGenTextures(1, &texture_id);
AssertNoGLError();
// Assign parameters.
- gles2_if_->ActiveTexture(context_->pp_resource(), GL_TEXTURE0 + unit);
- gles2_if_->BindTexture(context_->pp_resource(), GL_TEXTURE_2D, texture_id);
- gles2_if_->TexParameteri(
- context_->pp_resource(), GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
- GL_NEAREST);
- gles2_if_->TexParameteri(
- context_->pp_resource(), GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
- GL_NEAREST);
- gles2_if_->TexParameterf(
- context_->pp_resource(), GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,
- GL_CLAMP_TO_EDGE);
- gles2_if_->TexParameterf(
- context_->pp_resource(), GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,
- GL_CLAMP_TO_EDGE);
+ glActiveTexture(GL_TEXTURE0 + unit);
+ glBindTexture(GL_TEXTURE_2D, texture_id);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
// Allocate texture.
- gles2_if_->TexImage2D(
- context_->pp_resource(), GL_TEXTURE_2D, 0,
- rgba ? GL_BGRA_EXT : GL_LUMINANCE,
- width, height, 0,
- rgba ? GL_BGRA_EXT : GL_LUMINANCE, GL_UNSIGNED_BYTE, NULL);
+ glTexImage2D(GL_TEXTURE_2D, 0,
+ rgba ? GL_BGRA_EXT : GL_LUMINANCE,
+ width, height, 0,
+ rgba ? GL_BGRA_EXT : GL_LUMINANCE, GL_UNSIGNED_BYTE, NULL);
AssertNoGLError();
return texture_id;
}
@@ -369,23 +350,17 @@ void MediaStreamVideoDemoInstance::CreateGLObjects() {
" gl_FragColor = texture2D(rgb_texture, v_texCoord); \n"
"}";
- PP_Resource context = context_->pp_resource();
-
// Create shader programs.
- program_yuv_ = gles2_if_->CreateProgram(context);
- CreateShader(program_yuv_, GL_VERTEX_SHADER,
- kVertexShader, sizeof(kVertexShader));
- CreateShader(program_yuv_, GL_FRAGMENT_SHADER,
- kFragmentShaderYUV, sizeof(kFragmentShaderYUV));
- gles2_if_->LinkProgram(context, program_yuv_);
+ program_yuv_ = glCreateProgram();
+ CreateShader(program_yuv_, GL_VERTEX_SHADER, kVertexShader);
+ CreateShader(program_yuv_, GL_FRAGMENT_SHADER, kFragmentShaderYUV);
+ glLinkProgram(program_yuv_);
AssertNoGLError();
- program_rgb_ = gles2_if_->CreateProgram(context);
- CreateShader(program_rgb_, GL_VERTEX_SHADER,
- kVertexShader, sizeof(kVertexShader));
- CreateShader(program_rgb_, GL_FRAGMENT_SHADER,
- kFragmentShaderRGB, sizeof(kFragmentShaderRGB));
- gles2_if_->LinkProgram(context, program_rgb_);
+ program_rgb_ = glCreateProgram();
+ CreateShader(program_rgb_, GL_VERTEX_SHADER, kVertexShader);
+ CreateShader(program_rgb_, GL_FRAGMENT_SHADER, kFragmentShaderRGB);
+ glLinkProgram(program_rgb_);
AssertNoGLError();
// Assign vertex positions and texture coordinates to buffers for use in
@@ -397,21 +372,20 @@ void MediaStreamVideoDemoInstance::CreateGLObjects() {
0, 0, 0, 1, 1, 0, 1, 1, // Texture coordinates.
};
- gles2_if_->GenBuffers(context, 1, &buffer_);
- gles2_if_->BindBuffer(context, GL_ARRAY_BUFFER, buffer_);
- gles2_if_->BufferData(context, GL_ARRAY_BUFFER,
- sizeof(kVertices), kVertices, GL_STATIC_DRAW);
+ glGenBuffers(1, &buffer_);
+ glBindBuffer(GL_ARRAY_BUFFER, buffer_);
+ glBufferData(GL_ARRAY_BUFFER, sizeof(kVertices), kVertices, GL_STATIC_DRAW);
AssertNoGLError();
}
void MediaStreamVideoDemoInstance::CreateShader(
- GLuint program, GLenum type, const char* source, int size) {
- PP_Resource context = context_->pp_resource();
- GLuint shader = gles2_if_->CreateShader(context, type);
- gles2_if_->ShaderSource(context, shader, 1, &source, &size);
- gles2_if_->CompileShader(context, shader);
- gles2_if_->AttachShader(context, program, shader);
- gles2_if_->DeleteShader(context, shader);
+ GLuint program, GLenum type, const char* source) {
+ GLuint shader = glCreateShader(type);
+ GLint length = strlen(source) + 1;
+ glShaderSource(shader, 1, &source, &length);
+ glCompileShader(shader);
+ glAttachShader(program, shader);
+ glDeleteShader(shader);
}
void MediaStreamVideoDemoInstance::CreateTextures() {
@@ -420,13 +394,13 @@ void MediaStreamVideoDemoInstance::CreateTextures() {
if (width == 0 || height == 0)
return;
if (texture_y_)
- gles2_if_->DeleteTextures(context_->pp_resource(), 1, &texture_y_);
+ glDeleteTextures(1, &texture_y_);
if (texture_u_)
- gles2_if_->DeleteTextures(context_->pp_resource(), 1, &texture_u_);
+ glDeleteTextures(1, &texture_u_);
if (texture_v_)
- gles2_if_->DeleteTextures(context_->pp_resource(), 1, &texture_v_);
+ glDeleteTextures(1, &texture_v_);
if (texture_rgb_)
- gles2_if_->DeleteTextures(context_->pp_resource(), 1, &texture_rgb_);
+ glDeleteTextures(1, &texture_rgb_);
texture_y_ = CreateTexture(width, height, 0, false);
texture_u_ = CreateTexture(width / 2, height / 2, 1, false);
@@ -468,30 +442,26 @@ void MediaStreamVideoDemoInstance::OnGetFrame(
int32_t width = frame_size_.width();
int32_t height = frame_size_.height();
if (!is_bgra_) {
- gles2_if_->ActiveTexture(context_->pp_resource(), GL_TEXTURE0);
- gles2_if_->TexSubImage2D(
- context_->pp_resource(), GL_TEXTURE_2D, 0, 0, 0, width, height,
- GL_LUMINANCE, GL_UNSIGNED_BYTE, data);
+ glActiveTexture(GL_TEXTURE0);
+ glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height,
+ GL_LUMINANCE, GL_UNSIGNED_BYTE, data);
data += width * height;
width /= 2;
height /= 2;
- gles2_if_->ActiveTexture(context_->pp_resource(), GL_TEXTURE1);
- gles2_if_->TexSubImage2D(
- context_->pp_resource(), GL_TEXTURE_2D, 0, 0, 0, width, height,
- GL_LUMINANCE, GL_UNSIGNED_BYTE, data);
+ glActiveTexture(GL_TEXTURE1);
+ glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height,
+ GL_LUMINANCE, GL_UNSIGNED_BYTE, data);
data += width * height;
- gles2_if_->ActiveTexture(context_->pp_resource(), GL_TEXTURE2);
- gles2_if_->TexSubImage2D(
- context_->pp_resource(), GL_TEXTURE_2D, 0, 0, 0, width, height,
- GL_LUMINANCE, GL_UNSIGNED_BYTE, data);
+ glActiveTexture(GL_TEXTURE2);
+ glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height,
+ GL_LUMINANCE, GL_UNSIGNED_BYTE, data);
} else {
- gles2_if_->ActiveTexture(context_->pp_resource(), GL_TEXTURE3);
- gles2_if_->TexSubImage2D(
- context_->pp_resource(), GL_TEXTURE_2D, 0, 0, 0, width, height,
- GL_BGRA_EXT, GL_UNSIGNED_BYTE, data);
+ glActiveTexture(GL_TEXTURE3);
+ glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height,
+ GL_BGRA_EXT, GL_UNSIGNED_BYTE, data);
}
if (is_painting_)
« no previous file with comments | « native_client_sdk/src/examples/api/media_stream_video/media_stream_video.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698