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

Commit 50712a4f authored by Ray Essick's avatar Ray Essick Committed by Gerrit Code Review
Browse files

Merge "Validate ndkmediacodec callback pointers before use"

parents 497bfda9 4e5af24f
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;