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

Commit 1e0e7b17 authored by Surajit Podder's avatar Surajit Podder Committed by Steve Kondik
Browse files

libstagefright: Allocate cached camera buffers for sw encoders

Added change to allocate cached camera buffers for
sw encoders. Setting camera parameter "cache-video-buffers"
with value 1 allocates cached video buffers

Change-Id: Ic9068a58005f4a96466c50300dc29ce202f88427
parent b4cc5118
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1589,6 +1589,7 @@ status_t StagefrightRecorder::setupCameraSource(
                videoSize, mFrameRate,
                mPreviewSurface, encoderSupportsCameraSourceMetaDataMode);
    }
    ExtendedUtils::cacheCaptureBuffers(mCamera, mVideoEncoder);
    mCamera.clear();
    mCameraProxy.clear();
    if (*cameraSource == NULL) {
+28 −0
Original line number Diff line number Diff line
@@ -45,6 +45,8 @@
#include <media/stagefright/MediaExtractor.h>
#include <media/MediaProfiles.h>
#include <media/stagefright/Utils.h>
#include <camera/ICamera.h>
#include <binder/IPCThreadState.h>

//RTSPStream
#include <arpa/inet.h>
@@ -1921,6 +1923,30 @@ int32_t ExtendedUtils::getEncoderTypeFlags() {
    return flags;
}

void ExtendedUtils::cacheCaptureBuffers(sp<ICamera> camera, video_encoder encoder) {
    if (camera != NULL) {
        char mDeviceName[PROPERTY_VALUE_MAX];
        property_get("ro.board.platform", mDeviceName, "0");
        if (!strncmp(mDeviceName, "msm8909", 7)) {
            int64_t token = IPCThreadState::self()->clearCallingIdentity();
            String8 s = camera->getParameters();
            CameraParameters params(s);
            const char *enable;
            if (encoder == VIDEO_ENCODER_H263 ||
                encoder == VIDEO_ENCODER_MPEG_4_SP) {
                enable = "1";
            } else {
                enable = "0";
            }
            params.set("cache-video-buffers", enable);
            if (camera->setParameters(params.flatten()) != OK) {
                ALOGE("Failed to enabled cached camera buffers");
            }
            IPCThreadState::self()->restoreCallingIdentity(token);
        }
    }
}

}
#else //ENABLE_AV_ENHANCEMENTS

@@ -2126,6 +2152,8 @@ int32_t ExtendedUtils::getEncoderTypeFlags() {
    return false;
}

void ExtendedUtils::cacheCaptureBuffers(sp<ICamera> camera, video_encoder encoder) {}

bool ExtendedUtils::RTSPStream::ParseURL_V6(
        AString *host, const char **colonPos) {
    return false;
+2 −0
Original line number Diff line number Diff line
@@ -250,6 +250,8 @@ struct ExtendedUtils {
    static void showImageInNativeWindow(const sp<AMessage> &msg, const sp<AMessage> &format);

    static int32_t getEncoderTypeFlags();

    static void cacheCaptureBuffers(sp<ICamera> camera, video_encoder encoder);
};

}