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

Commit cbd038fe authored by James Dong's avatar James Dong Committed by Android (Google) Code Review
Browse files

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

parents 545eab8a d0366624
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