| Index: ppapi/examples/video_decode/video_decode_dev.cc
|
| diff --git a/ppapi/examples/video_decode/video_decode_dev.cc b/ppapi/examples/video_decode/video_decode_dev.cc
|
| index d6cb592bfa13e6ea46cc90e769d44652aeb5dee8..99af7215355b8d38f79d0c74f4d9b4cd2f9041f5 100644
|
| --- a/ppapi/examples/video_decode/video_decode_dev.cc
|
| +++ b/ppapi/examples/video_decode/video_decode_dev.cc
|
| @@ -35,8 +35,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() \
|
| - assert(!gles2_if_->GetError(context_->pp_resource()));
|
| +#define assertNoGLError() assert(!gles2_if_->GetError(context_->pp_resource()));
|
|
|
| namespace {
|
|
|
| @@ -46,8 +45,7 @@ struct PictureBufferInfo {
|
| };
|
|
|
| struct Shader {
|
| - Shader() : program(0),
|
| - texcoord_scale_location(0) {}
|
| + Shader() : program(0), texcoord_scale_location(0) {}
|
|
|
| GLuint program;
|
| GLint texcoord_scale_location;
|
| @@ -74,19 +72,20 @@ class VideoDecodeDemoInstance : public pp::Instance,
|
| }
|
|
|
| // pp::VideoDecoderClient_Dev implementation.
|
| - virtual void ProvidePictureBuffers(
|
| - PP_Resource decoder,
|
| - uint32_t req_num_of_bufs,
|
| - const PP_Size& dimensions,
|
| - uint32_t texture_target);
|
| + virtual void ProvidePictureBuffers(PP_Resource decoder,
|
| + uint32_t req_num_of_bufs,
|
| + const PP_Size& dimensions,
|
| + uint32_t texture_target);
|
| virtual void DismissPictureBuffer(PP_Resource decoder,
|
| int32_t picture_buffer_id);
|
| virtual void PictureReady(PP_Resource decoder, const PP_Picture_Dev& picture);
|
| virtual void NotifyError(PP_Resource decoder, PP_VideoDecodeError_Dev error);
|
|
|
| private:
|
| - enum { kNumConcurrentDecodes = 7,
|
| - kNumDecoders = 2 }; // Baked into viewport rendering.
|
| + enum {
|
| + kNumConcurrentDecodes = 7,
|
| + kNumDecoders = 2
|
| + }; // Baked into viewport rendering.
|
|
|
| // A single decoder's client interface.
|
| class DecoderClient {
|
| @@ -98,10 +97,9 @@ class VideoDecodeDemoInstance : public pp::Instance,
|
| void DecodeNextNALUs();
|
|
|
| // Per-decoder implementation of part of pp::VideoDecoderClient_Dev.
|
| - void ProvidePictureBuffers(
|
| - uint32_t req_num_of_bufs,
|
| - PP_Size dimensions,
|
| - uint32_t texture_target);
|
| + void ProvidePictureBuffers(uint32_t req_num_of_bufs,
|
| + PP_Size dimensions,
|
| + uint32_t texture_target);
|
| void DismissPictureBuffer(int32_t picture_buffer_id);
|
|
|
| const PictureBufferInfo& GetPictureBufferInfoById(int id);
|
| @@ -137,11 +135,11 @@ class VideoDecodeDemoInstance : public pp::Instance,
|
| void CreateGLObjects();
|
| void Create2DProgramOnce();
|
| void CreateRectangleARBProgramOnce();
|
| - Shader CreateProgram(const char* vertex_shader,
|
| - const char* fragment_shader);
|
| + Shader CreateProgram(const char* vertex_shader, const char* fragment_shader);
|
| void CreateShader(GLuint program, GLenum type, const char* source, int size);
|
| void DeleteTexture(GLuint id);
|
| - void PaintFinished(int32_t result, PP_Resource decoder,
|
| + void PaintFinished(int32_t result,
|
| + PP_Resource decoder,
|
| int picture_buffer_id);
|
|
|
| // Log an error to the developer console and stderr (though the latter may be
|
| @@ -153,14 +151,15 @@ class VideoDecodeDemoInstance : public pp::Instance,
|
| LogError(VideoDecodeDemoInstance* demo) : demo_(demo) {}
|
| ~LogError() {
|
| const std::string& msg = stream_.str();
|
| - demo_->console_if_->Log(demo_->pp_instance(), PP_LOGLEVEL_ERROR,
|
| - pp::Var(msg).pp_var());
|
| + demo_->console_if_->Log(
|
| + demo_->pp_instance(), PP_LOGLEVEL_ERROR, pp::Var(msg).pp_var());
|
| std::cerr << msg << std::endl;
|
| }
|
| // Impl note: it would have been nicer to have LogError derive from
|
| // std::ostringstream so that it can be streamed to directly, but lookup
|
| // rules turn streamed string literals to hex pointers on output.
|
| std::ostringstream& s() { return stream_; }
|
| +
|
| private:
|
| VideoDecodeDemoInstance* demo_; // Unowned.
|
| std::ostringstream stream_;
|
| @@ -194,10 +193,14 @@ class VideoDecodeDemoInstance : public pp::Instance,
|
| };
|
|
|
| VideoDecodeDemoInstance::DecoderClient::DecoderClient(
|
| - VideoDecodeDemoInstance* gles2, pp::VideoDecoder_Dev* decoder)
|
| - : gles2_(gles2), decoder_(decoder), callback_factory_(this),
|
| + VideoDecodeDemoInstance* gles2,
|
| + pp::VideoDecoder_Dev* decoder)
|
| + : gles2_(gles2),
|
| + decoder_(decoder),
|
| + callback_factory_(this),
|
| next_picture_buffer_id_(0),
|
| - next_bitstream_buffer_id_(0), encoded_data_next_pos_to_decode_(0) {
|
| + next_bitstream_buffer_id_(0),
|
| + encoded_data_next_pos_to_decode_(0) {
|
| }
|
|
|
| VideoDecodeDemoInstance::DecoderClient::~DecoderClient() {
|
| @@ -205,13 +208,15 @@ VideoDecodeDemoInstance::DecoderClient::~DecoderClient() {
|
| decoder_ = NULL;
|
|
|
| for (BitstreamBufferMap::iterator it = bitstream_buffers_by_id_.begin();
|
| - it != bitstream_buffers_by_id_.end(); ++it) {
|
| + it != bitstream_buffers_by_id_.end();
|
| + ++it) {
|
| delete it->second;
|
| }
|
| bitstream_buffers_by_id_.clear();
|
|
|
| for (PictureBufferMap::iterator it = picture_buffers_by_id_.begin();
|
| - it != picture_buffers_by_id_.end(); ++it) {
|
| + it != picture_buffers_by_id_.end();
|
| + ++it) {
|
| gles2_->DeleteTexture(it->second.buffer.texture_id);
|
| }
|
| picture_buffers_by_id_.clear();
|
| @@ -219,7 +224,8 @@ VideoDecodeDemoInstance::DecoderClient::~DecoderClient() {
|
|
|
| VideoDecodeDemoInstance::VideoDecodeDemoInstance(PP_Instance instance,
|
| pp::Module* module)
|
| - : pp::Instance(instance), pp::Graphics3DClient(this),
|
| + : pp::Instance(instance),
|
| + pp::Graphics3DClient(this),
|
| pp::VideoDecoderClient_Dev(this),
|
| is_painting_(false),
|
| num_frames_rendered_(0),
|
| @@ -228,31 +234,32 @@ VideoDecodeDemoInstance::VideoDecodeDemoInstance(PP_Instance instance,
|
| callback_factory_(this),
|
| context_(NULL) {
|
| assert((console_if_ = static_cast<const PPB_Console*>(
|
| - module->GetBrowserInterface(PPB_CONSOLE_INTERFACE))));
|
| + module->GetBrowserInterface(PPB_CONSOLE_INTERFACE))));
|
| assert((core_if_ = static_cast<const PPB_Core*>(
|
| - module->GetBrowserInterface(PPB_CORE_INTERFACE))));
|
| + module->GetBrowserInterface(PPB_CORE_INTERFACE))));
|
| assert((gles2_if_ = static_cast<const PPB_OpenGLES2*>(
|
| - module->GetBrowserInterface(PPB_OPENGLES2_INTERFACE))));
|
| + module->GetBrowserInterface(PPB_OPENGLES2_INTERFACE))));
|
| }
|
|
|
| VideoDecodeDemoInstance::~VideoDecodeDemoInstance() {
|
| if (shader_2d_.program)
|
| gles2_if_->DeleteProgram(context_->pp_resource(), shader_2d_.program);
|
| if (shader_rectangle_arb_.program) {
|
| - gles2_if_->DeleteProgram(
|
| - context_->pp_resource(), shader_rectangle_arb_.program);
|
| + gles2_if_->DeleteProgram(context_->pp_resource(),
|
| + shader_rectangle_arb_.program);
|
| }
|
|
|
| for (Decoders::iterator it = video_decoders_.begin();
|
| - it != video_decoders_.end(); ++it) {
|
| + it != video_decoders_.end();
|
| + ++it) {
|
| delete it->second;
|
| }
|
| video_decoders_.clear();
|
| delete context_;
|
| }
|
|
|
| -void VideoDecodeDemoInstance::DidChangeView(
|
| - const pp::Rect& position, const pp::Rect& clip_ignored) {
|
| +void VideoDecodeDemoInstance::DidChangeView(const pp::Rect& position,
|
| + const pp::Rect& clip_ignored) {
|
| if (position.width() == 0 || position.height() == 0)
|
| return;
|
| if (plugin_size_.width()) {
|
| @@ -270,17 +277,20 @@ void VideoDecodeDemoInstance::InitializeDecoders() {
|
| assert(video_decoders_.empty());
|
| for (int i = 0; i < kNumDecoders; ++i) {
|
| DecoderClient* client = new DecoderClient(
|
| - this, new pp::VideoDecoder_Dev(
|
| + this,
|
| + new pp::VideoDecoder_Dev(
|
| this, *context_, PP_VIDEODECODER_H264PROFILE_MAIN));
|
| assert(!client->decoder()->is_null());
|
| - assert(video_decoders_.insert(std::make_pair(
|
| - client->decoder()->pp_resource(), client)).second);
|
| + assert(
|
| + video_decoders_.insert(std::make_pair(client->decoder()->pp_resource(),
|
| + client)).second);
|
| client->DecodeNextNALUs();
|
| }
|
| }
|
|
|
| void VideoDecodeDemoInstance::DecoderClient::DecoderBitstreamDone(
|
| - int32_t result, int bitstream_buffer_id) {
|
| + int32_t result,
|
| + int bitstream_buffer_id) {
|
| assert(bitstream_ids_at_decoder_.erase(bitstream_buffer_id) == 1);
|
| BitstreamBufferMap::iterator it =
|
| bitstream_buffers_by_id_.find(bitstream_buffer_id);
|
| @@ -300,18 +310,17 @@ void VideoDecodeDemoInstance::DecoderClient::DecoderFlushDone(int32_t result) {
|
| }
|
|
|
| static bool LookingAtNAL(const unsigned char* encoded, size_t pos) {
|
| - return pos + 3 < kDataLen &&
|
| - encoded[pos] == 0 && encoded[pos + 1] == 0 &&
|
| - encoded[pos + 2] == 0 && encoded[pos + 3] == 1;
|
| + return pos + 3 < kDataLen && encoded[pos] == 0 && encoded[pos + 1] == 0 &&
|
| + encoded[pos + 2] == 0 && encoded[pos + 3] == 1;
|
| }
|
|
|
| void VideoDecodeDemoInstance::DecoderClient::GetNextNALUBoundary(
|
| - size_t start_pos, size_t* end_pos) {
|
| + size_t start_pos,
|
| + size_t* end_pos) {
|
| assert(LookingAtNAL(kData, start_pos));
|
| *end_pos = start_pos;
|
| *end_pos += 4;
|
| - while (*end_pos + 3 < kDataLen &&
|
| - !LookingAtNAL(kData, *end_pos)) {
|
| + while (*end_pos + 3 < kDataLen && !LookingAtNAL(kData, *end_pos)) {
|
| ++*end_pos;
|
| }
|
| if (*end_pos + 3 >= kDataLen) {
|
| @@ -347,9 +356,8 @@ void VideoDecodeDemoInstance::DecoderClient::DecodeNextNALU() {
|
| memcpy(buffer->data(), kData + start_pos, end_pos - start_pos);
|
| assert(bitstream_buffers_by_id_.insert(std::make_pair(id, buffer)).second);
|
|
|
| - pp::CompletionCallback cb =
|
| - callback_factory_.NewCallback(
|
| - &VideoDecodeDemoInstance::DecoderClient::DecoderBitstreamDone, id);
|
| + pp::CompletionCallback cb = callback_factory_.NewCallback(
|
| + &VideoDecodeDemoInstance::DecoderClient::DecoderBitstreamDone, id);
|
| assert(bitstream_ids_at_decoder_.insert(id).second);
|
| encoded_data_next_pos_to_decode_ = end_pos;
|
| decoder_->Decode(bitstream_buffer, cb);
|
| @@ -384,15 +392,14 @@ void VideoDecodeDemoInstance::DecoderClient::ProvidePictureBuffers(
|
| }
|
|
|
| const PictureBufferInfo&
|
| -VideoDecodeDemoInstance::DecoderClient::GetPictureBufferInfoById(
|
| - int id) {
|
| +VideoDecodeDemoInstance::DecoderClient::GetPictureBufferInfoById(int id) {
|
| PictureBufferMap::iterator it = picture_buffers_by_id_.find(id);
|
| assert(it != picture_buffers_by_id_.end());
|
| return it->second;
|
| }
|
|
|
| void VideoDecodeDemoInstance::DismissPictureBuffer(PP_Resource decoder,
|
| - int32_t picture_buffer_id) {
|
| + int32_t picture_buffer_id) {
|
| DecoderClient* client = video_decoders_[decoder];
|
| assert(client);
|
| client->DismissPictureBuffer(picture_buffer_id);
|
| @@ -400,13 +407,13 @@ void VideoDecodeDemoInstance::DismissPictureBuffer(PP_Resource decoder,
|
|
|
| void VideoDecodeDemoInstance::DecoderClient::DismissPictureBuffer(
|
| int32_t picture_buffer_id) {
|
| - gles2_->DeleteTexture(GetPictureBufferInfoById(
|
| - picture_buffer_id).buffer.texture_id);
|
| + gles2_->DeleteTexture(
|
| + GetPictureBufferInfoById(picture_buffer_id).buffer.texture_id);
|
| picture_buffers_by_id_.erase(picture_buffer_id);
|
| }
|
|
|
| void VideoDecodeDemoInstance::PictureReady(PP_Resource decoder,
|
| - const PP_Picture_Dev& picture) {
|
| + const PP_Picture_Dev& picture) {
|
| if (first_frame_delivered_ticks_ == -1)
|
| assert((first_frame_delivered_ticks_ = core_if_->GetTimeTicks()) != -1);
|
| if (is_painting_) {
|
| @@ -434,15 +441,17 @@ void VideoDecodeDemoInstance::PictureReady(PP_Resource decoder,
|
| } else {
|
| assert(info.texture_target == GL_TEXTURE_RECTANGLE_ARB);
|
| CreateRectangleARBProgramOnce();
|
| - gles2_if_->UseProgram(
|
| - context_->pp_resource(), shader_rectangle_arb_.program);
|
| + gles2_if_->UseProgram(context_->pp_resource(),
|
| + shader_rectangle_arb_.program);
|
| gles2_if_->Uniform2f(context_->pp_resource(),
|
| shader_rectangle_arb_.texcoord_scale_location,
|
| info.buffer.size.width,
|
| info.buffer.size.height);
|
| }
|
|
|
| - gles2_if_->Viewport(context_->pp_resource(), x, y,
|
| + gles2_if_->Viewport(context_->pp_resource(),
|
| + x,
|
| + y,
|
| plugin_size_.width() / kNumDecoders,
|
| plugin_size_.height() / kNumDecoders);
|
| gles2_if_->ActiveTexture(context_->pp_resource(), GL_TEXTURE0);
|
| @@ -452,9 +461,8 @@ void VideoDecodeDemoInstance::PictureReady(PP_Resource decoder,
|
|
|
| gles2_if_->UseProgram(context_->pp_resource(), 0);
|
|
|
| - pp::CompletionCallback cb =
|
| - callback_factory_.NewCallback(
|
| - &VideoDecodeDemoInstance::PaintFinished, decoder, info.buffer.id);
|
| + pp::CompletionCallback cb = callback_factory_.NewCallback(
|
| + &VideoDecodeDemoInstance::PaintFinished, decoder, info.buffer.id);
|
| last_swap_request_ticks_ = core_if_->GetTimeTicks();
|
| assert(context_->SwapBuffers(cb) == PP_OK_COMPLETIONPENDING);
|
| }
|
| @@ -483,17 +491,17 @@ void VideoDecodeDemoInstance::InitGL() {
|
|
|
| assert(!context_);
|
| int32_t context_attributes[] = {
|
| - PP_GRAPHICS3DATTRIB_ALPHA_SIZE, 8,
|
| - PP_GRAPHICS3DATTRIB_BLUE_SIZE, 8,
|
| - PP_GRAPHICS3DATTRIB_GREEN_SIZE, 8,
|
| - PP_GRAPHICS3DATTRIB_RED_SIZE, 8,
|
| - PP_GRAPHICS3DATTRIB_DEPTH_SIZE, 0,
|
| - PP_GRAPHICS3DATTRIB_STENCIL_SIZE, 0,
|
| - PP_GRAPHICS3DATTRIB_SAMPLES, 0,
|
| - PP_GRAPHICS3DATTRIB_SAMPLE_BUFFERS, 0,
|
| - PP_GRAPHICS3DATTRIB_WIDTH, plugin_size_.width(),
|
| - PP_GRAPHICS3DATTRIB_HEIGHT, plugin_size_.height(),
|
| - PP_GRAPHICS3DATTRIB_NONE,
|
| + PP_GRAPHICS3DATTRIB_ALPHA_SIZE, 8,
|
| + PP_GRAPHICS3DATTRIB_BLUE_SIZE, 8,
|
| + PP_GRAPHICS3DATTRIB_GREEN_SIZE, 8,
|
| + PP_GRAPHICS3DATTRIB_RED_SIZE, 8,
|
| + PP_GRAPHICS3DATTRIB_DEPTH_SIZE, 0,
|
| + PP_GRAPHICS3DATTRIB_STENCIL_SIZE, 0,
|
| + PP_GRAPHICS3DATTRIB_SAMPLES, 0,
|
| + PP_GRAPHICS3DATTRIB_SAMPLE_BUFFERS, 0,
|
| + PP_GRAPHICS3DATTRIB_WIDTH, plugin_size_.width(),
|
| + PP_GRAPHICS3DATTRIB_HEIGHT, plugin_size_.height(),
|
| + PP_GRAPHICS3DATTRIB_NONE,
|
| };
|
| context_ = new pp::Graphics3D(this, context_attributes);
|
| assert(!context_->is_null());
|
| @@ -508,8 +516,9 @@ void VideoDecodeDemoInstance::InitGL() {
|
| CreateGLObjects();
|
| }
|
|
|
| -void VideoDecodeDemoInstance::PaintFinished(int32_t result, PP_Resource decoder,
|
| - int picture_buffer_id) {
|
| +void VideoDecodeDemoInstance::PaintFinished(int32_t result,
|
| + PP_Resource decoder,
|
| + int picture_buffer_id) {
|
| assert(result == PP_OK);
|
| swap_ticks_ += core_if_->GetTimeTicks() - last_swap_request_ticks_;
|
| is_painting_ = false;
|
| @@ -519,8 +528,8 @@ void VideoDecodeDemoInstance::PaintFinished(int32_t result, PP_Resource decoder,
|
| double fps = (elapsed > 0) ? num_frames_rendered_ / elapsed : 1000;
|
| double ms_per_swap = (swap_ticks_ * 1e3) / num_frames_rendered_;
|
| LogError(this).s() << "Rendered frames: " << num_frames_rendered_
|
| - << ", fps: " << fps << ", with average ms/swap of: "
|
| - << ms_per_swap;
|
| + << ", fps: " << fps
|
| + << ", with average ms/swap of: " << ms_per_swap;
|
| }
|
| DecoderClient* client = video_decoders_[decoder];
|
| if (client && client->decoder())
|
| @@ -542,23 +551,34 @@ GLuint VideoDecodeDemoInstance::CreateTexture(int32_t width,
|
| // Assign parameters.
|
| gles2_if_->ActiveTexture(context_->pp_resource(), GL_TEXTURE0);
|
| gles2_if_->BindTexture(context_->pp_resource(), texture_target, texture_id);
|
| - gles2_if_->TexParameteri(
|
| - context_->pp_resource(), texture_target, GL_TEXTURE_MIN_FILTER,
|
| - GL_NEAREST);
|
| - gles2_if_->TexParameteri(
|
| - context_->pp_resource(), texture_target, GL_TEXTURE_MAG_FILTER,
|
| - GL_NEAREST);
|
| - gles2_if_->TexParameterf(
|
| - context_->pp_resource(), texture_target, GL_TEXTURE_WRAP_S,
|
| - GL_CLAMP_TO_EDGE);
|
| - gles2_if_->TexParameterf(
|
| - context_->pp_resource(), texture_target, GL_TEXTURE_WRAP_T,
|
| - GL_CLAMP_TO_EDGE);
|
| + gles2_if_->TexParameteri(context_->pp_resource(),
|
| + texture_target,
|
| + GL_TEXTURE_MIN_FILTER,
|
| + GL_NEAREST);
|
| + gles2_if_->TexParameteri(context_->pp_resource(),
|
| + texture_target,
|
| + GL_TEXTURE_MAG_FILTER,
|
| + GL_NEAREST);
|
| + gles2_if_->TexParameterf(context_->pp_resource(),
|
| + texture_target,
|
| + GL_TEXTURE_WRAP_S,
|
| + GL_CLAMP_TO_EDGE);
|
| + gles2_if_->TexParameterf(context_->pp_resource(),
|
| + texture_target,
|
| + GL_TEXTURE_WRAP_T,
|
| + GL_CLAMP_TO_EDGE);
|
|
|
| if (texture_target == GL_TEXTURE_2D) {
|
| - gles2_if_->TexImage2D(
|
| - context_->pp_resource(), texture_target, 0, GL_RGBA, width, height, 0,
|
| - GL_RGBA, GL_UNSIGNED_BYTE, NULL);
|
| + gles2_if_->TexImage2D(context_->pp_resource(),
|
| + texture_target,
|
| + 0,
|
| + GL_RGBA,
|
| + width,
|
| + height,
|
| + 0,
|
| + GL_RGBA,
|
| + GL_UNSIGNED_BYTE,
|
| + NULL);
|
| }
|
| assertNoGLError();
|
| return texture_id;
|
| @@ -572,16 +592,19 @@ void VideoDecodeDemoInstance::CreateGLObjects() {
|
| // Assign vertex positions and texture coordinates to buffers for use in
|
| // shader program.
|
| static const float kVertices[] = {
|
| - -1, 1, -1, -1, 1, 1, 1, -1, // Position coordinates.
|
| - 0, 1, 0, 0, 1, 1, 1, 0, // Texture coordinates.
|
| + -1, 1, -1, -1, 1, 1, 1, -1, // Position coordinates.
|
| + 0, 1, 0, 0, 1, 1, 1, 0, // Texture coordinates.
|
| };
|
|
|
| GLuint buffer;
|
| gles2_if_->GenBuffers(context_->pp_resource(), 1, &buffer);
|
| gles2_if_->BindBuffer(context_->pp_resource(), GL_ARRAY_BUFFER, buffer);
|
|
|
| - gles2_if_->BufferData(context_->pp_resource(), GL_ARRAY_BUFFER,
|
| - sizeof(kVertices), kVertices, GL_STATIC_DRAW);
|
| + gles2_if_->BufferData(context_->pp_resource(),
|
| + GL_ARRAY_BUFFER,
|
| + sizeof(kVertices),
|
| + kVertices,
|
| + GL_STATIC_DRAW);
|
| assertNoGLError();
|
| }
|
|
|
| @@ -633,16 +656,19 @@ Shader VideoDecodeDemoInstance::CreateProgram(const char* vertex_shader,
|
|
|
| // Create shader program.
|
| shader.program = gles2_if_->CreateProgram(context_->pp_resource());
|
| - CreateShader(shader.program, GL_VERTEX_SHADER, vertex_shader,
|
| - strlen(vertex_shader));
|
| - CreateShader(shader.program, GL_FRAGMENT_SHADER, fragment_shader,
|
| + CreateShader(
|
| + shader.program, GL_VERTEX_SHADER, vertex_shader, strlen(vertex_shader));
|
| + CreateShader(shader.program,
|
| + GL_FRAGMENT_SHADER,
|
| + fragment_shader,
|
| strlen(fragment_shader));
|
| gles2_if_->LinkProgram(context_->pp_resource(), shader.program);
|
| gles2_if_->UseProgram(context_->pp_resource(), shader.program);
|
| gles2_if_->Uniform1i(
|
| context_->pp_resource(),
|
| gles2_if_->GetUniformLocation(
|
| - context_->pp_resource(), shader.program, "s_texture"), 0);
|
| + context_->pp_resource(), shader.program, "s_texture"),
|
| + 0);
|
| assertNoGLError();
|
|
|
| shader.texcoord_scale_location = gles2_if_->GetUniformLocation(
|
| @@ -655,11 +681,16 @@ Shader VideoDecodeDemoInstance::CreateProgram(const char* vertex_shader,
|
| assertNoGLError();
|
|
|
| gles2_if_->EnableVertexAttribArray(context_->pp_resource(), pos_location);
|
| - gles2_if_->VertexAttribPointer(context_->pp_resource(), pos_location, 2,
|
| - GL_FLOAT, GL_FALSE, 0, 0);
|
| + gles2_if_->VertexAttribPointer(
|
| + context_->pp_resource(), pos_location, 2, GL_FLOAT, GL_FALSE, 0, 0);
|
| gles2_if_->EnableVertexAttribArray(context_->pp_resource(), tc_location);
|
| gles2_if_->VertexAttribPointer(
|
| - context_->pp_resource(), tc_location, 2, GL_FLOAT, GL_FALSE, 0,
|
| + context_->pp_resource(),
|
| + tc_location,
|
| + 2,
|
| + GL_FLOAT,
|
| + GL_FALSE,
|
| + 0,
|
| static_cast<float*>(0) + 8); // Skip position coordinates.
|
|
|
| gles2_if_->UseProgram(context_->pp_resource(), 0);
|
| @@ -667,8 +698,10 @@ Shader VideoDecodeDemoInstance::CreateProgram(const char* vertex_shader,
|
| return shader;
|
| }
|
|
|
| -void VideoDecodeDemoInstance::CreateShader(
|
| - GLuint program, GLenum type, const char* source, int size) {
|
| +void VideoDecodeDemoInstance::CreateShader(GLuint program,
|
| + GLenum type,
|
| + const char* source,
|
| + int size) {
|
| GLuint shader = gles2_if_->CreateShader(context_->pp_resource(), type);
|
| gles2_if_->ShaderSource(context_->pp_resource(), shader, 1, &source, &size);
|
| gles2_if_->CompileShader(context_->pp_resource(), shader);
|
|
|