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

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

IOMX: consolidate createInputSurface APIs

- Create GraphicBufferSource in IOMX regardless of persistency.

- Remove createInputSurface on IOMXNode, only keep setInputSurface
  which accepts either a persistent or non-persistent surface.

- Instead of holding a IGraphicBufferConsumer, hold
  IGraphicBufferSource across session as the persistent surface.

- Fix up GraphicBufferSource to allow usage across sessions.
  GraphicBufferSource itself becomes agnostic to persistency.

- Remove max encoder input buffers profiling code.

bug: 31399200
Change-Id: I15ed52cc64509fd87736372a580abf7b51bf4de7
parent 21b46588
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -28,8 +28,8 @@ class ICamera;
}
class ICameraRecordingProxy;
class IMediaRecorderClient;
class IGraphicBufferConsumer;
class IGraphicBufferProducer;
struct PersistentSurface;

class IMediaRecorder: public IInterface
{
@@ -60,7 +60,7 @@ public:
    virtual status_t init() = 0;
    virtual status_t close() = 0;
    virtual status_t release() = 0;
    virtual status_t setInputSurface(const sp<IGraphicBufferConsumer>& surface) = 0;
    virtual status_t setInputSurface(const sp<PersistentSurface>& surface) = 0;
    virtual sp<IGraphicBufferProducer> querySurfaceMediaSource() = 0;
};

+5 −18
Original line number Diff line number Diff line
@@ -19,8 +19,6 @@
#define ANDROID_IOMX_H_

#include <binder/IInterface.h>
#include <gui/IGraphicBufferProducer.h>
#include <gui/IGraphicBufferConsumer.h>
#include <ui/GraphicBuffer.h>
#include <utils/List.h>
#include <utils/String8.h>
@@ -34,8 +32,10 @@

namespace android {

class IGraphicBufferProducer;
class IGraphicBufferSource;
class IMemory;
class IOMXBufferSource;
class IOMXNode;
class IOMXObserver;
class NativeHandle;
@@ -61,9 +61,9 @@ public:
            const char *name, const sp<IOMXObserver> &observer,
            sp<IOMXNode> *omxNode) = 0;

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

class IOMXNode : public IInterface {
@@ -125,21 +125,8 @@ public:
            OMX_U32 port_index,
            const sp<NativeHandle> &nativeHandle, buffer_id buffer) = 0;

    // This will set *type to resulting metadata buffer type on OMX error (not on binder error) as
    // well as on success.
    virtual status_t createInputSurface(
            OMX_U32 port_index, android_dataspace dataSpace,
            sp<IGraphicBufferProducer> *bufferProducer,
            sp<IGraphicBufferSource> *bufferSource,
            MetadataBufferType *type = NULL) = 0;

    // This will set *type to resulting metadata buffer type on OMX error (not on binder error) as
    // well as on success.
    virtual status_t setInputSurface(
            OMX_U32 port_index,
            const sp<IGraphicBufferConsumer> &bufferConsumer,
            sp<IGraphicBufferSource> *bufferSource,
            MetadataBufferType *type) = 0;
            const sp<IOMXBufferSource> &bufferSource) = 0;

    // Allocate an opaque buffer as a native handle. If component supports returning native
    // handles, those are returned in *native_handle. Otherwise, the allocated buffer is
+2 −3
Original line number Diff line number Diff line
@@ -25,9 +25,8 @@
namespace android {

class ICameraRecordingProxy;
class Surface;
class IGraphicBufferConsumer;
class IGraphicBufferProducer;
struct PersistentSurface;

struct MediaRecorderBase {
    MediaRecorderBase(const String16 &opPackageName)
@@ -59,7 +58,7 @@ struct MediaRecorderBase {
    virtual status_t reset() = 0;
    virtual status_t getMaxAmplitude(int *max) = 0;
    virtual status_t dump(int fd, const Vector<String16>& args) const = 0;
    virtual status_t setInputSurface(const sp<IGraphicBufferConsumer>& surface) = 0;
    virtual status_t setInputSurface(const sp<PersistentSurface>& surface) = 0;
    virtual sp<IGraphicBufferProducer> querySurfaceMediaSource() const = 0;


+1 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ namespace android {

class MediaCodecBuffer;
struct PersistentSurface;
class Surface;

struct CodecBase : public AHandler, /* static */ ColorUtils {
    enum {
+4 −5
Original line number Diff line number Diff line
@@ -21,8 +21,7 @@
#include <media/stagefright/foundation/AHandlerReflector.h>
#include <media/stagefright/foundation/Mutexed.h>
#include <media/stagefright/MediaSource.h>

#include <gui/IGraphicBufferConsumer.h>
#include <media/stagefright/PersistentSurface.h>

namespace android {

@@ -44,7 +43,7 @@ struct MediaCodecSource : public MediaSource,
            const sp<ALooper> &looper,
            const sp<AMessage> &format,
            const sp<MediaSource> &source,
            const sp<IGraphicBufferConsumer> &consumer = NULL,
            const sp<PersistentSurface> &persistentSurface = NULL,
            uint32_t flags = 0);

    bool isVideo() const { return mIsVideo; }
@@ -88,7 +87,7 @@ private:
            const sp<ALooper> &looper,
            const sp<AMessage> &outputFormat,
            const sp<MediaSource> &source,
            const sp<IGraphicBufferConsumer> &consumer,
            const sp<PersistentSurface> &persistentSurface,
            uint32_t flags = 0);

    status_t onStart(MetaData *params);
@@ -121,7 +120,7 @@ private:
    int32_t mEncoderDataSpace;
    sp<AMessage> mEncoderActivityNotify;
    sp<IGraphicBufferProducer> mGraphicBufferProducer;
    sp<IGraphicBufferConsumer> mGraphicBufferConsumer;
    sp<PersistentSurface> mPersistentSurface;
    List<MediaBuffer *> mInputBufferQueue;
    List<size_t> mAvailEncoderInputIndices;
    List<int64_t> mDecodingTimeQueue; // decoding time (us) for video
Loading