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

Side by Side Diff: ppapi/cpp/video_decoder.cc

Issue 703753002: Pepper: Expose visible_rect to PPB_VideoDecoder.GetPicture. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 1 month 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2014 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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 "ppapi/cpp/video_decoder.h" 5 #include "ppapi/cpp/video_decoder.h"
6 6
7 #include "ppapi/c/pp_errors.h" 7 #include "ppapi/c/pp_errors.h"
8 #include "ppapi/c/ppb_video_decoder.h" 8 #include "ppapi/c/ppb_video_decoder.h"
9 #include "ppapi/cpp/completion_callback.h" 9 #include "ppapi/cpp/completion_callback.h"
10 #include "ppapi/cpp/instance_handle.h" 10 #include "ppapi/cpp/instance_handle.h"
11 #include "ppapi/cpp/module.h" 11 #include "ppapi/cpp/module.h"
12 #include "ppapi/cpp/module_impl.h" 12 #include "ppapi/cpp/module_impl.h"
13 13
14 namespace pp { 14 namespace pp {
15 15
16 namespace { 16 namespace {
17 17
18 template <> 18 template <>
19 const char* interface_name<PPB_VideoDecoder_0_1>() { 19 const char* interface_name<PPB_VideoDecoder_0_1>() {
20 return PPB_VIDEODECODER_INTERFACE_0_1; 20 return PPB_VIDEODECODER_INTERFACE_0_1;
21 } 21 }
22 22
23 template <> 23 template <>
24 const char* interface_name<PPB_VideoDecoder_0_2>() { 24 const char* interface_name<PPB_VideoDecoder_0_2>() {
25 return PPB_VIDEODECODER_INTERFACE_0_2; 25 return PPB_VIDEODECODER_INTERFACE_0_2;
26 } 26 }
27 27
28 template <>
29 const char* interface_name<PPB_VideoDecoder_1_0>() {
30 return PPB_VIDEODECODER_INTERFACE_1_0;
31 }
32
33 // This struct is used to adapt CompletionCallbackWithOutput<PP_VideoPicture> to
34 // the pre-1.0 APIs, which return PP_VideoPicture_0_1. This struct is allocated
35 // on the heap, and deleted in CallbackConverter.
36 struct CallbackData_0_1 {
37 explicit CallbackData_0_1(
38 const CompletionCallbackWithOutput<PP_VideoPicture>& cc)
39 : original_picture(cc.output()),
40 original_callback(cc.pp_completion_callback()) {}
41 PP_VideoPicture_0_1 picture;
42 PP_VideoPicture* original_picture;
43 PP_CompletionCallback original_callback;
44 };
45
46 // Convert a 1.0 style callback to pre-1.0 callback.
47 void CallbackConverter(void* user_data, int32_t result) {
48 CallbackData_0_1* data = static_cast<CallbackData_0_1*>(user_data);
49 if (result == PP_OK) {
50 PP_VideoPicture_0_1* picture = &data->picture;
51 PP_VideoPicture* original_picture = data->original_picture;
52 original_picture->decode_id = picture->decode_id;
53 original_picture->texture_id = picture->texture_id;
54 original_picture->texture_target = picture->texture_target;
55 original_picture->texture_size = picture->texture_size;
56 // Set visible_rect to the entire picture.
57 original_picture->visible_rect = PP_MakeRectFromXYWH(
58 0, 0, picture->texture_size.width, picture->texture_size.height);
59 }
60
61 // Now execute the original callback.
62 PP_RunCompletionCallback(&data->original_callback, result);
63 delete data;
64 }
65
28 } // namespace 66 } // namespace
29 67
30 VideoDecoder::VideoDecoder() { 68 VideoDecoder::VideoDecoder() {
31 } 69 }
32 70
33 VideoDecoder::VideoDecoder(const InstanceHandle& instance) { 71 VideoDecoder::VideoDecoder(const InstanceHandle& instance) {
34 if (has_interface<PPB_VideoDecoder_0_1>()) { 72 if (has_interface<PPB_VideoDecoder_0_1>()) {
35 PassRefFromConstructor( 73 PassRefFromConstructor(
36 get_interface<PPB_VideoDecoder_0_1>()->Create(instance.pp_instance())); 74 get_interface<PPB_VideoDecoder_0_1>()->Create(instance.pp_instance()));
37 } 75 }
38 } 76 }
39 77
40 VideoDecoder::VideoDecoder(const VideoDecoder& other) : Resource(other) { 78 VideoDecoder::VideoDecoder(const VideoDecoder& other) : Resource(other) {
41 } 79 }
42 80
43 int32_t VideoDecoder::Initialize(const Graphics3D& context, 81 int32_t VideoDecoder::Initialize(const Graphics3D& context,
44 PP_VideoProfile profile, 82 PP_VideoProfile profile,
45 PP_HardwareAcceleration acceleration, 83 PP_HardwareAcceleration acceleration,
46 const CompletionCallback& cc) { 84 const CompletionCallback& cc) {
85 if (has_interface<PPB_VideoDecoder_1_0>()) {
86 return get_interface<PPB_VideoDecoder_1_0>()->Initialize(
87 pp_resource(), context.pp_resource(), profile, acceleration,
88 cc.pp_completion_callback());
89 }
47 if (has_interface<PPB_VideoDecoder_0_2>()) { 90 if (has_interface<PPB_VideoDecoder_0_2>()) {
48 return get_interface<PPB_VideoDecoder_0_2>()->Initialize( 91 return get_interface<PPB_VideoDecoder_0_2>()->Initialize(
49 pp_resource(), 92 pp_resource(), context.pp_resource(), profile, acceleration,
50 context.pp_resource(),
51 profile,
52 acceleration,
53 cc.pp_completion_callback()); 93 cc.pp_completion_callback());
54 } 94 }
55 if (has_interface<PPB_VideoDecoder_0_1>()) { 95 if (has_interface<PPB_VideoDecoder_0_1>()) {
56 if (acceleration == PP_HARDWAREACCELERATION_NONE) 96 if (acceleration == PP_HARDWAREACCELERATION_NONE)
57 return cc.MayForce(PP_ERROR_NOTSUPPORTED); 97 return cc.MayForce(PP_ERROR_NOTSUPPORTED);
58 return get_interface<PPB_VideoDecoder_0_1>()->Initialize( 98 return get_interface<PPB_VideoDecoder_0_1>()->Initialize(
59 pp_resource(), 99 pp_resource(),
60 context.pp_resource(), 100 context.pp_resource(),
61 profile, 101 profile,
62 acceleration == PP_HARDWAREACCELERATION_WITHFALLBACK 102 acceleration == PP_HARDWAREACCELERATION_WITHFALLBACK
63 ? PP_TRUE 103 ? PP_TRUE
64 : PP_FALSE, 104 : PP_FALSE,
65 cc.pp_completion_callback()); 105 cc.pp_completion_callback());
66 } 106 }
67 return cc.MayForce(PP_ERROR_NOINTERFACE); 107 return cc.MayForce(PP_ERROR_NOINTERFACE);
68 } 108 }
69 109
70 int32_t VideoDecoder::Decode(uint32_t decode_id, 110 int32_t VideoDecoder::Decode(uint32_t decode_id,
71 uint32_t size, 111 uint32_t size,
72 const void* buffer, 112 const void* buffer,
73 const CompletionCallback& cc) { 113 const CompletionCallback& cc) {
114 if (has_interface<PPB_VideoDecoder_1_0>()) {
115 return get_interface<PPB_VideoDecoder_1_0>()->Decode(
116 pp_resource(), decode_id, size, buffer, cc.pp_completion_callback());
117 }
74 if (has_interface<PPB_VideoDecoder_0_2>()) { 118 if (has_interface<PPB_VideoDecoder_0_2>()) {
75 return get_interface<PPB_VideoDecoder_0_2>()->Decode( 119 return get_interface<PPB_VideoDecoder_0_2>()->Decode(
76 pp_resource(), decode_id, size, buffer, cc.pp_completion_callback()); 120 pp_resource(), decode_id, size, buffer, cc.pp_completion_callback());
77 } 121 }
78 if (has_interface<PPB_VideoDecoder_0_1>()) { 122 if (has_interface<PPB_VideoDecoder_0_1>()) {
79 return get_interface<PPB_VideoDecoder_0_1>()->Decode( 123 return get_interface<PPB_VideoDecoder_0_1>()->Decode(
80 pp_resource(), decode_id, size, buffer, cc.pp_completion_callback()); 124 pp_resource(), decode_id, size, buffer, cc.pp_completion_callback());
81 } 125 }
82 return cc.MayForce(PP_ERROR_NOINTERFACE); 126 return cc.MayForce(PP_ERROR_NOINTERFACE);
83 } 127 }
84 128
85 int32_t VideoDecoder::GetPicture( 129 int32_t VideoDecoder::GetPicture(
86 const CompletionCallbackWithOutput<PP_VideoPicture>& cc) { 130 const CompletionCallbackWithOutput<PP_VideoPicture>& cc) {
87 if (has_interface<PPB_VideoDecoder_0_2>()) { 131 if (has_interface<PPB_VideoDecoder_1_0>()) {
88 return get_interface<PPB_VideoDecoder_0_2>()->GetPicture( 132 return get_interface<PPB_VideoDecoder_1_0>()->GetPicture(
89 pp_resource(), cc.output(), cc.pp_completion_callback()); 133 pp_resource(), cc.output(), cc.pp_completion_callback());
90 } 134 }
135 if (has_interface<PPB_VideoDecoder_0_2>()) {
136 // Data for our callback wrapper. The callback handler will delete it.
137 CallbackData_0_1* data = new CallbackData_0_1(cc);
138 return get_interface<PPB_VideoDecoder_0_2>()->GetPicture(
139 pp_resource(), &data->picture,
140 PP_MakeCompletionCallback(&CallbackConverter, data));
141 }
91 if (has_interface<PPB_VideoDecoder_0_1>()) { 142 if (has_interface<PPB_VideoDecoder_0_1>()) {
143 // Data for our callback wrapper. The callback handler will delete it.
144 CallbackData_0_1* data = new CallbackData_0_1(cc);
92 return get_interface<PPB_VideoDecoder_0_1>()->GetPicture( 145 return get_interface<PPB_VideoDecoder_0_1>()->GetPicture(
93 pp_resource(), cc.output(), cc.pp_completion_callback()); 146 pp_resource(), &data->picture,
147 PP_MakeCompletionCallback(&CallbackConverter, data));
94 } 148 }
95 return cc.MayForce(PP_ERROR_NOINTERFACE); 149 return cc.MayForce(PP_ERROR_NOINTERFACE);
96 } 150 }
97 151
98 void VideoDecoder::RecyclePicture(const PP_VideoPicture& picture) { 152 void VideoDecoder::RecyclePicture(const PP_VideoPicture& picture) {
99 if (has_interface<PPB_VideoDecoder_0_2>()) { 153 if (has_interface<PPB_VideoDecoder_1_0>()) {
154 get_interface<PPB_VideoDecoder_1_0>()->RecyclePicture(pp_resource(),
155 &picture);
156 } else if (has_interface<PPB_VideoDecoder_0_2>()) {
100 get_interface<PPB_VideoDecoder_0_2>()->RecyclePicture(pp_resource(), 157 get_interface<PPB_VideoDecoder_0_2>()->RecyclePicture(pp_resource(),
101 &picture); 158 &picture);
102 } else if (has_interface<PPB_VideoDecoder_0_1>()) { 159 } else if (has_interface<PPB_VideoDecoder_0_1>()) {
103 get_interface<PPB_VideoDecoder_0_1>()->RecyclePicture(pp_resource(), 160 get_interface<PPB_VideoDecoder_0_1>()->RecyclePicture(pp_resource(),
104 &picture); 161 &picture);
105 } 162 }
106 } 163 }
107 164
108 int32_t VideoDecoder::Flush(const CompletionCallback& cc) { 165 int32_t VideoDecoder::Flush(const CompletionCallback& cc) {
166 if (has_interface<PPB_VideoDecoder_1_0>()) {
167 return get_interface<PPB_VideoDecoder_1_0>()->Flush(
168 pp_resource(), cc.pp_completion_callback());
169 }
109 if (has_interface<PPB_VideoDecoder_0_2>()) { 170 if (has_interface<PPB_VideoDecoder_0_2>()) {
110 return get_interface<PPB_VideoDecoder_0_2>()->Flush( 171 return get_interface<PPB_VideoDecoder_0_2>()->Flush(
111 pp_resource(), cc.pp_completion_callback()); 172 pp_resource(), cc.pp_completion_callback());
112 } 173 }
113 if (has_interface<PPB_VideoDecoder_0_1>()) { 174 if (has_interface<PPB_VideoDecoder_0_1>()) {
114 return get_interface<PPB_VideoDecoder_0_1>()->Flush( 175 return get_interface<PPB_VideoDecoder_0_1>()->Flush(
115 pp_resource(), cc.pp_completion_callback()); 176 pp_resource(), cc.pp_completion_callback());
116 } 177 }
117 return cc.MayForce(PP_ERROR_NOINTERFACE); 178 return cc.MayForce(PP_ERROR_NOINTERFACE);
118 } 179 }
119 180
120 int32_t VideoDecoder::Reset(const CompletionCallback& cc) { 181 int32_t VideoDecoder::Reset(const CompletionCallback& cc) {
182 if (has_interface<PPB_VideoDecoder_1_0>()) {
183 return get_interface<PPB_VideoDecoder_1_0>()->Reset(
184 pp_resource(), cc.pp_completion_callback());
185 }
121 if (has_interface<PPB_VideoDecoder_0_2>()) { 186 if (has_interface<PPB_VideoDecoder_0_2>()) {
122 return get_interface<PPB_VideoDecoder_0_2>()->Reset( 187 return get_interface<PPB_VideoDecoder_0_2>()->Reset(
123 pp_resource(), cc.pp_completion_callback()); 188 pp_resource(), cc.pp_completion_callback());
124 } 189 }
125 if (has_interface<PPB_VideoDecoder_0_1>()) { 190 if (has_interface<PPB_VideoDecoder_0_1>()) {
126 return get_interface<PPB_VideoDecoder_0_1>()->Reset( 191 return get_interface<PPB_VideoDecoder_0_1>()->Reset(
127 pp_resource(), cc.pp_completion_callback()); 192 pp_resource(), cc.pp_completion_callback());
128 } 193 }
129 return cc.MayForce(PP_ERROR_NOINTERFACE); 194 return cc.MayForce(PP_ERROR_NOINTERFACE);
130 } 195 }
131 196
132 } // namespace pp 197 } // namespace pp
OLDNEW
« no previous file with comments | « ppapi/cpp/video_decoder.h ('k') | ppapi/native_client/src/untrusted/pnacl_irt_shim/pnacl_shim.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698