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

Commit d291c222 authored by Chong Zhang's avatar Chong Zhang
Browse files

MediaCodec: implement persistent input surface APIs

Bug: 19127604
Bug: 19489395

Change-Id: Idaf1cc9008016f66903e93907a676f54e342e1a3
parent 64da6f04
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@

#include <binder/IInterface.h>
#include <gui/IGraphicBufferProducer.h>
#include <gui/IGraphicBufferConsumer.h>
#include <ui/GraphicBuffer.h>
#include <utils/List.h>
#include <utils/String8.h>
@@ -113,6 +114,14 @@ public:
            node_id node, OMX_U32 port_index,
            sp<IGraphicBufferProducer> *bufferProducer) = 0;

    virtual status_t createPersistentInputSurface(
            sp<IGraphicBufferProducer> *bufferProducer,
            sp<IGraphicBufferConsumer> *bufferConsumer) = 0;

    virtual status_t usePersistentInputSurface(
            node_id node, OMX_U32 port_index,
            const sp<IGraphicBufferConsumer> &bufferConsumer) = 0;

    virtual status_t signalEndOfInputStream(node_id node) = 0;

    // This API clearly only makes sense if the caller lives in the
+3 −0
Original line number Diff line number Diff line
@@ -44,6 +44,8 @@ struct ACodec : public AHierarchicalStateMachine, public CodecBase {
    virtual void initiateAllocateComponent(const sp<AMessage> &msg);
    virtual void initiateConfigureComponent(const sp<AMessage> &msg);
    virtual void initiateCreateInputSurface();
    virtual void initiateUsePersistentInputSurface(
            const sp<PersistentSurface> &surface);
    virtual void initiateStart();
    virtual void initiateShutdown(bool keepComponentAllocated = false);

@@ -114,6 +116,7 @@ private:
        kWhatAllocateComponent       = 'allo',
        kWhatConfigureComponent      = 'conf',
        kWhatCreateInputSurface      = 'cisf',
        kWhatUsePersistentInputSurface = 'pisf',
        kWhatSignalEndOfInputStream  = 'eois',
        kWhatStart                   = 'star',
        kWhatRequestIDRFrame         = 'ridr',
+4 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@
namespace android {

struct ABuffer;
struct PersistentSurface;

struct CodecBase : public AHandler {
    enum {
@@ -39,6 +40,7 @@ struct CodecBase : public AHandler {
        kWhatComponentAllocated  = 'cAll',
        kWhatComponentConfigured = 'cCon',
        kWhatInputSurfaceCreated = 'isfc',
        kWhatInputSurfaceAccepted = 'isfa',
        kWhatSignaledInputEOS    = 'seos',
        kWhatBuffersAllocated    = 'allc',
    };
@@ -48,6 +50,8 @@ struct CodecBase : public AHandler {
    virtual void initiateAllocateComponent(const sp<AMessage> &msg) = 0;
    virtual void initiateConfigureComponent(const sp<AMessage> &msg) = 0;
    virtual void initiateCreateInputSurface() = 0;
    virtual void initiateUsePersistentInputSurface(
            const sp<PersistentSurface> &surface) = 0;
    virtual void initiateStart() = 0;
    virtual void initiateShutdown(bool keepComponentAllocated = false) = 0;

+6 −0
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ class IMemory;
struct MemoryDealer;
class IResourceManagerClient;
class IResourceManagerService;
struct PersistentSurface;
struct SoftwareRenderer;
struct Surface;

@@ -67,6 +68,8 @@ struct MediaCodec : public AHandler {
    static sp<MediaCodec> CreateByComponentName(
            const sp<ALooper> &looper, const char *name, status_t *err = NULL);

    static sp<PersistentSurface> CreatePersistentInputSurface();

    status_t configure(
            const sp<AMessage> &format,
            const sp<Surface> &nativeWindow,
@@ -77,6 +80,8 @@ struct MediaCodec : public AHandler {

    status_t createInputSurface(sp<IGraphicBufferProducer>* bufferProducer);

    status_t usePersistentInputSurface(const sp<PersistentSurface> &surface);

    status_t start();

    // Returns to a state in which the component remains allocated but
@@ -180,6 +185,7 @@ private:
        kWhatInit                           = 'init',
        kWhatConfigure                      = 'conf',
        kWhatCreateInputSurface             = 'cisf',
        kWhatUsePersistentInputSurface      = 'pisf',
        kWhatStart                          = 'strt',
        kWhatStop                           = 'stop',
        kWhatRelease                        = 'rele',
+3 −0
Original line number Diff line number Diff line
@@ -34,6 +34,9 @@ struct MediaFilter : public CodecBase {
    virtual void initiateAllocateComponent(const sp<AMessage> &msg);
    virtual void initiateConfigureComponent(const sp<AMessage> &msg);
    virtual void initiateCreateInputSurface();
    virtual void initiateUsePersistentInputSurface(
            const sp<PersistentSurface> &surface);

    virtual void initiateStart();
    virtual void initiateShutdown(bool keepComponentAllocated = false);

Loading