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

Commit 5995625a authored by Ray Essick's avatar Ray Essick Committed by Automerger Merge Worker
Browse files

Merge "Validate ndkmediacodec callback pointers before use" am: 50712a4f

Original change: https://android-review.googlesource.com/c/platform/frameworks/av/+/1919439

Change-Id: I3cba8758cee04a4ff11aa51f91969b67e7579a5a
parents 41244dc1 50712a4f
Loading
Loading
Loading
Loading
+2 −7
Original line number Diff line number Diff line
@@ -177,10 +177,6 @@ cc_library {
        "NdkMediaDataSourceCallbacks.cpp",
    ],

    include_dirs: [
        "frameworks/av/media/libstagefright/include",
        "frameworks/av/media/ndk/include",
    ],

    export_include_dirs: [
        "include",
@@ -193,6 +189,7 @@ cc_library {
    ],

    header_libs: [
        "libstagefright_headers",
        "libmedia_headers",
    ],

@@ -223,6 +220,7 @@ cc_test {
        "libcutils",
        "android.hardware.graphics.bufferqueue@1.0",
    ],

    header_libs: [
        "libstagefright_foundation_headers",
    ],
@@ -230,9 +228,6 @@ cc_test {
    cflags: [
        "-D__ANDROID_VNDK__",
    ],
    include_dirs: [
        "frameworks/av/media/ndk/",
    ],
}

cc_library_static {
+15 −15
Original line number Diff line number Diff line
@@ -158,8 +158,7 @@ void CodecHandler::onMessageReceived(const sp<AMessage> &msg) {
                     }

                     Mutex::Autolock _l(mCodec->mAsyncCallbackLock);
                     if (mCodec->mAsyncCallbackUserData != NULL
                         || mCodec->mAsyncCallback.onAsyncInputAvailable != NULL) {
                     if (mCodec->mAsyncCallback.onAsyncInputAvailable != NULL) {
                         mCodec->mAsyncCallback.onAsyncInputAvailable(
                                 mCodec,
                                 mCodec->mAsyncCallbackUserData,
@@ -205,8 +204,7 @@ void CodecHandler::onMessageReceived(const sp<AMessage> &msg) {
                         (uint32_t)flags};

                     Mutex::Autolock _l(mCodec->mAsyncCallbackLock);
                     if (mCodec->mAsyncCallbackUserData != NULL
                         || mCodec->mAsyncCallback.onAsyncOutputAvailable != NULL) {
                     if (mCodec->mAsyncCallback.onAsyncOutputAvailable != NULL) {
                         mCodec->mAsyncCallback.onAsyncOutputAvailable(
                                 mCodec,
                                 mCodec->mAsyncCallbackUserData,
@@ -234,8 +232,7 @@ void CodecHandler::onMessageReceived(const sp<AMessage> &msg) {
                     AMediaFormat *aMediaFormat = AMediaFormat_fromMsg(&copy);

                     Mutex::Autolock _l(mCodec->mAsyncCallbackLock);
                     if (mCodec->mAsyncCallbackUserData != NULL
                         || mCodec->mAsyncCallback.onAsyncFormatChanged != NULL) {
                     if (mCodec->mAsyncCallback.onAsyncFormatChanged != NULL) {
                         mCodec->mAsyncCallback.onAsyncFormatChanged(
                                 mCodec,
                                 mCodec->mAsyncCallbackUserData,
@@ -263,8 +260,7 @@ void CodecHandler::onMessageReceived(const sp<AMessage> &msg) {
                           err, actionCode, detail.c_str());

                     Mutex::Autolock _l(mCodec->mAsyncCallbackLock);
                     if (mCodec->mAsyncCallbackUserData != NULL
                         || mCodec->mAsyncCallback.onAsyncError != NULL) {
                     if (mCodec->mAsyncCallback.onAsyncError != NULL) {
                         mCodec->mAsyncCallback.onAsyncError(
                                 mCodec,
                                 mCodec->mAsyncCallbackUserData,
@@ -474,16 +470,20 @@ media_status_t AMediaCodec_setAsyncNotifyCallback(
        AMediaCodec *mData,
        AMediaCodecOnAsyncNotifyCallback callback,
        void *userdata) {
    if (mData->mAsyncNotify == NULL && userdata != NULL) {

    Mutex::Autolock _l(mData->mAsyncCallbackLock);

    if (mData->mAsyncNotify == NULL) {
        mData->mAsyncNotify = new AMessage(kWhatAsyncNotify, mData->mHandler);
    }

    // always call, codec may have been reset/re-configured since last call.
    status_t err = mData->mCodec->setCallback(mData->mAsyncNotify);
    if (err != OK) {
        ALOGE("setAsyncNotifyCallback: err(%d), failed to set async callback", err);
        return translate_error(err);
    }
    }

    Mutex::Autolock _l(mData->mAsyncCallbackLock);
    mData->mAsyncCallback = callback;
    mData->mAsyncCallbackUserData = userdata;