blob: cce5a9a5944831e737f66d5b5a84959ebf8dc1e0 [file] [log] [blame]
Mathias Agopian3cf61352010-02-09 17:46:37 -08001/*
2**
3** Copyright 2008, The Android Open Source Project
4**
5** Licensed under the Apache License, Version 2.0 (the "License");
6** you may not use this file except in compliance with the License.
7** You may obtain a copy of the License at
8**
9** http://www.apache.org/licenses/LICENSE-2.0
10**
11** Unless required by applicable law or agreed to in writing, software
12** distributed under the License is distributed on an "AS IS" BASIS,
13** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14** See the License for the specific language governing permissions and
15** limitations under the License.
16*/
17
18//#define LOG_NDEBUG 0
19#define LOG_TAG "ICamera"
20#include <utils/Log.h>
21#include <stdint.h>
22#include <sys/types.h>
23#include <binder/Parcel.h>
24#include <camera/ICamera.h>
Andy McFadden8ba01022012-12-18 09:46:54 -080025#include <gui/IGraphicBufferProducer.h>
Mathias Agopiandf712ea2012-02-25 18:48:35 -080026#include <gui/Surface.h>
Mathias Agopian3cf61352010-02-09 17:46:37 -080027
28namespace android {
29
30enum {
31 DISCONNECT = IBinder::FIRST_CALL_TRANSACTION,
Eino-Ville Talvala1ce7c342013-08-21 13:57:21 -070032 SET_PREVIEW_TARGET,
Mathias Agopian3cf61352010-02-09 17:46:37 -080033 SET_PREVIEW_CALLBACK_FLAG,
Eino-Ville Talvala3ee35502013-04-02 15:45:11 -070034 SET_PREVIEW_CALLBACK_TARGET,
Mathias Agopian3cf61352010-02-09 17:46:37 -080035 START_PREVIEW,
36 STOP_PREVIEW,
37 AUTO_FOCUS,
38 CANCEL_AUTO_FOCUS,
39 TAKE_PICTURE,
40 SET_PARAMETERS,
41 GET_PARAMETERS,
42 SEND_COMMAND,
43 CONNECT,
44 LOCK,
45 UNLOCK,
46 PREVIEW_ENABLED,
47 START_RECORDING,
48 STOP_RECORDING,
49 RECORDING_ENABLED,
50 RELEASE_RECORDING_FRAME,
Chien-Yu Chen8cca0752015-11-13 15:28:48 -080051 SET_VIDEO_BUFFER_MODE,
52 SET_VIDEO_BUFFER_TARGET,
Mathias Agopian3cf61352010-02-09 17:46:37 -080053};
54
55class BpCamera: public BpInterface<ICamera>
56{
57public:
58 BpCamera(const sp<IBinder>& impl)
59 : BpInterface<ICamera>(impl)
60 {
61 }
62
63 // disconnect from camera service
64 void disconnect()
65 {
Steve Block3856b092011-10-20 11:56:00 +010066 ALOGV("disconnect");
Mathias Agopian3cf61352010-02-09 17:46:37 -080067 Parcel data, reply;
68 data.writeInterfaceToken(ICamera::getInterfaceDescriptor());
69 remote()->transact(DISCONNECT, data, &reply);
Igor Murashkinbef3f232013-05-30 17:47:38 -070070 reply.readExceptionCode();
Mathias Agopian3cf61352010-02-09 17:46:37 -080071 }
72
Andy McFadden8ba01022012-12-18 09:46:54 -080073 // pass the buffered IGraphicBufferProducer to the camera service
Eino-Ville Talvala1ce7c342013-08-21 13:57:21 -070074 status_t setPreviewTarget(const sp<IGraphicBufferProducer>& bufferProducer)
Jamie Gennisbfa33aa2010-12-20 11:51:31 -080075 {
Eino-Ville Talvala1ce7c342013-08-21 13:57:21 -070076 ALOGV("setPreviewTarget");
Jamie Gennisbfa33aa2010-12-20 11:51:31 -080077 Parcel data, reply;
78 data.writeInterfaceToken(ICamera::getInterfaceDescriptor());
Marco Nelissen06b46062014-11-14 07:58:25 -080079 sp<IBinder> b(IInterface::asBinder(bufferProducer));
Jamie Gennisbfa33aa2010-12-20 11:51:31 -080080 data.writeStrongBinder(b);
Eino-Ville Talvala1ce7c342013-08-21 13:57:21 -070081 remote()->transact(SET_PREVIEW_TARGET, data, &reply);
Jamie Gennisbfa33aa2010-12-20 11:51:31 -080082 return reply.readInt32();
83 }
84
Mathias Agopian3cf61352010-02-09 17:46:37 -080085 // set the preview callback flag to affect how the received frames from
86 // preview are handled. See Camera.h for details.
87 void setPreviewCallbackFlag(int flag)
88 {
Steve Block3856b092011-10-20 11:56:00 +010089 ALOGV("setPreviewCallbackFlag(%d)", flag);
Mathias Agopian3cf61352010-02-09 17:46:37 -080090 Parcel data, reply;
91 data.writeInterfaceToken(ICamera::getInterfaceDescriptor());
92 data.writeInt32(flag);
93 remote()->transact(SET_PREVIEW_CALLBACK_FLAG, data, &reply);
94 }
95
Eino-Ville Talvala3ee35502013-04-02 15:45:11 -070096 status_t setPreviewCallbackTarget(
97 const sp<IGraphicBufferProducer>& callbackProducer)
98 {
99 ALOGV("setPreviewCallbackTarget");
100 Parcel data, reply;
101 data.writeInterfaceToken(ICamera::getInterfaceDescriptor());
Marco Nelissen06b46062014-11-14 07:58:25 -0800102 sp<IBinder> b(IInterface::asBinder(callbackProducer));
Eino-Ville Talvala3ee35502013-04-02 15:45:11 -0700103 data.writeStrongBinder(b);
104 remote()->transact(SET_PREVIEW_CALLBACK_TARGET, data, &reply);
105 return reply.readInt32();
106 }
107
Eino-Ville Talvala1ce7c342013-08-21 13:57:21 -0700108 // start preview mode, must call setPreviewTarget first
Mathias Agopian3cf61352010-02-09 17:46:37 -0800109 status_t startPreview()
110 {
Steve Block3856b092011-10-20 11:56:00 +0100111 ALOGV("startPreview");
Mathias Agopian3cf61352010-02-09 17:46:37 -0800112 Parcel data, reply;
113 data.writeInterfaceToken(ICamera::getInterfaceDescriptor());
114 remote()->transact(START_PREVIEW, data, &reply);
115 return reply.readInt32();
116 }
117
Eino-Ville Talvala1ce7c342013-08-21 13:57:21 -0700118 // start recording mode, must call setPreviewTarget first
Mathias Agopian3cf61352010-02-09 17:46:37 -0800119 status_t startRecording()
120 {
Steve Block3856b092011-10-20 11:56:00 +0100121 ALOGV("startRecording");
Mathias Agopian3cf61352010-02-09 17:46:37 -0800122 Parcel data, reply;
123 data.writeInterfaceToken(ICamera::getInterfaceDescriptor());
124 remote()->transact(START_RECORDING, data, &reply);
125 return reply.readInt32();
126 }
127
128 // stop preview mode
129 void stopPreview()
130 {
Steve Block3856b092011-10-20 11:56:00 +0100131 ALOGV("stopPreview");
Mathias Agopian3cf61352010-02-09 17:46:37 -0800132 Parcel data, reply;
133 data.writeInterfaceToken(ICamera::getInterfaceDescriptor());
134 remote()->transact(STOP_PREVIEW, data, &reply);
135 }
136
137 // stop recording mode
138 void stopRecording()
139 {
Steve Block3856b092011-10-20 11:56:00 +0100140 ALOGV("stopRecording");
Mathias Agopian3cf61352010-02-09 17:46:37 -0800141 Parcel data, reply;
142 data.writeInterfaceToken(ICamera::getInterfaceDescriptor());
143 remote()->transact(STOP_RECORDING, data, &reply);
144 }
145
146 void releaseRecordingFrame(const sp<IMemory>& mem)
147 {
Steve Block3856b092011-10-20 11:56:00 +0100148 ALOGV("releaseRecordingFrame");
Mathias Agopian3cf61352010-02-09 17:46:37 -0800149 Parcel data, reply;
150 data.writeInterfaceToken(ICamera::getInterfaceDescriptor());
Marco Nelissen06b46062014-11-14 07:58:25 -0800151 data.writeStrongBinder(IInterface::asBinder(mem));
Mathias Agopian3cf61352010-02-09 17:46:37 -0800152 remote()->transact(RELEASE_RECORDING_FRAME, data, &reply);
153 }
154
Chien-Yu Chen8cca0752015-11-13 15:28:48 -0800155 status_t setVideoBufferMode(int32_t videoBufferMode)
James Donge2ad6732010-10-18 20:42:51 -0700156 {
Chien-Yu Chen8cca0752015-11-13 15:28:48 -0800157 ALOGV("setVideoBufferMode: %d", videoBufferMode);
James Donge2ad6732010-10-18 20:42:51 -0700158 Parcel data, reply;
159 data.writeInterfaceToken(ICamera::getInterfaceDescriptor());
Chien-Yu Chen8cca0752015-11-13 15:28:48 -0800160 data.writeInt32(videoBufferMode);
161 remote()->transact(SET_VIDEO_BUFFER_MODE, data, &reply);
James Donge2ad6732010-10-18 20:42:51 -0700162 return reply.readInt32();
163 }
164
Mathias Agopian3cf61352010-02-09 17:46:37 -0800165 // check preview state
166 bool previewEnabled()
167 {
Steve Block3856b092011-10-20 11:56:00 +0100168 ALOGV("previewEnabled");
Mathias Agopian3cf61352010-02-09 17:46:37 -0800169 Parcel data, reply;
170 data.writeInterfaceToken(ICamera::getInterfaceDescriptor());
171 remote()->transact(PREVIEW_ENABLED, data, &reply);
172 return reply.readInt32();
173 }
174
175 // check recording state
176 bool recordingEnabled()
177 {
Steve Block3856b092011-10-20 11:56:00 +0100178 ALOGV("recordingEnabled");
Mathias Agopian3cf61352010-02-09 17:46:37 -0800179 Parcel data, reply;
180 data.writeInterfaceToken(ICamera::getInterfaceDescriptor());
181 remote()->transact(RECORDING_ENABLED, data, &reply);
182 return reply.readInt32();
183 }
184
185 // auto focus
186 status_t autoFocus()
187 {
Steve Block3856b092011-10-20 11:56:00 +0100188 ALOGV("autoFocus");
Mathias Agopian3cf61352010-02-09 17:46:37 -0800189 Parcel data, reply;
190 data.writeInterfaceToken(ICamera::getInterfaceDescriptor());
191 remote()->transact(AUTO_FOCUS, data, &reply);
192 status_t ret = reply.readInt32();
193 return ret;
194 }
195
196 // cancel focus
197 status_t cancelAutoFocus()
198 {
Steve Block3856b092011-10-20 11:56:00 +0100199 ALOGV("cancelAutoFocus");
Mathias Agopian3cf61352010-02-09 17:46:37 -0800200 Parcel data, reply;
201 data.writeInterfaceToken(ICamera::getInterfaceDescriptor());
202 remote()->transact(CANCEL_AUTO_FOCUS, data, &reply);
203 status_t ret = reply.readInt32();
204 return ret;
205 }
206
207 // take a picture - returns an IMemory (ref-counted mmap)
James Donge468ac52011-02-17 16:38:06 -0800208 status_t takePicture(int msgType)
Mathias Agopian3cf61352010-02-09 17:46:37 -0800209 {
Steve Block3856b092011-10-20 11:56:00 +0100210 ALOGV("takePicture: 0x%x", msgType);
Mathias Agopian3cf61352010-02-09 17:46:37 -0800211 Parcel data, reply;
212 data.writeInterfaceToken(ICamera::getInterfaceDescriptor());
James Donge468ac52011-02-17 16:38:06 -0800213 data.writeInt32(msgType);
Mathias Agopian3cf61352010-02-09 17:46:37 -0800214 remote()->transact(TAKE_PICTURE, data, &reply);
215 status_t ret = reply.readInt32();
216 return ret;
217 }
218
219 // set preview/capture parameters - key/value pairs
220 status_t setParameters(const String8& params)
221 {
Steve Block3856b092011-10-20 11:56:00 +0100222 ALOGV("setParameters");
Mathias Agopian3cf61352010-02-09 17:46:37 -0800223 Parcel data, reply;
224 data.writeInterfaceToken(ICamera::getInterfaceDescriptor());
225 data.writeString8(params);
226 remote()->transact(SET_PARAMETERS, data, &reply);
227 return reply.readInt32();
228 }
229
230 // get preview/capture parameters - key/value pairs
231 String8 getParameters() const
232 {
Steve Block3856b092011-10-20 11:56:00 +0100233 ALOGV("getParameters");
Mathias Agopian3cf61352010-02-09 17:46:37 -0800234 Parcel data, reply;
235 data.writeInterfaceToken(ICamera::getInterfaceDescriptor());
236 remote()->transact(GET_PARAMETERS, data, &reply);
237 return reply.readString8();
238 }
239 virtual status_t sendCommand(int32_t cmd, int32_t arg1, int32_t arg2)
240 {
Steve Block3856b092011-10-20 11:56:00 +0100241 ALOGV("sendCommand");
Mathias Agopian3cf61352010-02-09 17:46:37 -0800242 Parcel data, reply;
243 data.writeInterfaceToken(ICamera::getInterfaceDescriptor());
244 data.writeInt32(cmd);
245 data.writeInt32(arg1);
246 data.writeInt32(arg2);
247 remote()->transact(SEND_COMMAND, data, &reply);
248 return reply.readInt32();
249 }
250 virtual status_t connect(const sp<ICameraClient>& cameraClient)
251 {
252 Parcel data, reply;
253 data.writeInterfaceToken(ICamera::getInterfaceDescriptor());
Marco Nelissen06b46062014-11-14 07:58:25 -0800254 data.writeStrongBinder(IInterface::asBinder(cameraClient));
Mathias Agopian3cf61352010-02-09 17:46:37 -0800255 remote()->transact(CONNECT, data, &reply);
256 return reply.readInt32();
257 }
258 virtual status_t lock()
259 {
260 Parcel data, reply;
261 data.writeInterfaceToken(ICamera::getInterfaceDescriptor());
262 remote()->transact(LOCK, data, &reply);
263 return reply.readInt32();
264 }
265 virtual status_t unlock()
266 {
267 Parcel data, reply;
268 data.writeInterfaceToken(ICamera::getInterfaceDescriptor());
269 remote()->transact(UNLOCK, data, &reply);
270 return reply.readInt32();
271 }
Chien-Yu Chen8cca0752015-11-13 15:28:48 -0800272
273 status_t setVideoTarget(const sp<IGraphicBufferProducer>& bufferProducer)
274 {
275 ALOGV("setVideoTarget");
276 Parcel data, reply;
277 data.writeInterfaceToken(ICamera::getInterfaceDescriptor());
278 sp<IBinder> b(IInterface::asBinder(bufferProducer));
279 data.writeStrongBinder(b);
280 remote()->transact(SET_VIDEO_BUFFER_TARGET, data, &reply);
281 return reply.readInt32();
282 }
Mathias Agopian3cf61352010-02-09 17:46:37 -0800283};
284
285IMPLEMENT_META_INTERFACE(Camera, "android.hardware.ICamera");
286
287// ----------------------------------------------------------------------
288
289status_t BnCamera::onTransact(
290 uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
291{
292 switch(code) {
293 case DISCONNECT: {
Steve Block3856b092011-10-20 11:56:00 +0100294 ALOGV("DISCONNECT");
Mathias Agopian3cf61352010-02-09 17:46:37 -0800295 CHECK_INTERFACE(ICamera, data, reply);
296 disconnect();
Igor Murashkinbef3f232013-05-30 17:47:38 -0700297 reply->writeNoException();
Mathias Agopian3cf61352010-02-09 17:46:37 -0800298 return NO_ERROR;
299 } break;
Eino-Ville Talvala1ce7c342013-08-21 13:57:21 -0700300 case SET_PREVIEW_TARGET: {
301 ALOGV("SET_PREVIEW_TARGET");
Jamie Gennisbfa33aa2010-12-20 11:51:31 -0800302 CHECK_INTERFACE(ICamera, data, reply);
Andy McFadden8ba01022012-12-18 09:46:54 -0800303 sp<IGraphicBufferProducer> st =
304 interface_cast<IGraphicBufferProducer>(data.readStrongBinder());
Eino-Ville Talvala1ce7c342013-08-21 13:57:21 -0700305 reply->writeInt32(setPreviewTarget(st));
Jamie Gennisbfa33aa2010-12-20 11:51:31 -0800306 return NO_ERROR;
307 } break;
Mathias Agopian3cf61352010-02-09 17:46:37 -0800308 case SET_PREVIEW_CALLBACK_FLAG: {
Steve Block3856b092011-10-20 11:56:00 +0100309 ALOGV("SET_PREVIEW_CALLBACK_TYPE");
Mathias Agopian3cf61352010-02-09 17:46:37 -0800310 CHECK_INTERFACE(ICamera, data, reply);
311 int callback_flag = data.readInt32();
312 setPreviewCallbackFlag(callback_flag);
313 return NO_ERROR;
314 } break;
Eino-Ville Talvala3ee35502013-04-02 15:45:11 -0700315 case SET_PREVIEW_CALLBACK_TARGET: {
316 ALOGV("SET_PREVIEW_CALLBACK_TARGET");
317 CHECK_INTERFACE(ICamera, data, reply);
318 sp<IGraphicBufferProducer> cp =
319 interface_cast<IGraphicBufferProducer>(data.readStrongBinder());
320 reply->writeInt32(setPreviewCallbackTarget(cp));
321 return NO_ERROR;
322 }
Mathias Agopian3cf61352010-02-09 17:46:37 -0800323 case START_PREVIEW: {
Steve Block3856b092011-10-20 11:56:00 +0100324 ALOGV("START_PREVIEW");
Mathias Agopian3cf61352010-02-09 17:46:37 -0800325 CHECK_INTERFACE(ICamera, data, reply);
326 reply->writeInt32(startPreview());
327 return NO_ERROR;
328 } break;
329 case START_RECORDING: {
Steve Block3856b092011-10-20 11:56:00 +0100330 ALOGV("START_RECORDING");
Mathias Agopian3cf61352010-02-09 17:46:37 -0800331 CHECK_INTERFACE(ICamera, data, reply);
332 reply->writeInt32(startRecording());
333 return NO_ERROR;
334 } break;
335 case STOP_PREVIEW: {
Steve Block3856b092011-10-20 11:56:00 +0100336 ALOGV("STOP_PREVIEW");
Mathias Agopian3cf61352010-02-09 17:46:37 -0800337 CHECK_INTERFACE(ICamera, data, reply);
338 stopPreview();
339 return NO_ERROR;
340 } break;
341 case STOP_RECORDING: {
Steve Block3856b092011-10-20 11:56:00 +0100342 ALOGV("STOP_RECORDING");
Mathias Agopian3cf61352010-02-09 17:46:37 -0800343 CHECK_INTERFACE(ICamera, data, reply);
344 stopRecording();
345 return NO_ERROR;
346 } break;
347 case RELEASE_RECORDING_FRAME: {
Steve Block3856b092011-10-20 11:56:00 +0100348 ALOGV("RELEASE_RECORDING_FRAME");
Mathias Agopian3cf61352010-02-09 17:46:37 -0800349 CHECK_INTERFACE(ICamera, data, reply);
350 sp<IMemory> mem = interface_cast<IMemory>(data.readStrongBinder());
351 releaseRecordingFrame(mem);
352 return NO_ERROR;
353 } break;
Chien-Yu Chen8cca0752015-11-13 15:28:48 -0800354 case SET_VIDEO_BUFFER_MODE: {
355 ALOGV("SET_VIDEO_BUFFER_MODE");
James Donge2ad6732010-10-18 20:42:51 -0700356 CHECK_INTERFACE(ICamera, data, reply);
Chien-Yu Chen8cca0752015-11-13 15:28:48 -0800357 int32_t mode = data.readInt32();
358 reply->writeInt32(setVideoBufferMode(mode));
James Donge2ad6732010-10-18 20:42:51 -0700359 return NO_ERROR;
360 } break;
Mathias Agopian3cf61352010-02-09 17:46:37 -0800361 case PREVIEW_ENABLED: {
Steve Block3856b092011-10-20 11:56:00 +0100362 ALOGV("PREVIEW_ENABLED");
Mathias Agopian3cf61352010-02-09 17:46:37 -0800363 CHECK_INTERFACE(ICamera, data, reply);
364 reply->writeInt32(previewEnabled());
365 return NO_ERROR;
366 } break;
367 case RECORDING_ENABLED: {
Steve Block3856b092011-10-20 11:56:00 +0100368 ALOGV("RECORDING_ENABLED");
Mathias Agopian3cf61352010-02-09 17:46:37 -0800369 CHECK_INTERFACE(ICamera, data, reply);
370 reply->writeInt32(recordingEnabled());
371 return NO_ERROR;
372 } break;
373 case AUTO_FOCUS: {
Steve Block3856b092011-10-20 11:56:00 +0100374 ALOGV("AUTO_FOCUS");
Mathias Agopian3cf61352010-02-09 17:46:37 -0800375 CHECK_INTERFACE(ICamera, data, reply);
376 reply->writeInt32(autoFocus());
377 return NO_ERROR;
378 } break;
379 case CANCEL_AUTO_FOCUS: {
Steve Block3856b092011-10-20 11:56:00 +0100380 ALOGV("CANCEL_AUTO_FOCUS");
Mathias Agopian3cf61352010-02-09 17:46:37 -0800381 CHECK_INTERFACE(ICamera, data, reply);
382 reply->writeInt32(cancelAutoFocus());
383 return NO_ERROR;
384 } break;
385 case TAKE_PICTURE: {
Steve Block3856b092011-10-20 11:56:00 +0100386 ALOGV("TAKE_PICTURE");
Mathias Agopian3cf61352010-02-09 17:46:37 -0800387 CHECK_INTERFACE(ICamera, data, reply);
James Donge468ac52011-02-17 16:38:06 -0800388 int msgType = data.readInt32();
389 reply->writeInt32(takePicture(msgType));
Mathias Agopian3cf61352010-02-09 17:46:37 -0800390 return NO_ERROR;
391 } break;
392 case SET_PARAMETERS: {
Steve Block3856b092011-10-20 11:56:00 +0100393 ALOGV("SET_PARAMETERS");
Mathias Agopian3cf61352010-02-09 17:46:37 -0800394 CHECK_INTERFACE(ICamera, data, reply);
395 String8 params(data.readString8());
396 reply->writeInt32(setParameters(params));
397 return NO_ERROR;
398 } break;
399 case GET_PARAMETERS: {
Steve Block3856b092011-10-20 11:56:00 +0100400 ALOGV("GET_PARAMETERS");
Mathias Agopian3cf61352010-02-09 17:46:37 -0800401 CHECK_INTERFACE(ICamera, data, reply);
402 reply->writeString8(getParameters());
403 return NO_ERROR;
404 } break;
405 case SEND_COMMAND: {
Steve Block3856b092011-10-20 11:56:00 +0100406 ALOGV("SEND_COMMAND");
Mathias Agopian3cf61352010-02-09 17:46:37 -0800407 CHECK_INTERFACE(ICamera, data, reply);
408 int command = data.readInt32();
409 int arg1 = data.readInt32();
410 int arg2 = data.readInt32();
411 reply->writeInt32(sendCommand(command, arg1, arg2));
412 return NO_ERROR;
413 } break;
414 case CONNECT: {
415 CHECK_INTERFACE(ICamera, data, reply);
416 sp<ICameraClient> cameraClient = interface_cast<ICameraClient>(data.readStrongBinder());
417 reply->writeInt32(connect(cameraClient));
418 return NO_ERROR;
419 } break;
420 case LOCK: {
421 CHECK_INTERFACE(ICamera, data, reply);
422 reply->writeInt32(lock());
423 return NO_ERROR;
424 } break;
425 case UNLOCK: {
426 CHECK_INTERFACE(ICamera, data, reply);
427 reply->writeInt32(unlock());
428 return NO_ERROR;
429 } break;
Chien-Yu Chen8cca0752015-11-13 15:28:48 -0800430 case SET_VIDEO_BUFFER_TARGET: {
431 ALOGV("SET_VIDEO_BUFFER_TARGET");
432 CHECK_INTERFACE(ICamera, data, reply);
433 sp<IGraphicBufferProducer> st =
434 interface_cast<IGraphicBufferProducer>(data.readStrongBinder());
435 reply->writeInt32(setVideoTarget(st));
436 return NO_ERROR;
437 } break;
Mathias Agopian3cf61352010-02-09 17:46:37 -0800438 default:
439 return BBinder::onTransact(code, data, reply, flags);
440 }
441}
442
443// ----------------------------------------------------------------------------
444
445}; // namespace android