IMediaRecorder.cpp revision e53b9ead781c36e96d6b6f012ddffc93a3d80f0d
120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber/* 220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ** 320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ** Copyright 2008, The Android Open Source Project 420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ** 520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ** Licensed under the Apache License, Version 2.0 (the "License"); 620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ** you may not use this file except in compliance with the License. 720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ** You may obtain a copy of the License at 820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ** 920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ** http://www.apache.org/licenses/LICENSE-2.0 1020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ** 1120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ** Unless required by applicable law or agreed to in writing, software 1220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ** distributed under the License is distributed on an "AS IS" BASIS, 1320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ** See the License for the specific language governing permissions and 1520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ** limitations under the License. 1620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber */ 17050b28a593350047845a45a14cc5026221ac1620James Dong 18050b28a593350047845a45a14cc5026221ac1620James Dong//#define LOG_NDEBUG 0 19050b28a593350047845a45a14cc5026221ac1620James Dong#define LOG_TAG "IMediaRecorder" 20050b28a593350047845a45a14cc5026221ac1620James Dong#include <utils/Log.h> 2120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include <binder/Parcel.h> 2220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include <camera/ICamera.h> 2320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include <media/IMediaRecorderClient.h> 2420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include <media/IMediaRecorder.h> 2520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include <gui/Surface.h> 2620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include <gui/ISurfaceTexture.h> 2720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include <unistd.h> 2820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 290c89199745bc1bf05b997fc7c342017807676b6fAndreas Huber 3018291bc20e55e8f3fd5feb786771a8ed32c19c59Andreas Hubernamespace android { 3103b268eac37ca2589bfff0bf58daf79d29cc14f4Andreas Huber 3220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberenum { 3320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber RELEASE = IBinder::FIRST_CALL_TRANSACTION, 34d599cd4573b5a2d5914c5040e0565ef866749b77James Dong INIT, 35365a963142093a1cd8efdcea76b5f65096a5b115James Dong CLOSE, 3620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber QUERY_SURFACE_MEDIASOURCE, 3720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber RESET, 3820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber STOP, 3920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber START, 4020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber PREPARE, 4125b130939339d57789a86fac837a2a8cedbcb7d8Andreas Huber GET_MAX_AMPLITUDE, 4220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber SET_VIDEO_SOURCE, 4320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber SET_AUDIO_SOURCE, 44f60cafe0e6aad8f9ce54660fa88b651ae4e749e6James Dong SET_OUTPUT_FORMAT, 4520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber SET_VIDEO_ENCODER, 46a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong SET_AUDIO_ENCODER, 4725b130939339d57789a86fac837a2a8cedbcb7d8Andreas Huber SET_OUTPUT_FILE_PATH, 4820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber SET_OUTPUT_FILE_FD, 493b240d6bf235f6f6b40ee4c37a2862de286ca1e4Andreas Huber SET_VIDEO_SIZE, 50d599cd4573b5a2d5914c5040e0565ef866749b77James Dong SET_VIDEO_FRAMERATE, 511acfe8649f8169caf2ff098c2dc2de880d9a3760James Dong SET_PARAMETERS, 5220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber SET_PREVIEW_SURFACE, 5320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber SET_CAMERA, 5420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber SET_LISTENER 5520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber}; 56693d271e62a3726689ff68f4505ba49228eb94b2Andreas Huber 5720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberclass BpMediaRecorder: public BpInterface<IMediaRecorder> 58a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong{ 59a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dongpublic: 603b240d6bf235f6f6b40ee4c37a2862de286ca1e4Andreas Huber BpMediaRecorder(const sp<IBinder>& impl) 61d599cd4573b5a2d5914c5040e0565ef866749b77James Dong : BpInterface<IMediaRecorder>(impl) 6220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber { 6320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } 6420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 6520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber status_t setCamera(const sp<ICamera>& camera, const sp<ICameraRecordingProxy>& proxy) 6620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber { 6720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ALOGV("setCamera(%p,%p)", camera.get(), proxy.get()); 6820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber Parcel data, reply; 6913aec890216948b0c364f8f92792129d0335f506James Dong data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor()); 70be83c9e8c71ce16c0d0e9ed9df525510a49a541bJames Dong data.writeStrongBinder(camera->asBinder()); 71be83c9e8c71ce16c0d0e9ed9df525510a49a541bJames Dong data.writeStrongBinder(proxy->asBinder()); 7213aec890216948b0c364f8f92792129d0335f506James Dong remote()->transact(SET_CAMERA, data, &reply); 7313aec890216948b0c364f8f92792129d0335f506James Dong return reply.readInt32(); 7413aec890216948b0c364f8f92792129d0335f506James Dong } 7513aec890216948b0c364f8f92792129d0335f506James Dong 7613aec890216948b0c364f8f92792129d0335f506James Dong sp<ISurfaceTexture> querySurfaceMediaSource() 7713aec890216948b0c364f8f92792129d0335f506James Dong { 7813aec890216948b0c364f8f92792129d0335f506James Dong ALOGV("Query SurfaceMediaSource"); 7913aec890216948b0c364f8f92792129d0335f506James Dong Parcel data, reply; 8013aec890216948b0c364f8f92792129d0335f506James Dong data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor()); 8113aec890216948b0c364f8f92792129d0335f506James Dong remote()->transact(QUERY_SURFACE_MEDIASOURCE, data, &reply); 8213aec890216948b0c364f8f92792129d0335f506James Dong int returnedNull = reply.readInt32(); 8313aec890216948b0c364f8f92792129d0335f506James Dong if (returnedNull) { 8413aec890216948b0c364f8f92792129d0335f506James Dong return NULL; 8513aec890216948b0c364f8f92792129d0335f506James Dong } 8613aec890216948b0c364f8f92792129d0335f506James Dong return interface_cast<ISurfaceTexture>(reply.readStrongBinder()); 8720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } 88050b28a593350047845a45a14cc5026221ac1620James Dong 89365a963142093a1cd8efdcea76b5f65096a5b115James Dong status_t setPreviewSurface(const sp<Surface>& surface) 90050b28a593350047845a45a14cc5026221ac1620James Dong { 91be83c9e8c71ce16c0d0e9ed9df525510a49a541bJames Dong ALOGV("setPreviewSurface(%p)", surface.get()); 92be83c9e8c71ce16c0d0e9ed9df525510a49a541bJames Dong Parcel data, reply; 93be83c9e8c71ce16c0d0e9ed9df525510a49a541bJames Dong data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor()); 94be83c9e8c71ce16c0d0e9ed9df525510a49a541bJames Dong Surface::writeToParcel(surface, &data); 95be83c9e8c71ce16c0d0e9ed9df525510a49a541bJames Dong remote()->transact(SET_PREVIEW_SURFACE, data, &reply); 96be83c9e8c71ce16c0d0e9ed9df525510a49a541bJames Dong return reply.readInt32(); 97be83c9e8c71ce16c0d0e9ed9df525510a49a541bJames Dong } 98be83c9e8c71ce16c0d0e9ed9df525510a49a541bJames Dong 99be83c9e8c71ce16c0d0e9ed9df525510a49a541bJames Dong status_t init() 100be83c9e8c71ce16c0d0e9ed9df525510a49a541bJames Dong { 10120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ALOGV("init"); 10220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber Parcel data, reply; 103548e31844937b37518fbb62ff69e9ff1f794183bAndreas Huber data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor()); 10420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber remote()->transact(INIT, data, &reply); 10525b130939339d57789a86fac837a2a8cedbcb7d8Andreas Huber return reply.readInt32(); 1063c0131f02b6f008321608044c53bccce2ac5f6ddJames Dong } 10725b130939339d57789a86fac837a2a8cedbcb7d8Andreas Huber 10820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber status_t setVideoSource(int vs) 10920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber { 11020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ALOGV("setVideoSource(%d)", vs); 11103b268eac37ca2589bfff0bf58daf79d29cc14f4Andreas Huber Parcel data, reply; 11203b268eac37ca2589bfff0bf58daf79d29cc14f4Andreas Huber data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor()); 11313aec890216948b0c364f8f92792129d0335f506James Dong data.writeInt32(vs); 114365a963142093a1cd8efdcea76b5f65096a5b115James Dong remote()->transact(SET_VIDEO_SOURCE, data, &reply); 115365a963142093a1cd8efdcea76b5f65096a5b115James Dong return reply.readInt32(); 116365a963142093a1cd8efdcea76b5f65096a5b115James Dong } 11703b268eac37ca2589bfff0bf58daf79d29cc14f4Andreas Huber 11820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber status_t setAudioSource(int as) 11920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber { 12020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ALOGV("setAudioSource(%d)", as); 12120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber Parcel data, reply; 12203b268eac37ca2589bfff0bf58daf79d29cc14f4Andreas Huber data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor()); 12303b268eac37ca2589bfff0bf58daf79d29cc14f4Andreas Huber data.writeInt32(as); 12420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber remote()->transact(SET_AUDIO_SOURCE, data, &reply); 12520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return reply.readInt32(); 1261acfe8649f8169caf2ff098c2dc2de880d9a3760James Dong } 127a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong 128a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong status_t setOutputFormat(int of) 12920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber { 13013aec890216948b0c364f8f92792129d0335f506James Dong ALOGV("setOutputFormat(%d)", of); 1317837c17063a4c50bc856ba59418516fdab731de7James Dong Parcel data, reply; 13213aec890216948b0c364f8f92792129d0335f506James Dong data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor()); 1330c89199745bc1bf05b997fc7c342017807676b6fAndreas Huber data.writeInt32(of); 13420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber remote()->transact(SET_OUTPUT_FORMAT, data, &reply); 13520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return reply.readInt32(); 13630ab66297501757d745b9ae10da61adcd891f497Andreas Huber } 13730ab66297501757d745b9ae10da61adcd891f497Andreas Huber 1381acfe8649f8169caf2ff098c2dc2de880d9a3760James Dong status_t setVideoEncoder(int ve) 139a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong { 140a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong ALOGV("setVideoEncoder(%d)", ve); 14130ab66297501757d745b9ae10da61adcd891f497Andreas Huber Parcel data, reply; 14213aec890216948b0c364f8f92792129d0335f506James Dong data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor()); 1437837c17063a4c50bc856ba59418516fdab731de7James Dong data.writeInt32(ve); 14413aec890216948b0c364f8f92792129d0335f506James Dong remote()->transact(SET_VIDEO_ENCODER, data, &reply); 14530ab66297501757d745b9ae10da61adcd891f497Andreas Huber return reply.readInt32(); 14630ab66297501757d745b9ae10da61adcd891f497Andreas Huber } 14730ab66297501757d745b9ae10da61adcd891f497Andreas Huber 14820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber status_t setAudioEncoder(int ae) 14920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber { 15020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ALOGV("setAudioEncoder(%d)", ae); 15120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber Parcel data, reply; 15220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor()); 15320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber data.writeInt32(ae); 15420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber remote()->transact(SET_AUDIO_ENCODER, data, &reply); 15520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return reply.readInt32(); 15620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } 15720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 1582dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber status_t setOutputFile(const char* path) 15925b130939339d57789a86fac837a2a8cedbcb7d8Andreas Huber { 16020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ALOGV("setOutputFile(%s)", path); 1612dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber Parcel data, reply; 1622dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor()); 16320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber data.writeCString(path); 16420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber remote()->transact(SET_OUTPUT_FILE_PATH, data, &reply); 165a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong return reply.readInt32(); 166f60cafe0e6aad8f9ce54660fa88b651ae4e749e6James Dong } 167a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong 168a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong status_t setOutputFile(int fd, int64_t offset, int64_t length) { 169f60cafe0e6aad8f9ce54660fa88b651ae4e749e6James Dong ALOGV("setOutputFile(%d, %lld, %lld)", fd, offset, length); 170a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong Parcel data, reply; 171a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor()); 172a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong data.writeFileDescriptor(fd); 173a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong data.writeInt64(offset); 174a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong data.writeInt64(length); 175a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong remote()->transact(SET_OUTPUT_FILE_FD, data, &reply); 176a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong return reply.readInt32(); 177a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong } 178a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong 179a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong status_t setVideoSize(int width, int height) 180a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong { 181a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong ALOGV("setVideoSize(%dx%d)", width, height); 182a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong Parcel data, reply; 18325b130939339d57789a86fac837a2a8cedbcb7d8Andreas Huber data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor()); 18420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber data.writeInt32(width); 18525b130939339d57789a86fac837a2a8cedbcb7d8Andreas Huber data.writeInt32(height); 18620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber remote()->transact(SET_VIDEO_SIZE, data, &reply); 18720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return reply.readInt32(); 188065d1aff96818df54456053f1574aec8a234d0deJames Dong } 189a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong 190a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong status_t setVideoFrameRate(int frames_per_second) 191a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong { 192a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong ALOGV("setVideoFrameRate(%d)", frames_per_second); 193a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong Parcel data, reply; 194a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor()); 195a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong data.writeInt32(frames_per_second); 196a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong remote()->transact(SET_VIDEO_FRAMERATE, data, &reply); 1977837c17063a4c50bc856ba59418516fdab731de7James Dong return reply.readInt32(); 1987837c17063a4c50bc856ba59418516fdab731de7James Dong } 1997837c17063a4c50bc856ba59418516fdab731de7James Dong 2007837c17063a4c50bc856ba59418516fdab731de7James Dong status_t setParameters(const String8& params) 2017837c17063a4c50bc856ba59418516fdab731de7James Dong { 20220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ALOGV("setParameter(%s)", params.string()); 20320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber Parcel data, reply; 20420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor()); 20520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber data.writeString8(params); 20620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber remote()->transact(SET_PARAMETERS, data, &reply); 20720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return reply.readInt32(); 2087837c17063a4c50bc856ba59418516fdab731de7James Dong } 20920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 2107837c17063a4c50bc856ba59418516fdab731de7James Dong status_t setListener(const sp<IMediaRecorderClient>& listener) 2117837c17063a4c50bc856ba59418516fdab731de7James Dong { 2127837c17063a4c50bc856ba59418516fdab731de7James Dong ALOGV("setListener(%p)", listener.get()); 2137837c17063a4c50bc856ba59418516fdab731de7James Dong Parcel data, reply; 2147837c17063a4c50bc856ba59418516fdab731de7James Dong data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor()); 2157837c17063a4c50bc856ba59418516fdab731de7James Dong data.writeStrongBinder(listener->asBinder()); 2167837c17063a4c50bc856ba59418516fdab731de7James Dong remote()->transact(SET_LISTENER, data, &reply); 2177837c17063a4c50bc856ba59418516fdab731de7James Dong return reply.readInt32(); 2187837c17063a4c50bc856ba59418516fdab731de7James Dong } 2197837c17063a4c50bc856ba59418516fdab731de7James Dong 2207837c17063a4c50bc856ba59418516fdab731de7James Dong status_t prepare() 2217837c17063a4c50bc856ba59418516fdab731de7James Dong { 2227837c17063a4c50bc856ba59418516fdab731de7James Dong ALOGV("prepare"); 2231acfe8649f8169caf2ff098c2dc2de880d9a3760James Dong Parcel data, reply; 2241acfe8649f8169caf2ff098c2dc2de880d9a3760James Dong data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor()); 2251acfe8649f8169caf2ff098c2dc2de880d9a3760James Dong remote()->transact(PREPARE, data, &reply); 2261acfe8649f8169caf2ff098c2dc2de880d9a3760James Dong return reply.readInt32(); 2271acfe8649f8169caf2ff098c2dc2de880d9a3760James Dong } 22825b130939339d57789a86fac837a2a8cedbcb7d8Andreas Huber 229a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong status_t getMaxAmplitude(int* max) 230a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong { 231a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong ALOGV("getMaxAmplitude"); 23220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber Parcel data, reply; 233a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor()); 23425b130939339d57789a86fac837a2a8cedbcb7d8Andreas Huber remote()->transact(GET_MAX_AMPLITUDE, data, &reply); 23520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber *max = reply.readInt32(); 23620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return reply.readInt32(); 237a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong } 238a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong 239a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong status_t start() 240a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong { 241a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong ALOGV("start"); 242a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong Parcel data, reply; 243a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor()); 244a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong remote()->transact(START, data, &reply); 245a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong return reply.readInt32(); 246a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong } 247a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong 24820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber status_t stop() 24920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber { 25020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ALOGV("stop"); 25120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber Parcel data, reply; 25220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor()); 25320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber remote()->transact(STOP, data, &reply); 25420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return reply.readInt32(); 25520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } 25620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 25720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber status_t reset() 2583b240d6bf235f6f6b40ee4c37a2862de286ca1e4Andreas Huber { 25920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ALOGV("reset"); 26020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber Parcel data, reply; 26120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor()); 26220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber remote()->transact(RESET, data, &reply); 26320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return reply.readInt32(); 2647837c17063a4c50bc856ba59418516fdab731de7James Dong } 26520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 2661acfe8649f8169caf2ff098c2dc2de880d9a3760James Dong status_t close() 2671acfe8649f8169caf2ff098c2dc2de880d9a3760James Dong { 2681acfe8649f8169caf2ff098c2dc2de880d9a3760James Dong ALOGV("close"); 2691acfe8649f8169caf2ff098c2dc2de880d9a3760James Dong Parcel data, reply; 2701acfe8649f8169caf2ff098c2dc2de880d9a3760James Dong data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor()); 2711acfe8649f8169caf2ff098c2dc2de880d9a3760James Dong remote()->transact(CLOSE, data, &reply); 2721acfe8649f8169caf2ff098c2dc2de880d9a3760James Dong return reply.readInt32(); 2731acfe8649f8169caf2ff098c2dc2de880d9a3760James Dong } 2741acfe8649f8169caf2ff098c2dc2de880d9a3760James Dong 2751acfe8649f8169caf2ff098c2dc2de880d9a3760James Dong status_t release() 2767837c17063a4c50bc856ba59418516fdab731de7James Dong { 27720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ALOGV("release"); 27820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber Parcel data, reply; 2797837c17063a4c50bc856ba59418516fdab731de7James Dong data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor()); 2807837c17063a4c50bc856ba59418516fdab731de7James Dong remote()->transact(RELEASE, data, &reply); 2817837c17063a4c50bc856ba59418516fdab731de7James Dong return reply.readInt32(); 2827837c17063a4c50bc856ba59418516fdab731de7James Dong } 2837837c17063a4c50bc856ba59418516fdab731de7James Dong}; 2841acfe8649f8169caf2ff098c2dc2de880d9a3760James Dong 2851acfe8649f8169caf2ff098c2dc2de880d9a3760James DongIMPLEMENT_META_INTERFACE(MediaRecorder, "android.media.IMediaRecorder"); 28620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 28720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber// ---------------------------------------------------------------------- 28820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 28920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberstatus_t BnMediaRecorder::onTransact( 29020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 29120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber{ 29220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber switch (code) { 2931acfe8649f8169caf2ff098c2dc2de880d9a3760James Dong case RELEASE: { 2941acfe8649f8169caf2ff098c2dc2de880d9a3760James Dong ALOGV("RELEASE"); 2951acfe8649f8169caf2ff098c2dc2de880d9a3760James Dong CHECK_INTERFACE(IMediaRecorder, data, reply); 29620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber reply->writeInt32(release()); 29720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return NO_ERROR; 29820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } break; 29920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber case INIT: { 30020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ALOGV("INIT"); 30120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber CHECK_INTERFACE(IMediaRecorder, data, reply); 30220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber reply->writeInt32(init()); 30320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return NO_ERROR; 30420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } break; 30520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber case CLOSE: { 30620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ALOGV("CLOSE"); 30720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber CHECK_INTERFACE(IMediaRecorder, data, reply); 30820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber reply->writeInt32(close()); 30920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return NO_ERROR; 31020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } break; 31120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber case RESET: { 31220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ALOGV("RESET"); 31320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber CHECK_INTERFACE(IMediaRecorder, data, reply); 31420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber reply->writeInt32(reset()); 31520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return NO_ERROR; 31620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } break; 31720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber case STOP: { 31820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ALOGV("STOP"); 31920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber CHECK_INTERFACE(IMediaRecorder, data, reply); 32020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber reply->writeInt32(stop()); 3211acfe8649f8169caf2ff098c2dc2de880d9a3760James Dong return NO_ERROR; 32220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } break; 32320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber case START: { 32420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ALOGV("START"); 3257837c17063a4c50bc856ba59418516fdab731de7James Dong CHECK_INTERFACE(IMediaRecorder, data, reply); 3267837c17063a4c50bc856ba59418516fdab731de7James Dong reply->writeInt32(start()); 3277837c17063a4c50bc856ba59418516fdab731de7James Dong return NO_ERROR; 3287837c17063a4c50bc856ba59418516fdab731de7James Dong } break; 3297837c17063a4c50bc856ba59418516fdab731de7James Dong case PREPARE: { 3307837c17063a4c50bc856ba59418516fdab731de7James Dong ALOGV("PREPARE"); 3317837c17063a4c50bc856ba59418516fdab731de7James Dong CHECK_INTERFACE(IMediaRecorder, data, reply); 3327837c17063a4c50bc856ba59418516fdab731de7James Dong reply->writeInt32(prepare()); 3337837c17063a4c50bc856ba59418516fdab731de7James Dong return NO_ERROR; 3347837c17063a4c50bc856ba59418516fdab731de7James Dong } break; 3357837c17063a4c50bc856ba59418516fdab731de7James Dong case GET_MAX_AMPLITUDE: { 3367837c17063a4c50bc856ba59418516fdab731de7James Dong ALOGV("GET_MAX_AMPLITUDE"); 3377837c17063a4c50bc856ba59418516fdab731de7James Dong CHECK_INTERFACE(IMediaRecorder, data, reply); 3387837c17063a4c50bc856ba59418516fdab731de7James Dong int max = 0; 3397837c17063a4c50bc856ba59418516fdab731de7James Dong status_t ret = getMaxAmplitude(&max); 3407837c17063a4c50bc856ba59418516fdab731de7James Dong reply->writeInt32(max); 3417837c17063a4c50bc856ba59418516fdab731de7James Dong reply->writeInt32(ret); 3427837c17063a4c50bc856ba59418516fdab731de7James Dong return NO_ERROR; 3437837c17063a4c50bc856ba59418516fdab731de7James Dong } break; 3447837c17063a4c50bc856ba59418516fdab731de7James Dong case SET_VIDEO_SOURCE: { 3457837c17063a4c50bc856ba59418516fdab731de7James Dong ALOGV("SET_VIDEO_SOURCE"); 3460c89199745bc1bf05b997fc7c342017807676b6fAndreas Huber CHECK_INTERFACE(IMediaRecorder, data, reply); 34720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber int vs = data.readInt32(); 3487837c17063a4c50bc856ba59418516fdab731de7James Dong reply->writeInt32(setVideoSource(vs)); 34920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return NO_ERROR; 35020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } break; 351a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong case SET_AUDIO_SOURCE: { 35220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ALOGV("SET_AUDIO_SOURCE"); 35320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber CHECK_INTERFACE(IMediaRecorder, data, reply); 35413aec890216948b0c364f8f92792129d0335f506James Dong int as = data.readInt32(); 35513aec890216948b0c364f8f92792129d0335f506James Dong reply->writeInt32(setAudioSource(as)); 35613aec890216948b0c364f8f92792129d0335f506James Dong return NO_ERROR; 35713aec890216948b0c364f8f92792129d0335f506James Dong } break; 35813aec890216948b0c364f8f92792129d0335f506James Dong case SET_OUTPUT_FORMAT: { 35913aec890216948b0c364f8f92792129d0335f506James Dong ALOGV("SET_OUTPUT_FORMAT"); 36013aec890216948b0c364f8f92792129d0335f506James Dong CHECK_INTERFACE(IMediaRecorder, data, reply); 36113aec890216948b0c364f8f92792129d0335f506James Dong int of = data.readInt32(); 36213aec890216948b0c364f8f92792129d0335f506James Dong reply->writeInt32(setOutputFormat(of)); 36313aec890216948b0c364f8f92792129d0335f506James Dong return NO_ERROR; 36413aec890216948b0c364f8f92792129d0335f506James Dong } break; 36513aec890216948b0c364f8f92792129d0335f506James Dong case SET_VIDEO_ENCODER: { 36620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ALOGV("SET_VIDEO_ENCODER"); 36713aec890216948b0c364f8f92792129d0335f506James Dong CHECK_INTERFACE(IMediaRecorder, data, reply); 36820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber int ve = data.readInt32(); 36920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber reply->writeInt32(setVideoEncoder(ve)); 37020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return NO_ERROR; 37120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } break; 37220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber case SET_AUDIO_ENCODER: { 37320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ALOGV("SET_AUDIO_ENCODER"); 37420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber CHECK_INTERFACE(IMediaRecorder, data, reply); 37520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber int ae = data.readInt32(); 37620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber reply->writeInt32(setAudioEncoder(ae)); 37720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return NO_ERROR; 37803b268eac37ca2589bfff0bf58daf79d29cc14f4Andreas Huber 37903b268eac37ca2589bfff0bf58daf79d29cc14f4Andreas Huber } break; 38003b268eac37ca2589bfff0bf58daf79d29cc14f4Andreas Huber case SET_OUTPUT_FILE_PATH: { 38103b268eac37ca2589bfff0bf58daf79d29cc14f4Andreas Huber ALOGV("SET_OUTPUT_FILE_PATH"); 38203b268eac37ca2589bfff0bf58daf79d29cc14f4Andreas Huber CHECK_INTERFACE(IMediaRecorder, data, reply); 38303b268eac37ca2589bfff0bf58daf79d29cc14f4Andreas Huber const char* path = data.readCString(); 38403b268eac37ca2589bfff0bf58daf79d29cc14f4Andreas Huber reply->writeInt32(setOutputFile(path)); 38503b268eac37ca2589bfff0bf58daf79d29cc14f4Andreas Huber return NO_ERROR; 38603b268eac37ca2589bfff0bf58daf79d29cc14f4Andreas Huber } break; 38703b268eac37ca2589bfff0bf58daf79d29cc14f4Andreas Huber case SET_OUTPUT_FILE_FD: { 38803b268eac37ca2589bfff0bf58daf79d29cc14f4Andreas Huber ALOGV("SET_OUTPUT_FILE_FD"); 38903b268eac37ca2589bfff0bf58daf79d29cc14f4Andreas Huber CHECK_INTERFACE(IMediaRecorder, data, reply); 39003b268eac37ca2589bfff0bf58daf79d29cc14f4Andreas Huber int fd = dup(data.readFileDescriptor()); 39103b268eac37ca2589bfff0bf58daf79d29cc14f4Andreas Huber int64_t offset = data.readInt64(); 39213aec890216948b0c364f8f92792129d0335f506James Dong int64_t length = data.readInt64(); 39330ab66297501757d745b9ae10da61adcd891f497Andreas Huber reply->writeInt32(setOutputFile(fd, offset, length)); 39430ab66297501757d745b9ae10da61adcd891f497Andreas Huber ::close(fd); 39530ab66297501757d745b9ae10da61adcd891f497Andreas Huber return NO_ERROR; 39603b268eac37ca2589bfff0bf58daf79d29cc14f4Andreas Huber } break; 39703b268eac37ca2589bfff0bf58daf79d29cc14f4Andreas Huber case SET_VIDEO_SIZE: { 39803b268eac37ca2589bfff0bf58daf79d29cc14f4Andreas Huber ALOGV("SET_VIDEO_SIZE"); 39903b268eac37ca2589bfff0bf58daf79d29cc14f4Andreas Huber CHECK_INTERFACE(IMediaRecorder, data, reply); 40003b268eac37ca2589bfff0bf58daf79d29cc14f4Andreas Huber int width = data.readInt32(); 40103b268eac37ca2589bfff0bf58daf79d29cc14f4Andreas Huber int height = data.readInt32(); 40203b268eac37ca2589bfff0bf58daf79d29cc14f4Andreas Huber reply->writeInt32(setVideoSize(width, height)); 40303b268eac37ca2589bfff0bf58daf79d29cc14f4Andreas Huber return NO_ERROR; 40403b268eac37ca2589bfff0bf58daf79d29cc14f4Andreas Huber } break; 40503b268eac37ca2589bfff0bf58daf79d29cc14f4Andreas Huber case SET_VIDEO_FRAMERATE: { 40603b268eac37ca2589bfff0bf58daf79d29cc14f4Andreas Huber ALOGV("SET_VIDEO_FRAMERATE"); 40730ab66297501757d745b9ae10da61adcd891f497Andreas Huber CHECK_INTERFACE(IMediaRecorder, data, reply); 40830ab66297501757d745b9ae10da61adcd891f497Andreas Huber int frames_per_second = data.readInt32(); 40930ab66297501757d745b9ae10da61adcd891f497Andreas Huber reply->writeInt32(setVideoFrameRate(frames_per_second)); 41030ab66297501757d745b9ae10da61adcd891f497Andreas Huber return NO_ERROR; 41130ab66297501757d745b9ae10da61adcd891f497Andreas Huber } break; 41230ab66297501757d745b9ae10da61adcd891f497Andreas Huber case SET_PARAMETERS: { 41303b268eac37ca2589bfff0bf58daf79d29cc14f4Andreas Huber ALOGV("SET_PARAMETER"); 41430ab66297501757d745b9ae10da61adcd891f497Andreas Huber CHECK_INTERFACE(IMediaRecorder, data, reply); 41530ab66297501757d745b9ae10da61adcd891f497Andreas Huber reply->writeInt32(setParameters(data.readString8())); 41630ab66297501757d745b9ae10da61adcd891f497Andreas Huber return NO_ERROR; 41730ab66297501757d745b9ae10da61adcd891f497Andreas Huber } break; 41803b268eac37ca2589bfff0bf58daf79d29cc14f4Andreas Huber case SET_LISTENER: { 41903b268eac37ca2589bfff0bf58daf79d29cc14f4Andreas Huber ALOGV("SET_LISTENER"); 42003b268eac37ca2589bfff0bf58daf79d29cc14f4Andreas Huber CHECK_INTERFACE(IMediaRecorder, data, reply); 42130ab66297501757d745b9ae10da61adcd891f497Andreas Huber sp<IMediaRecorderClient> listener = 42203b268eac37ca2589bfff0bf58daf79d29cc14f4Andreas Huber interface_cast<IMediaRecorderClient>(data.readStrongBinder()); 42330ab66297501757d745b9ae10da61adcd891f497Andreas Huber reply->writeInt32(setListener(listener)); 42430ab66297501757d745b9ae10da61adcd891f497Andreas Huber return NO_ERROR; 42530ab66297501757d745b9ae10da61adcd891f497Andreas Huber } break; 42630ab66297501757d745b9ae10da61adcd891f497Andreas Huber case SET_PREVIEW_SURFACE: { 4277837c17063a4c50bc856ba59418516fdab731de7James Dong ALOGV("SET_PREVIEW_SURFACE"); 4287837c17063a4c50bc856ba59418516fdab731de7James Dong CHECK_INTERFACE(IMediaRecorder, data, reply); 4297837c17063a4c50bc856ba59418516fdab731de7James Dong sp<Surface> surface = Surface::readFromParcel(data); 4307837c17063a4c50bc856ba59418516fdab731de7James Dong reply->writeInt32(setPreviewSurface(surface)); 4317837c17063a4c50bc856ba59418516fdab731de7James Dong return NO_ERROR; 4321acfe8649f8169caf2ff098c2dc2de880d9a3760James Dong } break; 4331acfe8649f8169caf2ff098c2dc2de880d9a3760James Dong case SET_CAMERA: { 4347837c17063a4c50bc856ba59418516fdab731de7James Dong ALOGV("SET_CAMERA"); 4357837c17063a4c50bc856ba59418516fdab731de7James Dong CHECK_INTERFACE(IMediaRecorder, data, reply); 4367837c17063a4c50bc856ba59418516fdab731de7James Dong sp<ICamera> camera = interface_cast<ICamera>(data.readStrongBinder()); 4377837c17063a4c50bc856ba59418516fdab731de7James Dong sp<ICameraRecordingProxy> proxy = 4387837c17063a4c50bc856ba59418516fdab731de7James Dong interface_cast<ICameraRecordingProxy>(data.readStrongBinder()); 4397837c17063a4c50bc856ba59418516fdab731de7James Dong reply->writeInt32(setCamera(camera, proxy)); 4407837c17063a4c50bc856ba59418516fdab731de7James Dong return NO_ERROR; 4417837c17063a4c50bc856ba59418516fdab731de7James Dong } break; 4427837c17063a4c50bc856ba59418516fdab731de7James Dong case QUERY_SURFACE_MEDIASOURCE: { 4437837c17063a4c50bc856ba59418516fdab731de7James Dong ALOGV("QUERY_SURFACE_MEDIASOURCE"); 4447837c17063a4c50bc856ba59418516fdab731de7James Dong CHECK_INTERFACE(IMediaRecorder, data, reply); 4457837c17063a4c50bc856ba59418516fdab731de7James Dong // call the mediaserver side to create 4467837c17063a4c50bc856ba59418516fdab731de7James Dong // a surfacemediasource 4477837c17063a4c50bc856ba59418516fdab731de7James Dong sp<ISurfaceTexture> surfaceMediaSource = querySurfaceMediaSource(); 4487837c17063a4c50bc856ba59418516fdab731de7James Dong // The mediaserver might have failed to create a source 4497837c17063a4c50bc856ba59418516fdab731de7James Dong int returnedNull= (surfaceMediaSource == NULL) ? 1 : 0 ; 4507837c17063a4c50bc856ba59418516fdab731de7James Dong reply->writeInt32(returnedNull); 4517837c17063a4c50bc856ba59418516fdab731de7James Dong if (!returnedNull) { 4527837c17063a4c50bc856ba59418516fdab731de7James Dong reply->writeStrongBinder(surfaceMediaSource->asBinder()); 4537837c17063a4c50bc856ba59418516fdab731de7James Dong } 4547837c17063a4c50bc856ba59418516fdab731de7James Dong return NO_ERROR; 4557837c17063a4c50bc856ba59418516fdab731de7James Dong } break; 4567837c17063a4c50bc856ba59418516fdab731de7James Dong default: 4577837c17063a4c50bc856ba59418516fdab731de7James Dong return BBinder::onTransact(code, data, reply, flags); 45820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } 4590c89199745bc1bf05b997fc7c342017807676b6fAndreas Huber} 46020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 4617837c17063a4c50bc856ba59418516fdab731de7James Dong// ---------------------------------------------------------------------------- 4627837c17063a4c50bc856ba59418516fdab731de7James Dong 46320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber}; // namespace android 46420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber