Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / ppapi / cpp / video_decoder.cc
index 3277a21..85654c1 100644 (file)
@@ -20,6 +20,11 @@ const char* interface_name<PPB_VideoDecoder_0_1>() {
   return PPB_VIDEODECODER_INTERFACE_0_1;
 }
 
+template <>
+const char* interface_name<PPB_VideoDecoder_0_2>() {
+  return PPB_VIDEODECODER_INTERFACE_0_2;
+}
+
 }  // namespace
 
 VideoDecoder::VideoDecoder() {
@@ -37,14 +42,26 @@ VideoDecoder::VideoDecoder(const VideoDecoder& other) : Resource(other) {
 
 int32_t VideoDecoder::Initialize(const Graphics3D& context,
                                  PP_VideoProfile profile,
-                                 bool allow_software_fallback,
+                                 PP_HardwareAcceleration acceleration,
                                  const CompletionCallback& cc) {
+  if (has_interface<PPB_VideoDecoder_0_2>()) {
+    return get_interface<PPB_VideoDecoder_0_2>()->Initialize(
+        pp_resource(),
+        context.pp_resource(),
+        profile,
+        acceleration,
+        cc.pp_completion_callback());
+  }
   if (has_interface<PPB_VideoDecoder_0_1>()) {
+    if (acceleration == PP_HARDWAREACCELERATION_NONE)
+      return cc.MayForce(PP_ERROR_NOTSUPPORTED);
     return get_interface<PPB_VideoDecoder_0_1>()->Initialize(
         pp_resource(),
         context.pp_resource(),
         profile,
-        PP_FromBool(allow_software_fallback),
+        acceleration == PP_HARDWAREACCELERATION_WITHFALLBACK
+            ? PP_TRUE
+            : PP_FALSE,
         cc.pp_completion_callback());
   }
   return cc.MayForce(PP_ERROR_NOINTERFACE);
@@ -54,6 +71,10 @@ int32_t VideoDecoder::Decode(uint32_t decode_id,
                              uint32_t size,
                              const void* buffer,
                              const CompletionCallback& cc) {
+  if (has_interface<PPB_VideoDecoder_0_2>()) {
+    return get_interface<PPB_VideoDecoder_0_2>()->Decode(
+        pp_resource(), decode_id, size, buffer, cc.pp_completion_callback());
+  }
   if (has_interface<PPB_VideoDecoder_0_1>()) {
     return get_interface<PPB_VideoDecoder_0_1>()->Decode(
         pp_resource(), decode_id, size, buffer, cc.pp_completion_callback());
@@ -63,6 +84,10 @@ int32_t VideoDecoder::Decode(uint32_t decode_id,
 
 int32_t VideoDecoder::GetPicture(
     const CompletionCallbackWithOutput<PP_VideoPicture>& cc) {
+  if (has_interface<PPB_VideoDecoder_0_2>()) {
+    return get_interface<PPB_VideoDecoder_0_2>()->GetPicture(
+        pp_resource(), cc.output(), cc.pp_completion_callback());
+  }
   if (has_interface<PPB_VideoDecoder_0_1>()) {
     return get_interface<PPB_VideoDecoder_0_1>()->GetPicture(
         pp_resource(), cc.output(), cc.pp_completion_callback());
@@ -71,13 +96,20 @@ int32_t VideoDecoder::GetPicture(
 }
 
 void VideoDecoder::RecyclePicture(const PP_VideoPicture& picture) {
-  if (has_interface<PPB_VideoDecoder_0_1>()) {
+  if (has_interface<PPB_VideoDecoder_0_2>()) {
+    get_interface<PPB_VideoDecoder_0_2>()->RecyclePicture(pp_resource(),
+                                                          &picture);
+  } else if (has_interface<PPB_VideoDecoder_0_1>()) {
     get_interface<PPB_VideoDecoder_0_1>()->RecyclePicture(pp_resource(),
                                                           &picture);
   }
 }
 
 int32_t VideoDecoder::Flush(const CompletionCallback& cc) {
+  if (has_interface<PPB_VideoDecoder_0_2>()) {
+    return get_interface<PPB_VideoDecoder_0_2>()->Flush(
+        pp_resource(), cc.pp_completion_callback());
+  }
   if (has_interface<PPB_VideoDecoder_0_1>()) {
     return get_interface<PPB_VideoDecoder_0_1>()->Flush(
         pp_resource(), cc.pp_completion_callback());
@@ -86,6 +118,10 @@ int32_t VideoDecoder::Flush(const CompletionCallback& cc) {
 }
 
 int32_t VideoDecoder::Reset(const CompletionCallback& cc) {
+  if (has_interface<PPB_VideoDecoder_0_2>()) {
+    return get_interface<PPB_VideoDecoder_0_2>()->Reset(
+        pp_resource(), cc.pp_completion_callback());
+  }
   if (has_interface<PPB_VideoDecoder_0_1>()) {
     return get_interface<PPB_VideoDecoder_0_1>()->Reset(
         pp_resource(), cc.pp_completion_callback());