Bumble-Bee: libcamera_client.c

File libcamera_client.c, 153.5 KB (added by admin, 14 years ago)
Line 
1/* This file has been generated by the Hex-Rays decompiler.
2   Copyright (c) 2007-2011 Hex-Rays <info@hex-rays.com>
3
4   Detected compiler: GNU C++
5*/
6
7#include <defs.h>
8
9
10//-------------------------------------------------------------------------
11// Data declarations
12
13extern char android::CameraParameters::KEY_PREVIEW_SIZE[13]; // weak
14extern char android::CameraParameters::KEY_SUPPORTED_PREVIEW_SIZES[20]; // weak
15extern char android::CameraParameters::KEY_PREVIEW_FORMAT[15]; // weak
16extern char android::CameraParameters::KEY_PREVIEW_FRAME_RATE[19]; // weak
17extern char android::CameraParameters::KEY_PREVIEW_FPS_RANGE[18]; // weak
18extern char android::CameraParameters::KEY_PICTURE_SIZE[13]; // weak
19extern char android::CameraParameters::KEY_SUPPORTED_PICTURE_SIZES[20]; // weak
20extern char android::CameraParameters::KEY_PICTURE_FORMAT[15]; // weak
21extern char aCamera[7]; // weak
22extern char aIcameraDied[13]; // weak
23extern char aSetshuttersoun[37]; // weak
24extern char aAppPassedNullS[24]; // weak
25extern char aCameraServerDi[20]; // weak
26extern char aNoListenerWasS[45]; // weak
27extern char aCameraRemoteIs[32]; // weak
28extern char aMedia_camera[13]; // weak
29extern char aCameraserviceN[40]; // weak
30extern char aNoCameraservic[19]; // weak
31extern char aCameraparamete[40]; // weak
32extern char aSS[9]; // weak
33extern char aCameraparams[13]; // weak
34extern char aDumpMmap_sizeD[21]; // weak
35extern char aSS_0[8]; // weak
36extern char aCannotFindDeli[37]; // weak
37extern char aPictureSizesSt[54]; // weak
38extern char aDxD[6]; // weak
39extern char aG[3]; // weak
40extern char aD[3]; // weak
41extern char asc_6BA8FA1D[2]; // weak
42extern char asc_6BA8FA1F[2]; // weak
43extern char aAndroid_hardwa[25]; // weak
44extern char aAndroid_hard_0[31]; // weak
45extern char aAndroid_hard_1[32]; // weak
46extern char _vtable_for_android::IBinder::DeathRecipient[76]; // weak
47extern char _vtable_for_android::BnInterface<android::ICameraClient>[176]; // weak
48extern char _VTT_for_android::BnInterface<android::ICameraClient>[44]; // weak
49extern char _vtable_for_android::Camera[208]; // weak
50extern char _VTT_for_android::Camera[80]; // weak
51extern char _vtable_for_android::Camera::DeathNotifier[76]; // weak
52extern char _VTT_for_android::Camera::DeathNotifier[16]; // weak
53extern char _vtable_for_android::SortedVector<android::key_value_pair_t<android::String8_android::String8>>[108]; // weak
54extern char _vtable_for_android::BnInterface<android::ICamera>[248]; // weak
55extern char _VTT_for_android::BnInterface<android::ICamera>[44]; // weak
56extern char _VTT_for_android::BpCamera[48]; // weak
57extern char _vtable_for_android::BpCamera[196]; // weak
58extern char _vtable_for_android::BpInterface<android::ICamera>[196]; // weak
59extern char _VTT_for_android::BpInterface<android::ICamera>[36]; // weak
60extern char _vtable_for_android::BnCamera[252]; // weak
61extern char _VTT_for_android::BnCamera[56]; // weak
62extern char _vtable_for_android::ICamera[164]; // weak
63extern char _VTT_for_android::ICamera[16]; // weak
64extern char _VTT_for_android::BpCameraClient[48]; // weak
65extern char _vtable_for_android::BpCameraClient[124]; // weak
66extern char _vtable_for_android::BpInterface<android::ICameraClient>[124]; // weak
67extern char _VTT_for_android::BpInterface<android::ICameraClient>[36]; // weak
68extern char _vtable_for_android::BnCameraClient[180]; // weak
69extern char _VTT_for_android::BnCameraClient[56]; // weak
70extern char _vtable_for_android::ICameraClient[92]; // weak
71extern char _VTT_for_android::ICameraClient[16]; // weak
72extern char _vtable_for_android::BnInterface<android::ICameraService>[180]; // weak
73extern char _VTT_for_android::BnInterface<android::ICameraService>[44]; // weak
74extern char _VTT_for_android::BpCameraService[48]; // weak
75extern char _vtable_for_android::BpCameraService[128]; // weak
76extern char _vtable_for_android::BpInterface<android::ICameraService>[128]; // weak
77extern char _VTT_for_android::BpInterface<android::ICameraService>[36]; // weak
78extern char _vtable_for_android::BnCameraService[184]; // weak
79extern char _VTT_for_android::BnCameraService[56]; // weak
80extern char _vtable_for_android::ICameraService[96]; // weak
81extern char _VTT_for_android::ICameraService[16]; // weak
82extern int android::Camera::mLock; // weak
83extern int android::Camera::mCameraService; // weak
84extern int android::Camera::mDeathNotifier; // weak
85extern int android::ICamera::descriptor; // weak
86extern int android::ICameraClient::descriptor; // weak
87extern int android::ICameraService::descriptor; // weak
88extern _UNKNOWN _dso_handle; // weak
89extern _UNKNOWN android::String16::_String16; // weak
90// extern _UNKNOWN _stack_chk_guard; weak
91
92//-------------------------------------------------------------------------
93// Function declarations
94
95// int __fastcall android::RefBase::_RefBase(_DWORD); weak
96// void __cdecl operator delete(void *); idb
97// int __fastcall android::BBinder::_BBinder(_DWORD, _DWORD); weak
98// int __fastcall android::RefBase::incStrong(_DWORD, _DWORD); weak
99// int __fastcall android::RefBase::decStrong(_DWORD, _DWORD); weak
100// int pthread_mutex_destroy(pthread_mutex_t *mutex);
101// int _android_log_print(_DWORD, _DWORD, const char *, ...); weak
102// int pthread_mutex_lock(pthread_mutex_t *mutex);
103// int pthread_mutex_unlock(pthread_mutex_t *mutex);
104// int __fastcall android::String8::String8(_DWORD); weak
105// int __fastcall android::String8::setTo(_DWORD, _DWORD); weak
106// int __fastcall android::String8::_String8(_DWORD); weak
107// int __fastcall android::Surface::getISurface(_DWORD, _DWORD); weak
108// int __fastcall android::BBinder::BBinder(_DWORD, _DWORD); weak
109// int __fastcall android::RefBase::RefBase(_DWORD); weak
110// int __fastcall operator new(_DWORD); weak
111// int __fastcall android::IInterface::asBinder(_DWORD, _DWORD); weak
112// int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr);
113// int __fastcall _aeabi_atexit(_DWORD, _DWORD, _DWORD); weak
114// int strzcmp16(void); weak
115// int __fastcall android::defaultServiceManager(_DWORD); weak
116// int __fastcall android::String16::String16(_DWORD, _DWORD); weak
117// int __fastcall android::String16::_String16(_DWORD); weak
118// int usleep(__useconds_t useconds);
119// int __fastcall android::RefBase::createWeak(_DWORD, _DWORD); weak
120// int __fastcall android::RefBase::weakref_type::decWeak(_DWORD, _DWORD); weak
121// int __fastcall android::BBinder::onTransact(_DWORD, _DWORD); weak
122// int snprintf(char *s, size_t maxlen, const char *format, ...);
123// int __fastcall android::String8::append(_DWORD, _DWORD); weak
124// ssize_t write(int fd, const void *buf, size_t n);
125// int __fastcall _stack_chk_fail(_DWORD); weak
126// __int32 strtol(const char *nptr, char **endptr, int base);
127// int __fastcall android::VectorImpl::push(_DWORD, _DWORD); weak
128// int __fastcall android::String8::String8(_DWORD, _DWORD); weak
129// int __fastcall android::SortedVectorImpl::remove(_DWORD, _DWORD); weak
130// int __fastcall android::String8::String8(_DWORD); weak
131// int __fastcall android::SortedVectorImpl::indexOf(_DWORD, _DWORD); weak
132// double strtod(const char *nptr, char **endptr);
133// int __fastcall android::SortedVectorImpl::add(_DWORD, _DWORD); weak
134// char *strchr(const char *s, int c);
135// int sprintf(char *s, const char *format, ...);
136// int android::VectorImpl::clear(void); weak
137// int __fastcall android::String8::String8(_DWORD, _DWORD, _DWORD); weak
138// int __fastcall android::String8::append(_DWORD, _DWORD); weak
139// int android::VectorImpl::finish_vector(void); weak
140// int __fastcall android::SortedVectorImpl::_SortedVectorImpl(_DWORD); weak
141// int strcmp(const char *s1, const char *s2);
142// int android::SortedVectorImpl::SortedVectorImpl(void); weak
143// int __fastcall android::Parcel::checkInterface(_DWORD, _DWORD); weak
144// int __fastcall android::Parcel::readStrongBinder(_DWORD, _DWORD); weak
145// int __fastcall android::ISurface::asInterface(_DWORD, _DWORD); weak
146// int __fastcall android::Parcel::readInt32(_DWORD); weak
147// int __fastcall android::IMemory::asInterface(_DWORD, _DWORD); weak
148// int __fastcall android::Parcel::writeInt32(_DWORD, _DWORD); weak
149// int __fastcall android::Parcel::readString8(_DWORD, _DWORD); weak
150// int __fastcall android::Parcel::writeString8(_DWORD, _DWORD); weak
151// int __fastcall android::Parcel::readCString(_DWORD); weak
152// int __fastcall android::IInterface::_IInterface(_DWORD, _DWORD); weak
153// int __fastcall android::IInterface::IInterface(_DWORD, _DWORD); weak
154// int __fastcall android::BpRefBase::_BpRefBase(_DWORD, _DWORD); weak
155// int __fastcall android::Parcel::writeStrongBinder(_DWORD, _DWORD); weak
156// int __fastcall android::BpRefBase::BpRefBase(_DWORD, _DWORD, _DWORD); weak
157// int __fastcall android::Parcel::readInt64(_DWORD); weak
158int __fastcall android::Camera::init(int result);
159int __fastcall android::BnInterface<android::ICameraClient>::onAsBinder(int a1);
160int __fastcall sub_6BA8B794(int a1);
161int __fastcall _virtual_thunk_to_android::Camera::DeathNotifier::_DeathNotifier(int a1);
162void *__fastcall sub_6BA8B7E0(int a1);
163void *__fastcall _virtual_thunk_to_android::Camera::DeathNotifier::_DeathNotifier(int a1);
164int __fastcall sub_6BA8B804(int a1);
165int __fastcall _virtual_thunk_to_android::IBinder::DeathRecipient::_DeathRecipient(int a1);
166void *__fastcall sub_6BA8B840(int a1);
167void *__fastcall _virtual_thunk_to_android::IBinder::DeathRecipient::_DeathRecipient(int a1);
168int __fastcall sub_6BA8B86C(int a1);
169int __fastcall _virtual_thunk_to_android::BnInterface<android::ICameraClient>::_BnInterface(int a1);
170void *__fastcall sub_6BA8B8D4(int a1);
171void *__fastcall _virtual_thunk_to_android::BnInterface<android::ICameraClient>::_BnInterface(int a1);
172int __fastcall sub_6BA8B8F8(int a1, int a2);
173int __fastcall sub_6BA8B930(int a1);
174int __fastcall _virtual_thunk_to_android::BnCameraClient::_BnCameraClient(int a1);
175void *__fastcall sub_6BA8B98C(int a1);
176void *__fastcall _virtual_thunk_to_android::BnCameraClient::_BnCameraClient(int a1);
177int __fastcall android::sp<android::ICamera>::sp(int a1, int a2);
178int __fastcall android::Camera::remote(int a1, int a2);
179int __fastcall android::sp<android::Camera::DeathNotifier>::_sp(int a1);
180int __fastcall android::sp<android::ICameraService>::_sp(int a1);
181int __fastcall android::sp<android::CameraListener>::operator_(int a1, int a2);
182int __fastcall android::sp<android::CameraListener>::_sp(int a1);
183int __fastcall android::sp<android::ICamera>::_sp(int a1);
184int __fastcall android::Camera::setPreviewCallbackFlags(int a1, int a2);
185int __fastcall android::Camera::sendCommand(int a1, int a2, int a3);
186int __fastcall android::Camera::setParameters(int a1, int a2);
187int __fastcall android::Camera::takePicture(int a1, int a2);
188int __fastcall android::Camera::cancelAutoFocus(int a1, int a2);
189int __fastcall android::Camera::autoFocus(int a1, int a2);
190int __fastcall android::Camera::recordingEnabled(int a1, int a2);
191int __fastcall android::Camera::previewEnabled(int a1, int a2);
192int __fastcall android::Camera::releaseRecordingFrame(int a1, int a2, int a3);
193int __fastcall android::Camera::stopRecording(int a1, int a2);
194int __fastcall android::Camera::stopPreview(int a1, int a2);
195int __fastcall android::Camera::startRecording(int a1, int a2);
196int __fastcall android::Camera::startPreview(int a1, int a2);
197int __fastcall android::Camera::getBufferInfo(int a1, int a2, int a3);
198int __fastcall android::Camera::unlock(int a1, int a2);
199int __fastcall android::Camera::lock(int a1, int a2);
200int __fastcall _non_virtual_thunk_to_android::Camera::_Camera(int a1);
201int __fastcall _non_virtual_thunk_to_android::Camera::_Camera(int a1);
202int __fastcall android::Camera::_Camera(_DWORD); // weak
203void *__fastcall _non_virtual_thunk_to_android::Camera::_Camera(int a1);
204void *__fastcall _non_virtual_thunk_to_android::Camera::_Camera(int a1);
205void *__fastcall android::Camera::_Camera(void *a1);
206int __fastcall android::Camera::_Camera(int a1, int a2);
207int __fastcall android::Camera::reconnect(int a1, int a2, int a3);
208int __fastcall android::sp<android::IBinder>::_sp(int a1);
209int __fastcall android::sp<android::ICamera>::operator_(int a1, int a2);
210int __fastcall android::sp<android::IBinder>::operator_(int a1, int a2);
211pthread_mutex_t *__fastcall sub_6BA8BED4(pthread_mutex_t *a1);
212int __fastcall _non_virtual_thunk_to_android::Camera::binderDied(int a1);
213int __fastcall android::Camera::binderDied(_DWORD); // weak
214int __fastcall android::Camera::setShutterSound(int a1, int a2, int a3);
215int __fastcall android::Camera::setPreviewDisplay(int a1, int a2, int a3);
216int __fastcall android::Camera::DeathNotifier::binderDied();
217int __fastcall android::Camera::dataCallbackTimestamp(int a1, int a2, int _R2, int a4, int a5, int a6);
218int __fastcall android::Camera::dataCallback(int a1);
219int __fastcall android::Camera::notifyCallback(int a1, int a2, int a3);
220int __fastcall android::Camera::setListener(int a1, int a2);
221int __fastcall android::Camera::getParameters(int a1, int a2, int a3);
222signed int __fastcall android::Camera::setPreviewDisplay(int a1, int a2);
223int __fastcall sub_6BA8C214(int a1, int a2);
224int __fastcall android::Camera::Camera(int a1);
225int __fastcall android::Camera::create(int a1, int a2, int a3, int a4);
226int __fastcall android::Camera::Camera(int a1, int a2);
227int __fastcall sub_6BA8C414();
228int __fastcall sub_6BA8C47C();
229int __fastcall sub_6BA8C484();
230int *__fastcall sub_6BA8C4E8(int a1);
231int *__fastcall sub_6BA8C52C(int *a1);
232int *__fastcall android::Camera::getCameraService();
233int *__fastcall android::Camera::connect(int *a1, int a2);
234int __fastcall android::Camera::getCameraInfo();
235int __fastcall android::Camera::getNumberOfCameras();
236int __fastcall sub_6BA8C830(int a1);
237int __fastcall android::Camera::disconnect(int a1);
238void *__fastcall _virtual_thunk_to_android::Camera::_Camera(int a1);
239int __fastcall _virtual_thunk_to_android::Camera::_Camera(int a1);
240int __fastcall android::SortedVector<android::key_value_pair_t<android::String8_android::String8>>::do_construct(int a1, int a2, int a3);
241int __fastcall sub_6BA8C8F8(int a1);
242int __fastcall android::SortedVector<android::key_value_pair_t<android::String8_android::String8>>::do_destroy(int a1, int a2, int a3);
243int __fastcall android::CameraParameters::dump(int a1, int a2);
244void __fastcall android::CameraParameters::dump(int a1, int a2, int a3, int a4);
245signed int __fastcall sub_6BA8CA98(const char *a1, int a2, int a3, int a4, signed int a5);
246int __fastcall sub_6BA8CAFC(int result, int a2);
247int __fastcall sub_6BA8CB84(int a1, int a2);
248int __fastcall android::move_backward_type<android::key_value_pair_t<android::String8_android::String8>>(int a1, int a2, int a3);
249int __fastcall android::SortedVector<android::key_value_pair_t<android::String8_android::String8>>::do_move_backward(int a1, int a2, int a3, int a4);
250int __fastcall android::move_forward_type<android::key_value_pair_t<android::String8_android::String8>>(int result, int a2, int a3);
251int __fastcall android::SortedVector<android::key_value_pair_t<android::String8_android::String8>>::do_move_forward(int a1, int a2, int a3, int a4);
252int __fastcall android::SortedVector<android::key_value_pair_t<android::String8_android::String8>>::do_splat(int a1, int a2, int a3, int a4);
253int __fastcall android::SortedVector<android::key_value_pair_t<android::String8_android::String8>>::do_copy(int a1, int a2, int a3, int a4);
254int __fastcall sub_6BA8CC58(int a1, int a2, int a3);
255int __fastcall android::CameraParameters::remove(int a1, int a2, int a3);
256int __fastcall sub_6BA8CC9C(int a1, int a2, int a3);
257int __fastcall android::CameraParameters::get(int a1, int a2, int a3);
258int __fastcall android::CameraParameters::getPictureFormat(int a1);
259int __fastcall android::CameraParameters::getSupportedPictureSizes(int a1, int a2);
260int __fastcall android::CameraParameters::getPictureSize(int a1, int a2, int a3);
261int __fastcall android::CameraParameters::getPreviewFormat(int a1);
262int __fastcall android::CameraParameters::getPreviewFpsRange(int a1, int a2, int a3);
263int __fastcall android::CameraParameters::getSupportedPreviewSizes(int a1, int a2);
264int __fastcall android::CameraParameters::getPreviewSize(int a1, int a2, int a3);
265int __fastcall android::CameraParameters::getFloat(int a1, int a2, int a3);
266__int32 __fastcall android::CameraParameters::getInt(int a1, int a2, int a3);
267__int32 __fastcall android::CameraParameters::getPreviewFrameRate(int a1);
268int __fastcall sub_6BA8CE6C(int a1, int a2, int a3);
269char *__fastcall android::CameraParameters::set(int a1, const char *a2, const char *a3);
270char *__fastcall android::CameraParameters::setPictureFormat(int a1, const char *a2);
271char *__fastcall android::CameraParameters::setPictureSize(int a1, int a2, int a3);
272char *__fastcall android::CameraParameters::setPreviewFormat(int a1, const char *a2);
273char *__fastcall android::CameraParameters::setPreviewSize(int a1, int a2, int a3);
274char *__fastcall android::CameraParameters::setFloat(int a1, const char *a2, int _R2);
275char *__fastcall android::CameraParameters::set(int a1, const char *a2);
276char *__fastcall android::CameraParameters::setPreviewFrameRate(int a1);
277int __fastcall sub_6BA8D084(int a1, int a2, int a3);
278int __fastcall android::CameraParameters::unflatten(int a1, int a2, int a3, int a4);
279int __fastcall android::CameraParameters::flatten(int a1, int a2);
280int __fastcall sub_6BA8D1E8(int a1);
281int __fastcall android::CameraParameters::_CameraParameters(int a1);
282int __fastcall android::CameraParameters::_CameraParameters(int a1);
283unsigned int __fastcall android::compare_type<android::key_value_pair_t<android::String8_android::String8>>(const char **a1, const char **a2);
284unsigned int __fastcall android::SortedVector<android::key_value_pair_t<android::String8_android::String8>>::do_compare(int a1, const char **a2, const char **a3);
285int __fastcall sub_6BA8D284(int a1, int a2);
286int __fastcall android::CameraParameters::CameraParameters(int a1, int a2, int a3);
287int __fastcall android::CameraParameters::CameraParameters(int a1, int a2, int a3);
288int *__fastcall android::ICamera::getInterfaceDescriptor();
289int __fastcall android::BnInterface<android::ICamera>::onAsBinder(int a1);
290int __fastcall android::sp<android::ICamera>::operator_(int a1, int a2);
291int __fastcall android::sp<android::ICamera>::operator_<android::BpCamera>(int a1, int a2);
292int __fastcall _non_virtual_thunk_to_android::BnCamera::onTransact(int a1, int a2, int a3, int a4);
293int __fastcall android::BnCamera::onTransact(int a1, int a2, int a3, int a4);
294int __fastcall android::ICamera::_ICamera(int a1);
295void *__fastcall android::ICamera::_ICamera(int a1);
296int __fastcall android::ICamera::_ICamera(int a1, int a2);
297int __fastcall sub_6BA8D70C(int a1);
298int __fastcall _virtual_thunk_to_android::BnInterface<android::ICamera>::_BnInterface(int a1);
299void *__fastcall sub_6BA8D774(int a1);
300void *__fastcall _virtual_thunk_to_android::BnInterface<android::ICamera>::_BnInterface(int a1);
301int __fastcall android::ICamera::ICamera(int a1);
302int __fastcall android::ICamera::ICamera(int a1, int a2);
303int __fastcall sub_6BA8D7FC(int a1);
304int __fastcall _virtual_thunk_to_android::BpInterface<android::ICamera>::_BpInterface(int a1);
305void *__fastcall sub_6BA8D864(int a1);
306void *__fastcall _virtual_thunk_to_android::BpInterface<android::ICamera>::_BpInterface(int a1);
307int __fastcall sub_6BA8DFD8(int a1);
308int __fastcall sub_6BA8E024(int a1);
309int __fastcall _virtual_thunk_to_android::BnCamera::_BnCamera(int a1);
310void *__fastcall sub_6BA8E078(int a1);
311void *__fastcall _virtual_thunk_to_android::BnCamera::_BnCamera(int a1);
312int __fastcall sub_6BA8E09C();
313int __fastcall sub_6BA8E100(int a1);
314int __fastcall sub_6BA8E14C(int a1);
315int __fastcall _virtual_thunk_to_android::BpCamera::_BpCamera(int a1);
316void *__fastcall sub_6BA8E1A0(int a1);
317void *__fastcall _virtual_thunk_to_android::BpCamera::_BpCamera(int a1);
318int __fastcall sub_6BA8E1C4(int a1, int a2);
319int __fastcall sub_6BA8E204(int a1, int a2);
320int __fastcall android::ICamera::asInterface(int a1, int a2);
321int __fastcall sub_6BA8E2A8();
322int __fastcall sub_6BA8E2E0();
323void *__fastcall _virtual_thunk_to_android::ICamera::_ICamera(int a1);
324int __fastcall _virtual_thunk_to_android::ICamera::_ICamera(int a1);
325int *__fastcall android::ICameraClient::getInterfaceDescriptor();
326int __fastcall _non_virtual_thunk_to_android::BnCameraClient::onTransact(int a1, int a2, int a3);
327int __fastcall android::BnCameraClient::onTransact(int a1, int a2, int a3);
328int __fastcall android::sp<android::ICameraClient>::operator_(int a1, int a2);
329int __fastcall android::sp<android::ICameraClient>::operator_<android::BpCameraClient>(int a1, int a2);
330int __fastcall android::ICameraClient::_ICameraClient(int a1);
331void *__fastcall android::ICameraClient::_ICameraClient(int a1);
332int __fastcall android::ICameraClient::_ICameraClient(int a1, int a2);
333int __fastcall android::ICameraClient::ICameraClient(int a1);
334int __fastcall android::ICameraClient::ICameraClient(int a1, int a2);
335int __fastcall sub_6BA8E560(int a1);
336int __fastcall _virtual_thunk_to_android::BpInterface<android::ICameraClient>::_BpInterface(int a1);
337void *__fastcall sub_6BA8E5C8(int a1);
338void *__fastcall _virtual_thunk_to_android::BpInterface<android::ICameraClient>::_BpInterface(int a1);
339int __fastcall sub_6BA8E744(int a1);
340int __fastcall sub_6BA8E790(int a1);
341int __fastcall _virtual_thunk_to_android::BpCameraClient::_BpCameraClient(int a1);
342void *__fastcall sub_6BA8E7E4(int a1);
343void *__fastcall _virtual_thunk_to_android::BpCameraClient::_BpCameraClient(int a1);
344int __fastcall sub_6BA8E808(int a1, int a2);
345int __fastcall sub_6BA8E848(int a1, int a2);
346int __fastcall android::ICameraClient::asInterface(int a1, int a2);
347int __fastcall sub_6BA8E8EC();
348int __fastcall sub_6BA8E924();
349void *__fastcall _virtual_thunk_to_android::ICameraClient::_ICameraClient(int a1);
350int __fastcall _virtual_thunk_to_android::ICameraClient::_ICameraClient(int a1);
351int *__fastcall android::ICameraService::getInterfaceDescriptor();
352int __fastcall android::BnInterface<android::ICameraService>::onAsBinder(int a1);
353int __fastcall _non_virtual_thunk_to_android::BnCameraService::onTransact(int a1, int a2, int a3, int a4);
354int __fastcall android::BnCameraService::onTransact(int a1, int a2, int a3, int a4);
355int __fastcall android::sp<android::ICameraService>::operator_(int a1, int a2);
356int __fastcall android::sp<android::ICameraService>::operator_<android::BpCameraService>(int a1, int a2);
357int __fastcall android::ICameraService::_ICameraService(int a1);
358void *__fastcall android::ICameraService::_ICameraService(int a1);
359int __fastcall android::ICameraService::_ICameraService(int a1, int a2);
360int __fastcall sub_6BA8EC00(int a1);
361int __fastcall _virtual_thunk_to_android::BnInterface<android::ICameraService>::_BnInterface(int a1);
362void *__fastcall sub_6BA8EC68(int a1);
363void *__fastcall _virtual_thunk_to_android::BnInterface<android::ICameraService>::_BnInterface(int a1);
364int __fastcall android::ICameraService::ICameraService(int a1);
365int __fastcall android::ICameraService::ICameraService(int a1, int a2);
366int __fastcall sub_6BA8ECF0(int a1);
367int __fastcall _virtual_thunk_to_android::BpInterface<android::ICameraService>::_BpInterface(int a1);
368void *__fastcall sub_6BA8ED58(int a1);
369void *__fastcall _virtual_thunk_to_android::BpInterface<android::ICameraService>::_BpInterface(int a1);
370int __fastcall sub_6BA8EF68(int a1);
371int __fastcall sub_6BA8EFB4(int a1);
372int __fastcall _virtual_thunk_to_android::BnCameraService::_BnCameraService(int a1);
373void *__fastcall sub_6BA8F008(int a1);
374void *__fastcall _virtual_thunk_to_android::BnCameraService::_BnCameraService(int a1);
375int __fastcall sub_6BA8F02C();
376int __fastcall sub_6BA8F090(int a1);
377int __fastcall sub_6BA8F0DC(int a1);
378int __fastcall _virtual_thunk_to_android::BpCameraService::_BpCameraService(int a1);
379void *__fastcall sub_6BA8F130(int a1);
380void *__fastcall _virtual_thunk_to_android::BpCameraService::_BpCameraService(int a1);
381int __fastcall sub_6BA8F154(int a1, int a2);
382int __fastcall sub_6BA8F194(int a1, int a2);
383int __fastcall android::ICameraService::asInterface(int a1, int a2);
384int __fastcall sub_6BA8F238();
385int __fastcall sub_6BA8F270();
386void *__fastcall _virtual_thunk_to_android::ICameraService::_ICameraService(int a1);
387int __fastcall _virtual_thunk_to_android::ICameraService::_ICameraService(int a1);
388
389
390//----- (6BA8B778) --------------------------------------------------------
391int __fastcall android::Camera::init(int result)
392{
393  *(_DWORD *)(result + 24) = -2147483648;
394  return result;
395}
396
397//----- (6BA8B780) --------------------------------------------------------
398int __fastcall android::BnInterface<android::ICameraClient>::onAsBinder(int a1)
399{
400  return a1 + 4;
401}
402
403//----- (6BA8B794) --------------------------------------------------------
404int __fastcall sub_6BA8B794(int a1)
405{
406  int v1; // r4@1
407  int v2; // r0@1
408  int v3; // r2@1
409  int v4; // r3@1
410
411  v1 = a1;
412  v2 = a1 + 4;
413  *(_DWORD *)v2 = &_vtable_for_android::Camera::DeathNotifier[52];
414  v3 = *(_DWORD *)&_VTT_for_android::Camera::DeathNotifier[4];
415  v4 = *(_DWORD *)&_VTT_for_android::Camera::DeathNotifier[8];
416  *(_DWORD *)v1 = *(_DWORD *)&_VTT_for_android::Camera::DeathNotifier[4];
417  *(_DWORD *)(v1 + *(_DWORD *)(v3 - 12)) = v4;
418  android::RefBase::_RefBase(v2);
419  return v1;
420}
421// 6BA8B174: using guessed type int __fastcall android__RefBase___RefBase(_DWORD);
422
423//----- (6BA8B7D0) --------------------------------------------------------
424int __fastcall _virtual_thunk_to_android::Camera::DeathNotifier::_DeathNotifier(int a1)
425{
426  return sub_6BA8B794(a1 + *(_DWORD *)(*(_DWORD *)a1 - 12));
427}
428
429//----- (6BA8B7E0) --------------------------------------------------------
430void *__fastcall sub_6BA8B7E0(int a1)
431{
432  void *v1; // r4@1
433
434  v1 = (void *)a1;
435  sub_6BA8B794(a1);
436  operator delete(v1);
437  return v1;
438}
439
440//----- (6BA8B7F4) --------------------------------------------------------
441void *__fastcall _virtual_thunk_to_android::Camera::DeathNotifier::_DeathNotifier(int a1)
442{
443  return sub_6BA8B7E0(a1 + *(_DWORD *)(*(_DWORD *)a1 - 12));
444}
445
446//----- (6BA8B804) --------------------------------------------------------
447int __fastcall sub_6BA8B804(int a1)
448{
449  int v1; // r4@1
450
451  v1 = a1;
452  *(_DWORD *)a1 = &_vtable_for_android::IBinder::DeathRecipient[12];
453  *(_DWORD *)(a1 + 4) = &_vtable_for_android::IBinder::DeathRecipient[52];
454  android::RefBase::_RefBase(a1 + 4);
455  return v1;
456}
457// 6BA8B174: using guessed type int __fastcall android__RefBase___RefBase(_DWORD);
458
459//----- (6BA8B830) --------------------------------------------------------
460int __fastcall _virtual_thunk_to_android::IBinder::DeathRecipient::_DeathRecipient(int a1)
461{
462  return sub_6BA8B804(a1 + *(_DWORD *)(*(_DWORD *)a1 - 12));
463}
464
465//----- (6BA8B840) --------------------------------------------------------
466void *__fastcall sub_6BA8B840(int a1)
467{
468  void *v1; // r4@1
469
470  v1 = (void *)a1;
471  sub_6BA8B804(a1);
472  operator delete(v1);
473  return v1;
474}
475
476//----- (6BA8B854) --------------------------------------------------------
477void *__fastcall _virtual_thunk_to_android::IBinder::DeathRecipient::_DeathRecipient(int a1)
478{
479  return sub_6BA8B840(a1 + *(_DWORD *)(*(_DWORD *)a1 - 12));
480}
481
482//----- (6BA8B86C) --------------------------------------------------------
483int __fastcall sub_6BA8B86C(int a1)
484{
485  int v1; // r4@1
486  int v2; // r6@1
487
488  v1 = a1;
489  *(_DWORD *)a1 = &_vtable_for_android::BnInterface<android::ICameraClient>[12];
490  v2 = a1 + 16;
491  *(_DWORD *)(a1 + 16) = &_vtable_for_android::BnInterface<android::ICameraClient>[152];
492  *(_DWORD *)(a1 + 4) = &_vtable_for_android::BnInterface<android::ICameraClient>[56];
493  android::BBinder::_BBinder(a1 + 4, &_VTT_for_android::BnInterface<android::ICameraClient>[20]);
494  android::ICameraClient::_ICameraClient(v1, (int)&_VTT_for_android::BnInterface<android::ICameraClient>[4]);
495  android::RefBase::_RefBase(v2);
496  return v1;
497}
498// 6BA8B174: using guessed type int __fastcall android__RefBase___RefBase(_DWORD);
499// 6BA8B18C: using guessed type int __fastcall android__BBinder___BBinder(_DWORD, _DWORD);
500
501//----- (6BA8B8BC) --------------------------------------------------------
502int __fastcall _virtual_thunk_to_android::BnInterface<android::ICameraClient>::_BnInterface(int a1)
503{
504  return sub_6BA8B86C(a1 + *(_DWORD *)(*(_DWORD *)a1 - 12));
505}
506
507//----- (6BA8B8D4) --------------------------------------------------------
508void *__fastcall sub_6BA8B8D4(int a1)
509{
510  void *v1; // r4@1
511
512  v1 = (void *)a1;
513  sub_6BA8B86C(a1);
514  operator delete(v1);
515  return v1;
516}
517
518//----- (6BA8B8E8) --------------------------------------------------------
519void *__fastcall _virtual_thunk_to_android::BnInterface<android::ICameraClient>::_BnInterface(int a1)
520{
521  return sub_6BA8B8D4(a1 + *(_DWORD *)(*(_DWORD *)a1 - 12));
522}
523
524//----- (6BA8B8F8) --------------------------------------------------------
525int __fastcall sub_6BA8B8F8(int a1, int a2)
526{
527  int v2; // r5@1
528  int v3; // r1@1
529  int v4; // r4@1
530
531  v2 = a2;
532  v3 = *(_DWORD *)a2;
533  v4 = a1;
534  *(_DWORD *)a1 = v3;
535  *(_DWORD *)(a1 + *(_DWORD *)(v3 - 12)) = *(_DWORD *)(v2 + 36);
536  *(_DWORD *)(a1 + 4) = *(_DWORD *)(v2 + 40);
537  android::BBinder::_BBinder(a1 + 4, v2 + 20);
538  android::ICameraClient::_ICameraClient(v4, v2 + 4);
539  return v4;
540}
541// 6BA8B18C: using guessed type int __fastcall android__BBinder___BBinder(_DWORD, _DWORD);
542
543//----- (6BA8B930) --------------------------------------------------------
544int __fastcall sub_6BA8B930(int a1)
545{
546  int v1; // r4@1
547  int v2; // r5@1
548
549  v1 = a1;
550  *(_DWORD *)a1 = &_vtable_for_android::BnCameraClient[12];
551  v2 = a1 + 16;
552  *(_DWORD *)(a1 + 16) = &_vtable_for_android::BnCameraClient[156];
553  *(_DWORD *)(a1 + 4) = &_vtable_for_android::BnCameraClient[60];
554  sub_6BA8B8F8(a1, (int)&_VTT_for_android::BnCameraClient[4]);
555  android::RefBase::_RefBase(v2);
556  return v1;
557}
558// 6BA8B174: using guessed type int __fastcall android__RefBase___RefBase(_DWORD);
559
560//----- (6BA8B974) --------------------------------------------------------
561int __fastcall _virtual_thunk_to_android::BnCameraClient::_BnCameraClient(int a1)
562{
563  return sub_6BA8B930(a1 + *(_DWORD *)(*(_DWORD *)a1 - 12));
564}
565
566//----- (6BA8B98C) --------------------------------------------------------
567void *__fastcall sub_6BA8B98C(int a1)
568{
569  void *v1; // r4@1
570
571  v1 = (void *)a1;
572  sub_6BA8B930(a1);
573  operator delete(v1);
574  return v1;
575}
576
577//----- (6BA8B9A0) --------------------------------------------------------
578void *__fastcall _virtual_thunk_to_android::BnCameraClient::_BnCameraClient(int a1)
579{
580  return sub_6BA8B98C(a1 + *(_DWORD *)(*(_DWORD *)a1 - 12));
581}
582
583//----- (6BA8B9B0) --------------------------------------------------------
584int __fastcall android::sp<android::ICamera>::sp(int a1, int a2)
585{
586  int v2; // r3@1
587  int v3; // r4@1
588
589  v2 = *(_DWORD *)a2;
590  v3 = a1;
591  *(_DWORD *)a1 = *(_DWORD *)a2;
592  if ( v2 )
593    android::RefBase::incStrong(v2 + *(_DWORD *)(*(_DWORD *)v2 - 12), a1);
594  return v3;
595}
596// 6BA8B198: using guessed type int __fastcall android__RefBase__incStrong(_DWORD, _DWORD);
597
598//----- (6BA8B9CC) --------------------------------------------------------
599int __fastcall android::Camera::remote(int a1, int a2)
600{
601  int v2; // r4@1
602
603  v2 = a1;
604  android::sp<android::ICamera>::sp(a1, a2 + 20);
605  return v2;
606}
607
608//----- (6BA8B9DC) --------------------------------------------------------
609int __fastcall android::sp<android::Camera::DeathNotifier>::_sp(int a1)
610{
611  int v1; // r4@1
612
613  v1 = a1;
614  if ( *(_DWORD *)a1 )
615    android::RefBase::decStrong(*(_DWORD *)a1 + *(_DWORD *)(**(_DWORD **)a1 - 12), a1);
616  return v1;
617}
618// 6BA8B1A4: using guessed type int __fastcall android__RefBase__decStrong(_DWORD, _DWORD);
619
620//----- (6BA8B9F8) --------------------------------------------------------
621int __fastcall android::sp<android::ICameraService>::_sp(int a1)
622{
623  int v1; // r4@1
624
625  v1 = a1;
626  if ( *(_DWORD *)a1 )
627    android::RefBase::decStrong(*(_DWORD *)a1 + *(_DWORD *)(**(_DWORD **)a1 - 12), a1);
628  return v1;
629}
630// 6BA8B1A4: using guessed type int __fastcall android__RefBase__decStrong(_DWORD, _DWORD);
631
632//----- (6BA8BA14) --------------------------------------------------------
633int __fastcall android::sp<android::CameraListener>::operator_(int a1, int a2)
634{
635  int v2; // r5@1
636  int v3; // r4@1
637
638  v2 = *(_DWORD *)a2;
639  v3 = a1;
640  if ( *(_DWORD *)a2 )
641    android::RefBase::incStrong(v2 + *(_DWORD *)(*(_DWORD *)v2 - 12), a1);
642  if ( *(_DWORD *)v3 )
643    android::RefBase::decStrong(*(_DWORD *)v3 + *(_DWORD *)(**(_DWORD **)v3 - 12), v3);
644  *(_DWORD *)v3 = v2;
645  return v3;
646}
647// 6BA8B198: using guessed type int __fastcall android__RefBase__incStrong(_DWORD, _DWORD);
648// 6BA8B1A4: using guessed type int __fastcall android__RefBase__decStrong(_DWORD, _DWORD);
649
650//----- (6BA8BA44) --------------------------------------------------------
651int __fastcall android::sp<android::CameraListener>::_sp(int a1)
652{
653  int v1; // r4@1
654
655  v1 = a1;
656  if ( *(_DWORD *)a1 )
657    android::RefBase::decStrong(*(_DWORD *)a1 + *(_DWORD *)(**(_DWORD **)a1 - 12), a1);
658  return v1;
659}
660// 6BA8B1A4: using guessed type int __fastcall android__RefBase__decStrong(_DWORD, _DWORD);
661
662//----- (6BA8BA60) --------------------------------------------------------
663int __fastcall android::sp<android::ICamera>::_sp(int a1)
664{
665  int v1; // r4@1
666
667  v1 = a1;
668  if ( *(_DWORD *)a1 )
669    android::RefBase::decStrong(*(_DWORD *)a1 + *(_DWORD *)(**(_DWORD **)a1 - 12), a1);
670  return v1;
671}
672// 6BA8B1A4: using guessed type int __fastcall android__RefBase__decStrong(_DWORD, _DWORD);
673
674//----- (6BA8BA7C) --------------------------------------------------------
675int __fastcall android::Camera::setPreviewCallbackFlags(int a1, int a2)
676{
677  int v2; // r5@1
678  int v4; // [sp+4h] [bp-14h]@1
679
680  v4 = a2;
681  v2 = a1;
682  android::sp<android::ICamera>::sp((int)&v4, a1 + 20);
683  if ( v4 )
684    (*(void (**)(void))(**(_DWORD **)(v2 + 20) + 36))();
685  return android::sp<android::ICamera>::_sp((int)&v4);
686}
687
688//----- (6BA8BAA4) --------------------------------------------------------
689int __fastcall android::Camera::sendCommand(int a1, int a2, int a3)
690{
691  int v3; // r4@1
692  int v5; // [sp+4h] [bp-1Ch]@1
693  int v6; // [sp+8h] [bp-18h]@1
694
695  v5 = a2;
696  v6 = a3;
697  android::sp<android::ICamera>::sp((int)&v5, a1 + 20);
698  v3 = -19;
699  if ( v5 )
700    v3 = (*(int (**)(void))(*(_DWORD *)v5 + 92))();
701  android::sp<android::ICamera>::_sp((int)&v5);
702  return v3;
703}
704
705//----- (6BA8BAD8) --------------------------------------------------------
706int __fastcall android::Camera::setParameters(int a1, int a2)
707{
708  int v2; // r4@2
709  int v4; // [sp+4h] [bp-Ch]@1
710
711  v4 = a2;
712  android::sp<android::ICamera>::sp((int)&v4, a1 + 20);
713  if ( v4 )
714    v2 = (*(int (**)(void))(*(_DWORD *)v4 + 84))();
715  else
716    v2 = -19;
717  android::sp<android::ICamera>::_sp((int)&v4);
718  return v2;
719}
720
721//----- (6BA8BB04) --------------------------------------------------------
722int __fastcall android::Camera::takePicture(int a1, int a2)
723{
724  int v2; // r4@1
725  int v4; // [sp+4h] [bp-Ch]@1
726
727  v4 = a2;
728  v2 = -19;
729  android::sp<android::ICamera>::sp((int)&v4, a1 + 20);
730  if ( v4 )
731    v2 = (*(int (**)(void))(*(_DWORD *)v4 + 80))();
732  android::sp<android::ICamera>::_sp((int)&v4);
733  return v2;
734}
735
736//----- (6BA8BB2C) --------------------------------------------------------
737int __fastcall android::Camera::cancelAutoFocus(int a1, int a2)
738{
739  int v2; // r4@1
740  int v4; // [sp+4h] [bp-Ch]@1
741
742  v4 = a2;
743  v2 = -19;
744  android::sp<android::ICamera>::sp((int)&v4, a1 + 20);
745  if ( v4 )
746    v2 = (*(int (**)(void))(*(_DWORD *)v4 + 76))();
747  android::sp<android::ICamera>::_sp((int)&v4);
748  return v2;
749}
750
751//----- (6BA8BB54) --------------------------------------------------------
752int __fastcall android::Camera::autoFocus(int a1, int a2)
753{
754  int v2; // r4@1
755  int v4; // [sp+4h] [bp-Ch]@1
756
757  v4 = a2;
758  v2 = -19;
759  android::sp<android::ICamera>::sp((int)&v4, a1 + 20);
760  if ( v4 )
761    v2 = (*(int (**)(void))(*(_DWORD *)v4 + 72))();
762  android::sp<android::ICamera>::_sp((int)&v4);
763  return v2;
764}
765
766//----- (6BA8BB7C) --------------------------------------------------------
767int __fastcall android::Camera::recordingEnabled(int a1, int a2)
768{
769  int v2; // r0@1
770  int v3; // r4@3
771  int v5; // [sp+4h] [bp-Ch]@1
772
773  v5 = a2;
774  android::sp<android::ICamera>::sp((int)&v5, a1 + 20);
775  v2 = v5;
776  if ( v5 )
777    v2 = (*(int (**)(void))(*(_DWORD *)v5 + 64))();
778  v3 = v2;
779  android::sp<android::ICamera>::_sp((int)&v5);
780  return v3;
781}
782
783//----- (6BA8BBA0) --------------------------------------------------------
784int __fastcall android::Camera::previewEnabled(int a1, int a2)
785{
786  int v2; // r0@1
787  int v3; // r4@3
788  int v5; // [sp+4h] [bp-Ch]@1
789
790  v5 = a2;
791  android::sp<android::ICamera>::sp((int)&v5, a1 + 20);
792  v2 = v5;
793  if ( v5 )
794    v2 = (*(int (**)(void))(*(_DWORD *)v5 + 52))();
795  v3 = v2;
796  android::sp<android::ICamera>::_sp((int)&v5);
797  return v3;
798}
799
800//----- (6BA8BBC4) --------------------------------------------------------
801int __fastcall android::Camera::releaseRecordingFrame(int a1, int a2, int a3)
802{
803  int v4; // [sp+4h] [bp-14h]@1
804  int v5; // [sp+8h] [bp-10h]@1
805
806  v4 = a2;
807  v5 = a3;
808  android::sp<android::ICamera>::sp((int)&v4, a1 + 20);
809  if ( v4 )
810    (*(void (**)(void))(*(_DWORD *)v4 + 68))();
811  return android::sp<android::ICamera>::_sp((int)&v4);
812}
813
814//----- (6BA8BBE8) --------------------------------------------------------
815int __fastcall android::Camera::stopRecording(int a1, int a2)
816{
817  int v3; // [sp+4h] [bp-Ch]@1
818
819  v3 = a2;
820  android::sp<android::ICamera>::sp((int)&v3, a1 + 20);
821  if ( v3 )
822    (*(void (**)(void))(*(_DWORD *)v3 + 60))();
823  return android::sp<android::ICamera>::_sp((int)&v3);
824}
825
826//----- (6BA8BC08) --------------------------------------------------------
827int __fastcall android::Camera::stopPreview(int a1, int a2)
828{
829  int v3; // [sp+4h] [bp-Ch]@1
830
831  v3 = a2;
832  android::sp<android::ICamera>::sp((int)&v3, a1 + 20);
833  if ( v3 )
834    (*(void (**)(void))(*(_DWORD *)v3 + 48))();
835  return android::sp<android::ICamera>::_sp((int)&v3);
836}
837
838//----- (6BA8BC28) --------------------------------------------------------
839int __fastcall android::Camera::startRecording(int a1, int a2)
840{
841  int v2; // r4@1
842  int v4; // [sp+4h] [bp-Ch]@1
843
844  v4 = a2;
845  v2 = -19;
846  android::sp<android::ICamera>::sp((int)&v4, a1 + 20);
847  if ( v4 )
848    v2 = (*(int (**)(void))(*(_DWORD *)v4 + 56))();
849  android::sp<android::ICamera>::_sp((int)&v4);
850  return v2;
851}
852
853//----- (6BA8BC50) --------------------------------------------------------
854int __fastcall android::Camera::startPreview(int a1, int a2)
855{
856  int v2; // r4@1
857  int v4; // [sp+4h] [bp-Ch]@1
858
859  v4 = a2;
860  v2 = -19;
861  android::sp<android::ICamera>::sp((int)&v4, a1 + 20);
862  if ( v4 )
863    v2 = (*(int (**)(void))(*(_DWORD *)v4 + 44))();
864  android::sp<android::ICamera>::_sp((int)&v4);
865  return v2;
866}
867
868//----- (6BA8BC78) --------------------------------------------------------
869int __fastcall android::Camera::getBufferInfo(int a1, int a2, int a3)
870{
871  int v3; // r4@2
872  int v5; // [sp+4h] [bp-14h]@1
873  int v6; // [sp+8h] [bp-10h]@1
874
875  v5 = a2;
876  v6 = a3;
877  android::sp<android::ICamera>::sp((int)&v5, a1 + 20);
878  if ( v5 )
879    v3 = (*(int (**)(void))(*(_DWORD *)v5 + 40))();
880  else
881    v3 = -19;
882  android::sp<android::ICamera>::_sp((int)&v5);
883  return v3;
884}
885
886//----- (6BA8BCA8) --------------------------------------------------------
887int __fastcall android::Camera::unlock(int a1, int a2)
888{
889  int v2; // r4@1
890  int v4; // [sp+4h] [bp-Ch]@1
891
892  v4 = a2;
893  v2 = -19;
894  android::sp<android::ICamera>::sp((int)&v4, a1 + 20);
895  if ( v4 )
896    v2 = (*(int (**)(void))(*(_DWORD *)v4 + 28))();
897  android::sp<android::ICamera>::_sp((int)&v4);
898  return v2;
899}
900
901//----- (6BA8BCD0) --------------------------------------------------------
902int __fastcall android::Camera::lock(int a1, int a2)
903{
904  int v2; // r4@1
905  int v4; // [sp+4h] [bp-Ch]@1
906
907  v4 = a2;
908  v2 = -19;
909  android::sp<android::ICamera>::sp((int)&v4, a1 + 20);
910  if ( v4 )
911    v2 = (*(int (**)(void))(*(_DWORD *)v4 + 24))();
912  android::sp<android::ICamera>::_sp((int)&v4);
913  return v2;
914}
915
916//----- (6BA8BCF8) --------------------------------------------------------
917int __fastcall _non_virtual_thunk_to_android::Camera::_Camera(int a1)
918{
919  return android::Camera::_Camera(a1 - 16);
920}
921// 6BA8BD08: using guessed type int __fastcall android__Camera___Camera(_DWORD);
922
923//----- (6BA8BD00) --------------------------------------------------------
924int __fastcall _non_virtual_thunk_to_android::Camera::_Camera(int a1)
925{
926  return android::Camera::_Camera(a1 - 4);
927}
928// 6BA8BD08: using guessed type int __fastcall android__Camera___Camera(_DWORD);
929
930//----- (6BA8BD08) --------------------------------------------------------
931int __fastcall android::Camera::_Camera(int a1)
932{
933  int v1; // r4@1
934  int v2; // r5@1
935  int v3; // r3@1
936  int v4; // r0@1
937  int v5; // r2@1
938  int v6; // r3@1
939  int v7; // r0@1
940  int v8; // r3@1
941
942  v1 = a1;
943  *(_DWORD *)a1 = &_vtable_for_android::Camera[12];
944  v2 = a1 + 32;
945  *(_DWORD *)(a1 + 4) = &_vtable_for_android::Camera[64];
946  *(_DWORD *)(a1 + 16) = &_vtable_for_android::Camera[144];
947  *(_DWORD *)(a1 + 32) = &_vtable_for_android::Camera[184];
948  android::sp<android::CameraListener>::_sp(a1 + 28);
949  android::sp<android::ICamera>::_sp(v1 + 20);
950  v3 = *(_DWORD *)&_VTT_for_android::Camera[60];
951  v4 = *(_DWORD *)&_VTT_for_android::Camera[64];
952  *(_DWORD *)(v1 + 16) = *(_DWORD *)&_VTT_for_android::Camera[60];
953  v5 = *(_DWORD *)(v3 - 12);
954  v6 = *(_DWORD *)&_VTT_for_android::Camera[4];
955  *(_DWORD *)(v1 + 16 + v5) = v4;
956  *(_DWORD *)v1 = v6;
957  v7 = *(_DWORD *)(v6 - 12);
958  v8 = *(_DWORD *)&_VTT_for_android::Camera[56];
959  *(_DWORD *)(v1 + v7) = *(_DWORD *)&_VTT_for_android::Camera[52];
960  *(_DWORD *)(v1 + 4) = v8;
961  sub_6BA8B8F8(v1, (int)&_VTT_for_android::Camera[8]);
962  android::RefBase::_RefBase(v2);
963  return v1;
964}
965// 6BA8B174: using guessed type int __fastcall android__RefBase___RefBase(_DWORD);
966// 6BA8BD08: using guessed type int __fastcall android__Camera___Camera(_DWORD);
967
968//----- (6BA8BD84) --------------------------------------------------------
969void *__fastcall _non_virtual_thunk_to_android::Camera::_Camera(int a1)
970{
971  return android::Camera::_Camera((void *)(a1 - 16));
972}
973
974//----- (6BA8BD8C) --------------------------------------------------------
975void *__fastcall _non_virtual_thunk_to_android::Camera::_Camera(int a1)
976{
977  return android::Camera::_Camera((void *)(a1 - 4));
978}
979
980//----- (6BA8BD94) --------------------------------------------------------
981void *__fastcall android::Camera::_Camera(void *a1)
982{
983  void *v1; // r4@1
984
985  v1 = a1;
986  android::Camera::_Camera(a1);
987  operator delete(v1);
988  return v1;
989}
990// 6BA8BD08: using guessed type int __fastcall android__Camera___Camera(_DWORD);
991
992//----- (6BA8BDA8) --------------------------------------------------------
993int __fastcall android::Camera::_Camera(int a1, int a2)
994{
995  int v2; // r3@1
996  int v3; // r4@1
997  int v4; // r5@1
998  int v5; // r0@1
999  int v6; // r3@1
1000
1001  v2 = *(_DWORD *)a2;
1002  v3 = a1;
1003  v4 = a2;
1004  *(_DWORD *)a1 = *(_DWORD *)a2;
1005  *(_DWORD *)(a1 + *(_DWORD *)(v2 - 12)) = *(_DWORD *)(a2 + 68);
1006  *(_DWORD *)(a1 + 4) = *(_DWORD *)(a2 + 72);
1007  *(_DWORD *)(a1 + 16) = *(_DWORD *)(a2 + 76);
1008  android::sp<android::CameraListener>::_sp(a1 + 28);
1009  android::sp<android::ICamera>::_sp(v3 + 20);
1010  v5 = *(_DWORD *)(v4 + 60);
1011  *(_DWORD *)(v3 + 16) = v5;
1012  *(_DWORD *)(v3 + 16 + *(_DWORD *)(v5 - 12)) = *(_DWORD *)(v4 + 64);
1013  v6 = *(_DWORD *)(v4 + 4);
1014  *(_DWORD *)v3 = v6;
1015  *(_DWORD *)(v3 + *(_DWORD *)(v6 - 12)) = *(_DWORD *)(v4 + 52);
1016  *(_DWORD *)(v3 + 4) = *(_DWORD *)(v4 + 56);
1017  sub_6BA8B8F8(v3, v4 + 8);
1018  return v3;
1019}
1020
1021//----- (6BA8BE04) --------------------------------------------------------
1022int __fastcall android::Camera::reconnect(int a1, int a2, int a3)
1023{
1024  int v3; // r4@1
1025  int v4; // r5@1
1026  int v5; // r4@2
1027  int (__fastcall *v6)(_DWORD, _DWORD); // r7@3
1028  int v8; // [sp+0h] [bp-20h]@1
1029  int v9; // [sp+4h] [bp-1Ch]@1
1030  int v10; // [sp+8h] [bp-18h]@1
1031
1032  v8 = a1;
1033  v9 = a2;
1034  v10 = a3;
1035  v3 = a1;
1036  android::sp<android::ICamera>::sp((int)&v9, a1 + 20);
1037  v4 = v9;
1038  if ( v9 )
1039  {
1040    v6 = *(int (__fastcall **)(_DWORD, _DWORD))(*(_DWORD *)v9 + 20);
1041    v8 = v3;
1042    if ( v3 )
1043      android::RefBase::incStrong(v3 + *(_DWORD *)(*(_DWORD *)v3 - 12), &v8);
1044    v5 = v6(v4, &v8);
1045    if ( v8 )
1046      android::RefBase::decStrong(v8 + *(_DWORD *)(*(_DWORD *)v8 - 12), &v8);
1047  }
1048  else
1049  {
1050    v5 = -19;
1051  }
1052  android::sp<android::ICamera>::_sp((int)&v9);
1053  return v5;
1054}
1055// 6BA8B198: using guessed type int __fastcall android__RefBase__incStrong(_DWORD, _DWORD);
1056// 6BA8B1A4: using guessed type int __fastcall android__RefBase__decStrong(_DWORD, _DWORD);
1057
1058//----- (6BA8BE58) --------------------------------------------------------
1059int __fastcall android::sp<android::IBinder>::_sp(int a1)
1060{
1061  int v1; // r4@1
1062
1063  v1 = a1;
1064  if ( *(_DWORD *)a1 )
1065    android::RefBase::decStrong(*(_DWORD *)a1 + *(_DWORD *)(**(_DWORD **)a1 - 12), a1);
1066  return v1;
1067}
1068// 6BA8B1A4: using guessed type int __fastcall android__RefBase__decStrong(_DWORD, _DWORD);
1069
1070//----- (6BA8BE74) --------------------------------------------------------
1071int __fastcall android::sp<android::ICamera>::operator_(int a1, int a2)
1072{
1073  int v2; // r5@1
1074  int v3; // r4@1
1075
1076  v2 = *(_DWORD *)a2;
1077  v3 = a1;
1078  if ( *(_DWORD *)a2 )
1079    android::RefBase::incStrong(v2 + *(_DWORD *)(*(_DWORD *)v2 - 12), a1);
1080  if ( *(_DWORD *)v3 )
1081    android::RefBase::decStrong(*(_DWORD *)v3 + *(_DWORD *)(**(_DWORD **)v3 - 12), v3);
1082  *(_DWORD *)v3 = v2;
1083  return v3;
1084}
1085// 6BA8B198: using guessed type int __fastcall android__RefBase__incStrong(_DWORD, _DWORD);
1086// 6BA8B1A4: using guessed type int __fastcall android__RefBase__decStrong(_DWORD, _DWORD);
1087
1088//----- (6BA8BEA4) --------------------------------------------------------
1089int __fastcall android::sp<android::IBinder>::operator_(int a1, int a2)
1090{
1091  int v2; // r5@1
1092  int v3; // r4@1
1093
1094  v2 = *(_DWORD *)a2;
1095  v3 = a1;
1096  if ( *(_DWORD *)a2 )
1097    android::RefBase::incStrong(v2 + *(_DWORD *)(*(_DWORD *)v2 - 12), a1);
1098  if ( *(_DWORD *)v3 )
1099    android::RefBase::decStrong(*(_DWORD *)v3 + *(_DWORD *)(**(_DWORD **)v3 - 12), v3);
1100  *(_DWORD *)v3 = v2;
1101  return v3;
1102}
1103// 6BA8B198: using guessed type int __fastcall android__RefBase__incStrong(_DWORD, _DWORD);
1104// 6BA8B1A4: using guessed type int __fastcall android__RefBase__decStrong(_DWORD, _DWORD);
1105
1106//----- (6BA8BED4) --------------------------------------------------------
1107pthread_mutex_t *__fastcall sub_6BA8BED4(pthread_mutex_t *a1)
1108{
1109  pthread_mutex_t *v1; // r4@1
1110
1111  v1 = a1;
1112  pthread_mutex_destroy(a1);
1113  return v1;
1114}
1115
1116//----- (6BA8BEE0) --------------------------------------------------------
1117int __fastcall _non_virtual_thunk_to_android::Camera::binderDied(int a1)
1118{
1119  return android::Camera::binderDied(a1 - 16);
1120}
1121// 6BA8BEE8: using guessed type int __fastcall android__Camera__binderDied(_DWORD);
1122
1123//----- (6BA8BEE8) --------------------------------------------------------
1124int __fastcall android::Camera::binderDied(int a1)
1125{
1126  int v1; // r5@1
1127
1128  v1 = a1;
1129  _android_log_print(5, "Camera", "ICamera died");
1130  return (*(int (__fastcall **)(int, signed int, signed int, _DWORD))(*(_DWORD *)v1 + 16))(v1, 1, 100, 0);
1131}
1132// 6BA8B1BC: using guessed type int _android_log_print(_DWORD, _DWORD, const char *, ...);
1133// 6BA8BEE8: using guessed type int __fastcall android__Camera__binderDied(_DWORD);
1134
1135//----- (6BA8BF14) --------------------------------------------------------
1136int __fastcall android::Camera::setShutterSound(int a1, int a2, int a3)
1137{
1138  int v3; // r4@2
1139  int v5; // [sp+4h] [bp-14h]@1
1140  int v6; // [sp+8h] [bp-10h]@1
1141
1142  v5 = a2;
1143  v6 = a3;
1144  android::sp<android::ICamera>::sp((int)&v5, a1 + 20);
1145  if ( v5 )
1146  {
1147    v3 = (*(int (**)(void))(*(_DWORD *)v5 + 96))();
1148  }
1149  else
1150  {
1151    v3 = -2147483648;
1152    _android_log_print(6, "Camera", "setShutterSound --mCamera is no init");
1153  }
1154  android::sp<android::ICamera>::_sp((int)&v5);
1155  return v3;
1156}
1157// 6BA8B1BC: using guessed type int _android_log_print(_DWORD, _DWORD, const char *, ...);
1158
1159//----- (6BA8BF5C) --------------------------------------------------------
1160int __fastcall android::Camera::setPreviewDisplay(int a1, int a2, int a3)
1161{
1162  int v3; // r5@1
1163  int v4; // r4@4
1164  int v6; // [sp+4h] [bp-14h]@1
1165  int v7; // [sp+8h] [bp-10h]@1
1166
1167  v6 = a2;
1168  v7 = a3;
1169  v3 = a1;
1170  if ( !*(_DWORD *)a2 )
1171    _android_log_print(3, "Camera", "app passed NULL surface");
1172  android::sp<android::ICamera>::sp((int)&v6, v3 + 20);
1173  if ( v6 )
1174    v4 = (*(int (**)(void))(*(_DWORD *)v6 + 32))();
1175  else
1176    v4 = -19;
1177  android::sp<android::ICamera>::_sp((int)&v6);
1178  return v4;
1179}
1180// 6BA8B1BC: using guessed type int _android_log_print(_DWORD, _DWORD, const char *, ...);
1181
1182//----- (6BA8BFA4) --------------------------------------------------------
1183int __fastcall android::Camera::DeathNotifier::binderDied()
1184{
1185  pthread_mutex_lock((pthread_mutex_t *)&android::Camera::mLock);
1186  if ( android::Camera::mCameraService )
1187  {
1188    android::RefBase::decStrong(
1189      android::Camera::mCameraService + *(_DWORD *)(*(_DWORD *)android::Camera::mCameraService - 12),
1190      &android::Camera::mCameraService);
1191    android::Camera::mCameraService = 0;
1192  }
1193  _android_log_print(5, "Camera", "Camera server died!");
1194  return pthread_mutex_unlock((pthread_mutex_t *)&android::Camera::mLock);
1195}
1196// 6BA8B1A4: using guessed type int __fastcall android__RefBase__decStrong(_DWORD, _DWORD);
1197// 6BA8B1BC: using guessed type int _android_log_print(_DWORD, _DWORD, const char *, ...);
1198// 6BA93D10: using guessed type int android__Camera__mLock;
1199// 6BA93D14: using guessed type int android__Camera__mCameraService;
1200
1201//----- (6BA8BFFC) --------------------------------------------------------
1202int __fastcall android::Camera::dataCallbackTimestamp(int a1, int a2, int _R2, int a4, int a5, int a6)
1203{
1204  int v10; // r4@1
1205  int v14; // r2@3
1206  int v16; // [sp+Ch] [bp-4h]@1
1207  _BYTE v17[32]; // [sp+10h] [bp+0h]@1
1208
1209  __asm { VMOV            D8, R2, R3 }
1210  v10 = a1;
1211  v16 = 0;
1212  pthread_mutex_lock((pthread_mutex_t *)&android::Camera::mLock);
1213  android::sp<android::CameraListener>::operator_((int)v17, v10 + 28);
1214  pthread_mutex_unlock((pthread_mutex_t *)&android::Camera::mLock);
1215  _android_log_print(5, "Camera", "No listener was set. Drop a recording frame.");
1216  android::Camera::releaseRecordingFrame(v10, a6, v14);
1217  return android::sp<android::CameraListener>::_sp((int)&v16);
1218}
1219// 6BA8B1BC: using guessed type int _android_log_print(_DWORD, _DWORD, const char *, ...);
1220// 6BA93D10: using guessed type int android__Camera__mLock;
1221
1222//----- (6BA8C07C) --------------------------------------------------------
1223int __fastcall android::Camera::dataCallback(int a1)
1224{
1225  int v1; // r5@1
1226  int v3; // [sp+4h] [bp-1Ch]@1
1227
1228  v1 = a1;
1229  v3 = 0;
1230  pthread_mutex_lock((pthread_mutex_t *)&android::Camera::mLock);
1231  android::sp<android::CameraListener>::operator_((int)&v3, v1 + 28);
1232  pthread_mutex_unlock((pthread_mutex_t *)&android::Camera::mLock);
1233  if ( v3 )
1234    (*(void (**)(void))(*(_DWORD *)v3 + 4))();
1235  return android::sp<android::CameraListener>::_sp((int)&v3);
1236}
1237// 6BA93D10: using guessed type int android__Camera__mLock;
1238
1239//----- (6BA8C0D0) --------------------------------------------------------
1240int __fastcall android::Camera::notifyCallback(int a1, int a2, int a3)
1241{
1242  int v3; // r4@1
1243  int v5; // [sp+4h] [bp-24h]@1
1244  int v6; // [sp+8h] [bp-20h]@1
1245
1246  v6 = a3;
1247  v3 = a1;
1248  v5 = 0;
1249  pthread_mutex_lock((pthread_mutex_t *)&android::Camera::mLock);
1250  android::sp<android::CameraListener>::operator_((int)&v5, v3 + 28);
1251  pthread_mutex_unlock((pthread_mutex_t *)&android::Camera::mLock);
1252  if ( v5 )
1253    (**(void (***)(void))v5)();
1254  return android::sp<android::CameraListener>::_sp((int)&v5);
1255}
1256// 6BA93D10: using guessed type int android__Camera__mLock;
1257
1258//----- (6BA8C128) --------------------------------------------------------
1259int __fastcall android::Camera::setListener(int a1, int a2)
1260{
1261  int v2; // r5@1
1262  int v3; // r6@1
1263
1264  v2 = a1;
1265  v3 = a2;
1266  pthread_mutex_lock((pthread_mutex_t *)&android::Camera::mLock);
1267  android::sp<android::CameraListener>::operator_(v2 + 28, v3);
1268  return pthread_mutex_unlock((pthread_mutex_t *)&android::Camera::mLock);
1269}
1270// 6BA93D10: using guessed type int android__Camera__mLock;
1271
1272//----- (6BA8C158) --------------------------------------------------------
1273int __fastcall android::Camera::getParameters(int a1, int a2, int a3)
1274{
1275  int v3; // r5@1
1276  int v4; // r4@1
1277  int v6; // [sp+0h] [bp-18h]@1
1278  int v7; // [sp+4h] [bp-14h]@1
1279  int v8; // [sp+8h] [bp-10h]@1
1280
1281  v6 = a1;
1282  v7 = a2;
1283  v8 = a3;
1284  v3 = a2;
1285  v4 = a1;
1286  android::String8::String8(a1);
1287  android::sp<android::ICamera>::sp((int)&v7, v3 + 20);
1288  if ( v7 )
1289  {
1290    (*(void (__fastcall **)(int *))(**(_DWORD **)(v3 + 20) + 88))(&v6);
1291    android::String8::setTo(v4, &v6);
1292    android::String8::_String8(&v6);
1293  }
1294  android::sp<android::ICamera>::_sp((int)&v7);
1295  return v4;
1296}
1297// 6BA8B1E0: using guessed type int __fastcall android__String8__String8(_DWORD);
1298// 6BA8B1EC: using guessed type int __fastcall android__String8__setTo(_DWORD, _DWORD);
1299// 6BA8B1F8: using guessed type int __fastcall android__String8___String8(_DWORD);
1300
1301//----- (6BA8C194) --------------------------------------------------------
1302signed int __fastcall android::Camera::setPreviewDisplay(int a1, int a2)
1303{
1304  int v2; // r4@1
1305  int v3; // r6@1
1306  signed int v4; // r4@2
1307  int v5; // r4@3
1308  int *v6; // r5@4
1309  int (__fastcall *v7)(_DWORD, _DWORD); // r7@4
1310  int v8; // r0@4
1311  int v9; // r3@4
1312  int (*v10)(void); // r2@5
1313  int v11; // r0@5
1314  int v13; // [sp+4h] [bp-24h]@5
1315  int v14; // [sp+8h] [bp-20h]@4
1316  int v15; // [sp+Ch] [bp-1Ch]@1
1317
1318  v2 = a2;
1319  android::sp<android::ICamera>::sp((int)&v15, a1 + 20);
1320  v3 = v15;
1321  if ( v15 )
1322  {
1323    v5 = *(_DWORD *)v2;
1324    if ( v5 )
1325    {
1326      v6 = &v14;
1327      v7 = *(int (__fastcall **)(_DWORD, _DWORD))(*(_DWORD *)v15 + 32);
1328      android::Surface::getISurface(&v14, v5);
1329      v8 = v7(v3, &v14);
1330      v9 = v14;
1331      v4 = v8;
1332    }
1333    else
1334    {
1335      _android_log_print(3, "Camera", "app passed NULL surface");
1336      v10 = *(int (**)(void))(*(_DWORD *)v15 + 32);
1337      v13 = 0;
1338      v6 = &v13;
1339      v11 = v10();
1340      v9 = v13;
1341      v4 = v11;
1342    }
1343    if ( v9 )
1344      android::RefBase::decStrong(v9 + *(_DWORD *)(*(_DWORD *)v9 - 12), v6);
1345  }
1346  else
1347  {
1348    v4 = -19;
1349  }
1350  android::sp<android::ICamera>::_sp((int)&v15);
1351  return v4;
1352}
1353// 6BA8B1A4: using guessed type int __fastcall android__RefBase__decStrong(_DWORD, _DWORD);
1354// 6BA8B1BC: using guessed type int _android_log_print(_DWORD, _DWORD, const char *, ...);
1355// 6BA8B204: using guessed type int __fastcall android__Surface__getISurface(_DWORD, _DWORD);
1356
1357//----- (6BA8C214) --------------------------------------------------------
1358int __fastcall sub_6BA8C214(int a1, int a2)
1359{
1360  int v2; // r4@1
1361  int v3; // r5@1
1362  int v4; // r1@1
1363  int result; // r0@1
1364
1365  v2 = a1;
1366  v3 = a2;
1367  android::ICameraClient::ICameraClient(a1, a2 + 4);
1368  android::BBinder::BBinder(v2 + 4, v3 + 20);
1369  v4 = *(_DWORD *)v3;
1370  *(_DWORD *)v2 = *(_DWORD *)v3;
1371  *(_DWORD *)(v2 + *(_DWORD *)(v4 - 12)) = *(_DWORD *)(v3 + 36);
1372  result = v2;
1373  *(_DWORD *)(v2 + 4) = *(_DWORD *)(v3 + 40);
1374  return result;
1375}
1376// 6BA8B210: using guessed type int __fastcall android__BBinder__BBinder(_DWORD, _DWORD);
1377
1378//----- (6BA8C240) --------------------------------------------------------
1379int __fastcall android::Camera::Camera(int a1)
1380{
1381  int v1; // r4@1
1382  int v2; // r2@1
1383  int v3; // r0@1
1384  int v4; // r1@1
1385  int v5; // r3@1
1386  int v6; // r2@1
1387
1388  v1 = a1;
1389  android::RefBase::RefBase(a1 + 32);
1390  sub_6BA8C214(v1, (int)&_VTT_for_android::Camera[8]);
1391  v2 = *(_DWORD *)&_VTT_for_android::Camera[4];
1392  v3 = *(_DWORD *)&_VTT_for_android::Camera[52];
1393  v4 = *(_DWORD *)&_VTT_for_android::Camera[56];
1394  *(_DWORD *)v1 = *(_DWORD *)&_VTT_for_android::Camera[4];
1395  v5 = *(_DWORD *)(v2 - 12);
1396  v6 = *(_DWORD *)&_VTT_for_android::Camera[60];
1397  *(_DWORD *)(v1 + v5) = v3;
1398  *(_DWORD *)(v1 + 4) = v4;
1399  *(_DWORD *)(v1 + 16) = v6;
1400  *(_DWORD *)(v1 + *(_DWORD *)(v6 - 12) + 16) = *(_DWORD *)&_VTT_for_android::Camera[64];
1401  *(_DWORD *)(v1 + 20) = 0;
1402  *(_DWORD *)v1 = &_vtable_for_android::Camera[12];
1403  *(_DWORD *)(v1 + 32) = &_vtable_for_android::Camera[184];
1404  *(_DWORD *)(v1 + 4) = &_vtable_for_android::Camera[64];
1405  *(_DWORD *)(v1 + 16) = &_vtable_for_android::Camera[144];
1406  *(_DWORD *)(v1 + 28) = 0;
1407  android::Camera::init(v1);
1408  return v1;
1409}
1410// 6BA8B21C: using guessed type int __fastcall android__RefBase__RefBase(_DWORD);
1411
1412//----- (6BA8C2B8) --------------------------------------------------------
1413int __fastcall android::Camera::create(int a1, int a2, int a3, int a4)
1414{
1415  int v4; // r4@1
1416  int v5; // r6@1
1417  int v6; // r5@3
1418  int v7; // r5@5
1419  int (__fastcall *v8)(_DWORD, _DWORD); // r8@5
1420  int v9; // r5@7
1421  int v10; // r7@10
1422  void (__fastcall *v11)(_DWORD, _DWORD); // r6@10
1423  int v12; // r3@17
1424  int v14; // [sp+0h] [bp-28h]@1
1425  int v15; // [sp+4h] [bp-24h]@1
1426  int v16; // [sp+8h] [bp-20h]@1
1427  int v17; // [sp+Ch] [bp-1Ch]@1
1428
1429  v14 = a1;
1430  v15 = a2;
1431  v16 = a3;
1432  v17 = a4;
1433  v4 = a1;
1434  v5 = a2;
1435  if ( *(_DWORD *)a2 )
1436  {
1437    v6 = operator new(40);
1438    android::Camera::Camera(v6);
1439    v17 = v6;
1440    if ( v6 )
1441      android::RefBase::incStrong(v6 + *(_DWORD *)(*(_DWORD *)v6 - 12), &v17);
1442    v7 = *(_DWORD *)v5;
1443    v8 = *(int (__fastcall **)(_DWORD, _DWORD))(**(_DWORD **)v5 + 20);
1444    v16 = v17;
1445    if ( v17 )
1446      android::RefBase::incStrong(v17 + *(_DWORD *)(*(_DWORD *)v17 - 12), &v16);
1447    v9 = v8(v7, &v16);
1448    if ( v16 )
1449      android::RefBase::decStrong(v16 + *(_DWORD *)(*(_DWORD *)v16 - 12), &v16);
1450    if ( !v9 )
1451    {
1452      *(_DWORD *)(v17 + 24) = 0;
1453      android::sp<android::ICamera>::operator_(v17 + 20, v5);
1454      android::IInterface::asBinder(&v15, *(_DWORD *)v5);
1455      v10 = v15;
1456      v11 = *(void (__fastcall **)(_DWORD, _DWORD))(*(_DWORD *)v15 + 24);
1457      if ( v17 )
1458        v9 = v17 + 16;
1459      v14 = v9;
1460      if ( v9 )
1461        android::RefBase::incStrong(v9 + *(_DWORD *)(*(_DWORD *)v9 - 12), &v14);
1462      v11(v10, &v14);
1463      if ( v14 )
1464        android::RefBase::decStrong(v14 + *(_DWORD *)(*(_DWORD *)v14 - 12), &v14);
1465      android::sp<android::IBinder>::_sp((int)&v15);
1466    }
1467    v12 = v17;
1468    *(_DWORD *)v4 = v17;
1469    if ( v12 )
1470      android::RefBase::incStrong(v12 + *(_DWORD *)(*(_DWORD *)v12 - 12), v4);
1471    if ( v17 )
1472      android::RefBase::decStrong(v17 + *(_DWORD *)(*(_DWORD *)v17 - 12), &v17);
1473  }
1474  else
1475  {
1476    _android_log_print(6, "Camera", "camera remote is a NULL pointer");
1477    *(_DWORD *)v4 = 0;
1478  }
1479  return v4;
1480}
1481// 6BA8B198: using guessed type int __fastcall android__RefBase__incStrong(_DWORD, _DWORD);
1482// 6BA8B1A4: using guessed type int __fastcall android__RefBase__decStrong(_DWORD, _DWORD);
1483// 6BA8B1BC: using guessed type int _android_log_print(_DWORD, _DWORD, const char *, ...);
1484// 6BA8B228: using guessed type int __fastcall operator new(_DWORD);
1485// 6BA8B234: using guessed type int __fastcall android__IInterface__asBinder(_DWORD, _DWORD);
1486
1487//----- (6BA8C3C4) --------------------------------------------------------
1488int __fastcall android::Camera::Camera(int a1, int a2)
1489{
1490  int v2; // r5@1
1491  int v3; // r6@1
1492  int v4; // r4@1
1493  int v5; // r0@1
1494  int v6; // r0@1
1495  int v7; // r0@1
1496  int v8; // r0@1
1497
1498  v2 = a2;
1499  v3 = a2 + 4;
1500  v4 = a1;
1501  sub_6BA8C214(a1, a2 + 8);
1502  v5 = *(_DWORD *)(v2 + 4);
1503  *(_DWORD *)v4 = v5;
1504  *(_DWORD *)(v4 + *(_DWORD *)(v5 - 12)) = *(_DWORD *)(v3 + 48);
1505  *(_DWORD *)(v4 + 4) = *(_DWORD *)(v3 + 52);
1506  v6 = *(_DWORD *)(v2 + 60);
1507  *(_DWORD *)(v4 + 16) = v6;
1508  *(_DWORD *)(v4 + *(_DWORD *)(v6 - 12) + 16) = *(_DWORD *)(v2 + 64);
1509  v7 = *(_DWORD *)v2;
1510  *(_DWORD *)v4 = *(_DWORD *)v2;
1511  *(_DWORD *)(v4 + *(_DWORD *)(v7 - 12)) = *(_DWORD *)(v2 + 68);
1512  *(_DWORD *)(v4 + 4) = *(_DWORD *)(v2 + 72);
1513  v8 = *(_DWORD *)(v2 + 76);
1514  *(_DWORD *)(v4 + 20) = 0;
1515  *(_DWORD *)(v4 + 28) = 0;
1516  *(_DWORD *)(v4 + 16) = v8;
1517  android::Camera::init(v4);
1518  return v4;
1519}
1520
1521//----- (6BA8C414) --------------------------------------------------------
1522int __fastcall sub_6BA8C414()
1523{
1524  pthread_mutex_init((pthread_mutex_t *)&android::Camera::mLock, 0);
1525  _aeabi_atexit(&android::Camera::mLock, sub_6BA8BED4, &_dso_handle);
1526  android::Camera::mCameraService = 0;
1527  _aeabi_atexit(&android::Camera::mCameraService, android::sp<android::ICameraService>::_sp, &_dso_handle);
1528  android::Camera::mDeathNotifier = 0;
1529  return _aeabi_atexit(&android::Camera::mDeathNotifier, android::sp<android::Camera::DeathNotifier>::_sp, &_dso_handle);
1530}
1531// 6BA8B24C: using guessed type int __fastcall _aeabi_atexit(_DWORD, _DWORD, _DWORD);
1532// 6BA93D10: using guessed type int android__Camera__mLock;
1533// 6BA93D14: using guessed type int android__Camera__mCameraService;
1534// 6BA93D18: using guessed type int android__Camera__mDeathNotifier;
1535
1536//----- (6BA8C47C) --------------------------------------------------------
1537int __fastcall sub_6BA8C47C()
1538{
1539  return sub_6BA8C414();
1540}
1541
1542//----- (6BA8C484) --------------------------------------------------------
1543int __fastcall sub_6BA8C484()
1544{
1545  int v0; // r0@1
1546  char v1; // cf@1
1547  int result; // r0@1
1548
1549  v0 = strzcmp16();
1550  v1 = (unsigned int)v0 <= 1;
1551  result = 1 - v0;
1552  if ( !v1 )
1553    result = 0;
1554  return result;
1555}
1556// 6BA8B258: using guessed type int strzcmp16(void);
1557
1558//----- (6BA8C4E8) --------------------------------------------------------
1559int *__fastcall sub_6BA8C4E8(int a1)
1560{
1561  int v1; // r5@1
1562  int *result; // r0@5
1563
1564  v1 = a1;
1565  if ( a1 )
1566    android::RefBase::incStrong(a1 + *(_DWORD *)(*(_DWORD *)a1 - 12), &android::Camera::mDeathNotifier);
1567  if ( android::Camera::mDeathNotifier )
1568    android::RefBase::decStrong(
1569      android::Camera::mDeathNotifier + *(_DWORD *)(*(_DWORD *)android::Camera::mDeathNotifier - 12),
1570      &android::Camera::mDeathNotifier);
1571  result = &android::Camera::mDeathNotifier;
1572  android::Camera::mDeathNotifier = v1;
1573  return result;
1574}
1575// 6BA8B198: using guessed type int __fastcall android__RefBase__incStrong(_DWORD, _DWORD);
1576// 6BA8B1A4: using guessed type int __fastcall android__RefBase__decStrong(_DWORD, _DWORD);
1577// 6BA93D18: using guessed type int android__Camera__mDeathNotifier;
1578
1579//----- (6BA8C52C) --------------------------------------------------------
1580int *__fastcall sub_6BA8C52C(int *a1)
1581{
1582  int v1; // r5@1
1583  int *result; // r0@5
1584
1585  v1 = *a1;
1586  if ( *a1 )
1587    android::RefBase::incStrong(v1 + *(_DWORD *)(*(_DWORD *)v1 - 12), &android::Camera::mCameraService);
1588  if ( android::Camera::mCameraService )
1589    android::RefBase::decStrong(
1590      android::Camera::mCameraService + *(_DWORD *)(*(_DWORD *)android::Camera::mCameraService - 12),
1591      &android::Camera::mCameraService);
1592  result = &android::Camera::mCameraService;
1593  android::Camera::mCameraService = v1;
1594  return result;
1595}
1596// 6BA8B198: using guessed type int __fastcall android__RefBase__incStrong(_DWORD, _DWORD);
1597// 6BA8B1A4: using guessed type int __fastcall android__RefBase__decStrong(_DWORD, _DWORD);
1598// 6BA93D14: using guessed type int android__Camera__mCameraService;
1599
1600//----- (6BA8C570) --------------------------------------------------------
1601int *__fastcall android::Camera::getCameraService()
1602{
1603  int v0; // r11@3
1604  void (__fastcall *v1)(_DWORD, _DWORD, _DWORD); // r9@3
1605  int v2; // r5@6
1606  int v3; // r1@6
1607  int v4; // r6@6
1608  int v5; // r7@7
1609  void (__fastcall *v6)(_DWORD, _DWORD); // r6@7
1610  char v8; // [sp+8h] [bp-40h]@11
1611  int v9; // [sp+Ch] [bp-3Ch]@7
1612  char v10; // [sp+10h] [bp-38h]@3
1613  char v11; // [sp+14h] [bp-34h]@3
1614  int v12; // [sp+18h] [bp-30h]@2
1615  int v13; // [sp+1Ch] [bp-2Ch]@2
1616
1617  pthread_mutex_lock((pthread_mutex_t *)&android::Camera::mLock);
1618  if ( !android::Camera::mCameraService )
1619  {
1620    android::defaultServiceManager(&v13);
1621    v12 = 0;
1622    while ( 1 )
1623    {
1624      v0 = v13;
1625      v1 = *(void (__fastcall **)(_DWORD, _DWORD, _DWORD))(*(_DWORD *)v13 + 16);
1626      android::String16::String16(&v11, "media.camera");
1627      v1(&v10, v0, &v11);
1628      android::sp<android::IBinder>::operator_((int)&v12, (int)&v10);
1629      android::sp<android::IBinder>::_sp((int)&v10);
1630      android::String16::_String16(&v11);
1631      if ( v12 )
1632        break;
1633      _android_log_print(5, "Camera", "CameraService not published, waiting...");
1634      usleep(0x7A120u);
1635    }
1636    if ( !android::Camera::mDeathNotifier )
1637    {
1638      v2 = operator new(12);
1639      android::RefBase::RefBase(v2 + 4);
1640      v3 = *(_DWORD *)&_VTT_for_android::Camera::DeathNotifier[4];
1641      v4 = *(_DWORD *)&_VTT_for_android::Camera::DeathNotifier[8];
1642      *(_DWORD *)v2 = *(_DWORD *)&_VTT_for_android::Camera::DeathNotifier[4];
1643      *(_DWORD *)(v2 + *(_DWORD *)(v3 - 12)) = v4;
1644      *(_DWORD *)v2 = &_vtable_for_android::Camera::DeathNotifier[12];
1645      *(_DWORD *)(v2 + 4) = &_vtable_for_android::Camera::DeathNotifier[52];
1646      sub_6BA8C4E8(v2);
1647    }
1648    v5 = v12;
1649    v6 = *(void (__fastcall **)(_DWORD, _DWORD))(*(_DWORD *)v12 + 24);
1650    v9 = android::Camera::mDeathNotifier;
1651    if ( android::Camera::mDeathNotifier )
1652      android::RefBase::incStrong(
1653        android::Camera::mDeathNotifier + *(_DWORD *)(*(_DWORD *)android::Camera::mDeathNotifier - 12),
1654        &v9);
1655    v6(v5, &v9);
1656    if ( v9 )
1657      android::RefBase::decStrong(v9 + *(_DWORD *)(*(_DWORD *)v9 - 12), &v9);
1658    android::ICameraService::asInterface((int)&v8, (int)&v12);
1659    sub_6BA8C52C((int *)&v8);
1660    android::sp<android::ICameraService>::_sp((int)&v8);
1661    android::sp<android::IBinder>::_sp((int)&v12);
1662    if ( v13 )
1663      android::RefBase::decStrong(v13 + *(_DWORD *)(*(_DWORD *)v13 - 12), &v13);
1664  }
1665  if ( !android::Camera::mCameraService )
1666    _android_log_print(6, "Camera", "no CameraService!?");
1667  pthread_mutex_unlock((pthread_mutex_t *)&android::Camera::mLock);
1668  return &android::Camera::mCameraService;
1669}
1670// 6BA8B198: using guessed type int __fastcall android__RefBase__incStrong(_DWORD, _DWORD);
1671// 6BA8B1A4: using guessed type int __fastcall android__RefBase__decStrong(_DWORD, _DWORD);
1672// 6BA8B1BC: using guessed type int _android_log_print(_DWORD, _DWORD, const char *, ...);
1673// 6BA8B21C: using guessed type int __fastcall android__RefBase__RefBase(_DWORD);
1674// 6BA8B228: using guessed type int __fastcall operator new(_DWORD);
1675// 6BA8B264: using guessed type int __fastcall android__defaultServiceManager(_DWORD);
1676// 6BA8B270: using guessed type int __fastcall android__String16__String16(_DWORD, _DWORD);
1677// 6BA8B27C: using guessed type int __fastcall android__String16___String16(_DWORD);
1678// 6BA93D10: using guessed type int android__Camera__mLock;
1679// 6BA93D14: using guessed type int android__Camera__mCameraService;
1680// 6BA93D18: using guessed type int android__Camera__mDeathNotifier;
1681
1682//----- (6BA8C704) --------------------------------------------------------
1683int *__fastcall android::Camera::connect(int *a1, int a2)
1684{
1685  int *v2; // r4@1
1686  int v3; // r9@1
1687  int v4; // r5@1
1688  int v5; // r10@3
1689  int v6; // r3@4
1690  int v7; // r8@4
1691  void (__fastcall *v8)(_DWORD, _DWORD, _DWORD, _DWORD); // r7@4
1692  int v9; // r7@9
1693  void (__fastcall *v10)(_DWORD, _DWORD); // r6@9
1694  int v11; // r3@9
1695  int v13; // [sp+8h] [bp-38h]@11
1696  int v14; // [sp+Ch] [bp-34h]@9
1697  char v15; // [sp+10h] [bp-30h]@6
1698  int v16; // [sp+14h] [bp-2Ch]@4
1699
1700  v2 = a1;
1701  v3 = a2;
1702  v4 = operator new(40);
1703  android::Camera::Camera(v4);
1704  *v2 = v4;
1705  if ( v4 )
1706    android::RefBase::incStrong(v4 + *(_DWORD *)(*(_DWORD *)v4 - 12), v2);
1707  v5 = *android::Camera::getCameraService();
1708  if ( v5 )
1709  {
1710    v6 = *v2;
1711    v7 = *v2 + 20;
1712    v8 = *(void (__fastcall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v5 + 28);
1713    v16 = v6;
1714    if ( v6 )
1715      android::RefBase::incStrong(v6 + *(_DWORD *)(*(_DWORD *)v6 - 12), &v16);
1716    v8(&v15, v5, &v16, v3);
1717    android::sp<android::ICamera>::operator_(v7, (int)&v15);
1718    android::sp<android::ICamera>::_sp((int)&v15);
1719    if ( v16 )
1720      android::RefBase::decStrong(v16 + *(_DWORD *)(*(_DWORD *)v16 - 12), &v16);
1721  }
1722  if ( *(_DWORD *)(*v2 + 20) )
1723  {
1724    android::IInterface::asBinder(&v14, *(_DWORD *)(*v2 + 20));
1725    v9 = v14;
1726    v10 = *(void (__fastcall **)(_DWORD, _DWORD))(*(_DWORD *)v14 + 24);
1727    v11 = *v2;
1728    if ( *v2 )
1729      v11 += 16;
1730    v13 = v11;
1731    if ( v11 )
1732      android::RefBase::incStrong(v11 + *(_DWORD *)(*(_DWORD *)v11 - 12), &v13);
1733    v10(v9, &v13);
1734    if ( v13 )
1735      android::RefBase::decStrong(v13 + *(_DWORD *)(*(_DWORD *)v13 - 12), &v13);
1736    android::sp<android::IBinder>::_sp((int)&v14);
1737    *(_DWORD *)(*v2 + 24) = 0;
1738  }
1739  else
1740  {
1741    android::RefBase::decStrong(*v2 + *(_DWORD *)(*(_DWORD *)*v2 - 12), v2);
1742    *v2 = 0;
1743  }
1744  return v2;
1745}
1746// 6BA8B198: using guessed type int __fastcall android__RefBase__incStrong(_DWORD, _DWORD);
1747// 6BA8B1A4: using guessed type int __fastcall android__RefBase__decStrong(_DWORD, _DWORD);
1748// 6BA8B228: using guessed type int __fastcall operator new(_DWORD);
1749// 6BA8B234: using guessed type int __fastcall android__IInterface__asBinder(_DWORD, _DWORD);
1750
1751//----- (6BA8C7FC) --------------------------------------------------------
1752int __fastcall android::Camera::getCameraInfo()
1753{
1754  int v0; // r0@1
1755  int result; // r0@2
1756
1757  v0 = *android::Camera::getCameraService();
1758  if ( v0 )
1759    result = (*(int (**)(void))(*(_DWORD *)v0 + 20))();
1760  else
1761    result = -2147483648;
1762  return result;
1763}
1764
1765//----- (6BA8C81C) --------------------------------------------------------
1766int __fastcall android::Camera::getNumberOfCameras()
1767{
1768  int result; // r0@1
1769
1770  result = *android::Camera::getCameraService();
1771  if ( result )
1772    result = (*(int (**)(void))(*(_DWORD *)result + 16))();
1773  return result;
1774}
1775
1776//----- (6BA8C830) --------------------------------------------------------
1777int __fastcall sub_6BA8C830(int a1)
1778{
1779  int v1; // r4@1
1780  int result; // r0@3
1781
1782  v1 = a1;
1783  if ( *(_DWORD *)a1 )
1784    android::RefBase::decStrong(*(_DWORD *)a1 + *(_DWORD *)(**(_DWORD **)a1 - 12), a1);
1785  result = v1;
1786  *(_DWORD *)v1 = 0;
1787  return result;
1788}
1789// 6BA8B1A4: using guessed type int __fastcall android__RefBase__decStrong(_DWORD, _DWORD);
1790
1791//----- (6BA8C850) --------------------------------------------------------
1792int __fastcall android::Camera::disconnect(int a1)
1793{
1794  int v1; // r4@1
1795  int result; // r0@1
1796  int v3; // r7@2
1797  void (__fastcall *v4)(_DWORD, _DWORD); // r6@2
1798  int v5; // [sp+Ch] [bp-24h]@2
1799  int v6; // [sp+10h] [bp-20h]@2
1800  int v7; // [sp+14h] [bp-1Ch]@2
1801
1802  v1 = a1;
1803  result = *(_DWORD *)(a1 + 20);
1804  if ( result )
1805  {
1806    (*(void (**)(void))(*(_DWORD *)result + 16))();
1807    android::IInterface::asBinder(&v7, *(_DWORD *)(v1 + 20));
1808    v3 = v7;
1809    v4 = *(void (__fastcall **)(_DWORD, _DWORD))(*(_DWORD *)v7 + 28);
1810    v5 = v1 + 16;
1811    v6 = android::RefBase::createWeak(v1 + *(_DWORD *)(*(_DWORD *)v1 - 12), &v5);
1812    v4(v3, &v5);
1813    if ( v5 )
1814      android::RefBase::weakref_type::decWeak(v6, &v5);
1815    android::sp<android::IBinder>::_sp((int)&v7);
1816    result = sub_6BA8C830(v1 + 20);
1817  }
1818  return result;
1819}
1820// 6BA8B234: using guessed type int __fastcall android__IInterface__asBinder(_DWORD, _DWORD);
1821// 6BA8B294: using guessed type int __fastcall android__RefBase__createWeak(_DWORD, _DWORD);
1822// 6BA8B2A0: using guessed type int __fastcall android__RefBase__weakref_type__decWeak(_DWORD, _DWORD);
1823
1824//----- (6BA8C8B4) --------------------------------------------------------
1825void *__fastcall _virtual_thunk_to_android::Camera::_Camera(int a1)
1826{
1827  return android::Camera::_Camera((void *)(a1 + *(_DWORD *)(*(_DWORD *)a1 - 12)));
1828}
1829
1830//----- (6BA8C8C4) --------------------------------------------------------
1831int __fastcall _virtual_thunk_to_android::Camera::_Camera(int a1)
1832{
1833  return android::Camera::_Camera(a1 + *(_DWORD *)(*(_DWORD *)a1 - 12));
1834}
1835// 6BA8BD08: using guessed type int __fastcall android__Camera___Camera(_DWORD);
1836
1837//----- (6BA8C8D4) --------------------------------------------------------
1838int __fastcall android::SortedVector<android::key_value_pair_t<android::String8_android::String8>>::do_construct(int a1, int a2, int a3)
1839{
1840  int v3; // r5@1
1841  int v4; // r4@1
1842  int result; // r0@2
1843
1844  v3 = a3;
1845  v4 = a2;
1846  while ( v3 )
1847  {
1848    android::String8::String8(v4);
1849    result = android::String8::String8(v4 + 4);
1850    --v3;
1851    v4 += 8;
1852  }
1853  return result;
1854}
1855// 6BA8B1E0: using guessed type int __fastcall android__String8__String8(_DWORD);
1856
1857//----- (6BA8C8F8) --------------------------------------------------------
1858int __fastcall sub_6BA8C8F8(int a1)
1859{
1860  int v1; // r4@1
1861
1862  v1 = a1;
1863  android::String8::_String8(a1 + 4);
1864  android::String8::_String8(v1);
1865  return v1;
1866}
1867// 6BA8B1F8: using guessed type int __fastcall android__String8___String8(_DWORD);
1868
1869//----- (6BA8C90C) --------------------------------------------------------
1870int __fastcall android::SortedVector<android::key_value_pair_t<android::String8_android::String8>>::do_destroy(int a1, int a2, int a3)
1871{
1872  int v3; // r5@1
1873  int v4; // r4@1
1874  int result; // r0@2
1875
1876  v3 = a3;
1877  v4 = a2;
1878  while ( v3 )
1879  {
1880    --v3;
1881    result = sub_6BA8C8F8(v4);
1882    v4 += 8;
1883  }
1884  return result;
1885}
1886
1887//----- (6BA8C924) --------------------------------------------------------
1888int __fastcall android::CameraParameters::dump(int a1, int a2)
1889{
1890  int v2; // r7@1
1891  unsigned int v3; // r6@1
1892  int v4; // r11@2
1893  int result; // r0@4
1894  int fd; // [sp+Ch] [bp-13Ch]@1
1895  char v7; // [sp+10h] [bp-138h]@2
1896  char v8; // [sp+14h] [bp-134h]@2
1897  const void *v9; // [sp+18h] [bp-130h]@1
1898  char v10; // [sp+1Ch] [bp-12Ch]@1
1899  int v11; // [sp+11Ch] [bp-2Ch]@1
1900
1901  v2 = a1;
1902  fd = a2;
1903  v3 = 0;
1904  v11 = _stack_chk_guard;
1905  android::String8::String8(&v9);
1906  snprintf(&v10, 0xFFu, "CameraParameters::dump: mMap.size = %d\n", *(_DWORD *)(v2 + 8));
1907  android::String8::append(&v9, &v10);
1908  while ( v3 < *(_DWORD *)(v2 + 8) )
1909  {
1910    v4 = 8 * v3;
1911    android::String8::String8(&v8);
1912    android::String8::String8(&v7);
1913    ++v3;
1914    android::String8::setTo(&v8, *(_DWORD *)(v2 + 4) + v4);
1915    android::String8::setTo(&v7, v4 + *(_DWORD *)(v2 + 4) + 4);
1916    snprintf(&v10, 0xFFu, "\t%s: %s\n", *(_DWORD *)&v8, *(_DWORD *)&v7);
1917    android::String8::append(&v9, &v10);
1918    android::String8::_String8(&v7);
1919    android::String8::_String8(&v8);
1920  }
1921  write(fd, v9, *((_DWORD *)v9 - 3) - 1);
1922  android::String8::_String8(&v9);
1923  result = 0;
1924  if ( v11 != _stack_chk_guard )
1925    _stack_chk_fail(0);
1926  return result;
1927}
1928// 6BA8B1E0: using guessed type int __fastcall android__String8__String8(_DWORD);
1929// 6BA8B1EC: using guessed type int __fastcall android__String8__setTo(_DWORD, _DWORD);
1930// 6BA8B1F8: using guessed type int __fastcall android__String8___String8(_DWORD);
1931// 6BA8B444: using guessed type int __fastcall android__String8__append(_DWORD, _DWORD);
1932// 6BA8B45C: using guessed type int __fastcall _stack_chk_fail(_DWORD);
1933
1934//----- (6BA8CA0C) --------------------------------------------------------
1935void __fastcall android::CameraParameters::dump(int a1, int a2, int a3, int a4)
1936{
1937  int v4; // r5@1
1938  unsigned int v5; // r4@1
1939  int v6; // r10@2
1940  int v7; // [sp+8h] [bp-4h]@1
1941  int v8; // [sp+Ch] [bp+0h]@1
1942
1943  v7 = a3;
1944  v8 = a4;
1945  v4 = a1;
1946  v5 = 0;
1947  _android_log_print(3, "CameraParams", "dump: mMap.size = %d");
1948  while ( v5 < *(_DWORD *)(v4 + 8) )
1949  {
1950    v6 = 8 * v5;
1951    android::String8::String8(&v8);
1952    android::String8::String8(&v7);
1953    ++v5;
1954    android::String8::setTo(&v8, *(_DWORD *)(v4 + 4) + v6);
1955    android::String8::setTo(&v7, v6 + *(_DWORD *)(v4 + 4) + 4);
1956    _android_log_print(3, "CameraParams", "%s: %s\n", v8, v7);
1957    android::String8::_String8(&v7);
1958    android::String8::_String8(&v8);
1959  }
1960}
1961// 6BA8B1BC: using guessed type int _android_log_print(_DWORD, _DWORD, const char *, ...);
1962// 6BA8B1E0: using guessed type int __fastcall android__String8__String8(_DWORD);
1963// 6BA8B1EC: using guessed type int __fastcall android__String8__setTo(_DWORD, _DWORD);
1964// 6BA8B1F8: using guessed type int __fastcall android__String8___String8(_DWORD);
1965
1966//----- (6BA8CA98) --------------------------------------------------------
1967signed int __fastcall sub_6BA8CA98(const char *a1, int a2, int a3, int a4, signed int a5)
1968{
1969  int v5; // r5@1
1970  int v6; // r10@1
1971  int v7; // r8@1
1972  const char *v8; // r4@1
1973  __int32 v9; // r9@1
1974  signed int result; // r0@2
1975  __int32 v11; // r0@3
1976  int v12; // [sp+4h] [bp-8h]@1
1977  int v13; // [sp+8h] [bp-4h]@1
1978  int v14; // [sp+Ch] [bp+0h]@1
1979
1980  v12 = a2;
1981  v13 = a3;
1982  v14 = a4;
1983  v5 = a2;
1984  v6 = a3;
1985  v7 = a4;
1986  v8 = a1;
1987  v9 = strtol(a1, (char **)&v14, 10);
1988  if ( *(_BYTE *)v14 == v7 )
1989  {
1990    v11 = strtol((const char *)(v14 + 1), (char **)&v14, 10);
1991    *(_DWORD *)v5 = v9;
1992    *(_DWORD *)v6 = v11;
1993    result = a5;
1994    if ( a5 )
1995    {
1996      *(_DWORD *)a5 = v14;
1997      result = 0;
1998    }
1999  }
2000  else
2001  {
2002    _android_log_print(6, "CameraParams", "Cannot find delimeter (%c) in str=%s", v7, v8, v12, v13);
2003    result = -1;
2004  }
2005  return result;
2006}
2007// 6BA8B1BC: using guessed type int _android_log_print(_DWORD, _DWORD, const char *, ...);
2008
2009//----- (6BA8CAFC) --------------------------------------------------------
2010int __fastcall sub_6BA8CAFC(int result, int a2)
2011{
2012  int v2; // r4@1
2013  int v3; // r7@1
2014  int v4; // r0@4
2015  char v5; // r2@4
2016  int v6; // r3@7
2017  int v7; // [sp+Ch] [bp-34h]@12
2018  int v8; // [sp+10h] [bp-30h]@12
2019  int v9; // [sp+14h] [bp-2Ch]@3
2020  int v10; // [sp+18h] [bp-28h]@3
2021  const char *i; // [sp+1Ch] [bp-24h]@2
2022
2023  v2 = result;
2024  v3 = a2;
2025  if ( result )
2026  {
2027    for ( i = (const char *)result; sub_6BA8CA98(i, (int)&v10, (int)&v9, 120, (signed int)&i) != -1; ++i )
2028    {
2029      v4 = (unsigned __int8)*i;
2030      v5 = v4 - 44;
2031      if ( v4 != 44 )
2032        v5 = 1;
2033      v6 = *i ? v5 & 1 : 0;
2034      if ( v6 )
2035        break;
2036      v7 = v10;
2037      v8 = v9;
2038      android::VectorImpl::push(v3, &v7);
2039      result = (unsigned __int8)*i;
2040      if ( !*i )
2041        return result;
2042    }
2043    result = _android_log_print(6, "CameraParams", "Picture sizes string \"%s\" contains invalid character.", v2);
2044  }
2045  return result;
2046}
2047// 6BA8B1BC: using guessed type int _android_log_print(_DWORD, _DWORD, const char *, ...);
2048// 6BA8B474: using guessed type int __fastcall android__VectorImpl__push(_DWORD, _DWORD);
2049
2050//----- (6BA8CB84) --------------------------------------------------------
2051int __fastcall sub_6BA8CB84(int a1, int a2)
2052{
2053  int v2; // r4@1
2054  int v3; // r5@1
2055
2056  v2 = a1;
2057  v3 = a2;
2058  ((void (*)(void))android::String8::String8)();
2059  android::String8::String8(v2 + 4, v3 + 4);
2060  return v2;
2061}
2062// 6BA8B480: using guessed type int __fastcall android__String8__String8(_DWORD, _DWORD);
2063
2064//----- (6BA8CB9C) --------------------------------------------------------
2065int __fastcall android::move_backward_type<android::key_value_pair_t<android::String8_android::String8>>(int a1, int a2, int a3)
2066{
2067  int v3; // r5@1
2068  int v4; // r4@1
2069  int v5; // r7@1
2070  int v6; // r6@1
2071  int v7; // r8@3
2072  int result; // r0@3
2073
2074  v3 = a1;
2075  v4 = a2;
2076  v5 = a3;
2077  v6 = 0;
2078  while ( 1 )
2079  {
2080    v7 = v4 + v6;
2081    result = v3 + v6;
2082    v6 += 8;
2083    if ( !v5 )
2084      break;
2085    --v5;
2086    sub_6BA8CB84(result, v7);
2087    sub_6BA8C8F8(v7);
2088  }
2089  return result;
2090}
2091
2092//----- (6BA8CBC8) --------------------------------------------------------
2093int __fastcall android::SortedVector<android::key_value_pair_t<android::String8_android::String8>>::do_move_backward(int a1, int a2, int a3, int a4)
2094{
2095  return android::move_backward_type<android::key_value_pair_t<android::String8_android::String8>>(a2, a3, a4);
2096}
2097
2098//----- (6BA8CBD8) --------------------------------------------------------
2099int __fastcall android::move_forward_type<android::key_value_pair_t<android::String8_android::String8>>(int result, int a2, int a3)
2100{
2101  int v3; // r8@1
2102  int v4; // r5@1
2103  int v5; // r7@1
2104  int i; // r4@1
2105
2106  v3 = result + 8 * a3;
2107  v4 = a3;
2108  v5 = a2 + 8 * a3;
2109  for ( i = 0; ; result = sub_6BA8C8F8(v5 + i) )
2110  {
2111    i -= 8;
2112    if ( !v4 )
2113      break;
2114    --v4;
2115    sub_6BA8CB84(v3 + i, v5 + i);
2116  }
2117  return result;
2118}
2119
2120//----- (6BA8CC08) --------------------------------------------------------
2121int __fastcall android::SortedVector<android::key_value_pair_t<android::String8_android::String8>>::do_move_forward(int a1, int a2, int a3, int a4)
2122{
2123  return android::move_forward_type<android::key_value_pair_t<android::String8_android::String8>>(a2, a3, a4);
2124}
2125
2126//----- (6BA8CC18) --------------------------------------------------------
2127int __fastcall android::SortedVector<android::key_value_pair_t<android::String8_android::String8>>::do_splat(int a1, int a2, int a3, int a4)
2128{
2129  int v4; // r4@1
2130  int v5; // r6@1
2131  int v6; // r5@1
2132  int result; // r0@2
2133
2134  v4 = a3;
2135  v5 = a4;
2136  v6 = a2;
2137  while ( v5 )
2138  {
2139    result = sub_6BA8CB84(v6, v4);
2140    v6 += 8;
2141    --v5;
2142  }
2143  return result;
2144}
2145
2146//----- (6BA8CC34) --------------------------------------------------------
2147int __fastcall android::SortedVector<android::key_value_pair_t<android::String8_android::String8>>::do_copy(int a1, int a2, int a3, int a4)
2148{
2149  int v4; // r4@1
2150  int v5; // r5@1
2151  int v6; // r7@1
2152  int v7; // r6@1
2153  int v8; // r1@3
2154  int result; // r0@3
2155
2156  v4 = a2;
2157  v5 = a3;
2158  v6 = a4;
2159  v7 = 0;
2160  while ( 1 )
2161  {
2162    v8 = v5 + v7;
2163    result = v4 + v7;
2164    v7 += 8;
2165    if ( !v6 )
2166      break;
2167    sub_6BA8CB84(result, v8);
2168    --v6;
2169  }
2170  return result;
2171}
2172
2173//----- (6BA8CC58) --------------------------------------------------------
2174int __fastcall sub_6BA8CC58(int a1, int a2, int a3)
2175{
2176  int v3; // r5@1
2177  int v4; // r5@1
2178  int v6; // [sp+0h] [bp-18h]@1
2179  int v7; // [sp+4h] [bp-14h]@1
2180  int v8; // [sp+8h] [bp-10h]@1
2181
2182  v6 = a1;
2183  v7 = a2;
2184  v8 = a3;
2185  v3 = a1;
2186  android::String8::String8(&v6, a2);
2187  android::String8::String8(&v7);
2188  v4 = android::SortedVectorImpl::remove(v3, &v6);
2189  sub_6BA8C8F8((int)&v6);
2190  return v4;
2191}
2192// 6BA8B1E0: using guessed type int __fastcall android__String8__String8(_DWORD);
2193// 6BA8B480: using guessed type int __fastcall android__String8__String8(_DWORD, _DWORD);
2194// 6BA8B48C: using guessed type int __fastcall android__SortedVectorImpl__remove(_DWORD, _DWORD);
2195
2196//----- (6BA8CC80) --------------------------------------------------------
2197int __fastcall android::CameraParameters::remove(int a1, int a2, int a3)
2198{
2199  int v3; // r5@1
2200  int v4; // r2@1
2201  int v6; // [sp+4h] [bp-14h]@1
2202  int v7; // [sp+8h] [bp-10h]@1
2203
2204  v6 = a2;
2205  v7 = a3;
2206  v3 = a1;
2207  android::String8::String8(&v6);
2208  sub_6BA8CC58(v3, (int)&v6, v4);
2209  return android::String8::_String8(&v6);
2210}
2211// 6BA8B1F8: using guessed type int __fastcall android__String8___String8(_DWORD);
2212// 6BA8B498: using guessed type int __fastcall android__String8__String8(_DWORD);
2213
2214//----- (6BA8CC9C) --------------------------------------------------------
2215int __fastcall sub_6BA8CC9C(int a1, int a2, int a3)
2216{
2217  int v3; // r5@1
2218  int v4; // r5@1
2219  int v6; // [sp+0h] [bp-18h]@1
2220  int v7; // [sp+4h] [bp-14h]@1
2221  int v8; // [sp+8h] [bp-10h]@1
2222
2223  v6 = a1;
2224  v7 = a2;
2225  v8 = a3;
2226  v3 = a1;
2227  android::String8::String8(&v6, a2);
2228  android::String8::String8(&v7);
2229  v4 = android::SortedVectorImpl::indexOf(v3, &v6);
2230  sub_6BA8C8F8((int)&v6);
2231  return v4;
2232}
2233// 6BA8B1E0: using guessed type int __fastcall android__String8__String8(_DWORD);
2234// 6BA8B480: using guessed type int __fastcall android__String8__String8(_DWORD, _DWORD);
2235// 6BA8B4A4: using guessed type int __fastcall android__SortedVectorImpl__indexOf(_DWORD, _DWORD);
2236
2237//----- (6BA8CCC4) --------------------------------------------------------
2238int __fastcall android::CameraParameters::get(int a1, int a2, int a3)
2239{
2240  int v3; // r4@1
2241  int v4; // r2@1
2242  int v5; // r0@1
2243  int v6; // r1@2
2244  int v7; // r4@6
2245  int v9; // [sp+0h] [bp-18h]@1
2246  int v10; // [sp+4h] [bp-14h]@1
2247  int v11; // [sp+8h] [bp-10h]@1
2248
2249  v9 = a1;
2250  v10 = a2;
2251  v11 = a3;
2252  v3 = a1;
2253  android::String8::String8(&v9);
2254  v5 = sub_6BA8CC9C(v3, (int)&v9, v4);
2255  if ( v5 >= 0 )
2256    v6 = *(_DWORD *)(v3 + 4) + 8 * v5;
2257  else
2258    v6 = v3 + 20;
2259  if ( v5 >= 0 )
2260    v6 += 4;
2261  android::String8::String8(&v10, v6);
2262  android::String8::_String8(&v9);
2263  v7 = v10;
2264  if ( *(_DWORD *)(v10 - 12) == 1 )
2265    v7 = 0;
2266  android::String8::_String8(&v10);
2267  return v7;
2268}
2269// 6BA8B1F8: using guessed type int __fastcall android__String8___String8(_DWORD);
2270// 6BA8B480: using guessed type int __fastcall android__String8__String8(_DWORD, _DWORD);
2271// 6BA8B498: using guessed type int __fastcall android__String8__String8(_DWORD);
2272
2273//----- (6BA8CD0C) --------------------------------------------------------
2274int __fastcall android::CameraParameters::getPictureFormat(int a1)
2275{
2276  return android::CameraParameters::get(a1, (int)"picture-format", -152);
2277}
2278
2279//----- (6BA8CD24) --------------------------------------------------------
2280int __fastcall android::CameraParameters::getSupportedPictureSizes(int a1, int a2)
2281{
2282  int v2; // r4@1
2283  int v3; // r0@1
2284
2285  v2 = a2;
2286  v3 = android::CameraParameters::get(a1, (int)"picture-size-values", -148);
2287  return sub_6BA8CAFC(v3, v2);
2288}
2289
2290//----- (6BA8CD44) --------------------------------------------------------
2291int __fastcall android::CameraParameters::getPictureSize(int a1, int a2, int a3)
2292{
2293  int v3; // r4@1
2294  int v4; // r5@1
2295  int result; // r0@1
2296
2297  v3 = a2;
2298  v4 = a3;
2299  *(_DWORD *)a3 = -1;
2300  *(_DWORD *)a2 = -1;
2301  result = android::CameraParameters::get(a1, (int)"picture-size", -144);
2302  if ( result )
2303    result = sub_6BA8CA98((const char *)result, v3, v4, 120, 0);
2304  return result;
2305}
2306
2307//----- (6BA8CD78) --------------------------------------------------------
2308int __fastcall android::CameraParameters::getPreviewFormat(int a1)
2309{
2310  return android::CameraParameters::get(a1, (int)"preview-format", -140);
2311}
2312
2313//----- (6BA8CD90) --------------------------------------------------------
2314int __fastcall android::CameraParameters::getPreviewFpsRange(int a1, int a2, int a3)
2315{
2316  int v3; // r4@1
2317  int v4; // r5@1
2318  int result; // r0@1
2319
2320  v3 = a2;
2321  v4 = a3;
2322  *(_DWORD *)a3 = -1;
2323  *(_DWORD *)a2 = -1;
2324  result = android::CameraParameters::get(a1, (int)"preview-fps-range", -136);
2325  if ( result )
2326    result = sub_6BA8CA98((const char *)result, v3, v4, 44, 0);
2327  return result;
2328}
2329
2330//----- (6BA8CDC4) --------------------------------------------------------
2331int __fastcall android::CameraParameters::getSupportedPreviewSizes(int a1, int a2)
2332{
2333  int v2; // r4@1
2334  int v3; // r0@1
2335
2336  v2 = a2;
2337  v3 = android::CameraParameters::get(a1, (int)"preview-size-values", -132);
2338  return sub_6BA8CAFC(v3, v2);
2339}
2340
2341//----- (6BA8CDE4) --------------------------------------------------------
2342int __fastcall android::CameraParameters::getPreviewSize(int a1, int a2, int a3)
2343{
2344  int v3; // r4@1
2345  int v4; // r5@1
2346  int result; // r0@1
2347
2348  v3 = a2;
2349  v4 = a3;
2350  *(_DWORD *)a3 = -1;
2351  *(_DWORD *)a2 = -1;
2352  result = android::CameraParameters::get(a1, (int)"preview-size", -128);
2353  if ( result )
2354    result = sub_6BA8CA98((const char *)result, v3, v4, 120, 0);
2355  return result;
2356}
2357
2358//----- (6BA8CE18) --------------------------------------------------------
2359int __fastcall android::CameraParameters::getFloat(int a1, int a2, int a3)
2360{
2361  int v3; // r0@1
2362  int result; // r0@4
2363
2364  v3 = android::CameraParameters::get(a1, a2, a3);
2365  if ( v3 )
2366  {
2367    _R0 = COERCE_UNSIGNED_INT64(strtod((const char *)v3, 0));
2368    __asm
2369    {
2370      VMOV            D16, R0, R1
2371      VCVT.F32.F64    S15, D16
2372    }
2373  }
2374  else
2375  {
2376    __asm { VMOV.F32        S15, #-1.0 }
2377  }
2378  __asm { VMOV            R0, S15 }
2379  return result;
2380}
2381
2382//----- (6BA8CE3C) --------------------------------------------------------
2383__int32 __fastcall android::CameraParameters::getInt(int a1, int a2, int a3)
2384{
2385  int v3; // r0@1
2386  __int32 result; // r0@2
2387
2388  v3 = android::CameraParameters::get(a1, a2, a3);
2389  if ( v3 )
2390    result = strtol((const char *)v3, 0, 0);
2391  else
2392    result = -1;
2393  return result;
2394}
2395
2396//----- (6BA8CE54) --------------------------------------------------------
2397__int32 __fastcall android::CameraParameters::getPreviewFrameRate(int a1)
2398{
2399  return android::CameraParameters::getInt(a1, (int)"preview-frame-rate", -124);
2400}
2401
2402//----- (6BA8CE6C) --------------------------------------------------------
2403int __fastcall sub_6BA8CE6C(int a1, int a2, int a3)
2404{
2405  int v3; // r6@1
2406  int v4; // r4@1
2407  int v5; // r4@1
2408  int v7; // [sp+0h] [bp-18h]@1
2409  int v8; // [sp+4h] [bp-14h]@1
2410
2411  v7 = a1;
2412  v8 = a2;
2413  v3 = a3;
2414  v4 = a1;
2415  android::String8::String8(&v7, a2);
2416  android::String8::String8(&v8, v3);
2417  android::SortedVectorImpl::remove(v4, &v7);
2418  v5 = android::SortedVectorImpl::add(v4, &v7);
2419  sub_6BA8C8F8((int)&v7);
2420  return v5;
2421}
2422// 6BA8B480: using guessed type int __fastcall android__String8__String8(_DWORD, _DWORD);
2423// 6BA8B48C: using guessed type int __fastcall android__SortedVectorImpl__remove(_DWORD, _DWORD);
2424// 6BA8B4BC: using guessed type int __fastcall android__SortedVectorImpl__add(_DWORD, _DWORD);
2425
2426//----- (6BA8CEA0) --------------------------------------------------------
2427char *__fastcall android::CameraParameters::set(int a1, const char *a2, const char *a3)
2428{
2429  int v3; // r6@1
2430  const char *v4; // r5@1
2431  const char *v5; // r7@1
2432  char *result; // r0@1
2433  int v7; // [sp+0h] [bp-20h]@1
2434  const char *v8; // [sp+4h] [bp-1Ch]@1
2435  const char *v9; // [sp+8h] [bp-18h]@1
2436
2437  v7 = a1;
2438  v8 = a2;
2439  v9 = a3;
2440  v3 = a1;
2441  v4 = a2;
2442  v5 = a3;
2443  result = strchr(a2, 61);
2444  if ( !result )
2445  {
2446    result = strchr(v4, 59);
2447    if ( !result )
2448    {
2449      result = strchr(v5, 61);
2450      if ( !result )
2451      {
2452        android::String8::String8(&v8);
2453        android::String8::String8(&v7);
2454        sub_6BA8CE6C(v3, (int)&v8, (int)&v7);
2455        android::String8::_String8(&v7);
2456        result = (char *)android::String8::_String8(&v8);
2457      }
2458    }
2459  }
2460  return result;
2461}
2462// 6BA8B1F8: using guessed type int __fastcall android__String8___String8(_DWORD);
2463// 6BA8B498: using guessed type int __fastcall android__String8__String8(_DWORD);
2464
2465//----- (6BA8CEF4) --------------------------------------------------------
2466char *__fastcall android::CameraParameters::setPictureFormat(int a1, const char *a2)
2467{
2468  return android::CameraParameters::set(a1, "picture-format", a2);
2469}
2470
2471//----- (6BA8CF10) --------------------------------------------------------
2472char *__fastcall android::CameraParameters::setPictureSize(int a1, int a2, int a3)
2473{
2474  int v3; // r7@1
2475  char *result; // r0@1
2476  char s; // [sp+4h] [bp-3Ch]@1
2477  int v6; // [sp+24h] [bp-1Ch]@1
2478
2479  v3 = a1;
2480  v6 = _stack_chk_guard;
2481  sprintf(&s, "%dx%d", a2, a3);
2482  result = android::CameraParameters::set(v3, "picture-size", &s);
2483  if ( v6 != _stack_chk_guard )
2484    _stack_chk_fail(result);
2485  return result;
2486}
2487// 6BA8B45C: using guessed type int __fastcall _stack_chk_fail(_DWORD);
2488
2489//----- (6BA8CF60) --------------------------------------------------------
2490char *__fastcall android::CameraParameters::setPreviewFormat(int a1, const char *a2)
2491{
2492  return android::CameraParameters::set(a1, "preview-format", a2);
2493}
2494
2495//----- (6BA8CF7C) --------------------------------------------------------
2496char *__fastcall android::CameraParameters::setPreviewSize(int a1, int a2, int a3)
2497{
2498  int v3; // r7@1
2499  char *result; // r0@1
2500  char s; // [sp+4h] [bp-3Ch]@1
2501  int v6; // [sp+24h] [bp-1Ch]@1
2502
2503  v3 = a1;
2504  v6 = _stack_chk_guard;
2505  sprintf(&s, "%dx%d", a2, a3);
2506  result = android::CameraParameters::set(v3, "preview-size", &s);
2507  if ( v6 != _stack_chk_guard )
2508    _stack_chk_fail(result);
2509  return result;
2510}
2511// 6BA8B45C: using guessed type int __fastcall _stack_chk_fail(_DWORD);
2512
2513//----- (6BA8CFCC) --------------------------------------------------------
2514char *__fastcall android::CameraParameters::setFloat(int a1, const char *a2, int _R2)
2515{
2516  const char *v7; // r6@1
2517  int v8; // r7@1
2518  char *result; // r0@1
2519  char s; // [sp+Ch] [bp-2Ch]@1
2520  int v11; // [sp+1Ch] [bp-1Ch]@1
2521
2522  __asm { VMOV            S15, R2 }
2523  v7 = a2;
2524  __asm { VCVT.F64.F32    D16, S15 }
2525  v8 = a1;
2526  __asm { VSTR            D16, [SP,#0x38+var_38] }
2527  v11 = _stack_chk_guard;
2528  snprintf(&s, 0x10u, "%g");
2529  result = android::CameraParameters::set(v8, v7, &s);
2530  if ( v11 != _stack_chk_guard )
2531    _stack_chk_fail(result);
2532  return result;
2533}
2534// 6BA8B45C: using guessed type int __fastcall _stack_chk_fail(_DWORD);
2535
2536//----- (6BA8D020) --------------------------------------------------------
2537char *__fastcall android::CameraParameters::set(int a1, const char *a2)
2538{
2539  const char *v2; // r6@1
2540  int v3; // r7@1
2541  char *result; // r0@1
2542  char s; // [sp+4h] [bp-2Ch]@1
2543  int v6; // [sp+14h] [bp-1Ch]@1
2544
2545  v2 = a2;
2546  v3 = a1;
2547  v6 = _stack_chk_guard;
2548  sprintf(&s, "%d");
2549  result = android::CameraParameters::set(v3, v2, &s);
2550  if ( v6 != _stack_chk_guard )
2551    _stack_chk_fail(result);
2552  return result;
2553}
2554// 6BA8B45C: using guessed type int __fastcall _stack_chk_fail(_DWORD);
2555
2556//----- (6BA8D068) --------------------------------------------------------
2557char *__fastcall android::CameraParameters::setPreviewFrameRate(int a1)
2558{
2559  return android::CameraParameters::set(a1, "preview-frame-rate");
2560}
2561
2562//----- (6BA8D084) --------------------------------------------------------
2563int __fastcall sub_6BA8D084(int a1, int a2, int a3)
2564{
2565  int v3; // r6@1
2566  int v4; // r4@1
2567  int v5; // r4@1
2568  int v7; // [sp+0h] [bp-18h]@1
2569  int v8; // [sp+4h] [bp-14h]@1
2570
2571  v7 = a1;
2572  v8 = a2;
2573  v3 = a3;
2574  v4 = a1;
2575  android::String8::String8(&v7, a2);
2576  android::String8::String8(&v8, v3);
2577  v5 = android::SortedVectorImpl::add(v4, &v7);
2578  sub_6BA8C8F8((int)&v7);
2579  return v5;
2580}
2581// 6BA8B480: using guessed type int __fastcall android__String8__String8(_DWORD, _DWORD);
2582// 6BA8B4BC: using guessed type int __fastcall android__SortedVectorImpl__add(_DWORD, _DWORD);
2583
2584//----- (6BA8D0B0) --------------------------------------------------------
2585int __fastcall android::CameraParameters::unflatten(int a1, int a2, int a3, int a4)
2586{
2587  int v4; // r6@1
2588  const char *v5; // r8@1
2589  char *v6; // r0@2
2590  char *v7; // r7@2
2591  int v8; // r2@3
2592  const char *v9; // r1@3
2593  int v10; // r8@3
2594  char *v11; // r0@3
2595  int v12; // r2@5
2596  int v13; // r1@5
2597  int v15; // [sp+0h] [bp-28h]@1
2598  int v16; // [sp+4h] [bp-24h]@1
2599  int v17; // [sp+8h] [bp-20h]@1
2600  int v18; // [sp+Ch] [bp-1Ch]@1
2601
2602  v15 = a1;
2603  v16 = a2;
2604  v17 = a3;
2605  v18 = a4;
2606  v4 = a1;
2607  v5 = *(const char **)a2;
2608  android::VectorImpl::clear();
2609  while ( 1 )
2610  {
2611    v6 = strchr(v5, 61);
2612    v7 = v6;
2613    if ( !v6 )
2614      break;
2615    v8 = v6 - v5;
2616    v9 = v5;
2617    v10 = (int)(v6 + 1);
2618    android::String8::String8(&v18, v9, v8);
2619    v11 = strchr(v7 + 1, 59);
2620    if ( !v11 )
2621    {
2622      android::String8::String8(&v17);
2623      sub_6BA8D084(v4, (int)&v18, (int)&v17);
2624      android::String8::_String8(&v17);
2625      android::String8::_String8(&v18);
2626      return v15;
2627    }
2628    v12 = (int)&v11[-v10];
2629    v13 = v10;
2630    v5 = v11 + 1;
2631    android::String8::String8(&v16, v13, v12);
2632    sub_6BA8D084(v4, (int)&v18, (int)&v16);
2633    android::String8::_String8(&v16);
2634    android::String8::_String8(&v18);
2635  }
2636  return v15;
2637}
2638// 6BA8B1F8: using guessed type int __fastcall android__String8___String8(_DWORD);
2639// 6BA8B498: using guessed type int __fastcall android__String8__String8(_DWORD);
2640// 6BA8B4E0: using guessed type int android__VectorImpl__clear(void);
2641// 6BA8B4EC: using guessed type int __fastcall android__String8__String8(_DWORD, _DWORD, _DWORD);
2642
2643//----- (6BA8D13C) --------------------------------------------------------
2644int __fastcall android::CameraParameters::flatten(int a1, int a2)
2645{
2646  int v2; // r10@1
2647  int v3; // r4@1
2648  unsigned int v4; // r5@1
2649  unsigned int v6; // [sp+0h] [bp-38h]@1
2650  int v7; // [sp+4h] [bp-34h]@1
2651  char v8; // [sp+8h] [bp-30h]@2
2652  char v9; // [sp+Ch] [bp-2Ch]@2
2653
2654  v2 = a2;
2655  v3 = a1;
2656  android::String8::String8(a1);
2657  v4 = 0;
2658  v6 = *(_DWORD *)(v2 + 8);
2659  v7 = *(_DWORD *)(v2 + 8) - 1;
2660  while ( v4 < v6 )
2661  {
2662    android::String8::String8(&v9);
2663    android::String8::String8(&v8);
2664    android::String8::setTo(&v9, *(_DWORD *)(v2 + 4) + 8 * v4);
2665    android::String8::setTo(&v8, 8 * v4 + *(_DWORD *)(v2 + 4) + 4);
2666    android::String8::append(v3, &v9);
2667    android::String8::append(v3, "=");
2668    android::String8::append(v3, &v8);
2669    if ( v4 != v7 )
2670      android::String8::append(v3, ";");
2671    ++v4;
2672    android::String8::_String8(&v8);
2673    android::String8::_String8(&v9);
2674  }
2675  return v3;
2676}
2677// 6BA8B1E0: using guessed type int __fastcall android__String8__String8(_DWORD);
2678// 6BA8B1EC: using guessed type int __fastcall android__String8__setTo(_DWORD, _DWORD);
2679// 6BA8B1F8: using guessed type int __fastcall android__String8___String8(_DWORD);
2680// 6BA8B444: using guessed type int __fastcall android__String8__append(_DWORD, _DWORD);
2681// 6BA8B498: using guessed type int __fastcall android__String8__String8(_DWORD);
2682// 6BA8B4F8: using guessed type int __fastcall android__String8__append(_DWORD, _DWORD);
2683
2684//----- (6BA8D1E8) --------------------------------------------------------
2685int __fastcall sub_6BA8D1E8(int a1)
2686{
2687  int v1; // r4@1
2688
2689  v1 = a1;
2690  *(_DWORD *)a1 = &_vtable_for_android::SortedVector<android::key_value_pair_t<android::String8_android::String8>>[8];
2691  android::VectorImpl::finish_vector();
2692  android::SortedVectorImpl::_SortedVectorImpl(v1);
2693  return v1;
2694}
2695// 6BA8B504: using guessed type int android__VectorImpl__finish_vector(void);
2696// 6BA8B510: using guessed type int __fastcall android__SortedVectorImpl___SortedVectorImpl(_DWORD);
2697
2698//----- (6BA8D214) --------------------------------------------------------
2699int __fastcall android::CameraParameters::_CameraParameters(int a1)
2700{
2701  int v1; // r4@1
2702
2703  v1 = a1;
2704  android::String8::_String8(a1 + 20);
2705  sub_6BA8D1E8(v1);
2706  return v1;
2707}
2708// 6BA8B1F8: using guessed type int __fastcall android__String8___String8(_DWORD);
2709
2710//----- (6BA8D22C) --------------------------------------------------------
2711int __fastcall android::CameraParameters::_CameraParameters(int a1)
2712{
2713  int v1; // r4@1
2714
2715  v1 = a1;
2716  android::String8::_String8(a1 + 20);
2717  sub_6BA8D1E8(v1);
2718  return v1;
2719}
2720// 6BA8B1F8: using guessed type int __fastcall android__String8___String8(_DWORD);
2721
2722//----- (6BA8D258) --------------------------------------------------------
2723unsigned int __fastcall android::compare_type<android::key_value_pair_t<android::String8_android::String8>>(const char **a1, const char **a2)
2724{
2725  const char *v2; // r4@1
2726  const char *v3; // r5@1
2727  int v4; // r6@1
2728
2729  v2 = *a2;
2730  v3 = *a1;
2731  v4 = strcmp(*a2, *a1);
2732  return ((unsigned int)v4 >> 31) - ((unsigned int)strcmp(v3, v2) >> 31);
2733}
2734
2735//----- (6BA8D278) --------------------------------------------------------
2736unsigned int __fastcall android::SortedVector<android::key_value_pair_t<android::String8_android::String8>>::do_compare(int a1, const char **a2, const char **a3)
2737{
2738  return android::compare_type<android::key_value_pair_t<android::String8_android::String8>>(a2, a3);
2739}
2740
2741//----- (6BA8D284) --------------------------------------------------------
2742int __fastcall sub_6BA8D284(int a1, int a2)
2743{
2744  int v2; // r6@1
2745  int v3; // r5@1
2746
2747  v2 = a2;
2748  v3 = a1;
2749  android::SortedVectorImpl::SortedVectorImpl();
2750  *(_DWORD *)v3 = &_vtable_for_android::SortedVector<android::key_value_pair_t<android::String8_android::String8>>[8];
2751  android::String8::String8(v3 + 20, v2);
2752  return v3;
2753}
2754// 6BA8B480: using guessed type int __fastcall android__String8__String8(_DWORD, _DWORD);
2755// 6BA8B528: using guessed type int android__SortedVectorImpl__SortedVectorImpl(void);
2756
2757//----- (6BA8D2B8) --------------------------------------------------------
2758int __fastcall android::CameraParameters::CameraParameters(int a1, int a2, int a3)
2759{
2760  int v3; // r5@1
2761  int v5; // [sp+4h] [bp-14h]@1
2762  int v6; // [sp+8h] [bp-10h]@1
2763
2764  v5 = a2;
2765  v6 = a3;
2766  v3 = a1;
2767  android::String8::String8(&v5);
2768  sub_6BA8D284(v3, (int)&v5);
2769  android::String8::_String8(&v5);
2770  return v3;
2771}
2772// 6BA8B1E0: using guessed type int __fastcall android__String8__String8(_DWORD);
2773// 6BA8B1F8: using guessed type int __fastcall android__String8___String8(_DWORD);
2774
2775//----- (6BA8D2D8) --------------------------------------------------------
2776int __fastcall android::CameraParameters::CameraParameters(int a1, int a2, int a3)
2777{
2778  int v3; // r5@1
2779  int v5; // [sp+4h] [bp-14h]@1
2780  int v6; // [sp+8h] [bp-10h]@1
2781
2782  v5 = a2;
2783  v6 = a3;
2784  v3 = a1;
2785  android::String8::String8(&v5);
2786  sub_6BA8D284(v3, (int)&v5);
2787  android::String8::_String8(&v5);
2788  return v3;
2789}
2790// 6BA8B1E0: using guessed type int __fastcall android__String8__String8(_DWORD);
2791// 6BA8B1F8: using guessed type int __fastcall android__String8___String8(_DWORD);
2792
2793//----- (6BA8D2F8) --------------------------------------------------------
2794int *__fastcall android::ICamera::getInterfaceDescriptor()
2795{
2796  return &android::ICamera::descriptor;
2797}
2798// 6BA93D1C: using guessed type int android__ICamera__descriptor;
2799
2800//----- (6BA8D310) --------------------------------------------------------
2801int __fastcall android::BnInterface<android::ICamera>::onAsBinder(int a1)
2802{
2803  return a1 + 4;
2804}
2805
2806//----- (6BA8D324) --------------------------------------------------------
2807int __fastcall android::sp<android::ICamera>::operator_(int a1, int a2)
2808{
2809  int v2; // r4@1
2810  int v3; // r5@1
2811
2812  v2 = a1;
2813  v3 = a2;
2814  if ( a2 )
2815    android::RefBase::incStrong(a2 + *(_DWORD *)(*(_DWORD *)a2 - 12), a1);
2816  if ( *(_DWORD *)v2 )
2817    android::RefBase::decStrong(*(_DWORD *)v2 + *(_DWORD *)(**(_DWORD **)v2 - 12), v2);
2818  *(_DWORD *)v2 = v3;
2819  return v2;
2820}
2821// 6BA8B198: using guessed type int __fastcall android__RefBase__incStrong(_DWORD, _DWORD);
2822// 6BA8B1A4: using guessed type int __fastcall android__RefBase__decStrong(_DWORD, _DWORD);
2823
2824//----- (6BA8D354) --------------------------------------------------------
2825int __fastcall android::sp<android::ICamera>::operator_<android::BpCamera>(int a1, int a2)
2826{
2827  int v2; // r4@1
2828  int v3; // r5@1
2829
2830  v2 = a1;
2831  v3 = a2;
2832  if ( a2 )
2833    android::RefBase::incStrong(a2 + *(_DWORD *)(*(_DWORD *)a2 - 12), a1);
2834  if ( *(_DWORD *)v2 )
2835    android::RefBase::decStrong(*(_DWORD *)v2 + *(_DWORD *)(**(_DWORD **)v2 - 12), v2);
2836  *(_DWORD *)v2 = v3;
2837  return v2;
2838}
2839// 6BA8B198: using guessed type int __fastcall android__RefBase__incStrong(_DWORD, _DWORD);
2840// 6BA8B1A4: using guessed type int __fastcall android__RefBase__decStrong(_DWORD, _DWORD);
2841
2842//----- (6BA8D384) --------------------------------------------------------
2843int __fastcall _non_virtual_thunk_to_android::BnCamera::onTransact(int a1, int a2, int a3, int a4)
2844{
2845  return android::BnCamera::onTransact(a1 - 4, a2, a3, a4);
2846}
2847
2848//----- (6BA8D38C) --------------------------------------------------------
2849int __fastcall android::BnCamera::onTransact(int a1, int a2, int a3, int a4)
2850{
2851  int v4; // r5@1
2852  int v5; // r3@1
2853  int v6; // r7@1
2854  int v7; // r4@1
2855  int v8; // r6@1
2856  int v9; // r1@1
2857  void (__fastcall *v10)(_DWORD); // r3@4
2858  int v11; // r1@6
2859  int *v12; // r6@6
2860  int (__fastcall *v13)(_DWORD, _DWORD); // r3@6
2861  int v14; // r0@8
2862  int v15; // r1@10
2863  int v16; // r0@10
2864  int v17; // r0@10
2865  int v18; // r1@10
2866  int (__fastcall *v19)(_DWORD); // r3@12
2867  int *v20; // r1@22
2868  int v21; // r0@22
2869  int v22; // r0@27
2870  int v23; // r0@36
2871  int *v24; // r0@36
2872  int v25; // r8@41
2873  int v26; // r7@41
2874  int v27; // r0@41
2875  int v28; // r1@43
2876  int v29; // r7@53
2877  int v30; // r0@53
2878  int result; // r0@54
2879  char v32; // [sp+Ch] [bp-34h]@43
2880  int v33; // [sp+10h] [bp-30h]@6
2881  char v34; // [sp+14h] [bp-2Ch]@38
2882  char v35; // [sp+18h] [bp-28h]@21
2883  int v36; // [sp+1Ch] [bp-24h]@10
2884  char v37; // [sp+20h] [bp-20h]@10
2885  char v38; // [sp+24h] [bp-1Ch]@6
2886
2887  v4 = a4;
2888  v5 = a2 - 1;
2889  v6 = a2;
2890  v7 = a1;
2891  v8 = a3;
2892  v9 = a1 + 4;
2893  if ( (unsigned int)v5 > 0x14 )
2894  {
2895LABEL_54:
2896    result = android::BBinder::onTransact(a1 + 4, v6);
2897  }
2898  else
2899  {
2900    switch ( v5 )
2901    {
2902      case 0:
2903        if ( !android::Parcel::checkInterface(a3, v9) )
2904          goto LABEL_55;
2905        v10 = *(void (__fastcall **)(_DWORD))(*(_DWORD *)v7 + 16);
2906        goto LABEL_19;
2907      case 1:
2908        if ( !android::Parcel::checkInterface(a3, v9) )
2909          goto LABEL_55;
2910        v11 = v8;
2911        v12 = &v33;
2912        android::Parcel::readStrongBinder(&v38, v11);
2913        android::ISurface::asInterface(&v33, &v38);
2914        android::sp<android::IBinder>::_sp((int)&v38);
2915        v13 = *(int (__fastcall **)(_DWORD, _DWORD))(*(_DWORD *)v7 + 32);
2916        goto LABEL_44;
2917      case 2:
2918        if ( !android::Parcel::checkInterface(a3, v9) )
2919          goto LABEL_55;
2920        v14 = android::Parcel::readInt32(v8);
2921        (*(void (__fastcall **)(int, int))(*(_DWORD *)v7 + 36))(v7, v14);
2922        goto LABEL_56;
2923      case 3:
2924        if ( !android::Parcel::checkInterface(a3, v9) )
2925          goto LABEL_55;
2926        v15 = v8;
2927        v12 = &v33;
2928        android::Parcel::readStrongBinder(&v37, v15);
2929        android::IMemory::asInterface(&v33, &v37);
2930        android::sp<android::IBinder>::_sp((int)&v37);
2931        v16 = (*(int (__fastcall **)(int, int *, int *))(*(_DWORD *)v7 + 40))(v7, &v33, &v36);
2932        android::Parcel::writeInt32(v4, v16);
2933        v17 = v4;
2934        v18 = v36;
2935        goto LABEL_45;
2936      case 4:
2937        if ( !android::Parcel::checkInterface(a3, v9) )
2938          goto LABEL_55;
2939        v19 = *(int (__fastcall **)(_DWORD))(*(_DWORD *)v7 + 44);
2940        goto LABEL_27;
2941      case 16:
2942        if ( !android::Parcel::checkInterface(a3, v9) )
2943          goto LABEL_55;
2944        v19 = *(int (__fastcall **)(_DWORD))(*(_DWORD *)v7 + 56);
2945        goto LABEL_27;
2946      case 5:
2947        if ( !android::Parcel::checkInterface(a3, v9) )
2948          goto LABEL_55;
2949        v10 = *(void (__fastcall **)(_DWORD))(*(_DWORD *)v7 + 48);
2950        goto LABEL_19;
2951      case 17:
2952        if ( !android::Parcel::checkInterface(a3, v9) )
2953          goto LABEL_55;
2954        v10 = *(void (__fastcall **)(_DWORD))(*(_DWORD *)v7 + 60);
2955LABEL_19:
2956        v10(v7);
2957        goto LABEL_56;
2958      case 19:
2959        if ( !android::Parcel::checkInterface(a3, v9) )
2960          goto LABEL_55;
2961        android::Parcel::readStrongBinder(&v35, v8);
2962        android::IMemory::asInterface(&v33, &v35);
2963        android::sp<android::IBinder>::_sp((int)&v35);
2964        (*(void (__fastcall **)(int, int *))(*(_DWORD *)v7 + 68))(v7, &v33);
2965        if ( !v33 )
2966          goto LABEL_56;
2967        v20 = &v33;
2968        v21 = v33 + *(_DWORD *)(*(_DWORD *)v33 - 12);
2969        goto LABEL_47;
2970      case 15:
2971        if ( !android::Parcel::checkInterface(a3, v9) )
2972          goto LABEL_55;
2973        v19 = *(int (__fastcall **)(_DWORD))(*(_DWORD *)v7 + 52);
2974        goto LABEL_27;
2975      case 18:
2976        if ( !android::Parcel::checkInterface(a3, v9) )
2977          goto LABEL_55;
2978        v19 = *(int (__fastcall **)(_DWORD))(*(_DWORD *)v7 + 64);
2979        goto LABEL_27;
2980      case 6:
2981        if ( !android::Parcel::checkInterface(a3, v9) )
2982          goto LABEL_55;
2983        v19 = *(int (__fastcall **)(_DWORD))(*(_DWORD *)v7 + 72);
2984        goto LABEL_27;
2985      case 7:
2986        if ( !android::Parcel::checkInterface(a3, v9) )
2987          goto LABEL_55;
2988        v19 = *(int (__fastcall **)(_DWORD))(*(_DWORD *)v7 + 76);
2989        goto LABEL_27;
2990      case 8:
2991        if ( !android::Parcel::checkInterface(a3, v9) )
2992          goto LABEL_55;
2993        v19 = *(int (__fastcall **)(_DWORD))(*(_DWORD *)v7 + 80);
2994        goto LABEL_27;
2995      case 9:
2996        if ( !android::Parcel::checkInterface(a3, v9) )
2997          goto LABEL_55;
2998        android::Parcel::readString8(&v33, v8);
2999        v23 = (*(int (__fastcall **)(int, int *))(*(_DWORD *)v7 + 84))(v7, &v33);
3000        android::Parcel::writeInt32(v4, v23);
3001        v24 = &v33;
3002        goto LABEL_39;
3003      case 10:
3004        if ( !android::Parcel::checkInterface(a3, v9) )
3005          goto LABEL_55;
3006        (*(void (__fastcall **)(char *, int))(*(_DWORD *)v7 + 88))(&v34, v7);
3007        android::Parcel::writeString8(v4, &v34);
3008        v24 = (int *)&v34;
3009LABEL_39:
3010        android::String8::_String8(v24);
3011        goto LABEL_56;
3012      case 11:
3013        if ( !android::Parcel::checkInterface(a3, v9) )
3014          goto LABEL_55;
3015        v25 = android::Parcel::readInt32(v8);
3016        v26 = android::Parcel::readInt32(v8);
3017        v27 = android::Parcel::readInt32(v8);
3018        v22 = (*(int (__fastcall **)(int, int, int, int))(*(_DWORD *)v7 + 92))(v7, v25, v26, v27);
3019        goto LABEL_28;
3020      case 12:
3021        if ( !android::Parcel::checkInterface(a3, v9) )
3022          goto LABEL_55;
3023        v28 = v8;
3024        v12 = &v33;
3025        android::Parcel::readStrongBinder(&v32, v28);
3026        android::ICameraClient::asInterface((int)&v33, (int)&v32);
3027        android::sp<android::IBinder>::_sp((int)&v32);
3028        v13 = *(int (__fastcall **)(_DWORD, _DWORD))(*(_DWORD *)v7 + 20);
3029LABEL_44:
3030        v18 = v13(v7, v12);
3031        v17 = v4;
3032LABEL_45:
3033        android::Parcel::writeInt32(v17, v18);
3034        if ( v33 )
3035        {
3036          v20 = v12;
3037          v21 = v33 + *(_DWORD *)(*(_DWORD *)v33 - 12);
3038LABEL_47:
3039          android::RefBase::decStrong(v21, v20);
3040        }
3041        goto LABEL_56;
3042      case 13:
3043        if ( !android::Parcel::checkInterface(a3, v9) )
3044          goto LABEL_55;
3045        v19 = *(int (__fastcall **)(_DWORD))(*(_DWORD *)v7 + 24);
3046        goto LABEL_27;
3047      case 14:
3048        if ( !android::Parcel::checkInterface(a3, v9) )
3049          goto LABEL_55;
3050        v19 = *(int (__fastcall **)(_DWORD))(*(_DWORD *)v7 + 28);
3051LABEL_27:
3052        v22 = v19(v7);
3053        goto LABEL_28;
3054      case 20:
3055        if ( android::Parcel::checkInterface(a3, v9) )
3056        {
3057          v29 = android::Parcel::readCString(v8);
3058          v30 = android::Parcel::readInt32(v8);
3059          v22 = (*(int (__fastcall **)(int, int, int))(*(_DWORD *)v7 + 96))(v7, v29, v30);
3060LABEL_28:
3061          android::Parcel::writeInt32(v4, v22);
3062LABEL_56:
3063          result = 0;
3064        }
3065        else
3066        {
3067LABEL_55:
3068          result = -1;
3069        }
3070        break;
3071      default:
3072        goto LABEL_54;
3073    }
3074  }
3075  return result;
3076}
3077// 6BA8B1A4: using guessed type int __fastcall android__RefBase__decStrong(_DWORD, _DWORD);
3078// 6BA8B1F8: using guessed type int __fastcall android__String8___String8(_DWORD);
3079// 6BA8B378: using guessed type int __fastcall android__BBinder__onTransact(_DWORD, _DWORD);
3080// 6BA8B5F4: using guessed type int __fastcall android__Parcel__checkInterface(_DWORD, _DWORD);
3081// 6BA8B600: using guessed type int __fastcall android__Parcel__readStrongBinder(_DWORD, _DWORD);
3082// 6BA8B60C: using guessed type int __fastcall android__ISurface__asInterface(_DWORD, _DWORD);
3083// 6BA8B618: using guessed type int __fastcall android__Parcel__readInt32(_DWORD);
3084// 6BA8B624: using guessed type int __fastcall android__IMemory__asInterface(_DWORD, _DWORD);
3085// 6BA8B630: using guessed type int __fastcall android__Parcel__writeInt32(_DWORD, _DWORD);
3086// 6BA8B63C: using guessed type int __fastcall android__Parcel__readString8(_DWORD, _DWORD);
3087// 6BA8B648: using guessed type int __fastcall android__Parcel__writeString8(_DWORD, _DWORD);
3088// 6BA8B654: using guessed type int __fastcall android__Parcel__readCString(_DWORD);
3089
3090//----- (6BA8D694) --------------------------------------------------------
3091int __fastcall android::ICamera::_ICamera(int a1)
3092{
3093  int v1; // r4@1
3094  int v2; // r5@1
3095
3096  v1 = a1;
3097  *(_DWORD *)a1 = &_vtable_for_android::ICamera[12];
3098  v2 = a1 + 4;
3099  *(_DWORD *)(a1 + 4) = &_vtable_for_android::ICamera[140];
3100  android::IInterface::_IInterface(a1, &_VTT_for_android::ICamera[4]);
3101  android::RefBase::_RefBase(v2);
3102  return v1;
3103}
3104// 6BA8B174: using guessed type int __fastcall android__RefBase___RefBase(_DWORD);
3105// 6BA8B660: using guessed type int __fastcall android__IInterface___IInterface(_DWORD, _DWORD);
3106
3107//----- (6BA8D6D4) --------------------------------------------------------
3108void *__fastcall android::ICamera::_ICamera(int a1)
3109{
3110  void *v1; // r4@1
3111
3112  v1 = (void *)a1;
3113  android::ICamera::_ICamera(a1);
3114  operator delete(v1);
3115  return v1;
3116}
3117
3118//----- (6BA8D6E8) --------------------------------------------------------
3119int __fastcall android::ICamera::_ICamera(int a1, int a2)
3120{
3121  int v2; // r4@1
3122  int v3; // r0@1
3123
3124  v2 = a1;
3125  v3 = *(_DWORD *)a2;
3126  *(_DWORD *)v2 = *(_DWORD *)a2;
3127  *(_DWORD *)(v2 + *(_DWORD *)(v3 - 12)) = *(_DWORD *)(a2 + 12);
3128  android::IInterface::_IInterface(v2, a2 + 4);
3129  return v2;
3130}
3131// 6BA8B660: using guessed type int __fastcall android__IInterface___IInterface(_DWORD, _DWORD);
3132
3133//----- (6BA8D70C) --------------------------------------------------------
3134int __fastcall sub_6BA8D70C(int a1)
3135{
3136  int v1; // r4@1
3137  int v2; // r6@1
3138
3139  v1 = a1;
3140  *(_DWORD *)a1 = &_vtable_for_android::BnInterface<android::ICamera>[12];
3141  v2 = a1 + 16;
3142  *(_DWORD *)(a1 + 16) = &_vtable_for_android::BnInterface<android::ICamera>[224];
3143  *(_DWORD *)(a1 + 4) = &_vtable_for_android::BnInterface<android::ICamera>[128];
3144  android::BBinder::_BBinder(a1 + 4, &_VTT_for_android::BnInterface<android::ICamera>[20]);
3145  android::ICamera::_ICamera(v1, (int)&_VTT_for_android::BnInterface<android::ICamera>[4]);
3146  android::RefBase::_RefBase(v2);
3147  return v1;
3148}
3149// 6BA8B174: using guessed type int __fastcall android__RefBase___RefBase(_DWORD);
3150// 6BA8B18C: using guessed type int __fastcall android__BBinder___BBinder(_DWORD, _DWORD);
3151
3152//----- (6BA8D75C) --------------------------------------------------------
3153int __fastcall _virtual_thunk_to_android::BnInterface<android::ICamera>::_BnInterface(int a1)
3154{
3155  return sub_6BA8D70C(a1 + *(_DWORD *)(*(_DWORD *)a1 - 12));
3156}
3157
3158//----- (6BA8D774) --------------------------------------------------------
3159void *__fastcall sub_6BA8D774(int a1)
3160{
3161  void *v1; // r4@1
3162
3163  v1 = (void *)a1;
3164  sub_6BA8D70C(a1);
3165  operator delete(v1);
3166  return v1;
3167}
3168
3169//----- (6BA8D788) --------------------------------------------------------
3170void *__fastcall _virtual_thunk_to_android::BnInterface<android::ICamera>::_BnInterface(int a1)
3171{
3172  return sub_6BA8D774(a1 + *(_DWORD *)(*(_DWORD *)a1 - 12));
3173}
3174
3175//----- (6BA8D798) --------------------------------------------------------
3176int __fastcall android::ICamera::ICamera(int a1)
3177{
3178  int v1; // r4@1
3179  int result; // r0@1
3180
3181  v1 = a1;
3182  android::RefBase::RefBase(a1 + 4);
3183  android::IInterface::IInterface(v1, &_VTT_for_android::ICamera[4]);
3184  *(_DWORD *)v1 = &_vtable_for_android::ICamera[12];
3185  result = v1;
3186  *(_DWORD *)(v1 + 4) = &_vtable_for_android::ICamera[140];
3187  return result;
3188}
3189// 6BA8B21C: using guessed type int __fastcall android__RefBase__RefBase(_DWORD);
3190// 6BA8B66C: using guessed type int __fastcall android__IInterface__IInterface(_DWORD, _DWORD);
3191
3192//----- (6BA8D7D8) --------------------------------------------------------
3193int __fastcall android::ICamera::ICamera(int a1, int a2)
3194{
3195  int v2; // r5@1
3196  int v3; // r4@1
3197  int v4; // r0@1
3198  int v5; // r3@1
3199  int result; // r0@1
3200
3201  v2 = a2;
3202  v3 = a1;
3203  android::IInterface::IInterface(a1, a2 + 4);
3204  v4 = *(_DWORD *)v2;
3205  *(_DWORD *)v3 = *(_DWORD *)v2;
3206  v5 = *(_DWORD *)(v4 - 12);
3207  result = v3;
3208  *(_DWORD *)(v3 + v5) = *(_DWORD *)(v2 + 12);
3209  return result;
3210}
3211// 6BA8B66C: using guessed type int __fastcall android__IInterface__IInterface(_DWORD, _DWORD);
3212
3213//----- (6BA8D7FC) --------------------------------------------------------
3214int __fastcall sub_6BA8D7FC(int a1)
3215{
3216  int v1; // r4@1
3217  int v2; // r6@1
3218
3219  v1 = a1;
3220  *(_DWORD *)a1 = &_vtable_for_android::BpInterface<android::ICamera>[12];
3221  v2 = a1 + 20;
3222  *(_DWORD *)(a1 + 20) = &_vtable_for_android::BpInterface<android::ICamera>[172];
3223  *(_DWORD *)(a1 + 4) = &_vtable_for_android::BpInterface<android::ICamera>[124];
3224  android::BpRefBase::_BpRefBase(a1 + 4, &_VTT_for_android::BpInterface<android::ICamera>[20]);
3225  android::ICamera::_ICamera(v1, (int)&_VTT_for_android::BpInterface<android::ICamera>[4]);
3226  android::RefBase::_RefBase(v2);
3227  return v1;
3228}
3229// 6BA8B174: using guessed type int __fastcall android__RefBase___RefBase(_DWORD);
3230// 6BA8B678: using guessed type int __fastcall android__BpRefBase___BpRefBase(_DWORD, _DWORD);
3231
3232//----- (6BA8D84C) --------------------------------------------------------
3233int __fastcall _virtual_thunk_to_android::BpInterface<android::ICamera>::_BpInterface(int a1)
3234{
3235  return sub_6BA8D7FC(a1 + *(_DWORD *)(*(_DWORD *)a1 - 12));
3236}
3237
3238//----- (6BA8D864) --------------------------------------------------------
3239void *__fastcall sub_6BA8D864(int a1)
3240{
3241  void *v1; // r4@1
3242
3243  v1 = (void *)a1;
3244  sub_6BA8D7FC(a1);
3245  operator delete(v1);
3246  return v1;
3247}
3248
3249//----- (6BA8D878) --------------------------------------------------------
3250void *__fastcall _virtual_thunk_to_android::BpInterface<android::ICamera>::_BpInterface(int a1)
3251{
3252  return sub_6BA8D864(a1 + *(_DWORD *)(*(_DWORD *)a1 - 12));
3253}
3254
3255//----- (6BA8DFD8) --------------------------------------------------------
3256int __fastcall sub_6BA8DFD8(int a1)
3257{
3258  int v1; // r4@1
3259  int v2; // r1@1
3260  int v3; // r2@1
3261  int v4; // r3@1
3262
3263  v1 = a1;
3264  v2 = *(_DWORD *)&_VTT_for_android::BnCamera[4];
3265  v3 = *(_DWORD *)&_VTT_for_android::BnCamera[40];
3266  v4 = *(_DWORD *)&_VTT_for_android::BnCamera[44];
3267  *(_DWORD *)a1 = *(_DWORD *)&_VTT_for_android::BnCamera[4];
3268  *(_DWORD *)(a1 + *(_DWORD *)(v2 - 12)) = v3;
3269  *(_DWORD *)(a1 + 4) = v4;
3270  android::BBinder::_BBinder(a1 + 4, &_VTT_for_android::BnCamera[24]);
3271  android::ICamera::_ICamera(v1, (int)&_VTT_for_android::BnCamera[8]);
3272  return v1;
3273}
3274// 6BA8B18C: using guessed type int __fastcall android__BBinder___BBinder(_DWORD, _DWORD);
3275
3276//----- (6BA8E024) --------------------------------------------------------
3277int __fastcall sub_6BA8E024(int a1)
3278{
3279  int v1; // r4@1
3280  int v2; // r5@1
3281
3282  v1 = a1;
3283  *(_DWORD *)a1 = &_vtable_for_android::BnCamera[12];
3284  v2 = a1 + 16;
3285  *(_DWORD *)(a1 + 16) = &_vtable_for_android::BnCamera[228];
3286  *(_DWORD *)(a1 + 4) = &_vtable_for_android::BnCamera[132];
3287  sub_6BA8DFD8(a1);
3288  android::RefBase::_RefBase(v2);
3289  return v1;
3290}
3291// 6BA8B174: using guessed type int __fastcall android__RefBase___RefBase(_DWORD);
3292
3293//----- (6BA8E060) --------------------------------------------------------
3294int __fastcall _virtual_thunk_to_android::BnCamera::_BnCamera(int a1)
3295{
3296  return sub_6BA8E024(a1 + *(_DWORD *)(*(_DWORD *)a1 - 12));
3297}
3298
3299//----- (6BA8E078) --------------------------------------------------------
3300void *__fastcall sub_6BA8E078(int a1)
3301{
3302  void *v1; // r4@1
3303
3304  v1 = (void *)a1;
3305  sub_6BA8E024(a1);
3306  operator delete(v1);
3307  return v1;
3308}
3309
3310//----- (6BA8E08C) --------------------------------------------------------
3311void *__fastcall _virtual_thunk_to_android::BnCamera::_BnCamera(int a1)
3312{
3313  return sub_6BA8E078(a1 + *(_DWORD *)(*(_DWORD *)a1 - 12));
3314}
3315
3316//----- (6BA8E09C) --------------------------------------------------------
3317int __fastcall sub_6BA8E09C()
3318{
3319  int v0; // r0@1
3320  char v1; // cf@1
3321  int result; // r0@1
3322
3323  v0 = strzcmp16();
3324  v1 = (unsigned int)v0 <= 1;
3325  result = 1 - v0;
3326  if ( !v1 )
3327    result = 0;
3328  return result;
3329}
3330// 6BA8B258: using guessed type int strzcmp16(void);
3331
3332//----- (6BA8E100) --------------------------------------------------------
3333int __fastcall sub_6BA8E100(int a1)
3334{
3335  int v1; // r4@1
3336  int v2; // r1@1
3337  int v3; // r2@1
3338  int v4; // r3@1
3339
3340  v1 = a1;
3341  v2 = *(_DWORD *)&_VTT_for_android::BpCamera[4];
3342  v3 = *(_DWORD *)&_VTT_for_android::BpCamera[32];
3343  v4 = *(_DWORD *)&_VTT_for_android::BpCamera[36];
3344  *(_DWORD *)a1 = *(_DWORD *)&_VTT_for_android::BpCamera[4];
3345  *(_DWORD *)(a1 + *(_DWORD *)(v2 - 12)) = v3;
3346  *(_DWORD *)(a1 + 4) = v4;
3347  android::BpRefBase::_BpRefBase(a1 + 4, &_VTT_for_android::BpCamera[24]);
3348  android::ICamera::_ICamera(v1, (int)&_VTT_for_android::BpCamera[8]);
3349  return v1;
3350}
3351// 6BA8B678: using guessed type int __fastcall android__BpRefBase___BpRefBase(_DWORD, _DWORD);
3352
3353//----- (6BA8E14C) --------------------------------------------------------
3354int __fastcall sub_6BA8E14C(int a1)
3355{
3356  int v1; // r4@1
3357  int v2; // r5@1
3358
3359  v1 = a1;
3360  *(_DWORD *)a1 = &_vtable_for_android::BpCamera[12];
3361  v2 = a1 + 20;
3362  *(_DWORD *)(a1 + 20) = &_vtable_for_android::BpCamera[172];
3363  *(_DWORD *)(a1 + 4) = &_vtable_for_android::BpCamera[124];
3364  sub_6BA8E100(a1);
3365  android::RefBase::_RefBase(v2);
3366  return v1;
3367}
3368// 6BA8B174: using guessed type int __fastcall android__RefBase___RefBase(_DWORD);
3369
3370//----- (6BA8E188) --------------------------------------------------------
3371int __fastcall _virtual_thunk_to_android::BpCamera::_BpCamera(int a1)
3372{
3373  return sub_6BA8E14C(a1 + *(_DWORD *)(*(_DWORD *)a1 - 12));
3374}
3375
3376//----- (6BA8E1A0) --------------------------------------------------------
3377void *__fastcall sub_6BA8E1A0(int a1)
3378{
3379  void *v1; // r4@1
3380
3381  v1 = (void *)a1;
3382  sub_6BA8E14C(a1);
3383  operator delete(v1);
3384  return v1;
3385}
3386
3387//----- (6BA8E1B4) --------------------------------------------------------
3388void *__fastcall _virtual_thunk_to_android::BpCamera::_BpCamera(int a1)
3389{
3390  return sub_6BA8E1A0(a1 + *(_DWORD *)(*(_DWORD *)a1 - 12));
3391}
3392
3393//----- (6BA8E1C4) --------------------------------------------------------
3394int __fastcall sub_6BA8E1C4(int a1, int a2)
3395{
3396  int v2; // r5@1
3397  int v3; // r6@1
3398  int v4; // r1@1
3399  int v5; // r2@1
3400  int v6; // r3@1
3401  int result; // r0@1
3402
3403  v2 = a1;
3404  v3 = a2;
3405  android::ICamera::ICamera(a1, (int)&_VTT_for_android::BpCamera[8]);
3406  android::BpRefBase::BpRefBase(v2 + 4, &_VTT_for_android::BpCamera[24], v3);
3407  v4 = *(_DWORD *)&_VTT_for_android::BpCamera[4];
3408  v5 = *(_DWORD *)&_VTT_for_android::BpCamera[32];
3409  v6 = *(_DWORD *)&_VTT_for_android::BpCamera[36];
3410  *(_DWORD *)v2 = *(_DWORD *)&_VTT_for_android::BpCamera[4];
3411  *(_DWORD *)(v2 + *(_DWORD *)(v4 - 12)) = v5;
3412  result = v2;
3413  *(_DWORD *)(v2 + 4) = v6;
3414  return result;
3415}
3416// 6BA8B6C0: using guessed type int __fastcall android__BpRefBase__BpRefBase(_DWORD, _DWORD, _DWORD);
3417
3418//----- (6BA8E204) --------------------------------------------------------
3419int __fastcall sub_6BA8E204(int a1, int a2)
3420{
3421  int v2; // r4@1
3422  int v3; // r6@1
3423  int result; // r0@1
3424
3425  v2 = a1;
3426  v3 = a2;
3427  android::RefBase::RefBase(a1 + 20);
3428  sub_6BA8E1C4(v2, v3);
3429  *(_DWORD *)v2 = &_vtable_for_android::BpCamera[12];
3430  *(_DWORD *)(v2 + 20) = &_vtable_for_android::BpCamera[172];
3431  result = v2;
3432  *(_DWORD *)(v2 + 4) = &_vtable_for_android::BpCamera[124];
3433  return result;
3434}
3435// 6BA8B21C: using guessed type int __fastcall android__RefBase__RefBase(_DWORD);
3436
3437//----- (6BA8E244) --------------------------------------------------------
3438int __fastcall android::ICamera::asInterface(int a1, int a2)
3439{
3440  int v2; // r5@1
3441  int v3; // r1@1
3442  int v4; // r4@1
3443  int v5; // r6@5
3444  int v7; // [sp+4h] [bp-14h]@1
3445
3446  v7 = a2;
3447  v2 = a2;
3448  *(_DWORD *)a1 = 0;
3449  v3 = *(_DWORD *)a2;
3450  v4 = a1;
3451  if ( v3 )
3452  {
3453    (**(void (__fastcall ***)(int *))v3)(&v7);
3454    android::sp<android::ICamera>::operator_(v4, v7);
3455    if ( v7 )
3456      android::RefBase::decStrong(v7 + *(_DWORD *)(*(_DWORD *)v7 - 12), &v7);
3457    if ( !*(_DWORD *)v4 )
3458    {
3459      v5 = operator new(28);
3460      sub_6BA8E204(v5, v2);
3461      android::sp<android::ICamera>::operator_<android::BpCamera>(v4, v5);
3462    }
3463  }
3464  return v4;
3465}
3466// 6BA8B1A4: using guessed type int __fastcall android__RefBase__decStrong(_DWORD, _DWORD);
3467// 6BA8B228: using guessed type int __fastcall operator new(_DWORD);
3468
3469//----- (6BA8E2A8) --------------------------------------------------------
3470int __fastcall sub_6BA8E2A8()
3471{
3472  android::String16::String16(&android::ICamera::descriptor, "android.hardware.ICamera");
3473  return _aeabi_atexit(&android::ICamera::descriptor, &android::String16::_String16, &_dso_handle);
3474}
3475// 6BA8B24C: using guessed type int __fastcall _aeabi_atexit(_DWORD, _DWORD, _DWORD);
3476// 6BA8B270: using guessed type int __fastcall android__String16__String16(_DWORD, _DWORD);
3477// 6BA93D1C: using guessed type int android__ICamera__descriptor;
3478
3479//----- (6BA8E2E0) --------------------------------------------------------
3480int __fastcall sub_6BA8E2E0()
3481{
3482  return sub_6BA8E2A8();
3483}
3484
3485//----- (6BA8E2E8) --------------------------------------------------------
3486void *__fastcall _virtual_thunk_to_android::ICamera::_ICamera(int a1)
3487{
3488  return android::ICamera::_ICamera(a1 + *(_DWORD *)(*(_DWORD *)a1 - 12));
3489}
3490
3491//----- (6BA8E2F8) --------------------------------------------------------
3492int __fastcall _virtual_thunk_to_android::ICamera::_ICamera(int a1)
3493{
3494  return android::ICamera::_ICamera(a1 + *(_DWORD *)(*(_DWORD *)a1 - 12));
3495}
3496
3497//----- (6BA8E308) --------------------------------------------------------
3498int *__fastcall android::ICameraClient::getInterfaceDescriptor()
3499{
3500  return &android::ICameraClient::descriptor;
3501}
3502// 6BA93D20: using guessed type int android__ICameraClient__descriptor;
3503
3504//----- (6BA8E320) --------------------------------------------------------
3505int __fastcall _non_virtual_thunk_to_android::BnCameraClient::onTransact(int a1, int a2, int a3)
3506{
3507  return android::BnCameraClient::onTransact(a1 - 4, a2, a3);
3508}
3509
3510//----- (6BA8E328) --------------------------------------------------------
3511int __fastcall android::BnCameraClient::onTransact(int a1, int a2, int a3)
3512{
3513  int v3; // r4@1
3514  int v4; // r5@1
3515  int v5; // r7@5
3516  int v6; // r6@5
3517  int v7; // r0@5
3518  int v8; // r0@7
3519  int v9; // r1@7
3520  int *v10; // r5@7
3521  int v11; // r7@7
3522  int v17; // r1@9
3523  char v21; // [sp+Ch] [bp-2Ch]@9
3524  int v22; // [sp+10h] [bp-28h]@7
3525  char v23; // [sp+14h] [bp-24h]@7
3526
3527  v3 = a1;
3528  v4 = a3;
3529  if ( a2 == 2 )
3530  {
3531    if ( android::Parcel::checkInterface(a3, a1 + 4) )
3532    {
3533      v8 = android::Parcel::readInt32(v4);
3534      v9 = v4;
3535      v10 = &v22;
3536      v11 = v8;
3537      android::Parcel::readStrongBinder(&v23, v9);
3538      android::IMemory::asInterface(&v22, &v23);
3539      android::sp<android::IBinder>::_sp((int)&v23);
3540      (*(void (__fastcall **)(int, int, int *))(*(_DWORD *)v3 + 20))(v3, v11, &v22);
3541      goto LABEL_10;
3542    }
3543    return -1;
3544  }
3545  if ( a2 == 3 )
3546  {
3547    if ( android::Parcel::checkInterface(a3, a1 + 4) )
3548    {
3549      _R0 = android::Parcel::readInt64(v4);
3550      __asm { VMOV            D8, R0, R1 }
3551      android::Parcel::readInt32(v4);
3552      v17 = v4;
3553      v10 = &v22;
3554      android::Parcel::readStrongBinder(&v21, v17);
3555      android::IMemory::asInterface(&v22, &v21);
3556      android::sp<android::IBinder>::_sp((int)&v21);
3557      __asm { VMOV            R2, R3, D8 }
3558      (*(void (__fastcall **)(int))(*(_DWORD *)v3 + 24))(v3);
3559LABEL_10:
3560      if ( v22 )
3561        android::RefBase::decStrong(v22 + *(_DWORD *)(*(_DWORD *)v22 - 12), v10);
3562      return 0;
3563    }
3564    return -1;
3565  }
3566  if ( a2 != 1 )
3567    return android::BBinder::onTransact(a1 + 4, a2);
3568  if ( !android::Parcel::checkInterface(a3, a1 + 4) )
3569    return -1;
3570  v5 = android::Parcel::readInt32(v4);
3571  v6 = android::Parcel::readInt32(v4);
3572  v7 = android::Parcel::readInt32(v4);
3573  (*(void (__fastcall **)(int, int, int, int))(*(_DWORD *)v3 + 16))(v3, v5, v6, v7);
3574  return 0;
3575}
3576// 6BA8B1A4: using guessed type int __fastcall android__RefBase__decStrong(_DWORD, _DWORD);
3577// 6BA8B378: using guessed type int __fastcall android__BBinder__onTransact(_DWORD, _DWORD);
3578// 6BA8B5F4: using guessed type int __fastcall android__Parcel__checkInterface(_DWORD, _DWORD);
3579// 6BA8B600: using guessed type int __fastcall android__Parcel__readStrongBinder(_DWORD, _DWORD);
3580// 6BA8B618: using guessed type int __fastcall android__Parcel__readInt32(_DWORD);
3581// 6BA8B624: using guessed type int __fastcall android__IMemory__asInterface(_DWORD, _DWORD);
3582// 6BA8B744: using guessed type int __fastcall android__Parcel__readInt64(_DWORD);
3583
3584//----- (6BA8E42C) --------------------------------------------------------
3585int __fastcall android::sp<android::ICameraClient>::operator_(int a1, int a2)
3586{
3587  int v2; // r4@1
3588  int v3; // r5@1
3589
3590  v2 = a1;
3591  v3 = a2;
3592  if ( a2 )
3593    android::RefBase::incStrong(a2 + *(_DWORD *)(*(_DWORD *)a2 - 12), a1);
3594  if ( *(_DWORD *)v2 )
3595    android::RefBase::decStrong(*(_DWORD *)v2 + *(_DWORD *)(**(_DWORD **)v2 - 12), v2);
3596  *(_DWORD *)v2 = v3;
3597  return v2;
3598}
3599// 6BA8B198: using guessed type int __fastcall android__RefBase__incStrong(_DWORD, _DWORD);
3600// 6BA8B1A4: using guessed type int __fastcall android__RefBase__decStrong(_DWORD, _DWORD);
3601
3602//----- (6BA8E45C) --------------------------------------------------------
3603int __fastcall android::sp<android::ICameraClient>::operator_<android::BpCameraClient>(int a1, int a2)
3604{
3605  int v2; // r4@1
3606  int v3; // r5@1
3607
3608  v2 = a1;
3609  v3 = a2;
3610  if ( a2 )
3611    android::RefBase::incStrong(a2 + *(_DWORD *)(*(_DWORD *)a2 - 12), a1);
3612  if ( *(_DWORD *)v2 )
3613    android::RefBase::decStrong(*(_DWORD *)v2 + *(_DWORD *)(**(_DWORD **)v2 - 12), v2);
3614  *(_DWORD *)v2 = v3;
3615  return v2;
3616}
3617// 6BA8B198: using guessed type int __fastcall android__RefBase__incStrong(_DWORD, _DWORD);
3618// 6BA8B1A4: using guessed type int __fastcall android__RefBase__decStrong(_DWORD, _DWORD);
3619
3620//----- (6BA8E48C) --------------------------------------------------------
3621int __fastcall android::ICameraClient::_ICameraClient(int a1)
3622{
3623  int v1; // r4@1
3624  int v2; // r5@1
3625
3626  v1 = a1;
3627  *(_DWORD *)a1 = &_vtable_for_android::ICameraClient[12];
3628  v2 = a1 + 4;
3629  *(_DWORD *)(a1 + 4) = &_vtable_for_android::ICameraClient[68];
3630  android::IInterface::_IInterface(a1, &_VTT_for_android::ICameraClient[4]);
3631  android::RefBase::_RefBase(v2);
3632  return v1;
3633}
3634// 6BA8B174: using guessed type int __fastcall android__RefBase___RefBase(_DWORD);
3635// 6BA8B660: using guessed type int __fastcall android__IInterface___IInterface(_DWORD, _DWORD);
3636
3637//----- (6BA8E4CC) --------------------------------------------------------
3638void *__fastcall android::ICameraClient::_ICameraClient(int a1)
3639{
3640  void *v1; // r4@1
3641
3642  v1 = (void *)a1;
3643  android::ICameraClient::_ICameraClient(a1);
3644  operator delete(v1);
3645  return v1;
3646}
3647
3648//----- (6BA8E4E0) --------------------------------------------------------
3649int __fastcall android::ICameraClient::_ICameraClient(int a1, int a2)
3650{
3651  int v2; // r4@1
3652  int v3; // r0@1
3653
3654  v2 = a1;
3655  v3 = *(_DWORD *)a2;
3656  *(_DWORD *)v2 = *(_DWORD *)a2;
3657  *(_DWORD *)(v2 + *(_DWORD *)(v3 - 12)) = *(_DWORD *)(a2 + 12);
3658  android::IInterface::_IInterface(v2, a2 + 4);
3659  return v2;
3660}
3661// 6BA8B660: using guessed type int __fastcall android__IInterface___IInterface(_DWORD, _DWORD);
3662
3663//----- (6BA8E4FC) --------------------------------------------------------
3664int __fastcall android::ICameraClient::ICameraClient(int a1)
3665{
3666  int v1; // r4@1
3667  int result; // r0@1
3668
3669  v1 = a1;
3670  android::RefBase::RefBase(a1 + 4);
3671  android::IInterface::IInterface(v1, &_VTT_for_android::ICameraClient[4]);
3672  *(_DWORD *)v1 = &_vtable_for_android::ICameraClient[12];
3673  result = v1;
3674  *(_DWORD *)(v1 + 4) = &_vtable_for_android::ICameraClient[68];
3675  return result;
3676}
3677// 6BA8B21C: using guessed type int __fastcall android__RefBase__RefBase(_DWORD);
3678// 6BA8B66C: using guessed type int __fastcall android__IInterface__IInterface(_DWORD, _DWORD);
3679
3680//----- (6BA8E53C) --------------------------------------------------------
3681int __fastcall android::ICameraClient::ICameraClient(int a1, int a2)
3682{
3683  int v2; // r5@1
3684  int v3; // r4@1
3685  int v4; // r0@1
3686  int v5; // r3@1
3687  int result; // r0@1
3688
3689  v2 = a2;
3690  v3 = a1;
3691  android::IInterface::IInterface(a1, a2 + 4);
3692  v4 = *(_DWORD *)v2;
3693  *(_DWORD *)v3 = *(_DWORD *)v2;
3694  v5 = *(_DWORD *)(v4 - 12);
3695  result = v3;
3696  *(_DWORD *)(v3 + v5) = *(_DWORD *)(v2 + 12);
3697  return result;
3698}
3699// 6BA8B66C: using guessed type int __fastcall android__IInterface__IInterface(_DWORD, _DWORD);
3700
3701//----- (6BA8E560) --------------------------------------------------------
3702int __fastcall sub_6BA8E560(int a1)
3703{
3704  int v1; // r4@1
3705  int v2; // r6@1
3706
3707  v1 = a1;
3708  *(_DWORD *)a1 = &_vtable_for_android::BpInterface<android::ICameraClient>[12];
3709  v2 = a1 + 20;
3710  *(_DWORD *)(a1 + 20) = &_vtable_for_android::BpInterface<android::ICameraClient>[100];
3711  *(_DWORD *)(a1 + 4) = &_vtable_for_android::BpInterface<android::ICameraClient>[52];
3712  android::BpRefBase::_BpRefBase(a1 + 4, &_VTT_for_android::BpInterface<android::ICameraClient>[20]);
3713  android::ICameraClient::_ICameraClient(v1, (int)&_VTT_for_android::BpInterface<android::ICameraClient>[4]);
3714  android::RefBase::_RefBase(v2);
3715  return v1;
3716}
3717// 6BA8B174: using guessed type int __fastcall android__RefBase___RefBase(_DWORD);
3718// 6BA8B678: using guessed type int __fastcall android__BpRefBase___BpRefBase(_DWORD, _DWORD);
3719
3720//----- (6BA8E5B0) --------------------------------------------------------
3721int __fastcall _virtual_thunk_to_android::BpInterface<android::ICameraClient>::_BpInterface(int a1)
3722{
3723  return sub_6BA8E560(a1 + *(_DWORD *)(*(_DWORD *)a1 - 12));
3724}
3725
3726//----- (6BA8E5C8) --------------------------------------------------------
3727void *__fastcall sub_6BA8E5C8(int a1)
3728{
3729  void *v1; // r4@1
3730
3731  v1 = (void *)a1;
3732  sub_6BA8E560(a1);
3733  operator delete(v1);
3734  return v1;
3735}
3736
3737//----- (6BA8E5DC) --------------------------------------------------------
3738void *__fastcall _virtual_thunk_to_android::BpInterface<android::ICameraClient>::_BpInterface(int a1)
3739{
3740  return sub_6BA8E5C8(a1 + *(_DWORD *)(*(_DWORD *)a1 - 12));
3741}
3742
3743//----- (6BA8E744) --------------------------------------------------------
3744int __fastcall sub_6BA8E744(int a1)
3745{
3746  int v1; // r4@1
3747  int v2; // r1@1
3748  int v3; // r2@1
3749  int v4; // r3@1
3750
3751  v1 = a1;
3752  v2 = *(_DWORD *)&_VTT_for_android::BpCameraClient[4];
3753  v3 = *(_DWORD *)&_VTT_for_android::BpCameraClient[32];
3754  v4 = *(_DWORD *)&_VTT_for_android::BpCameraClient[36];
3755  *(_DWORD *)a1 = *(_DWORD *)&_VTT_for_android::BpCameraClient[4];
3756  *(_DWORD *)(a1 + *(_DWORD *)(v2 - 12)) = v3;
3757  *(_DWORD *)(a1 + 4) = v4;
3758  android::BpRefBase::_BpRefBase(a1 + 4, &_VTT_for_android::BpCameraClient[24]);
3759  android::ICameraClient::_ICameraClient(v1, (int)&_VTT_for_android::BpCameraClient[8]);
3760  return v1;
3761}
3762// 6BA8B678: using guessed type int __fastcall android__BpRefBase___BpRefBase(_DWORD, _DWORD);
3763
3764//----- (6BA8E790) --------------------------------------------------------
3765int __fastcall sub_6BA8E790(int a1)
3766{
3767  int v1; // r4@1
3768  int v2; // r5@1
3769
3770  v1 = a1;
3771  *(_DWORD *)a1 = &_vtable_for_android::BpCameraClient[12];
3772  v2 = a1 + 20;
3773  *(_DWORD *)(a1 + 20) = &_vtable_for_android::BpCameraClient[100];
3774  *(_DWORD *)(a1 + 4) = &_vtable_for_android::BpCameraClient[52];
3775  sub_6BA8E744(a1);
3776  android::RefBase::_RefBase(v2);
3777  return v1;
3778}
3779// 6BA8B174: using guessed type int __fastcall android__RefBase___RefBase(_DWORD);
3780
3781//----- (6BA8E7CC) --------------------------------------------------------
3782int __fastcall _virtual_thunk_to_android::BpCameraClient::_BpCameraClient(int a1)
3783{
3784  return sub_6BA8E790(a1 + *(_DWORD *)(*(_DWORD *)a1 - 12));
3785}
3786
3787//----- (6BA8E7E4) --------------------------------------------------------
3788void *__fastcall sub_6BA8E7E4(int a1)
3789{
3790  void *v1; // r4@1
3791
3792  v1 = (void *)a1;
3793  sub_6BA8E790(a1);
3794  operator delete(v1);
3795  return v1;
3796}
3797
3798//----- (6BA8E7F8) --------------------------------------------------------
3799void *__fastcall _virtual_thunk_to_android::BpCameraClient::_BpCameraClient(int a1)
3800{
3801  return sub_6BA8E7E4(a1 + *(_DWORD *)(*(_DWORD *)a1 - 12));
3802}
3803
3804//----- (6BA8E808) --------------------------------------------------------
3805int __fastcall sub_6BA8E808(int a1, int a2)
3806{
3807  int v2; // r5@1
3808  int v3; // r6@1
3809  int v4; // r1@1
3810  int v5; // r2@1
3811  int v6; // r3@1
3812  int result; // r0@1
3813
3814  v2 = a1;
3815  v3 = a2;
3816  android::ICameraClient::ICameraClient(a1, (int)&_VTT_for_android::BpCameraClient[8]);
3817  android::BpRefBase::BpRefBase(v2 + 4, &_VTT_for_android::BpCameraClient[24], v3);
3818  v4 = *(_DWORD *)&_VTT_for_android::BpCameraClient[4];
3819  v5 = *(_DWORD *)&_VTT_for_android::BpCameraClient[32];
3820  v6 = *(_DWORD *)&_VTT_for_android::BpCameraClient[36];
3821  *(_DWORD *)v2 = *(_DWORD *)&_VTT_for_android::BpCameraClient[4];
3822  *(_DWORD *)(v2 + *(_DWORD *)(v4 - 12)) = v5;
3823  result = v2;
3824  *(_DWORD *)(v2 + 4) = v6;
3825  return result;
3826}
3827// 6BA8B6C0: using guessed type int __fastcall android__BpRefBase__BpRefBase(_DWORD, _DWORD, _DWORD);
3828
3829//----- (6BA8E848) --------------------------------------------------------
3830int __fastcall sub_6BA8E848(int a1, int a2)
3831{
3832  int v2; // r4@1
3833  int v3; // r6@1
3834  int result; // r0@1
3835
3836  v2 = a1;
3837  v3 = a2;
3838  android::RefBase::RefBase(a1 + 20);
3839  sub_6BA8E808(v2, v3);
3840  *(_DWORD *)v2 = &_vtable_for_android::BpCameraClient[12];
3841  *(_DWORD *)(v2 + 20) = &_vtable_for_android::BpCameraClient[100];
3842  result = v2;
3843  *(_DWORD *)(v2 + 4) = &_vtable_for_android::BpCameraClient[52];
3844  return result;
3845}
3846// 6BA8B21C: using guessed type int __fastcall android__RefBase__RefBase(_DWORD);
3847
3848//----- (6BA8E888) --------------------------------------------------------
3849int __fastcall android::ICameraClient::asInterface(int a1, int a2)
3850{
3851  int v2; // r5@1
3852  int v3; // r1@1
3853  int v4; // r4@1
3854  int v5; // r6@5
3855  int v7; // [sp+4h] [bp-14h]@1
3856
3857  v7 = a2;
3858  v2 = a2;
3859  *(_DWORD *)a1 = 0;
3860  v3 = *(_DWORD *)a2;
3861  v4 = a1;
3862  if ( v3 )
3863  {
3864    (**(void (__fastcall ***)(int *))v3)(&v7);
3865    android::sp<android::ICameraClient>::operator_(v4, v7);
3866    if ( v7 )
3867      android::RefBase::decStrong(v7 + *(_DWORD *)(*(_DWORD *)v7 - 12), &v7);
3868    if ( !*(_DWORD *)v4 )
3869    {
3870      v5 = operator new(28);
3871      sub_6BA8E848(v5, v2);
3872      android::sp<android::ICameraClient>::operator_<android::BpCameraClient>(v4, v5);
3873    }
3874  }
3875  return v4;
3876}
3877// 6BA8B1A4: using guessed type int __fastcall android__RefBase__decStrong(_DWORD, _DWORD);
3878// 6BA8B228: using guessed type int __fastcall operator new(_DWORD);
3879
3880//----- (6BA8E8EC) --------------------------------------------------------
3881int __fastcall sub_6BA8E8EC()
3882{
3883  android::String16::String16(&android::ICameraClient::descriptor, "android.hardware.ICameraClient");
3884  return _aeabi_atexit(&android::ICameraClient::descriptor, &android::String16::_String16, &_dso_handle);
3885}
3886// 6BA8B24C: using guessed type int __fastcall _aeabi_atexit(_DWORD, _DWORD, _DWORD);
3887// 6BA8B270: using guessed type int __fastcall android__String16__String16(_DWORD, _DWORD);
3888// 6BA93D20: using guessed type int android__ICameraClient__descriptor;
3889
3890//----- (6BA8E924) --------------------------------------------------------
3891int __fastcall sub_6BA8E924()
3892{
3893  return sub_6BA8E8EC();
3894}
3895
3896//----- (6BA8E92C) --------------------------------------------------------
3897void *__fastcall _virtual_thunk_to_android::ICameraClient::_ICameraClient(int a1)
3898{
3899  return android::ICameraClient::_ICameraClient(a1 + *(_DWORD *)(*(_DWORD *)a1 - 12));
3900}
3901
3902//----- (6BA8E93C) --------------------------------------------------------
3903int __fastcall _virtual_thunk_to_android::ICameraClient::_ICameraClient(int a1)
3904{
3905  return android::ICameraClient::_ICameraClient(a1 + *(_DWORD *)(*(_DWORD *)a1 - 12));
3906}
3907
3908//----- (6BA8E94C) --------------------------------------------------------
3909int *__fastcall android::ICameraService::getInterfaceDescriptor()
3910{
3911  return &android::ICameraService::descriptor;
3912}
3913// 6BA93D24: using guessed type int android__ICameraService__descriptor;
3914
3915//----- (6BA8E964) --------------------------------------------------------
3916int __fastcall android::BnInterface<android::ICameraService>::onAsBinder(int a1)
3917{
3918  return a1 + 4;
3919}
3920
3921//----- (6BA8E978) --------------------------------------------------------
3922int __fastcall _non_virtual_thunk_to_android::BnCameraService::onTransact(int a1, int a2, int a3, int a4)
3923{
3924  return android::BnCameraService::onTransact(a1 - 4, a2, a3, a4);
3925}
3926
3927//----- (6BA8E980) --------------------------------------------------------
3928int __fastcall android::BnCameraService::onTransact(int a1, int a2, int a3, int a4)
3929{
3930  int v4; // r5@1
3931  int v5; // r3@1
3932  int v6; // r7@1
3933  int v7; // r4@1
3934  int v8; // r6@1
3935  int v9; // r1@1
3936  int v10; // r0@4
3937  int (__fastcall *v11)(_DWORD, _DWORD, _DWORD); // r8@6
3938  int v12; // r0@6
3939  int v13; // r4@6
3940  int result; // r0@6
3941  void (__fastcall *v15)(_DWORD, _DWORD, _DWORD, _DWORD); // r7@8
3942  int v16; // r0@8
3943  int v17; // r0@11
3944  int *v18; // r1@11
3945  int v19; // r8@13
3946  int v20; // [sp+Ch] [bp-3Ch]@6
3947  int v21; // [sp+10h] [bp-38h]@6
3948  char v22; // [sp+14h] [bp-34h]@13
3949  char v23; // [sp+18h] [bp-30h]@13
3950  int v24; // [sp+1Ch] [bp-2Ch]@8
3951  char v25; // [sp+20h] [bp-28h]@8
3952  char v26; // [sp+24h] [bp-24h]@8
3953
3954  v4 = a4;
3955  v5 = a2 - 1;
3956  v6 = a2;
3957  v7 = a1;
3958  v8 = a3;
3959  v9 = a1 + 4;
3960  if ( (unsigned int)v5 > 3 )
3961  {
3962LABEL_18:
3963    result = android::BBinder::onTransact(a1 + 4, v6);
3964  }
3965  else
3966  {
3967    switch ( v5 )
3968    {
3969      case 0:
3970        if ( !android::Parcel::checkInterface(a3, v9) )
3971          goto LABEL_19;
3972        v10 = (*(int (__fastcall **)(int))(*(_DWORD *)v7 + 16))(v7);
3973        android::Parcel::writeInt32(v4, v10);
3974        goto LABEL_20;
3975      case 1:
3976        if ( !android::Parcel::checkInterface(a3, v9) )
3977          goto LABEL_19;
3978        v20 = 0;
3979        v21 = 0;
3980        v11 = *(int (__fastcall **)(_DWORD, _DWORD, _DWORD))(*(_DWORD *)v7 + 20);
3981        v12 = android::Parcel::readInt32(v8);
3982        v13 = v11(v7, v12, &v20);
3983        android::Parcel::writeInt32(v4, v20);
3984        android::Parcel::writeInt32(v4, v21);
3985        android::Parcel::writeInt32(v4, v13);
3986        return 0;
3987      case 2:
3988        if ( !android::Parcel::checkInterface(a3, v9) )
3989          goto LABEL_19;
3990        android::Parcel::readStrongBinder(&v26, v8);
3991        android::ICameraClient::asInterface((int)&v20, (int)&v26);
3992        android::sp<android::IBinder>::_sp((int)&v26);
3993        v15 = *(void (__fastcall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v7 + 24);
3994        v16 = android::Parcel::readInt32(v8);
3995        v15(&v24, v7, &v20, v16);
3996        android::IInterface::asBinder(&v25, v24);
3997        android::Parcel::writeStrongBinder(v4, &v25);
3998        android::sp<android::IBinder>::_sp((int)&v25);
3999        if ( v24 )
4000          android::RefBase::decStrong(v24 + *(_DWORD *)(*(_DWORD *)v24 - 12), &v24);
4001        if ( !v20 )
4002          goto LABEL_20;
4003        v17 = v20 + *(_DWORD *)(*(_DWORD *)v20 - 12);
4004        v18 = &v20;
4005        goto LABEL_17;
4006      case 3:
4007        if ( android::Parcel::checkInterface(a3, v9) )
4008        {
4009          android::Parcel::readStrongBinder(&v23, v8);
4010          android::ICameraClient::asInterface((int)&v24, (int)&v23);
4011          android::sp<android::IBinder>::_sp((int)&v23);
4012          v19 = android::Parcel::readInt32(v8);
4013          android::Parcel::readInt32(v8);
4014          (*(void (__fastcall **)(int *, int, int *, int))(*(_DWORD *)v7 + 28))(&v20, v7, &v24, v19);
4015          android::IInterface::asBinder(&v22, v20);
4016          android::Parcel::writeStrongBinder(v4, &v22);
4017          android::sp<android::IBinder>::_sp((int)&v22);
4018          if ( v20 )
4019            android::RefBase::decStrong(v20 + *(_DWORD *)(*(_DWORD *)v20 - 12), &v20);
4020          if ( v24 )
4021          {
4022            v18 = &v24;
4023            v17 = v24 + *(_DWORD *)(*(_DWORD *)v24 - 12);
4024LABEL_17:
4025            android::RefBase::decStrong(v17, v18);
4026          }
4027LABEL_20:
4028          result = 0;
4029        }
4030        else
4031        {
4032LABEL_19:
4033          result = -1;
4034        }
4035        break;
4036      default:
4037        goto LABEL_18;
4038    }
4039  }
4040  return result;
4041}
4042// 6BA8B1A4: using guessed type int __fastcall android__RefBase__decStrong(_DWORD, _DWORD);
4043// 6BA8B234: using guessed type int __fastcall android__IInterface__asBinder(_DWORD, _DWORD);
4044// 6BA8B378: using guessed type int __fastcall android__BBinder__onTransact(_DWORD, _DWORD);
4045// 6BA8B5F4: using guessed type int __fastcall android__Parcel__checkInterface(_DWORD, _DWORD);
4046// 6BA8B600: using guessed type int __fastcall android__Parcel__readStrongBinder(_DWORD, _DWORD);
4047// 6BA8B618: using guessed type int __fastcall android__Parcel__readInt32(_DWORD);
4048// 6BA8B630: using guessed type int __fastcall android__Parcel__writeInt32(_DWORD, _DWORD);
4049// 6BA8B6B4: using guessed type int __fastcall android__Parcel__writeStrongBinder(_DWORD, _DWORD);
4050
4051//----- (6BA8EB28) --------------------------------------------------------
4052int __fastcall android::sp<android::ICameraService>::operator_(int a1, int a2)
4053{
4054  int v2; // r4@1
4055  int v3; // r5@1
4056
4057  v2 = a1;
4058  v3 = a2;
4059  if ( a2 )
4060    android::RefBase::incStrong(a2 + *(_DWORD *)(*(_DWORD *)a2 - 12), a1);
4061  if ( *(_DWORD *)v2 )
4062    android::RefBase::decStrong(*(_DWORD *)v2 + *(_DWORD *)(**(_DWORD **)v2 - 12), v2);
4063  *(_DWORD *)v2 = v3;
4064  return v2;
4065}
4066// 6BA8B198: using guessed type int __fastcall android__RefBase__incStrong(_DWORD, _DWORD);
4067// 6BA8B1A4: using guessed type int __fastcall android__RefBase__decStrong(_DWORD, _DWORD);
4068
4069//----- (6BA8EB58) --------------------------------------------------------
4070int __fastcall android::sp<android::ICameraService>::operator_<android::BpCameraService>(int a1, int a2)
4071{
4072  int v2; // r4@1
4073  int v3; // r5@1
4074
4075  v2 = a1;
4076  v3 = a2;
4077  if ( a2 )
4078    android::RefBase::incStrong(a2 + *(_DWORD *)(*(_DWORD *)a2 - 12), a1);
4079  if ( *(_DWORD *)v2 )
4080    android::RefBase::decStrong(*(_DWORD *)v2 + *(_DWORD *)(**(_DWORD **)v2 - 12), v2);
4081  *(_DWORD *)v2 = v3;
4082  return v2;
4083}
4084// 6BA8B198: using guessed type int __fastcall android__RefBase__incStrong(_DWORD, _DWORD);
4085// 6BA8B1A4: using guessed type int __fastcall android__RefBase__decStrong(_DWORD, _DWORD);
4086
4087//----- (6BA8EB88) --------------------------------------------------------
4088int __fastcall android::ICameraService::_ICameraService(int a1)
4089{
4090  int v1; // r4@1
4091  int v2; // r5@1
4092
4093  v1 = a1;
4094  *(_DWORD *)a1 = &_vtable_for_android::ICameraService[12];
4095  v2 = a1 + 4;
4096  *(_DWORD *)(a1 + 4) = &_vtable_for_android::ICameraService[72];
4097  android::IInterface::_IInterface(a1, &_VTT_for_android::ICameraService[4]);
4098  android::RefBase::_RefBase(v2);
4099  return v1;
4100}
4101// 6BA8B174: using guessed type int __fastcall android__RefBase___RefBase(_DWORD);
4102// 6BA8B660: using guessed type int __fastcall android__IInterface___IInterface(_DWORD, _DWORD);
4103
4104//----- (6BA8EBC8) --------------------------------------------------------
4105void *__fastcall android::ICameraService::_ICameraService(int a1)
4106{
4107  void *v1; // r4@1
4108
4109  v1 = (void *)a1;
4110  android::ICameraService::_ICameraService(a1);
4111  operator delete(v1);
4112  return v1;
4113}
4114
4115//----- (6BA8EBDC) --------------------------------------------------------
4116int __fastcall android::ICameraService::_ICameraService(int a1, int a2)
4117{
4118  int v2; // r4@1
4119  int v3; // r0@1
4120
4121  v2 = a1;
4122  v3 = *(_DWORD *)a2;
4123  *(_DWORD *)v2 = *(_DWORD *)a2;
4124  *(_DWORD *)(v2 + *(_DWORD *)(v3 - 12)) = *(_DWORD *)(a2 + 12);
4125  android::IInterface::_IInterface(v2, a2 + 4);
4126  return v2;
4127}
4128// 6BA8B660: using guessed type int __fastcall android__IInterface___IInterface(_DWORD, _DWORD);
4129
4130//----- (6BA8EC00) --------------------------------------------------------
4131int __fastcall sub_6BA8EC00(int a1)
4132{
4133  int v1; // r4@1
4134  int v2; // r6@1
4135
4136  v1 = a1;
4137  *(_DWORD *)a1 = &_vtable_for_android::BnInterface<android::ICameraService>[12];
4138  v2 = a1 + 16;
4139  *(_DWORD *)(a1 + 16) = &_vtable_for_android::BnInterface<android::ICameraService>[156];
4140  *(_DWORD *)(a1 + 4) = &_vtable_for_android::BnInterface<android::ICameraService>[60];
4141  android::BBinder::_BBinder(a1 + 4, &_VTT_for_android::BnInterface<android::ICameraService>[20]);
4142  android::ICameraService::_ICameraService(v1, (int)&_VTT_for_android::BnInterface<android::ICameraService>[4]);
4143  android::RefBase::_RefBase(v2);
4144  return v1;
4145}
4146// 6BA8B174: using guessed type int __fastcall android__RefBase___RefBase(_DWORD);
4147// 6BA8B18C: using guessed type int __fastcall android__BBinder___BBinder(_DWORD, _DWORD);
4148
4149//----- (6BA8EC50) --------------------------------------------------------
4150int __fastcall _virtual_thunk_to_android::BnInterface<android::ICameraService>::_BnInterface(int a1)
4151{
4152  return sub_6BA8EC00(a1 + *(_DWORD *)(*(_DWORD *)a1 - 12));
4153}
4154
4155//----- (6BA8EC68) --------------------------------------------------------
4156void *__fastcall sub_6BA8EC68(int a1)
4157{
4158  void *v1; // r4@1
4159
4160  v1 = (void *)a1;
4161  sub_6BA8EC00(a1);
4162  operator delete(v1);
4163  return v1;
4164}
4165
4166//----- (6BA8EC7C) --------------------------------------------------------
4167void *__fastcall _virtual_thunk_to_android::BnInterface<android::ICameraService>::_BnInterface(int a1)
4168{
4169  return sub_6BA8EC68(a1 + *(_DWORD *)(*(_DWORD *)a1 - 12));
4170}
4171
4172//----- (6BA8EC8C) --------------------------------------------------------
4173int __fastcall android::ICameraService::ICameraService(int a1)
4174{
4175  int v1; // r4@1
4176  int result; // r0@1
4177
4178  v1 = a1;
4179  android::RefBase::RefBase(a1 + 4);
4180  android::IInterface::IInterface(v1, &_VTT_for_android::ICameraService[4]);
4181  *(_DWORD *)v1 = &_vtable_for_android::ICameraService[12];
4182  result = v1;
4183  *(_DWORD *)(v1 + 4) = &_vtable_for_android::ICameraService[72];
4184  return result;
4185}
4186// 6BA8B21C: using guessed type int __fastcall android__RefBase__RefBase(_DWORD);
4187// 6BA8B66C: using guessed type int __fastcall android__IInterface__IInterface(_DWORD, _DWORD);
4188
4189//----- (6BA8ECCC) --------------------------------------------------------
4190int __fastcall android::ICameraService::ICameraService(int a1, int a2)
4191{
4192  int v2; // r5@1
4193  int v3; // r4@1
4194  int v4; // r0@1
4195  int v5; // r3@1
4196  int result; // r0@1
4197
4198  v2 = a2;
4199  v3 = a1;
4200  android::IInterface::IInterface(a1, a2 + 4);
4201  v4 = *(_DWORD *)v2;
4202  *(_DWORD *)v3 = *(_DWORD *)v2;
4203  v5 = *(_DWORD *)(v4 - 12);
4204  result = v3;
4205  *(_DWORD *)(v3 + v5) = *(_DWORD *)(v2 + 12);
4206  return result;
4207}
4208// 6BA8B66C: using guessed type int __fastcall android__IInterface__IInterface(_DWORD, _DWORD);
4209
4210//----- (6BA8ECF0) --------------------------------------------------------
4211int __fastcall sub_6BA8ECF0(int a1)
4212{
4213  int v1; // r4@1
4214  int v2; // r6@1
4215
4216  v1 = a1;
4217  *(_DWORD *)a1 = &_vtable_for_android::BpInterface<android::ICameraService>[12];
4218  v2 = a1 + 20;
4219  *(_DWORD *)(a1 + 20) = &_vtable_for_android::BpInterface<android::ICameraService>[104];
4220  *(_DWORD *)(a1 + 4) = &_vtable_for_android::BpInterface<android::ICameraService>[56];
4221  android::BpRefBase::_BpRefBase(a1 + 4, &_VTT_for_android::BpInterface<android::ICameraService>[20]);
4222  android::ICameraService::_ICameraService(v1, (int)&_VTT_for_android::BpInterface<android::ICameraService>[4]);
4223  android::RefBase::_RefBase(v2);
4224  return v1;
4225}
4226// 6BA8B174: using guessed type int __fastcall android__RefBase___RefBase(_DWORD);
4227// 6BA8B678: using guessed type int __fastcall android__BpRefBase___BpRefBase(_DWORD, _DWORD);
4228
4229//----- (6BA8ED40) --------------------------------------------------------
4230int __fastcall _virtual_thunk_to_android::BpInterface<android::ICameraService>::_BpInterface(int a1)
4231{
4232  return sub_6BA8ECF0(a1 + *(_DWORD *)(*(_DWORD *)a1 - 12));
4233}
4234
4235//----- (6BA8ED58) --------------------------------------------------------
4236void *__fastcall sub_6BA8ED58(int a1)
4237{
4238  void *v1; // r4@1
4239
4240  v1 = (void *)a1;
4241  sub_6BA8ECF0(a1);
4242  operator delete(v1);
4243  return v1;
4244}
4245
4246//----- (6BA8ED6C) --------------------------------------------------------
4247void *__fastcall _virtual_thunk_to_android::BpInterface<android::ICameraService>::_BpInterface(int a1)
4248{
4249  return sub_6BA8ED58(a1 + *(_DWORD *)(*(_DWORD *)a1 - 12));
4250}
4251
4252//----- (6BA8EF68) --------------------------------------------------------
4253int __fastcall sub_6BA8EF68(int a1)
4254{
4255  int v1; // r4@1
4256  int v2; // r1@1
4257  int v3; // r2@1
4258  int v4; // r3@1
4259
4260  v1 = a1;
4261  v2 = *(_DWORD *)&_VTT_for_android::BnCameraService[4];
4262  v3 = *(_DWORD *)&_VTT_for_android::BnCameraService[40];
4263  v4 = *(_DWORD *)&_VTT_for_android::BnCameraService[44];
4264  *(_DWORD *)a1 = *(_DWORD *)&_VTT_for_android::BnCameraService[4];
4265  *(_DWORD *)(a1 + *(_DWORD *)(v2 - 12)) = v3;
4266  *(_DWORD *)(a1 + 4) = v4;
4267  android::BBinder::_BBinder(a1 + 4, &_VTT_for_android::BnCameraService[24]);
4268  android::ICameraService::_ICameraService(v1, (int)&_VTT_for_android::BnCameraService[8]);
4269  return v1;
4270}
4271// 6BA8B18C: using guessed type int __fastcall android__BBinder___BBinder(_DWORD, _DWORD);
4272
4273//----- (6BA8EFB4) --------------------------------------------------------
4274int __fastcall sub_6BA8EFB4(int a1)
4275{
4276  int v1; // r4@1
4277  int v2; // r5@1
4278
4279  v1 = a1;
4280  *(_DWORD *)a1 = &_vtable_for_android::BnCameraService[12];
4281  v2 = a1 + 16;
4282  *(_DWORD *)(a1 + 16) = &_vtable_for_android::BnCameraService[160];
4283  *(_DWORD *)(a1 + 4) = &_vtable_for_android::BnCameraService[64];
4284  sub_6BA8EF68(a1);
4285  android::RefBase::_RefBase(v2);
4286  return v1;
4287}
4288// 6BA8B174: using guessed type int __fastcall android__RefBase___RefBase(_DWORD);
4289
4290//----- (6BA8EFF0) --------------------------------------------------------
4291int __fastcall _virtual_thunk_to_android::BnCameraService::_BnCameraService(int a1)
4292{
4293  return sub_6BA8EFB4(a1 + *(_DWORD *)(*(_DWORD *)a1 - 12));
4294}
4295
4296//----- (6BA8F008) --------------------------------------------------------
4297void *__fastcall sub_6BA8F008(int a1)
4298{
4299  void *v1; // r4@1
4300
4301  v1 = (void *)a1;
4302  sub_6BA8EFB4(a1);
4303  operator delete(v1);
4304  return v1;
4305}
4306
4307//----- (6BA8F01C) --------------------------------------------------------
4308void *__fastcall _virtual_thunk_to_android::BnCameraService::_BnCameraService(int a1)
4309{
4310  return sub_6BA8F008(a1 + *(_DWORD *)(*(_DWORD *)a1 - 12));
4311}
4312
4313//----- (6BA8F02C) --------------------------------------------------------
4314int __fastcall sub_6BA8F02C()
4315{
4316  int v0; // r0@1
4317  char v1; // cf@1
4318  int result; // r0@1
4319
4320  v0 = strzcmp16();
4321  v1 = (unsigned int)v0 <= 1;
4322  result = 1 - v0;
4323  if ( !v1 )
4324    result = 0;
4325  return result;
4326}
4327// 6BA8B258: using guessed type int strzcmp16(void);
4328
4329//----- (6BA8F090) --------------------------------------------------------
4330int __fastcall sub_6BA8F090(int a1)
4331{
4332  int v1; // r4@1
4333  int v2; // r1@1
4334  int v3; // r2@1
4335  int v4; // r3@1
4336
4337  v1 = a1;
4338  v2 = *(_DWORD *)&_VTT_for_android::BpCameraService[4];
4339  v3 = *(_DWORD *)&_VTT_for_android::BpCameraService[32];
4340  v4 = *(_DWORD *)&_VTT_for_android::BpCameraService[36];
4341  *(_DWORD *)a1 = *(_DWORD *)&_VTT_for_android::BpCameraService[4];
4342  *(_DWORD *)(a1 + *(_DWORD *)(v2 - 12)) = v3;
4343  *(_DWORD *)(a1 + 4) = v4;
4344  android::BpRefBase::_BpRefBase(a1 + 4, &_VTT_for_android::BpCameraService[24]);
4345  android::ICameraService::_ICameraService(v1, (int)&_VTT_for_android::BpCameraService[8]);
4346  return v1;
4347}
4348// 6BA8B678: using guessed type int __fastcall android__BpRefBase___BpRefBase(_DWORD, _DWORD);
4349
4350//----- (6BA8F0DC) --------------------------------------------------------
4351int __fastcall sub_6BA8F0DC(int a1)
4352{
4353  int v1; // r4@1
4354  int v2; // r5@1
4355
4356  v1 = a1;
4357  *(_DWORD *)a1 = &_vtable_for_android::BpCameraService[12];
4358  v2 = a1 + 20;
4359  *(_DWORD *)(a1 + 20) = &_vtable_for_android::BpCameraService[104];
4360  *(_DWORD *)(a1 + 4) = &_vtable_for_android::BpCameraService[56];
4361  sub_6BA8F090(a1);
4362  android::RefBase::_RefBase(v2);
4363  return v1;
4364}
4365// 6BA8B174: using guessed type int __fastcall android__RefBase___RefBase(_DWORD);
4366
4367//----- (6BA8F118) --------------------------------------------------------
4368int __fastcall _virtual_thunk_to_android::BpCameraService::_BpCameraService(int a1)
4369{
4370  return sub_6BA8F0DC(a1 + *(_DWORD *)(*(_DWORD *)a1 - 12));
4371}
4372
4373//----- (6BA8F130) --------------------------------------------------------
4374void *__fastcall sub_6BA8F130(int a1)
4375{
4376  void *v1; // r4@1
4377
4378  v1 = (void *)a1;
4379  sub_6BA8F0DC(a1);
4380  operator delete(v1);
4381  return v1;
4382}
4383
4384//----- (6BA8F144) --------------------------------------------------------
4385void *__fastcall _virtual_thunk_to_android::BpCameraService::_BpCameraService(int a1)
4386{
4387  return sub_6BA8F130(a1 + *(_DWORD *)(*(_DWORD *)a1 - 12));
4388}
4389
4390//----- (6BA8F154) --------------------------------------------------------
4391int __fastcall sub_6BA8F154(int a1, int a2)
4392{
4393  int v2; // r5@1
4394  int v3; // r6@1
4395  int v4; // r1@1
4396  int v5; // r2@1
4397  int v6; // r3@1
4398  int result; // r0@1
4399
4400  v2 = a1;
4401  v3 = a2;
4402  android::ICameraService::ICameraService(a1, (int)&_VTT_for_android::BpCameraService[8]);
4403  android::BpRefBase::BpRefBase(v2 + 4, &_VTT_for_android::BpCameraService[24], v3);
4404  v4 = *(_DWORD *)&_VTT_for_android::BpCameraService[4];
4405  v5 = *(_DWORD *)&_VTT_for_android::BpCameraService[32];
4406  v6 = *(_DWORD *)&_VTT_for_android::BpCameraService[36];
4407  *(_DWORD *)v2 = *(_DWORD *)&_VTT_for_android::BpCameraService[4];
4408  *(_DWORD *)(v2 + *(_DWORD *)(v4 - 12)) = v5;
4409  result = v2;
4410  *(_DWORD *)(v2 + 4) = v6;
4411  return result;
4412}
4413// 6BA8B6C0: using guessed type int __fastcall android__BpRefBase__BpRefBase(_DWORD, _DWORD, _DWORD);
4414
4415//----- (6BA8F194) --------------------------------------------------------
4416int __fastcall sub_6BA8F194(int a1, int a2)
4417{
4418  int v2; // r4@1
4419  int v3; // r6@1
4420  int result; // r0@1
4421
4422  v2 = a1;
4423  v3 = a2;
4424  android::RefBase::RefBase(a1 + 20);
4425  sub_6BA8F154(v2, v3);
4426  *(_DWORD *)v2 = &_vtable_for_android::BpCameraService[12];
4427  *(_DWORD *)(v2 + 20) = &_vtable_for_android::BpCameraService[104];
4428  result = v2;
4429  *(_DWORD *)(v2 + 4) = &_vtable_for_android::BpCameraService[56];
4430  return result;
4431}
4432// 6BA8B21C: using guessed type int __fastcall android__RefBase__RefBase(_DWORD);
4433
4434//----- (6BA8F1D4) --------------------------------------------------------
4435int __fastcall android::ICameraService::asInterface(int a1, int a2)
4436{
4437  int v2; // r5@1
4438  int v3; // r1@1
4439  int v4; // r4@1
4440  int v5; // r6@5
4441  int v7; // [sp+4h] [bp-14h]@1
4442
4443  v7 = a2;
4444  v2 = a2;
4445  *(_DWORD *)a1 = 0;
4446  v3 = *(_DWORD *)a2;
4447  v4 = a1;
4448  if ( v3 )
4449  {
4450    (**(void (__fastcall ***)(int *))v3)(&v7);
4451    android::sp<android::ICameraService>::operator_(v4, v7);
4452    if ( v7 )
4453      android::RefBase::decStrong(v7 + *(_DWORD *)(*(_DWORD *)v7 - 12), &v7);
4454    if ( !*(_DWORD *)v4 )
4455    {
4456      v5 = operator new(28);
4457      sub_6BA8F194(v5, v2);
4458      android::sp<android::ICameraService>::operator_<android::BpCameraService>(v4, v5);
4459    }
4460  }
4461  return v4;
4462}
4463// 6BA8B1A4: using guessed type int __fastcall android__RefBase__decStrong(_DWORD, _DWORD);
4464// 6BA8B228: using guessed type int __fastcall operator new(_DWORD);
4465
4466//----- (6BA8F238) --------------------------------------------------------
4467int __fastcall sub_6BA8F238()
4468{
4469  android::String16::String16(&android::ICameraService::descriptor, "android.hardware.ICameraService");
4470  return _aeabi_atexit(&android::ICameraService::descriptor, &android::String16::_String16, &_dso_handle);
4471}
4472// 6BA8B24C: using guessed type int __fastcall _aeabi_atexit(_DWORD, _DWORD, _DWORD);
4473// 6BA8B270: using guessed type int __fastcall android__String16__String16(_DWORD, _DWORD);
4474// 6BA93D24: using guessed type int android__ICameraService__descriptor;
4475
4476//----- (6BA8F270) --------------------------------------------------------
4477int __fastcall sub_6BA8F270()
4478{
4479  return sub_6BA8F238();
4480}
4481
4482//----- (6BA8F278) --------------------------------------------------------
4483void *__fastcall _virtual_thunk_to_android::ICameraService::_ICameraService(int a1)
4484{
4485  return android::ICameraService::_ICameraService(a1 + *(_DWORD *)(*(_DWORD *)a1 - 12));
4486}
4487
4488//----- (6BA8F288) --------------------------------------------------------
4489int __fastcall _virtual_thunk_to_android::ICameraService::_ICameraService(int a1)
4490{
4491  return android::ICameraService::_ICameraService(a1 + *(_DWORD *)(*(_DWORD *)a1 - 12));
4492}
4493
4494// ALL OK, 230 function(s) have been successfully decompiled