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

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

Merge "0-memcpy video recording framework"

parents d206c874 997eaa2c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -83,7 +83,7 @@ public:
     * kKeyColorFormat: YUV color format of the video frames
     * kKeyWidth, kKeyHeight: dimension (in pixels) of the video frames
     * kKeySampleRate: frame rate in frames per second
     * kKeyMimeType: always fixed
     * kKeyMIMEType: always fixed to be MEDIA_MIMETYPE_VIDEO_RAW
     */
    virtual sp<MetaData> getFormat();

+22 −1
Original line number Diff line number Diff line
@@ -451,6 +451,27 @@ status_t CameraSource::init(
    // This CHECK is good, since we just passed the lock/unlock
    // check earlier by calling mCamera->setParameters().
    CHECK_EQ(OK, mCamera->setPreviewDisplay(mSurface));

    /*
     * mCamera->startRecording() signals camera hal to make
     * available the video buffers (for instance, allocation
     * of the video buffers may be triggered when camera hal's
     * startRecording() method is called). Making available these
     * video buffers earlier (before calling start()) is critical,
     * if one wants to configure omx video encoders to use these
     * buffers for passing video frame data during video recording
     * without the need to memcpy the video frame data stored
     * in these buffers. Eliminating memcpy for video frame data
     * is crucial in performance for HD quality video recording
     * applications.
     *
     * Based on OMX IL spec, configuring the omx video encoders
     * must occur in loaded state. When start() is called, omx
     * video encoders are already in idle state, which is too
     * late. Thus, we must call mCamera->startRecording() earlier.
     */
    startCameraRecording();

    IPCThreadState::self()->restoreCallingIdentity(token);

    int64_t glitchDurationUs = (1000000LL / mVideoFrameRate);
@@ -478,6 +499,7 @@ CameraSource::~CameraSource() {

void CameraSource::startCameraRecording() {
    CHECK_EQ(OK, mCamera->startRecording());
    CHECK(mCamera->recordingEnabled());
}

status_t CameraSource::start(MetaData *meta) {
@@ -501,7 +523,6 @@ status_t CameraSource::start(MetaData *meta) {

    int64_t token = IPCThreadState::self()->clearCallingIdentity();
    mCamera->setListener(new CameraSourceListener(this));
    startCameraRecording();
    IPCThreadState::self()->restoreCallingIdentity(token);

    mStarted = true;