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

Commit d0082757 authored by Wonsik Kim's avatar Wonsik Kim
Browse files

Implement pause/resume functionality to MediaRecorder

Bug: 20092236
Change-Id: Ia0e92ff246302fd5fdef53c4f961d6645cc26a86
parent a7e3bfbf
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -53,6 +53,8 @@ public:
    virtual status_t start() = 0;
    virtual status_t stop() = 0;
    virtual status_t reset() = 0;
    virtual status_t pause() = 0;
    virtual status_t resume() = 0;
    virtual status_t init() = 0;
    virtual status_t close() = 0;
    virtual status_t release() = 0;
+2 −0
Original line number Diff line number Diff line
@@ -53,6 +53,8 @@ struct MediaRecorderBase {
    virtual status_t prepare() = 0;
    virtual status_t start() = 0;
    virtual status_t stop() = 0;
    virtual status_t pause() = 0;
    virtual status_t resume() = 0;
    virtual status_t close() = 0;
    virtual status_t reset() = 0;
    virtual status_t getMaxAmplitude(int *max) = 0;
+2 −0
Original line number Diff line number Diff line
@@ -233,6 +233,8 @@ public:
    status_t    start();
    status_t    stop();
    status_t    reset();
    status_t    pause();
    status_t    resume();
    status_t    init();
    status_t    close();
    status_t    release();
+3 −0
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@ struct MediaCodecSource : public MediaSource,

    bool isVideo() const { return mIsVideo; }
    sp<IGraphicBufferProducer> getGraphicBufferProducer();
    void setInputBufferTimeOffset(int64_t timeOffsetUs);

    // MediaSource
    virtual status_t start(MetaData *params = NULL);
@@ -75,6 +76,7 @@ private:
        kWhatStart,
        kWhatStop,
        kWhatPause,
        kWhatSetInputBufferTimeOffset,
    };

    MediaCodecSource(
@@ -117,6 +119,7 @@ private:
    List<MediaBuffer *> mInputBufferQueue;
    List<size_t> mAvailEncoderInputIndices;
    List<int64_t> mDecodingTimeQueue; // decoding time (us) for video
    int64_t mInputBufferTimeOffsetUs;

    // audio drift time
    int64_t mFirstSampleTimeUs;
+33 −1
Original line number Diff line number Diff line
@@ -54,7 +54,9 @@ enum {
    SET_PREVIEW_SURFACE,
    SET_CAMERA,
    SET_LISTENER,
    SET_CLIENT_NAME
    SET_CLIENT_NAME,
    PAUSE,
    RESUME
};

class BpMediaRecorder: public BpInterface<IMediaRecorder>
@@ -276,6 +278,24 @@ public:
        return reply.readInt32();
    }

    status_t pause()
    {
        ALOGV("pause");
        Parcel data, reply;
        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
        remote()->transact(PAUSE, data, &reply);
        return reply.readInt32();
    }

    status_t resume()
    {
        ALOGV("resume");
        Parcel data, reply;
        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
        remote()->transact(RESUME, data, &reply);
        return reply.readInt32();
    }

    status_t close()
    {
        ALOGV("close");
@@ -340,6 +360,18 @@ status_t BnMediaRecorder::onTransact(
            reply->writeInt32(start());
            return NO_ERROR;
        } break;
        case PAUSE: {
            ALOGV("PAUSE");
            CHECK_INTERFACE(IMediaRecorder, data, reply);
            reply->writeInt32(pause());
            return NO_ERROR;
        } break;
        case RESUME: {
            ALOGV("RESUME");
            CHECK_INTERFACE(IMediaRecorder, data, reply);
            reply->writeInt32(resume());
            return NO_ERROR;
        } break;
        case PREPARE: {
            ALOGV("PREPARE");
            CHECK_INTERFACE(IMediaRecorder, data, reply);
Loading