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

Commit 6061cc0a authored by Kim Zhang's avatar Kim Zhang Committed by Steve Kondik
Browse files

StagefrightRecorder: correct the flow of resuming or stopping from pause

1. resume from pause: start the writer first, to avoid frames dropped by
writer due to writer is not started, which caused mosaic frames.

2. stop from pause:  don't start writer, just start encoders and sources,
to avoid unwanted frames are written into clips when stopping in
paused state.

3. recover the pause(dropping frames) in MPEG4Writer.

Change-Id: I4f8f275bce6ac7bc3d4f31f372cc86b362b6c587
CRs-Fixed: 695750 695745
parent c55bf95a
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -818,14 +818,20 @@ status_t StagefrightRecorder::start() {
    CHECK_GE(mOutputFd, 0);

    if (mRecPaused == true) {
        status_t err = setSourcePause(false);
        status_t err = mWriter->start();
        if (err != OK) {
            ALOGE("Writer start in StagefrightRecorder pause failed");
            return err;
        }

        err = setSourcePause(false);
        if (err != OK) {
            ALOGE("Source start after pause failed");
            return err;
        }

        mRecPaused = false;
        return mWriter->start();
        return OK;
    }
    // Get UID here for permission checking
    mClientUid = IPCThreadState::self()->getCallingUid();
@@ -1868,12 +1874,6 @@ status_t StagefrightRecorder::stop() {
    }

    if (mRecPaused) {
        err = mWriter->start();
        if (err != OK) {
            ALOGE("Writer start in StagefrightRecorder stop failed");
            return err;
        }

        err = setSourcePause(false);
        if (err != OK) {
            ALOGE("Source start after pause in StagefrightRecorder stop failed");
+3 −5
Original line number Diff line number Diff line
@@ -2130,16 +2130,14 @@ status_t MPEG4Writer::Track::threadEntry() {
            continue;
        }

        // Do not drop encoded frames as we run the risk of dropping a key
        // frame. We do not need to drop output frames as the source is expected
        // to drop inputs when paused.
#if 0
        // If the codec specific data has not been received yet, delay pause.
        // After the codec specific data is received, discard what we received
        // when the track is to be paused.
        if (mPaused && !mResumed) {
            buffer->release();
            buffer = NULL;
            continue;
        }
#endif

        ++count;