Index: ppapi/cpp/dev/video_decoder_dev.cc |
diff --git a/ppapi/cpp/dev/video_decoder_dev.cc b/ppapi/cpp/dev/video_decoder_dev.cc |
index 504530a29616642ddb08da314695e13f02a0d2cb..b98ddcc46bc5082deaba2dd2995e1cce93c1ad85 100644 |
--- a/ppapi/cpp/dev/video_decoder_dev.cc |
+++ b/ppapi/cpp/dev/video_decoder_dev.cc |
@@ -12,8 +12,6 @@ |
#include "ppapi/cpp/module.h" |
#include "ppapi/cpp/module_impl.h" |
-using std::vector; |
- |
namespace pp { |
namespace { |
@@ -24,64 +22,87 @@ template <> const char* interface_name<PPB_VideoDecoder_Dev>() { |
} // namespace |
-VideoDecoder::VideoDecoder(const Instance* /* instance */, |
- const std::vector<uint32_t>& /* config */, |
- CompletionCallback /* callback */, |
+VideoDecoder::VideoDecoder(const Instance* instance, |
+ const std::vector<PP_VideoConfigElement>& config, |
+ CompletionCallback callback, |
Client* client) |
: client_(client) { |
if (!has_interface<PPB_VideoDecoder_Dev>()) |
return; |
- // TODO(vmr): Implement. |
+ PassRefFromConstructor(get_interface<PPB_VideoDecoder_Dev>()->Create( |
+ instance->pp_instance(), &config[0], callback.pp_completion_callback())); |
} |
VideoDecoder::~VideoDecoder() {} |
-vector<uint32_t> VideoDecoder::GetConfigs( |
- Instance* /* instance */, |
- const vector<uint32_t>& /* prototype_config */) { |
- // TODO(vmr): Implement. |
- vector<uint32_t> matching_configs; |
+std::vector<PP_VideoConfigElement> VideoDecoder::GetConfigs( |
+ Instance* instance, |
+ const std::vector<PP_VideoConfigElement>& prototype_config) { |
+ std::vector<PP_VideoConfigElement> matching_configs; |
if (!has_interface<PPB_VideoDecoder_Dev>()) |
return matching_configs; |
+ if (prototype_config.size() == 0) |
+ return matching_configs; |
+ |
+ // First ask the number of matching configs. |
+ uint32_t num_of_matching_configs = 0; |
+ get_interface<PPB_VideoDecoder_Dev>()->GetConfigs( |
+ instance->pp_instance(), &prototype_config[0], NULL, 0, |
+ &num_of_matching_configs); |
+ if (num_of_matching_configs == 0) |
+ return matching_configs; |
+ |
+ // Then ask the actually matching configs and return them in the vector. |
+ matching_configs.resize(num_of_matching_configs); |
+ get_interface<PPB_VideoDecoder_Dev>()->GetConfigs( |
+ instance->pp_instance(), &prototype_config[0], &matching_configs[0], |
+ num_of_matching_configs, &num_of_matching_configs); |
return matching_configs; |
} |
-void VideoDecoder::AssignGLESBuffers(uint32_t /* no_of_buffers */, |
- const PP_GLESBuffer_Dev& /* buffers */) { |
- // TODO(vmr): Implement. |
+void VideoDecoder::AssignGLESBuffers( |
+ const std::vector<PP_GLESBuffer_Dev>& buffers) { |
+ if (!has_interface<PPB_VideoDecoder_Dev>() || !pp_resource()) |
+ return; |
+ get_interface<PPB_VideoDecoder_Dev>()->AssignGLESBuffers( |
+ pp_resource(), buffers.size(), &buffers[0]); |
} |
void VideoDecoder::AssignSysmemBuffers( |
- uint32_t /* no_of_buffers */, |
- const PP_SysmemBuffer_Dev& /* buffers */) { |
- // TODO(vmr): Implement. |
+ const std::vector<PP_SysmemBuffer_Dev>& buffers) { |
+ if (!has_interface<PPB_VideoDecoder_Dev>() || !pp_resource()) |
+ return; |
+ get_interface<PPB_VideoDecoder_Dev>()->AssignSysmemBuffers( |
+ pp_resource(), buffers.size(), &buffers[0]); |
} |
-bool VideoDecoder::Decode( |
- const PP_VideoBitstreamBuffer_Dev& /* bitstream_buffer */, |
- CompletionCallback /* callback */) { |
- // TODO(vmr): Implement. |
+bool VideoDecoder::Decode(const PP_VideoBitstreamBuffer_Dev& bitstream_buffer, |
+ CompletionCallback callback) { |
if (!has_interface<PPB_VideoDecoder_Dev>() || !pp_resource()) |
return false; |
- return false; |
+ return PPBoolToBool(get_interface<PPB_VideoDecoder_Dev>()->Decode( |
+ pp_resource(), &bitstream_buffer, callback.pp_completion_callback())); |
} |
-void VideoDecoder::ReusePictureBuffer(int32_t /* picture_buffer_id */) { |
- // TODO(vmr): Implement. |
+void VideoDecoder::ReusePictureBuffer(int32_t picture_buffer_id) { |
+ if (!has_interface<PPB_VideoDecoder_Dev>() || !pp_resource()) |
+ return; |
+ get_interface<PPB_VideoDecoder_Dev>()->ReusePictureBuffer( |
+ pp_resource(), picture_buffer_id); |
} |
-bool VideoDecoder::Flush(CompletionCallback /* callback */) { |
- // TODO(vmr): Implement. |
- if (!has_interface<PPB_VideoDecoder_Dev>()) |
+bool VideoDecoder::Flush(CompletionCallback callback) { |
+ if (!has_interface<PPB_VideoDecoder_Dev>() || !pp_resource()) |
return false; |
- return true; |
+ return PPBoolToBool(get_interface<PPB_VideoDecoder_Dev>()->Flush( |
+ pp_resource(), callback.pp_completion_callback())); |
} |
-bool VideoDecoder::Abort(CompletionCallback /* callback */) { |
- // TODO(vmr): Implement. |
- if (!has_interface<PPB_VideoDecoder_Dev>()) |
+bool VideoDecoder::Abort(CompletionCallback callback) { |
+ if (!has_interface<PPB_VideoDecoder_Dev>() || !pp_resource()) |
return false; |
- return true; |
+ return PPBoolToBool(get_interface<PPB_VideoDecoder_Dev>()->Abort( |
+ pp_resource(), callback.pp_completion_callback())); |
} |
} // namespace pp |