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

Commit 0d74990c authored by Domi Papoi's avatar Domi Papoi Committed by Linux Build Service Account
Browse files

TvInputHal: Fix bug in first frame captured function

Fix app start with valid surface.
Fix crash when app exits.

firstFrameCapturedFromNative incorrectly used
EVENT_STREAM_CONFIGURATION_CHANGED instead of
EVENT_FIRST_FRAME_CAPTURED.
Thread start after set surface in addOrUpdateStream().
Change order of surface clear in remove stream.

Change-Id: I213ac61833f06d62e89bdcb78af9e40e672eeb94
parent 7b0301f8
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -146,7 +146,7 @@ final class TvInputHal implements Handler.Callback {

    private void firstFrameCapturedFromNative(int deviceId, int streamId) {
        mHandler.sendMessage(
                mHandler.obtainMessage(EVENT_STREAM_CONFIGURATION_CHANGED, deviceId, streamId));
                mHandler.obtainMessage(EVENT_FIRST_FRAME_CAPTURED, deviceId, streamId));
    }

    // Handler.Callback implementation
+17 −8
Original line number Diff line number Diff line
@@ -391,7 +391,15 @@ int JTvInputHal::addOrUpdateStream(int deviceId, int streamId, const sp<Surface>
                connection.mThread->shutdown();
            }
            connection.mThread = new BufferProducerThread(mDevice, deviceId, &stream);
            connection.mThread->run();
            if (connection.mThread == NULL) {
                ALOGE("No memory for BufferProducerThread");

                // clean up
                if (mDevice->close_stream(mDevice, deviceId, streamId) != 0) {
                    ALOGE("Couldn't remove stream");
                }
                return NO_MEMORY;
            }
        }
    }
    connection.mSurface = surface;
@@ -399,6 +407,7 @@ int JTvInputHal::addOrUpdateStream(int deviceId, int streamId, const sp<Surface>
        connection.mSurface->setSidebandStream(connection.mSourceHandle);
    } else if (connection.mStreamType == TV_STREAM_TYPE_BUFFER_PRODUCER) {
        connection.mThread->setSurface(surface);
        connection.mThread->run();
    }
    return NO_ERROR;
}
@@ -413,13 +422,6 @@ int JTvInputHal::removeStream(int deviceId, int streamId) {
        // Nothing to do
        return NO_ERROR;
    }
    if (Surface::isValid(connection.mSurface)) {
        connection.mSurface.clear();
    }
    if (connection.mSurface != NULL) {
        connection.mSurface->setSidebandStream(NULL);
        connection.mSurface.clear();
    }
    if (connection.mThread != NULL) {
        connection.mThread->shutdown();
        connection.mThread.clear();
@@ -431,6 +433,13 @@ int JTvInputHal::removeStream(int deviceId, int streamId) {
    if (connection.mSourceHandle != NULL) {
        connection.mSourceHandle.clear();
    }
    if (Surface::isValid(connection.mSurface)) {
        connection.mSurface.clear();
    }
    if (connection.mSurface != NULL) {
        connection.mSurface->setSidebandStream(NULL);
        connection.mSurface.clear();
    }
    return NO_ERROR;
}