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

Commit 62e05a61 authored by Gloria Wang's avatar Gloria Wang
Browse files

To collect the total usage time of encoders in the media recorder

Change-Id: I94c9c94dec6bd714a3ebf96b4465b94f069e55b8
parent bba9529d
Loading
Loading
Loading
Loading
+79 −7
Original line number Diff line number Diff line
@@ -20,6 +20,10 @@

#include "StagefrightRecorder.h"

#include <binder/IPCThreadState.h>
#include <binder/IServiceManager.h>

#include <media/IMediaPlayerService.h>
#include <media/stagefright/AudioSource.h>
#include <media/stagefright/AMRWriter.h>
#include <media/stagefright/CameraSource.h>
@@ -46,9 +50,23 @@

namespace android {

// To collect the encoder usage for the battery app
static void addBatteryData(uint32_t params) {
    sp<IBinder> binder =
        defaultServiceManager()->getService(String16("media.player"));
    sp<IMediaPlayerService> service = interface_cast<IMediaPlayerService>(binder);
    CHECK(service.get() != NULL);

    service->addBatteryData(params);
}


StagefrightRecorder::StagefrightRecorder()
    : mWriter(NULL), mWriterAux(NULL),
      mOutputFd(-1), mOutputFdAux(-1) {
      mOutputFd(-1), mOutputFdAux(-1),
      mAudioSource(AUDIO_SOURCE_LIST_END),
      mVideoSource(VIDEO_SOURCE_LIST_END),
      mStarted(false) {

    LOGV("Constructor");
    reset();
@@ -745,30 +763,54 @@ status_t StagefrightRecorder::start() {
        return UNKNOWN_ERROR;
    }

    status_t status = OK;

    switch (mOutputFormat) {
        case OUTPUT_FORMAT_DEFAULT:
        case OUTPUT_FORMAT_THREE_GPP:
        case OUTPUT_FORMAT_MPEG_4:
            return startMPEG4Recording();
            status = startMPEG4Recording();
            break;

        case OUTPUT_FORMAT_AMR_NB:
        case OUTPUT_FORMAT_AMR_WB:
            return startAMRRecording();
            status = startAMRRecording();
            break;

        case OUTPUT_FORMAT_AAC_ADIF:
        case OUTPUT_FORMAT_AAC_ADTS:
            return startAACRecording();
            status = startAACRecording();
            break;

        case OUTPUT_FORMAT_RTP_AVP:
            return startRTPRecording();
            status = startRTPRecording();
            break;

        case OUTPUT_FORMAT_MPEG2TS:
            return startMPEG2TSRecording();
            status = startMPEG2TSRecording();
            break;

        default:
            LOGE("Unsupported output file format: %d", mOutputFormat);
            return UNKNOWN_ERROR;
            status = UNKNOWN_ERROR;
            break;
    }

    if ((status == OK) && (!mStarted)) {
        mStarted = true;

        uint32_t params = IMediaPlayerService::kBatteryDataCodecStarted;
        if (mAudioSource != AUDIO_SOURCE_LIST_END) {
            params |= IMediaPlayerService::kBatteryDataTrackAudio;
        }
        if (mVideoSource != VIDEO_SOURCE_LIST_END) {
            params |= IMediaPlayerService::kBatteryDataTrackVideo;
        }

        addBatteryData(params);
    }

    return status;
}

sp<MediaSource> StagefrightRecorder::createAudioSource() {
@@ -1458,6 +1500,21 @@ status_t StagefrightRecorder::pause() {
        mWriterAux->pause();
    }

    if (mStarted) {
        mStarted = false;

        uint32_t params = 0;
        if (mAudioSource != AUDIO_SOURCE_LIST_END) {
            params |= IMediaPlayerService::kBatteryDataTrackAudio;
        }
        if (mVideoSource != VIDEO_SOURCE_LIST_END) {
            params |= IMediaPlayerService::kBatteryDataTrackVideo;
        }

        addBatteryData(params);
    }


    return OK;
}

@@ -1494,6 +1551,21 @@ status_t StagefrightRecorder::stop() {
        }
    }

    if (mStarted) {
        mStarted = false;

        uint32_t params = 0;
        if (mAudioSource != AUDIO_SOURCE_LIST_END) {
            params |= IMediaPlayerService::kBatteryDataTrackAudio;
        }
        if (mVideoSource != VIDEO_SOURCE_LIST_END) {
            params |= IMediaPlayerService::kBatteryDataTrackVideo;
        }

        addBatteryData(params);
    }


    return err;
}

+2 −0
Original line number Diff line number Diff line
@@ -107,6 +107,8 @@ private:
    bool mIsMetaDataStoredInVideoBuffers;
    MediaProfiles *mEncoderProfiles;

    bool mStarted;

    status_t setupMPEG4Recording(
        bool useSplitCameraSource,
        int outputFd,