blob: 2f4e31aa91e563ec1ccf50258661f2223d1a251f [file] [log] [blame]
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -08001/*
2 **
Jean-Baptiste Queru68335fd2010-07-29 17:35:37 -07003 ** Copyright 2008, The Android Open Source Project
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -08004 **
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 "IMediaRecorder"
20#include <utils/Log.h>
Mathias Agopian75624082009-05-19 19:08:10 -070021#include <binder/Parcel.h>
Mathias Agopian3cf61352010-02-09 17:46:37 -080022#include <camera/ICamera.h>
James Dong37047fc2010-06-25 17:06:47 -070023#include <media/IMediaRecorderClient.h>
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -080024#include <media/IMediaRecorder.h>
Mathias Agopiandf712ea2012-02-25 18:48:35 -080025#include <gui/Surface.h>
Pannag Sanketib33f3402011-07-01 17:39:39 -070026#include <gui/ISurfaceTexture.h>
James Dong25d83122010-08-11 17:12:39 -070027#include <unistd.h>
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -080028
Pannag Sanketib33f3402011-07-01 17:39:39 -070029
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -080030namespace android {
31
32enum {
33 RELEASE = IBinder::FIRST_CALL_TRANSACTION,
34 INIT,
35 CLOSE,
Pannag Sanketib33f3402011-07-01 17:39:39 -070036 QUERY_SURFACE_MEDIASOURCE,
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -080037 RESET,
38 STOP,
39 START,
40 PREPARE,
41 GET_MAX_AMPLITUDE,
42 SET_VIDEO_SOURCE,
43 SET_AUDIO_SOURCE,
44 SET_OUTPUT_FORMAT,
45 SET_VIDEO_ENCODER,
46 SET_AUDIO_ENCODER,
47 SET_OUTPUT_FILE_PATH,
48 SET_OUTPUT_FILE_FD,
49 SET_VIDEO_SIZE,
50 SET_VIDEO_FRAMERATE,
The Android Open Source Projectc048cae2009-03-13 13:04:22 -070051 SET_PARAMETERS,
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -080052 SET_PREVIEW_SURFACE,
53 SET_CAMERA,
54 SET_LISTENER
55};
56
57class BpMediaRecorder: public BpInterface<IMediaRecorder>
58{
59public:
60 BpMediaRecorder(const sp<IBinder>& impl)
61 : BpInterface<IMediaRecorder>(impl)
62 {
63 }
64
Wu-cheng Li4ca2c7c2011-06-01 17:22:24 +080065 status_t setCamera(const sp<ICamera>& camera, const sp<ICameraRecordingProxy>& proxy)
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -080066 {
Steve Block3856b092011-10-20 11:56:00 +010067 ALOGV("setCamera(%p,%p)", camera.get(), proxy.get());
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -080068 Parcel data, reply;
69 data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
70 data.writeStrongBinder(camera->asBinder());
Wu-cheng Li4ca2c7c2011-06-01 17:22:24 +080071 data.writeStrongBinder(proxy->asBinder());
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -080072 remote()->transact(SET_CAMERA, data, &reply);
73 return reply.readInt32();
74 }
75
Pannag Sanketib33f3402011-07-01 17:39:39 -070076 sp<ISurfaceTexture> querySurfaceMediaSource()
77 {
Steve Block3856b092011-10-20 11:56:00 +010078 ALOGV("Query SurfaceMediaSource");
Pannag Sanketib33f3402011-07-01 17:39:39 -070079 Parcel data, reply;
80 data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
81 remote()->transact(QUERY_SURFACE_MEDIASOURCE, data, &reply);
82 int returnedNull = reply.readInt32();
83 if (returnedNull) {
84 return NULL;
85 }
86 return interface_cast<ISurfaceTexture>(reply.readStrongBinder());
87 }
88
Jamie Gennis4b791682010-08-10 16:37:53 -070089 status_t setPreviewSurface(const sp<Surface>& surface)
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -080090 {
Steve Block3856b092011-10-20 11:56:00 +010091 ALOGV("setPreviewSurface(%p)", surface.get());
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -080092 Parcel data, reply;
93 data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
Jamie Gennis4b791682010-08-10 16:37:53 -070094 Surface::writeToParcel(surface, &data);
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -080095 remote()->transact(SET_PREVIEW_SURFACE, data, &reply);
96 return reply.readInt32();
97 }
98
99 status_t init()
100 {
Steve Block3856b092011-10-20 11:56:00 +0100101 ALOGV("init");
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800102 Parcel data, reply;
103 data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
104 remote()->transact(INIT, data, &reply);
105 return reply.readInt32();
106 }
107
108 status_t setVideoSource(int vs)
109 {
Steve Block3856b092011-10-20 11:56:00 +0100110 ALOGV("setVideoSource(%d)", vs);
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800111 Parcel data, reply;
112 data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
113 data.writeInt32(vs);
114 remote()->transact(SET_VIDEO_SOURCE, data, &reply);
115 return reply.readInt32();
116 }
117
118 status_t setAudioSource(int as)
119 {
Steve Block3856b092011-10-20 11:56:00 +0100120 ALOGV("setAudioSource(%d)", as);
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800121 Parcel data, reply;
122 data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
123 data.writeInt32(as);
124 remote()->transact(SET_AUDIO_SOURCE, data, &reply);
125 return reply.readInt32();
126 }
127
128 status_t setOutputFormat(int of)
129 {
Steve Block3856b092011-10-20 11:56:00 +0100130 ALOGV("setOutputFormat(%d)", of);
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800131 Parcel data, reply;
132 data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
133 data.writeInt32(of);
134 remote()->transact(SET_OUTPUT_FORMAT, data, &reply);
135 return reply.readInt32();
136 }
137
138 status_t setVideoEncoder(int ve)
139 {
Steve Block3856b092011-10-20 11:56:00 +0100140 ALOGV("setVideoEncoder(%d)", ve);
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800141 Parcel data, reply;
142 data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
143 data.writeInt32(ve);
144 remote()->transact(SET_VIDEO_ENCODER, data, &reply);
145 return reply.readInt32();
146 }
147
148 status_t setAudioEncoder(int ae)
149 {
Steve Block3856b092011-10-20 11:56:00 +0100150 ALOGV("setAudioEncoder(%d)", ae);
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800151 Parcel data, reply;
152 data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
153 data.writeInt32(ae);
154 remote()->transact(SET_AUDIO_ENCODER, data, &reply);
155 return reply.readInt32();
156 }
157
158 status_t setOutputFile(const char* path)
159 {
Steve Block3856b092011-10-20 11:56:00 +0100160 ALOGV("setOutputFile(%s)", path);
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800161 Parcel data, reply;
162 data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
163 data.writeCString(path);
164 remote()->transact(SET_OUTPUT_FILE_PATH, data, &reply);
165 return reply.readInt32();
166 }
167
168 status_t setOutputFile(int fd, int64_t offset, int64_t length) {
Steve Block3856b092011-10-20 11:56:00 +0100169 ALOGV("setOutputFile(%d, %lld, %lld)", fd, offset, length);
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800170 Parcel data, reply;
171 data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
172 data.writeFileDescriptor(fd);
173 data.writeInt64(offset);
174 data.writeInt64(length);
175 remote()->transact(SET_OUTPUT_FILE_FD, data, &reply);
176 return reply.readInt32();
177 }
178
179 status_t setVideoSize(int width, int height)
180 {
Steve Block3856b092011-10-20 11:56:00 +0100181 ALOGV("setVideoSize(%dx%d)", width, height);
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800182 Parcel data, reply;
183 data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
184 data.writeInt32(width);
185 data.writeInt32(height);
186 remote()->transact(SET_VIDEO_SIZE, data, &reply);
187 return reply.readInt32();
188 }
189
190 status_t setVideoFrameRate(int frames_per_second)
191 {
Steve Block3856b092011-10-20 11:56:00 +0100192 ALOGV("setVideoFrameRate(%d)", frames_per_second);
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800193 Parcel data, reply;
194 data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
195 data.writeInt32(frames_per_second);
196 remote()->transact(SET_VIDEO_FRAMERATE, data, &reply);
197 return reply.readInt32();
198 }
199
The Android Open Source Projectc048cae2009-03-13 13:04:22 -0700200 status_t setParameters(const String8& params)
201 {
Steve Block3856b092011-10-20 11:56:00 +0100202 ALOGV("setParameter(%s)", params.string());
The Android Open Source Projectc048cae2009-03-13 13:04:22 -0700203 Parcel data, reply;
204 data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
205 data.writeString8(params);
206 remote()->transact(SET_PARAMETERS, data, &reply);
207 return reply.readInt32();
208 }
209
James Dong37047fc2010-06-25 17:06:47 -0700210 status_t setListener(const sp<IMediaRecorderClient>& listener)
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800211 {
Steve Block3856b092011-10-20 11:56:00 +0100212 ALOGV("setListener(%p)", listener.get());
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800213 Parcel data, reply;
214 data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
215 data.writeStrongBinder(listener->asBinder());
216 remote()->transact(SET_LISTENER, data, &reply);
217 return reply.readInt32();
218 }
219
220 status_t prepare()
221 {
Steve Block3856b092011-10-20 11:56:00 +0100222 ALOGV("prepare");
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800223 Parcel data, reply;
224 data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
225 remote()->transact(PREPARE, data, &reply);
226 return reply.readInt32();
227 }
228
229 status_t getMaxAmplitude(int* max)
230 {
Steve Block3856b092011-10-20 11:56:00 +0100231 ALOGV("getMaxAmplitude");
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800232 Parcel data, reply;
233 data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
234 remote()->transact(GET_MAX_AMPLITUDE, data, &reply);
235 *max = reply.readInt32();
236 return reply.readInt32();
237 }
238
239 status_t start()
240 {
Steve Block3856b092011-10-20 11:56:00 +0100241 ALOGV("start");
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800242 Parcel data, reply;
243 data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
244 remote()->transact(START, data, &reply);
245 return reply.readInt32();
246 }
247
248 status_t stop()
249 {
Steve Block3856b092011-10-20 11:56:00 +0100250 ALOGV("stop");
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800251 Parcel data, reply;
252 data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
253 remote()->transact(STOP, data, &reply);
254 return reply.readInt32();
255 }
256
257 status_t reset()
258 {
Steve Block3856b092011-10-20 11:56:00 +0100259 ALOGV("reset");
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800260 Parcel data, reply;
261 data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
262 remote()->transact(RESET, data, &reply);
263 return reply.readInt32();
264 }
265
266 status_t close()
267 {
Steve Block3856b092011-10-20 11:56:00 +0100268 ALOGV("close");
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800269 Parcel data, reply;
270 data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
271 remote()->transact(CLOSE, data, &reply);
272 return reply.readInt32();
273 }
274
275 status_t release()
276 {
Steve Block3856b092011-10-20 11:56:00 +0100277 ALOGV("release");
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800278 Parcel data, reply;
279 data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
280 remote()->transact(RELEASE, data, &reply);
281 return reply.readInt32();
282 }
283};
284
niko56f0cc52009-06-22 08:49:52 -0700285IMPLEMENT_META_INTERFACE(MediaRecorder, "android.media.IMediaRecorder");
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800286
287// ----------------------------------------------------------------------
288
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800289status_t BnMediaRecorder::onTransact(
290 uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
291{
292 switch(code) {
293 case RELEASE: {
Steve Block3856b092011-10-20 11:56:00 +0100294 ALOGV("RELEASE");
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800295 CHECK_INTERFACE(IMediaRecorder, data, reply);
296 reply->writeInt32(release());
297 return NO_ERROR;
298 } break;
299 case INIT: {
Steve Block3856b092011-10-20 11:56:00 +0100300 ALOGV("INIT");
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800301 CHECK_INTERFACE(IMediaRecorder, data, reply);
302 reply->writeInt32(init());
303 return NO_ERROR;
304 } break;
305 case CLOSE: {
Steve Block3856b092011-10-20 11:56:00 +0100306 ALOGV("CLOSE");
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800307 CHECK_INTERFACE(IMediaRecorder, data, reply);
308 reply->writeInt32(close());
309 return NO_ERROR;
310 } break;
311 case RESET: {
Steve Block3856b092011-10-20 11:56:00 +0100312 ALOGV("RESET");
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800313 CHECK_INTERFACE(IMediaRecorder, data, reply);
314 reply->writeInt32(reset());
315 return NO_ERROR;
316 } break;
317 case STOP: {
Steve Block3856b092011-10-20 11:56:00 +0100318 ALOGV("STOP");
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800319 CHECK_INTERFACE(IMediaRecorder, data, reply);
320 reply->writeInt32(stop());
321 return NO_ERROR;
322 } break;
323 case START: {
Steve Block3856b092011-10-20 11:56:00 +0100324 ALOGV("START");
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800325 CHECK_INTERFACE(IMediaRecorder, data, reply);
326 reply->writeInt32(start());
327 return NO_ERROR;
328 } break;
329 case PREPARE: {
Steve Block3856b092011-10-20 11:56:00 +0100330 ALOGV("PREPARE");
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800331 CHECK_INTERFACE(IMediaRecorder, data, reply);
332 reply->writeInt32(prepare());
333 return NO_ERROR;
334 } break;
335 case GET_MAX_AMPLITUDE: {
Steve Block3856b092011-10-20 11:56:00 +0100336 ALOGV("GET_MAX_AMPLITUDE");
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800337 CHECK_INTERFACE(IMediaRecorder, data, reply);
338 int max = 0;
339 status_t ret = getMaxAmplitude(&max);
340 reply->writeInt32(max);
341 reply->writeInt32(ret);
342 return NO_ERROR;
343 } break;
344 case SET_VIDEO_SOURCE: {
Steve Block3856b092011-10-20 11:56:00 +0100345 ALOGV("SET_VIDEO_SOURCE");
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800346 CHECK_INTERFACE(IMediaRecorder, data, reply);
347 int vs = data.readInt32();
348 reply->writeInt32(setVideoSource(vs));
349 return NO_ERROR;
350 } break;
351 case SET_AUDIO_SOURCE: {
Steve Block3856b092011-10-20 11:56:00 +0100352 ALOGV("SET_AUDIO_SOURCE");
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800353 CHECK_INTERFACE(IMediaRecorder, data, reply);
354 int as = data.readInt32();
355 reply->writeInt32(setAudioSource(as));
356 return NO_ERROR;
357 } break;
358 case SET_OUTPUT_FORMAT: {
Steve Block3856b092011-10-20 11:56:00 +0100359 ALOGV("SET_OUTPUT_FORMAT");
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800360 CHECK_INTERFACE(IMediaRecorder, data, reply);
361 int of = data.readInt32();
362 reply->writeInt32(setOutputFormat(of));
363 return NO_ERROR;
364 } break;
365 case SET_VIDEO_ENCODER: {
Steve Block3856b092011-10-20 11:56:00 +0100366 ALOGV("SET_VIDEO_ENCODER");
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800367 CHECK_INTERFACE(IMediaRecorder, data, reply);
368 int ve = data.readInt32();
369 reply->writeInt32(setVideoEncoder(ve));
370 return NO_ERROR;
371 } break;
372 case SET_AUDIO_ENCODER: {
Steve Block3856b092011-10-20 11:56:00 +0100373 ALOGV("SET_AUDIO_ENCODER");
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800374 CHECK_INTERFACE(IMediaRecorder, data, reply);
375 int ae = data.readInt32();
376 reply->writeInt32(setAudioEncoder(ae));
377 return NO_ERROR;
378
379 } break;
380 case SET_OUTPUT_FILE_PATH: {
Steve Block3856b092011-10-20 11:56:00 +0100381 ALOGV("SET_OUTPUT_FILE_PATH");
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800382 CHECK_INTERFACE(IMediaRecorder, data, reply);
383 const char* path = data.readCString();
384 reply->writeInt32(setOutputFile(path));
385 return NO_ERROR;
386 } break;
387 case SET_OUTPUT_FILE_FD: {
Steve Block3856b092011-10-20 11:56:00 +0100388 ALOGV("SET_OUTPUT_FILE_FD");
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800389 CHECK_INTERFACE(IMediaRecorder, data, reply);
390 int fd = dup(data.readFileDescriptor());
391 int64_t offset = data.readInt64();
392 int64_t length = data.readInt64();
393 reply->writeInt32(setOutputFile(fd, offset, length));
James Dong25d83122010-08-11 17:12:39 -0700394 ::close(fd);
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800395 return NO_ERROR;
396 } break;
397 case SET_VIDEO_SIZE: {
Steve Block3856b092011-10-20 11:56:00 +0100398 ALOGV("SET_VIDEO_SIZE");
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800399 CHECK_INTERFACE(IMediaRecorder, data, reply);
400 int width = data.readInt32();
401 int height = data.readInt32();
402 reply->writeInt32(setVideoSize(width, height));
403 return NO_ERROR;
404 } break;
405 case SET_VIDEO_FRAMERATE: {
Steve Block3856b092011-10-20 11:56:00 +0100406 ALOGV("SET_VIDEO_FRAMERATE");
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800407 CHECK_INTERFACE(IMediaRecorder, data, reply);
408 int frames_per_second = data.readInt32();
409 reply->writeInt32(setVideoFrameRate(frames_per_second));
410 return NO_ERROR;
411 } break;
The Android Open Source Projectc048cae2009-03-13 13:04:22 -0700412 case SET_PARAMETERS: {
Steve Block3856b092011-10-20 11:56:00 +0100413 ALOGV("SET_PARAMETER");
The Android Open Source Projectc048cae2009-03-13 13:04:22 -0700414 CHECK_INTERFACE(IMediaRecorder, data, reply);
415 reply->writeInt32(setParameters(data.readString8()));
416 return NO_ERROR;
417 } break;
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800418 case SET_LISTENER: {
Steve Block3856b092011-10-20 11:56:00 +0100419 ALOGV("SET_LISTENER");
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800420 CHECK_INTERFACE(IMediaRecorder, data, reply);
James Dong37047fc2010-06-25 17:06:47 -0700421 sp<IMediaRecorderClient> listener =
422 interface_cast<IMediaRecorderClient>(data.readStrongBinder());
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800423 reply->writeInt32(setListener(listener));
424 return NO_ERROR;
425 } break;
426 case SET_PREVIEW_SURFACE: {
Steve Block3856b092011-10-20 11:56:00 +0100427 ALOGV("SET_PREVIEW_SURFACE");
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800428 CHECK_INTERFACE(IMediaRecorder, data, reply);
Jamie Gennis4b791682010-08-10 16:37:53 -0700429 sp<Surface> surface = Surface::readFromParcel(data);
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800430 reply->writeInt32(setPreviewSurface(surface));
431 return NO_ERROR;
432 } break;
433 case SET_CAMERA: {
Steve Block3856b092011-10-20 11:56:00 +0100434 ALOGV("SET_CAMERA");
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800435 CHECK_INTERFACE(IMediaRecorder, data, reply);
436 sp<ICamera> camera = interface_cast<ICamera>(data.readStrongBinder());
Wu-cheng Li4ca2c7c2011-06-01 17:22:24 +0800437 sp<ICameraRecordingProxy> proxy =
438 interface_cast<ICameraRecordingProxy>(data.readStrongBinder());
439 reply->writeInt32(setCamera(camera, proxy));
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800440 return NO_ERROR;
441 } break;
Pannag Sanketib33f3402011-07-01 17:39:39 -0700442 case QUERY_SURFACE_MEDIASOURCE: {
Steve Block3856b092011-10-20 11:56:00 +0100443 ALOGV("QUERY_SURFACE_MEDIASOURCE");
Pannag Sanketib33f3402011-07-01 17:39:39 -0700444 CHECK_INTERFACE(IMediaRecorder, data, reply);
445 // call the mediaserver side to create
446 // a surfacemediasource
447 sp<ISurfaceTexture> surfaceMediaSource = querySurfaceMediaSource();
448 // The mediaserver might have failed to create a source
449 int returnedNull= (surfaceMediaSource == NULL) ? 1 : 0 ;
450 reply->writeInt32(returnedNull);
451 if (!returnedNull) {
452 reply->writeStrongBinder(surfaceMediaSource->asBinder());
453 }
454 return NO_ERROR;
455 } break;
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800456 default:
457 return BBinder::onTransact(code, data, reply, flags);
458 }
459}
460
461// ----------------------------------------------------------------------------
462
463}; // namespace android