Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a47d5dad authored by Chih-Yu Huang's avatar Chih-Yu Huang
Browse files

Remove ArcVideoBridge service from framework.

We rewrite ArcVideoBridge to HIDL. Then both ArcVideoEncoder and
ArcCodec can communicate with it.

Bug: 111683541
Test: Pass 1 CTS and check ArcCodec and ArcVideoEncoder work
Change-Id: I2febf4120d949ce5d5f4bad3401b9072b34c4456
Merged-In: I2febf4120d949ce5d5f4bad3401b9072b34c4456
(cherry picked from commit 3226871bf2d9d672d9f2e4ab6277faf5393a9dbf)
parent f5a824e8
Loading
Loading
Loading
Loading
+0 −46
Original line number Diff line number Diff line
/*
 * Copyright 2016 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef ANDROID_IARC_VIDEO_BRIDGE_H
#define ANDROID_IARC_VIDEO_BRIDGE_H

#include <arc/MojoBootstrapResult.h>
#include <binder/IInterface.h>
#include <utils/Errors.h>

namespace android {

class IArcVideoBridge : public IInterface {
public:
    DECLARE_META_INTERFACE(ArcVideoBridge);

    // Returns MojoBootstrapResult for creating mojo ipc channel of
    // VideoAcceleratorFactory.
    virtual ::arc::MojoBootstrapResult bootstrapVideoAcceleratorFactory() = 0;

    // Get the version of the remote VideoHost on Chromium side.
    virtual int32_t hostVersion() = 0;
};

class BnArcVideoBridge : public BnInterface<IArcVideoBridge> {
public:
    virtual status_t onTransact(
            uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags = 0);
};

};  // namespace android

#endif // ANDROID_IARC_VIDEO_BRIDGE_H
+0 −28
Original line number Diff line number Diff line
cc_library_shared {
    name: "libarcvideobridge",
    product_variables: {
        arc: {
            srcs: [
                "IArcVideoBridge.cpp",
            ],
            shared_libs: [
                "libarcbridge",
                "libarcbridgeservice",
                "libbinder",
                "libchrome",
                "liblog",
                "libmojo",
                "libutils",
            ],
            cflags: [
                "-Wall",
                "-Werror",
                "-Wunused",
                "-Wunreachable-code",
            ],
            include_dirs: [
                "frameworks/native/include/media/arcvideobridge",
            ]
        }
    }
}
+0 −86
Original line number Diff line number Diff line
/*
 * Copyright 2016 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#define LOG_TAG "IArcVideoBridge"
//#define LOG_NDEBUG 0

#include <stdint.h>
#include <sys/types.h>

#include "IArcVideoBridge.h"
#include <binder/Parcel.h>
#include <utils/Log.h>

namespace android {

enum {
    BOOTSTRAP_VIDEO_ACCELERATOR_FACTORY = IBinder::FIRST_CALL_TRANSACTION,
    HOST_VERSION,
};

class BpArcVideoBridge : public BpInterface<IArcVideoBridge> {
public:
    BpArcVideoBridge(const sp<IBinder>& impl) : BpInterface<IArcVideoBridge>(impl) { }

    virtual ::arc::MojoBootstrapResult bootstrapVideoAcceleratorFactory() {
        Parcel data, reply;
        ALOGV("bootstrapVideoAcceleratorFactory");
        data.writeInterfaceToken(IArcVideoBridge::getInterfaceDescriptor());
        status_t status = remote()->transact(
                BOOTSTRAP_VIDEO_ACCELERATOR_FACTORY, data, &reply, 0);
        if (status != 0) {
            ALOGE("transact failed: %d", status);
            return arc::MojoBootstrapResult();
        }
        return arc::MojoBootstrapResult::createFromParcel(reply);
    }

    virtual int32_t hostVersion() {
        Parcel data, reply;
        ALOGV("hostVersion");
        data.writeInterfaceToken(IArcVideoBridge::getInterfaceDescriptor());
        status_t status = remote()->transact(HOST_VERSION, data, &reply, 0);
        if (status != 0) {
            ALOGE("transact failed: %d", status);
            return false;
        }
        return reply.readInt32();
    }
};

IMPLEMENT_META_INTERFACE(ArcVideoBridge, "android.os.IArcVideoBridge");

status_t BnArcVideoBridge::onTransact(
        uint32_t code, const Parcel &data, Parcel *reply, uint32_t flags) {
    switch(code) {
        case BOOTSTRAP_VIDEO_ACCELERATOR_FACTORY: {
            ALOGV("BOOTSTRAP_VIDEO_ACCELERATOR_FACTORY");
            CHECK_INTERFACE(IArcVideoBridge, data, reply);
            arc::MojoBootstrapResult result = bootstrapVideoAcceleratorFactory();
            return result.writeToParcel(reply);
        }
        case HOST_VERSION: {
            ALOGV("HOST_VERSION");
            CHECK_INTERFACE(IArcVideoBridge, data, reply);
            reply->writeInt32(hostVersion());
            return OK;
        }
        default:
            return BBinder::onTransact(code, data, reply, flags);
    }
}

}  // namespace android