Pipe through featureId from context to Camera code

Bug: 136595429
Test: atest CtsAppOpsTestCases (now including two new test cases that
          open a camera with a null and a non-null feature)
Change-Id: Idfb8f8049dff536525d4f081151c79d980d76c69
gugelfrei
Philip P. Moltmann 5 years ago
parent f1a584a44c
commit 9e648f6d57

@ -87,6 +87,7 @@ interface ICameraService
ICameraDeviceUser connectDevice(ICameraDeviceCallbacks callbacks, ICameraDeviceUser connectDevice(ICameraDeviceCallbacks callbacks,
String cameraId, String cameraId,
String opPackageName, String opPackageName,
@nullable String featureId,
int clientUid); int clientUid);
/** /**

@ -517,7 +517,7 @@ ACameraManager::openCamera(
// No way to get package name from native. // No way to get package name from native.
// Send a zero length package name and let camera service figure it out from UID // Send a zero length package name and let camera service figure it out from UID
binder::Status serviceRet = cs->connectDevice( binder::Status serviceRet = cs->connectDevice(
callbacks, String16(cameraId), String16(""), callbacks, String16(cameraId), String16(""), std::unique_ptr<String16>(),
hardware::ICameraService::USE_CALLING_UID, /*out*/&deviceRemote); hardware::ICameraService::USE_CALLING_UID, /*out*/&deviceRemote);
if (!serviceRet.isOk()) { if (!serviceRet.isOk()) {

@ -361,7 +361,8 @@ TEST(CameraServiceBinderTest, CheckBinderCameraService) {
sp<TestCameraDeviceCallbacks> callbacks(new TestCameraDeviceCallbacks()); sp<TestCameraDeviceCallbacks> callbacks(new TestCameraDeviceCallbacks());
sp<hardware::camera2::ICameraDeviceUser> device; sp<hardware::camera2::ICameraDeviceUser> device;
res = service->connectDevice(callbacks, cameraId, String16("meeeeeeeee!"), res = service->connectDevice(callbacks, cameraId, String16("meeeeeeeee!"),
hardware::ICameraService::USE_CALLING_UID, /*out*/&device); std::unique_ptr<String16>(), hardware::ICameraService::USE_CALLING_UID,
/*out*/&device);
EXPECT_TRUE(res.isOk()) << res; EXPECT_TRUE(res.isOk()) << res;
ASSERT_NE(nullptr, device.get()); ASSERT_NE(nullptr, device.get());
device->disconnect(); device->disconnect();
@ -403,7 +404,8 @@ protected:
{ {
SCOPED_TRACE("openNewDevice"); SCOPED_TRACE("openNewDevice");
binder::Status res = service->connectDevice(callbacks, deviceId, String16("meeeeeeeee!"), binder::Status res = service->connectDevice(callbacks, deviceId, String16("meeeeeeeee!"),
hardware::ICameraService::USE_CALLING_UID, /*out*/&device); std::unique_ptr<String16>(), hardware::ICameraService::USE_CALLING_UID,
/*out*/&device);
EXPECT_TRUE(res.isOk()) << res; EXPECT_TRUE(res.isOk()) << res;
} }
auto p = std::make_pair(callbacks, device); auto p = std::make_pair(callbacks, device);

@ -732,9 +732,10 @@ Status CameraService::filterGetInfoErrorCode(status_t err) {
} }
Status CameraService::makeClient(const sp<CameraService>& cameraService, Status CameraService::makeClient(const sp<CameraService>& cameraService,
const sp<IInterface>& cameraCb, const String16& packageName, const String8& cameraId, const sp<IInterface>& cameraCb, const String16& packageName,
int api1CameraId, int facing, int clientPid, uid_t clientUid, int servicePid, const std::unique_ptr<String16>& featureId, const String8& cameraId, int api1CameraId,
int halVersion, int deviceVersion, apiLevel effectiveApiLevel, int facing, int clientPid, uid_t clientUid, int servicePid, int halVersion,
int deviceVersion, apiLevel effectiveApiLevel,
/*out*/sp<BasicClient>* client) { /*out*/sp<BasicClient>* client) {
if (halVersion < 0 || halVersion == deviceVersion) { if (halVersion < 0 || halVersion == deviceVersion) {
@ -744,7 +745,7 @@ Status CameraService::makeClient(const sp<CameraService>& cameraService,
case CAMERA_DEVICE_API_VERSION_1_0: case CAMERA_DEVICE_API_VERSION_1_0:
if (effectiveApiLevel == API_1) { // Camera1 API route if (effectiveApiLevel == API_1) { // Camera1 API route
sp<ICameraClient> tmp = static_cast<ICameraClient*>(cameraCb.get()); sp<ICameraClient> tmp = static_cast<ICameraClient*>(cameraCb.get());
*client = new CameraClient(cameraService, tmp, packageName, *client = new CameraClient(cameraService, tmp, packageName, featureId,
api1CameraId, facing, clientPid, clientUid, api1CameraId, facing, clientPid, clientUid,
getpid()); getpid());
} else { // Camera2 API route } else { // Camera2 API route
@ -762,15 +763,15 @@ Status CameraService::makeClient(const sp<CameraService>& cameraService,
case CAMERA_DEVICE_API_VERSION_3_5: case CAMERA_DEVICE_API_VERSION_3_5:
if (effectiveApiLevel == API_1) { // Camera1 API route if (effectiveApiLevel == API_1) { // Camera1 API route
sp<ICameraClient> tmp = static_cast<ICameraClient*>(cameraCb.get()); sp<ICameraClient> tmp = static_cast<ICameraClient*>(cameraCb.get());
*client = new Camera2Client(cameraService, tmp, packageName, *client = new Camera2Client(cameraService, tmp, packageName, featureId,
cameraId, api1CameraId, cameraId, api1CameraId,
facing, clientPid, clientUid, facing, clientPid, clientUid,
servicePid); servicePid);
} else { // Camera2 API route } else { // Camera2 API route
sp<hardware::camera2::ICameraDeviceCallbacks> tmp = sp<hardware::camera2::ICameraDeviceCallbacks> tmp =
static_cast<hardware::camera2::ICameraDeviceCallbacks*>(cameraCb.get()); static_cast<hardware::camera2::ICameraDeviceCallbacks*>(cameraCb.get());
*client = new CameraDeviceClient(cameraService, tmp, packageName, cameraId, *client = new CameraDeviceClient(cameraService, tmp, packageName, featureId,
facing, clientPid, clientUid, servicePid); cameraId, facing, clientPid, clientUid, servicePid);
} }
break; break;
default: default:
@ -787,7 +788,7 @@ Status CameraService::makeClient(const sp<CameraService>& cameraService,
halVersion == CAMERA_DEVICE_API_VERSION_1_0) { halVersion == CAMERA_DEVICE_API_VERSION_1_0) {
// Only support higher HAL version device opened as HAL1.0 device. // Only support higher HAL version device opened as HAL1.0 device.
sp<ICameraClient> tmp = static_cast<ICameraClient*>(cameraCb.get()); sp<ICameraClient> tmp = static_cast<ICameraClient*>(cameraCb.get());
*client = new CameraClient(cameraService, tmp, packageName, *client = new CameraClient(cameraService, tmp, packageName, featureId,
api1CameraId, facing, clientPid, clientUid, api1CameraId, facing, clientPid, clientUid,
servicePid); servicePid);
} else { } else {
@ -887,7 +888,7 @@ Status CameraService::initializeShimMetadata(int cameraId) {
if (!(ret = connectHelper<ICameraClient,Client>( if (!(ret = connectHelper<ICameraClient,Client>(
sp<ICameraClient>{nullptr}, id, cameraId, sp<ICameraClient>{nullptr}, id, cameraId,
static_cast<int>(CAMERA_HAL_API_VERSION_UNSPECIFIED), static_cast<int>(CAMERA_HAL_API_VERSION_UNSPECIFIED),
internalPackageName, uid, USE_CALLING_PID, internalPackageName, std::unique_ptr<String16>(), uid, USE_CALLING_PID,
API_1, /*shimUpdateOnly*/ true, /*out*/ tmp) API_1, /*shimUpdateOnly*/ true, /*out*/ tmp)
).isOk()) { ).isOk()) {
ALOGE("%s: Error initializing shim metadata: %s", __FUNCTION__, ret.toString8().string()); ALOGE("%s: Error initializing shim metadata: %s", __FUNCTION__, ret.toString8().string());
@ -1400,8 +1401,8 @@ Status CameraService::connect(
String8 id = cameraIdIntToStr(api1CameraId); String8 id = cameraIdIntToStr(api1CameraId);
sp<Client> client = nullptr; sp<Client> client = nullptr;
ret = connectHelper<ICameraClient,Client>(cameraClient, id, api1CameraId, ret = connectHelper<ICameraClient,Client>(cameraClient, id, api1CameraId,
CAMERA_HAL_API_VERSION_UNSPECIFIED, clientPackageName, clientUid, clientPid, API_1, CAMERA_HAL_API_VERSION_UNSPECIFIED, clientPackageName, std::unique_ptr<String16>(),
/*shimUpdateOnly*/ false, /*out*/client); clientUid, clientPid, API_1, /*shimUpdateOnly*/ false, /*out*/client);
if(!ret.isOk()) { if(!ret.isOk()) {
logRejected(id, CameraThreadState::getCallingPid(), String8(clientPackageName), logRejected(id, CameraThreadState::getCallingPid(), String8(clientPackageName),
@ -1427,8 +1428,8 @@ Status CameraService::connectLegacy(
Status ret = Status::ok(); Status ret = Status::ok();
sp<Client> client = nullptr; sp<Client> client = nullptr;
ret = connectHelper<ICameraClient,Client>(cameraClient, id, api1CameraId, halVersion, ret = connectHelper<ICameraClient,Client>(cameraClient, id, api1CameraId, halVersion,
clientPackageName, clientUid, USE_CALLING_PID, API_1, /*shimUpdateOnly*/ false, clientPackageName, std::unique_ptr<String16>(), clientUid, USE_CALLING_PID, API_1,
/*out*/client); /*shimUpdateOnly*/ false, /*out*/client);
if(!ret.isOk()) { if(!ret.isOk()) {
logRejected(id, CameraThreadState::getCallingPid(), String8(clientPackageName), logRejected(id, CameraThreadState::getCallingPid(), String8(clientPackageName),
@ -1502,6 +1503,7 @@ Status CameraService::connectDevice(
const sp<hardware::camera2::ICameraDeviceCallbacks>& cameraCb, const sp<hardware::camera2::ICameraDeviceCallbacks>& cameraCb,
const String16& cameraId, const String16& cameraId,
const String16& clientPackageName, const String16& clientPackageName,
const std::unique_ptr<String16>& clientFeatureId,
int clientUid, int clientUid,
/*out*/ /*out*/
sp<hardware::camera2::ICameraDeviceUser>* device) { sp<hardware::camera2::ICameraDeviceUser>* device) {
@ -1511,6 +1513,7 @@ Status CameraService::connectDevice(
String8 id = String8(cameraId); String8 id = String8(cameraId);
sp<CameraDeviceClient> client = nullptr; sp<CameraDeviceClient> client = nullptr;
String16 clientPackageNameAdj = clientPackageName; String16 clientPackageNameAdj = clientPackageName;
if (hardware::IPCThreadState::self()->isServingCall()) { if (hardware::IPCThreadState::self()->isServingCall()) {
std::string vendorClient = std::string vendorClient =
StringPrintf("vendor.client.pid<%d>", CameraThreadState::getCallingPid()); StringPrintf("vendor.client.pid<%d>", CameraThreadState::getCallingPid());
@ -1518,7 +1521,7 @@ Status CameraService::connectDevice(
} }
ret = connectHelper<hardware::camera2::ICameraDeviceCallbacks,CameraDeviceClient>(cameraCb, id, ret = connectHelper<hardware::camera2::ICameraDeviceCallbacks,CameraDeviceClient>(cameraCb, id,
/*api1CameraId*/-1, /*api1CameraId*/-1,
CAMERA_HAL_API_VERSION_UNSPECIFIED, clientPackageNameAdj, CAMERA_HAL_API_VERSION_UNSPECIFIED, clientPackageNameAdj, clientFeatureId,
clientUid, USE_CALLING_PID, API_2, /*shimUpdateOnly*/ false, /*out*/client); clientUid, USE_CALLING_PID, API_2, /*shimUpdateOnly*/ false, /*out*/client);
if(!ret.isOk()) { if(!ret.isOk()) {
@ -1533,8 +1536,9 @@ Status CameraService::connectDevice(
template<class CALLBACK, class CLIENT> template<class CALLBACK, class CLIENT>
Status CameraService::connectHelper(const sp<CALLBACK>& cameraCb, const String8& cameraId, Status CameraService::connectHelper(const sp<CALLBACK>& cameraCb, const String8& cameraId,
int api1CameraId, int halVersion, const String16& clientPackageName, int clientUid, int api1CameraId, int halVersion, const String16& clientPackageName,
int clientPid, apiLevel effectiveApiLevel, bool shimUpdateOnly, const std::unique_ptr<String16>& clientFeatureId, int clientUid, int clientPid,
apiLevel effectiveApiLevel, bool shimUpdateOnly,
/*out*/sp<CLIENT>& device) { /*out*/sp<CLIENT>& device) {
binder::Status ret = binder::Status::ok(); binder::Status ret = binder::Status::ok();
@ -1617,7 +1621,7 @@ Status CameraService::connectHelper(const sp<CALLBACK>& cameraCb, const String8&
} }
sp<BasicClient> tmp = nullptr; sp<BasicClient> tmp = nullptr;
if(!(ret = makeClient(this, cameraCb, clientPackageName, if(!(ret = makeClient(this, cameraCb, clientPackageName, clientFeatureId,
cameraId, api1CameraId, facing, cameraId, api1CameraId, facing,
clientPid, clientUid, getpid(), clientPid, clientUid, getpid(),
halVersion, deviceVersion, effectiveApiLevel, halVersion, deviceVersion, effectiveApiLevel,
@ -2459,13 +2463,14 @@ void CameraService::playSound(sound_kind kind) {
CameraService::Client::Client(const sp<CameraService>& cameraService, CameraService::Client::Client(const sp<CameraService>& cameraService,
const sp<ICameraClient>& cameraClient, const sp<ICameraClient>& cameraClient,
const String16& clientPackageName, const String16& clientPackageName,
const std::unique_ptr<String16>& clientFeatureId,
const String8& cameraIdStr, const String8& cameraIdStr,
int api1CameraId, int cameraFacing, int api1CameraId, int cameraFacing,
int clientPid, uid_t clientUid, int clientPid, uid_t clientUid,
int servicePid) : int servicePid) :
CameraService::BasicClient(cameraService, CameraService::BasicClient(cameraService,
IInterface::asBinder(cameraClient), IInterface::asBinder(cameraClient),
clientPackageName, clientPackageName, clientFeatureId,
cameraIdStr, cameraFacing, cameraIdStr, cameraFacing,
clientPid, clientUid, clientPid, clientUid,
servicePid), servicePid),
@ -2495,17 +2500,24 @@ sp<CameraService> CameraService::BasicClient::BasicClient::sCameraService;
CameraService::BasicClient::BasicClient(const sp<CameraService>& cameraService, CameraService::BasicClient::BasicClient(const sp<CameraService>& cameraService,
const sp<IBinder>& remoteCallback, const sp<IBinder>& remoteCallback,
const String16& clientPackageName, const String16& clientPackageName, const std::unique_ptr<String16>& clientFeatureId,
const String8& cameraIdStr, int cameraFacing, const String8& cameraIdStr, int cameraFacing,
int clientPid, uid_t clientUid, int clientPid, uid_t clientUid,
int servicePid): int servicePid):
mCameraIdStr(cameraIdStr), mCameraFacing(cameraFacing), mCameraIdStr(cameraIdStr), mCameraFacing(cameraFacing),
mClientPackageName(clientPackageName), mClientPid(clientPid), mClientUid(clientUid), mClientPackageName(clientPackageName),
mClientPid(clientPid), mClientUid(clientUid),
mServicePid(servicePid), mServicePid(servicePid),
mDisconnected(false), mDisconnected(false),
mAudioRestriction(hardware::camera2::ICameraDeviceUser::AUDIO_RESTRICTION_NONE), mAudioRestriction(hardware::camera2::ICameraDeviceUser::AUDIO_RESTRICTION_NONE),
mRemoteBinder(remoteCallback) mRemoteBinder(remoteCallback)
{ {
if (clientFeatureId) {
mClientFeatureId = std::unique_ptr<String16>(new String16(*clientFeatureId));
} else {
mClientFeatureId = std::unique_ptr<String16>();
}
if (sCameraService == nullptr) { if (sCameraService == nullptr) {
sCameraService = cameraService; sCameraService = cameraService;
} }
@ -2649,8 +2661,9 @@ status_t CameraService::BasicClient::startCameraOps() {
int32_t res; int32_t res;
mAppOpsManager->startWatchingMode(AppOpsManager::OP_CAMERA, mAppOpsManager->startWatchingMode(AppOpsManager::OP_CAMERA,
mClientPackageName, mOpsCallback); mClientPackageName, mOpsCallback);
res = mAppOpsManager->startOpNoThrow(AppOpsManager::OP_CAMERA, res = mAppOpsManager->startOpNoThrow(AppOpsManager::OP_CAMERA, mClientUid,
mClientUid, mClientPackageName, /*startIfModeDefault*/ false); mClientPackageName, /*startIfModeDefault*/ false, mClientFeatureId,
String16("start camera ") + String16(mCameraIdStr));
if (res == AppOpsManager::MODE_ERRORED) { if (res == AppOpsManager::MODE_ERRORED) {
ALOGI("Camera %s: Access for \"%s\" has been revoked", ALOGI("Camera %s: Access for \"%s\" has been revoked",
@ -2692,7 +2705,7 @@ status_t CameraService::BasicClient::finishCameraOps() {
// Notify app ops that the camera is available again // Notify app ops that the camera is available again
if (mAppOpsManager != nullptr) { if (mAppOpsManager != nullptr) {
mAppOpsManager->finishOp(AppOpsManager::OP_CAMERA, mClientUid, mAppOpsManager->finishOp(AppOpsManager::OP_CAMERA, mClientUid,
mClientPackageName); mClientPackageName, mClientFeatureId);
mOpsActive = false; mOpsActive = false;
} }
// This function is called when a client disconnects. This should // This function is called when a client disconnects. This should

@ -134,7 +134,8 @@ public:
virtual binder::Status connectDevice( virtual binder::Status connectDevice(
const sp<hardware::camera2::ICameraDeviceCallbacks>& cameraCb, const String16& cameraId, const sp<hardware::camera2::ICameraDeviceCallbacks>& cameraCb, const String16& cameraId,
const String16& clientPackageName, int32_t clientUid, const String16& clientPackageName, const std::unique_ptr<String16>& clientFeatureId,
int32_t clientUid,
/*out*/ /*out*/
sp<hardware::camera2::ICameraDeviceUser>* device); sp<hardware::camera2::ICameraDeviceUser>* device);
@ -275,6 +276,7 @@ public:
BasicClient(const sp<CameraService>& cameraService, BasicClient(const sp<CameraService>& cameraService,
const sp<IBinder>& remoteCallback, const sp<IBinder>& remoteCallback,
const String16& clientPackageName, const String16& clientPackageName,
const std::unique_ptr<String16>& clientFeatureId,
const String8& cameraIdStr, const String8& cameraIdStr,
int cameraFacing, int cameraFacing,
int clientPid, int clientPid,
@ -294,6 +296,7 @@ public:
const String8 mCameraIdStr; const String8 mCameraIdStr;
const int mCameraFacing; const int mCameraFacing;
String16 mClientPackageName; String16 mClientPackageName;
std::unique_ptr<String16> mClientFeatureId;
pid_t mClientPid; pid_t mClientPid;
const uid_t mClientUid; const uid_t mClientUid;
const pid_t mServicePid; const pid_t mServicePid;
@ -365,6 +368,7 @@ public:
Client(const sp<CameraService>& cameraService, Client(const sp<CameraService>& cameraService,
const sp<hardware::ICameraClient>& cameraClient, const sp<hardware::ICameraClient>& cameraClient,
const String16& clientPackageName, const String16& clientPackageName,
const std::unique_ptr<String16>& clientFeatureId,
const String8& cameraIdStr, const String8& cameraIdStr,
int api1CameraId, int api1CameraId,
int cameraFacing, int cameraFacing,
@ -688,8 +692,8 @@ private:
template<class CALLBACK, class CLIENT> template<class CALLBACK, class CLIENT>
binder::Status connectHelper(const sp<CALLBACK>& cameraCb, const String8& cameraId, binder::Status connectHelper(const sp<CALLBACK>& cameraCb, const String8& cameraId,
int api1CameraId, int halVersion, const String16& clientPackageName, int api1CameraId, int halVersion, const String16& clientPackageName,
int clientUid, int clientPid, apiLevel effectiveApiLevel, bool shimUpdateOnly, const std::unique_ptr<String16>& clientFeatureId, int clientUid, int clientPid,
/*out*/sp<CLIENT>& device); apiLevel effectiveApiLevel, bool shimUpdateOnly, /*out*/sp<CLIENT>& device);
// Lock guarding camera service state // Lock guarding camera service state
Mutex mServiceLock; Mutex mServiceLock;
@ -985,9 +989,10 @@ private:
static String8 getFormattedCurrentTime(); static String8 getFormattedCurrentTime();
static binder::Status makeClient(const sp<CameraService>& cameraService, static binder::Status makeClient(const sp<CameraService>& cameraService,
const sp<IInterface>& cameraCb, const String16& packageName, const String8& cameraId, const sp<IInterface>& cameraCb, const String16& packageName,
int api1CameraId, int facing, int clientPid, uid_t clientUid, int servicePid, const std::unique_ptr<String16>& featureId, const String8& cameraId, int api1CameraId,
int halVersion, int deviceVersion, apiLevel effectiveApiLevel, int facing, int clientPid, uid_t clientUid, int servicePid, int halVersion,
int deviceVersion, apiLevel effectiveApiLevel,
/*out*/sp<BasicClient>* client); /*out*/sp<BasicClient>* client);
status_t checkCameraAccess(const String16& opPackageName); status_t checkCameraAccess(const String16& opPackageName);

@ -50,13 +50,14 @@ using namespace camera2;
Camera2Client::Camera2Client(const sp<CameraService>& cameraService, Camera2Client::Camera2Client(const sp<CameraService>& cameraService,
const sp<hardware::ICameraClient>& cameraClient, const sp<hardware::ICameraClient>& cameraClient,
const String16& clientPackageName, const String16& clientPackageName,
const std::unique_ptr<String16>& clientFeatureId,
const String8& cameraDeviceId, const String8& cameraDeviceId,
int api1CameraId, int api1CameraId,
int cameraFacing, int cameraFacing,
int clientPid, int clientPid,
uid_t clientUid, uid_t clientUid,
int servicePid): int servicePid):
Camera2ClientBase(cameraService, cameraClient, clientPackageName, Camera2ClientBase(cameraService, cameraClient, clientPackageName, clientFeatureId,
cameraDeviceId, api1CameraId, cameraFacing, cameraDeviceId, api1CameraId, cameraFacing,
clientPid, clientUid, servicePid), clientPid, clientUid, servicePid),
mParameters(api1CameraId, cameraFacing) mParameters(api1CameraId, cameraFacing)

@ -93,6 +93,7 @@ public:
Camera2Client(const sp<CameraService>& cameraService, Camera2Client(const sp<CameraService>& cameraService,
const sp<hardware::ICameraClient>& cameraClient, const sp<hardware::ICameraClient>& cameraClient,
const String16& clientPackageName, const String16& clientPackageName,
const std::unique_ptr<String16>& clientFeatureId,
const String8& cameraDeviceId, const String8& cameraDeviceId,
int api1CameraId, int api1CameraId,
int cameraFacing, int cameraFacing,

@ -34,11 +34,11 @@ namespace android {
CameraClient::CameraClient(const sp<CameraService>& cameraService, CameraClient::CameraClient(const sp<CameraService>& cameraService,
const sp<hardware::ICameraClient>& cameraClient, const sp<hardware::ICameraClient>& cameraClient,
const String16& clientPackageName, const String16& clientPackageName, const std::unique_ptr<String16>& clientFeatureId,
int cameraId, int cameraFacing, int cameraId, int cameraFacing,
int clientPid, int clientUid, int clientPid, int clientUid,
int servicePid): int servicePid):
Client(cameraService, cameraClient, clientPackageName, Client(cameraService, cameraClient, clientPackageName, clientFeatureId,
String8::format("%d", cameraId), cameraId, cameraFacing, clientPid, String8::format("%d", cameraId), cameraId, cameraFacing, clientPid,
clientUid, servicePid) clientUid, servicePid)
{ {

@ -66,6 +66,7 @@ public:
CameraClient(const sp<CameraService>& cameraService, CameraClient(const sp<CameraService>& cameraService,
const sp<hardware::ICameraClient>& cameraClient, const sp<hardware::ICameraClient>& cameraClient,
const String16& clientPackageName, const String16& clientPackageName,
const std::unique_ptr<String16>& clientFeatureId,
int cameraId, int cameraId,
int cameraFacing, int cameraFacing,
int clientPid, int clientPid,

@ -54,6 +54,7 @@ CameraDeviceClientBase::CameraDeviceClientBase(
const sp<CameraService>& cameraService, const sp<CameraService>& cameraService,
const sp<hardware::camera2::ICameraDeviceCallbacks>& remoteCallback, const sp<hardware::camera2::ICameraDeviceCallbacks>& remoteCallback,
const String16& clientPackageName, const String16& clientPackageName,
const std::unique_ptr<String16>& clientFeatureId,
const String8& cameraId, const String8& cameraId,
int api1CameraId, int api1CameraId,
int cameraFacing, int cameraFacing,
@ -63,6 +64,7 @@ CameraDeviceClientBase::CameraDeviceClientBase(
BasicClient(cameraService, BasicClient(cameraService,
IInterface::asBinder(remoteCallback), IInterface::asBinder(remoteCallback),
clientPackageName, clientPackageName,
clientFeatureId,
cameraId, cameraId,
cameraFacing, cameraFacing,
clientPid, clientPid,
@ -78,12 +80,13 @@ CameraDeviceClientBase::CameraDeviceClientBase(
CameraDeviceClient::CameraDeviceClient(const sp<CameraService>& cameraService, CameraDeviceClient::CameraDeviceClient(const sp<CameraService>& cameraService,
const sp<hardware::camera2::ICameraDeviceCallbacks>& remoteCallback, const sp<hardware::camera2::ICameraDeviceCallbacks>& remoteCallback,
const String16& clientPackageName, const String16& clientPackageName,
const std::unique_ptr<String16>& clientFeatureId,
const String8& cameraId, const String8& cameraId,
int cameraFacing, int cameraFacing,
int clientPid, int clientPid,
uid_t clientUid, uid_t clientUid,
int servicePid) : int servicePid) :
Camera2ClientBase(cameraService, remoteCallback, clientPackageName, Camera2ClientBase(cameraService, remoteCallback, clientPackageName, clientFeatureId,
cameraId, /*API1 camera ID*/ -1, cameraId, /*API1 camera ID*/ -1,
cameraFacing, clientPid, clientUid, servicePid), cameraFacing, clientPid, clientUid, servicePid),
mInputStream(), mInputStream(),

@ -47,6 +47,7 @@ protected:
CameraDeviceClientBase(const sp<CameraService>& cameraService, CameraDeviceClientBase(const sp<CameraService>& cameraService,
const sp<hardware::camera2::ICameraDeviceCallbacks>& remoteCallback, const sp<hardware::camera2::ICameraDeviceCallbacks>& remoteCallback,
const String16& clientPackageName, const String16& clientPackageName,
const std::unique_ptr<String16>& clientFeatureId,
const String8& cameraId, const String8& cameraId,
int api1CameraId, int api1CameraId,
int cameraFacing, int cameraFacing,
@ -163,6 +164,7 @@ public:
CameraDeviceClient(const sp<CameraService>& cameraService, CameraDeviceClient(const sp<CameraService>& cameraService,
const sp<hardware::camera2::ICameraDeviceCallbacks>& remoteCallback, const sp<hardware::camera2::ICameraDeviceCallbacks>& remoteCallback,
const String16& clientPackageName, const String16& clientPackageName,
const std::unique_ptr<String16>& clientFeatureId,
const String8& cameraId, const String8& cameraId,
int cameraFacing, int cameraFacing,
int clientPid, int clientPid,

@ -44,13 +44,14 @@ Camera2ClientBase<TClientBase>::Camera2ClientBase(
const sp<CameraService>& cameraService, const sp<CameraService>& cameraService,
const sp<TCamCallbacks>& remoteCallback, const sp<TCamCallbacks>& remoteCallback,
const String16& clientPackageName, const String16& clientPackageName,
const std::unique_ptr<String16>& clientFeatureId,
const String8& cameraId, const String8& cameraId,
int api1CameraId, int api1CameraId,
int cameraFacing, int cameraFacing,
int clientPid, int clientPid,
uid_t clientUid, uid_t clientUid,
int servicePid): int servicePid):
TClientBase(cameraService, remoteCallback, clientPackageName, TClientBase(cameraService, remoteCallback, clientPackageName, clientFeatureId,
cameraId, api1CameraId, cameraFacing, clientPid, clientUid, servicePid), cameraId, api1CameraId, cameraFacing, clientPid, clientUid, servicePid),
mSharedCameraCallbacks(remoteCallback), mSharedCameraCallbacks(remoteCallback),
mDeviceVersion(cameraService->getDeviceVersion(TClientBase::mCameraIdStr)), mDeviceVersion(cameraService->getDeviceVersion(TClientBase::mCameraIdStr)),

@ -48,6 +48,7 @@ public:
Camera2ClientBase(const sp<CameraService>& cameraService, Camera2ClientBase(const sp<CameraService>& cameraService,
const sp<TCamCallbacks>& remoteCallback, const sp<TCamCallbacks>& remoteCallback,
const String16& clientPackageName, const String16& clientPackageName,
const std::unique_ptr<String16>& clientFeatureId,
const String8& cameraId, const String8& cameraId,
int api1CameraId, int api1CameraId,
int cameraFacing, int cameraFacing,

@ -103,7 +103,7 @@ Return<void> HidlCameraService::connectDevice(const sp<HCameraDeviceCallback>& h
} }
sp<hardware::camera2::ICameraDeviceCallbacks> callbacks = hybridCallbacks; sp<hardware::camera2::ICameraDeviceCallbacks> callbacks = hybridCallbacks;
binder::Status serviceRet = mAidlICameraService->connectDevice( binder::Status serviceRet = mAidlICameraService->connectDevice(
callbacks, String16(cameraId.c_str()), String16(""), callbacks, String16(cameraId.c_str()), String16(""), std::unique_ptr<String16>(),
hardware::ICameraService::USE_CALLING_UID, /*out*/&deviceRemote); hardware::ICameraService::USE_CALLING_UID, /*out*/&deviceRemote);
HStatus status = HStatus::NO_ERROR; HStatus status = HStatus::NO_ERROR;
if (!serviceRet.isOk()) { if (!serviceRet.isOk()) {

Loading…
Cancel
Save