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

Commit 3d26e897 authored by James Dong's avatar James Dong Committed by Jamie Gennis
Browse files

Don't hard code the number of buffers for SurfaceMediaSource

Change-Id: I9ce17b3dc82a5d3e4a66569c76ad9745ceedacd6
parent 0a24726a
Loading
Loading
Loading
Loading
+25 −3
Original line number Diff line number Diff line
@@ -52,7 +52,7 @@ SurfaceMediaSource::SurfaceMediaSource(uint32_t bufferWidth, uint32_t bufferHeig
        ALOGE("Invalid dimensions %dx%d", bufferWidth, bufferHeight);
    }

    mBufferQueue = new BufferQueue(true, MIN_UNDEQUEUED_BUFFERS);
    mBufferQueue = new BufferQueue(true);
    mBufferQueue->setDefaultBufferSize(bufferWidth, bufferHeight);
    mBufferQueue->setSynchronousMode(true);
    mBufferQueue->setConsumerUsageBits(GRALLOC_USAGE_HW_VIDEO_ENCODER |
@@ -136,12 +136,34 @@ status_t SurfaceMediaSource::start(MetaData *params)
{
    ALOGV("start");

    Mutex::Autolock lock(mMutex);

    mStartTimeNs = 0;
    int64_t startTimeUs;
    if (params && params->findInt64(kKeyTime, &startTimeUs)) {
    int32_t bufferCount = 0;
    if (params) {
        if (params->findInt64(kKeyTime, &startTimeUs)) {
            mStartTimeNs = startTimeUs * 1000;
        }

        if (!params->findInt32(kKeyNumBuffers, &bufferCount)) {
            ALOGE("Failed to find the advertised buffer count");
            return UNKNOWN_ERROR;
        }

        if (bufferCount <= 1) {
            ALOGE("bufferCount %d is too small", bufferCount);
            return BAD_VALUE;
        }
    }

    if (bufferCount != 0) {
        status_t err = mBufferQueue->setMaxAcquiredBufferCount(bufferCount);
        if (err != OK) {
            return err;
        }
    }

    return OK;
}