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

Commit 6c75ad21 authored by Andreas Huber's avatar Andreas Huber Committed by Android (Google) Code Review
Browse files

Merge "Configure the SurfaceMediaSource to emit the same number of buffers" into jb-mr1-dev

parents 0d268a3c 66e72bc8
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -111,6 +111,9 @@ public:

    sp<BufferQueue> getBufferQueue() const { return mBufferQueue; }

    // To be called before start()
    status_t setMaxAcquiredBufferCount(size_t count);

protected:

    // Implementation of the BufferQueue::ConsumerListener interface.  These
+4 −0
Original line number Diff line number Diff line
@@ -167,6 +167,10 @@ status_t SurfaceMediaSource::start(MetaData *params)
    return OK;
}

status_t SurfaceMediaSource::setMaxAcquiredBufferCount(size_t count) {
    return mBufferQueue->setMaxAcquiredBufferCount(count);
}


status_t SurfaceMediaSource::stop()
{
+4 −0
Original line number Diff line number Diff line
@@ -54,6 +54,10 @@ status_t Converter::initCheck() const {
    return mInitCheck;
}

size_t Converter::getInputBufferCount() const {
    return mEncoderInputBuffers.size();
}

sp<AMessage> Converter::getOutputFormat() const {
    return mOutputFormat;
}
+2 −0
Original line number Diff line number Diff line
@@ -36,6 +36,8 @@ struct Converter : public AHandler {

    status_t initCheck() const;

    size_t getInputBufferCount() const;

    sp<AMessage> getOutputFormat() const;

    void feedAccessUnit(const sp<ABuffer> &accessUnit);
+15 −21
Original line number Diff line number Diff line
@@ -600,27 +600,6 @@ status_t WifiDisplaySource::PlaybackSession::setupPacketizer() {
    // sp<SurfaceMediaSource> source = new SurfaceMediaSource(info.w, info.h);
    sp<SurfaceMediaSource> source = new SurfaceMediaSource(720, 1280);

    sp<IServiceManager> sm = defaultServiceManager();
    sp<IBinder> binder = sm->getService(String16("SurfaceFlinger"));
    sp<ISurfaceComposer> service = interface_cast<ISurfaceComposer>(binder);
    CHECK(service != NULL);

    service->connectDisplay(source->getBufferQueue());

#if 0
    {
        ALOGI("reading buffer");

        CHECK_EQ((status_t)OK, source->start());
        MediaBuffer *mbuf;
        CHECK_EQ((status_t)OK, source->read(&mbuf));
        mbuf->release();
        mbuf = NULL;

        ALOGI("got buffer");
    }
#endif

#if 0
    ssize_t index = mSerializer->addSource(source);
#else
@@ -644,10 +623,25 @@ status_t WifiDisplaySource::PlaybackSession::setupPacketizer() {

    sp<Converter> converter =
        new Converter(notify, mCodecLooper, format);
    CHECK_EQ(converter->initCheck(), (status_t)OK);

    size_t numInputBuffers = converter->getInputBufferCount();
    ALOGI("numInputBuffers to the encoder is %d", numInputBuffers);

    looper()->registerHandler(converter);

    mTracks.add(index, new Track(converter));

    sp<IServiceManager> sm = defaultServiceManager();
    sp<IBinder> binder = sm->getService(String16("SurfaceFlinger"));
    sp<ISurfaceComposer> service = interface_cast<ISurfaceComposer>(binder);
    CHECK(service != NULL);

    // Add one reference to account for the serializer.
    err = source->setMaxAcquiredBufferCount(numInputBuffers + 1);
    CHECK_EQ(err, (status_t)OK);

    service->connectDisplay(source->getBufferQueue());
#endif

#if 0