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

Commit c8d2fa70 authored by James Dong's avatar James Dong Committed by Android Git Automerger
Browse files

am cbd038fe: Merge "Make MediaWriter stop and pause return errors if necessary" into gingerbread

Merge commit 'cbd038fe' into gingerbread-plus-aosp

* commit 'cbd038fe':
  Make MediaWriter stop and pause return errors if necessary
parents a90a1e55 cbd038fe
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -37,8 +37,8 @@ struct AMRWriter : public MediaWriter {
    virtual status_t addSource(const sp<MediaSource> &source);
    virtual bool reachedEOS();
    virtual status_t start(MetaData *params = NULL);
    virtual void stop();
    virtual void pause();
    virtual status_t stop();
    virtual status_t pause();

protected:
    virtual ~AMRWriter();
@@ -57,7 +57,7 @@ private:
    int64_t mEstimatedDurationUs;

    static void *ThreadWrapper(void *);
    void threadFunc();
    status_t threadFunc();
    bool exceedsFileSizeLimit();
    bool exceedsFileDurationLimit();

+2 −2
Original line number Diff line number Diff line
@@ -37,9 +37,9 @@ public:

    virtual status_t addSource(const sp<MediaSource> &source);
    virtual status_t start(MetaData *param = NULL);
    virtual status_t stop();
    virtual status_t pause();
    virtual bool reachedEOS();
    virtual void stop();
    virtual void pause();

    void beginBox(const char *fourcc);
    void writeInt8(int8_t x);
+3 −2
Original line number Diff line number Diff line
@@ -35,8 +35,9 @@ struct MediaWriter : public RefBase {
    virtual status_t addSource(const sp<MediaSource> &source) = 0;
    virtual bool reachedEOS() = 0;
    virtual status_t start(MetaData *params = NULL) = 0;
    virtual void stop() = 0;
    virtual void pause() = 0;
    virtual status_t stop() = 0;
    virtual status_t pause() = 0;

    virtual void setMaxFileSize(int64_t bytes) { mMaxFileSizeLimitBytes = bytes; }
    virtual void setMaxFileDuration(int64_t durationUs) { mMaxFileDurationLimitUs = durationUs; }
    virtual void setListener(const sp<IMediaRecorderClient>& listener) {
+3 −2
Original line number Diff line number Diff line
@@ -1067,8 +1067,9 @@ status_t StagefrightRecorder::pause() {

status_t StagefrightRecorder::stop() {
    LOGV("stop");
    status_t err = OK;
    if (mWriter != NULL) {
        mWriter->stop();
        err = mWriter->stop();
        mWriter.clear();
    }

@@ -1090,7 +1091,7 @@ status_t StagefrightRecorder::stop() {
        mOutputFd = -1;
    }

    return OK;
    return err;
}

status_t StagefrightRecorder::close() {
+22 −10
Original line number Diff line number Diff line
@@ -136,16 +136,17 @@ status_t AMRWriter::start(MetaData *params) {
    return OK;
}

void AMRWriter::pause() {
status_t AMRWriter::pause() {
    if (!mStarted) {
        return;
        return OK;
    }
    mPaused = true;
    return OK;
}

void AMRWriter::stop() {
status_t AMRWriter::stop() {
    if (!mStarted) {
        return;
        return OK;
    }

    mDone = true;
@@ -153,9 +154,17 @@ void AMRWriter::stop() {
    void *dummy;
    pthread_join(mThread, &dummy);

    mSource->stop();
    status_t err = (status_t) dummy;
    {
        status_t status = mSource->stop();
        if (err == OK &&
            (status != OK && status != ERROR_END_OF_STREAM)) {
            err = status;
        }
    }

    mStarted = false;
    return err;
}

bool AMRWriter::exceedsFileSizeLimit() {
@@ -174,21 +183,20 @@ bool AMRWriter::exceedsFileDurationLimit() {

// static
void *AMRWriter::ThreadWrapper(void *me) {
    static_cast<AMRWriter *>(me)->threadFunc();

    return NULL;
    return (void *) static_cast<AMRWriter *>(me)->threadFunc();
}

void AMRWriter::threadFunc() {
status_t AMRWriter::threadFunc() {
    mEstimatedDurationUs = 0;
    mEstimatedSizeBytes = 0;
    bool stoppedPrematurely = true;
    int64_t previousPausedDurationUs = 0;
    int64_t maxTimestampUs = 0;
    status_t err = OK;

    while (!mDone) {
        MediaBuffer *buffer;
        status_t err = mSource->read(&buffer);
        err = mSource->read(&buffer);

        if (err != OK) {
            break;
@@ -260,6 +268,10 @@ void AMRWriter::threadFunc() {
    fclose(mFile);
    mFile = NULL;
    mReachedEOS = true;
    if (err == ERROR_END_OF_STREAM) {
        return OK;
    }
    return err;
}

bool AMRWriter::reachedEOS() {
Loading