diff options
Diffstat (limited to 'libs/surfaceflinger_client/ISurface.cpp')
| -rw-r--r-- | libs/surfaceflinger_client/ISurface.cpp | 30 | 
1 files changed, 27 insertions, 3 deletions
| diff --git a/libs/surfaceflinger_client/ISurface.cpp b/libs/surfaceflinger_client/ISurface.cpp index bb8619987649..7049d9e42d16 100644 --- a/libs/surfaceflinger_client/ISurface.cpp +++ b/libs/surfaceflinger_client/ISurface.cpp @@ -71,11 +71,15 @@ public:      {      } -    virtual sp<GraphicBuffer> requestBuffer(int bufferIdx, int usage) +    virtual sp<GraphicBuffer> requestBuffer(int bufferIdx, +            uint32_t w, uint32_t h, uint32_t format, uint32_t usage)      {          Parcel data, reply;          data.writeInterfaceToken(ISurface::getInterfaceDescriptor());          data.writeInt32(bufferIdx); +        data.writeInt32(w); +        data.writeInt32(h); +        data.writeInt32(format);          data.writeInt32(usage);          remote()->transact(REQUEST_BUFFER, data, &reply);          sp<GraphicBuffer> buffer = new GraphicBuffer(); @@ -83,6 +87,16 @@ public:          return buffer;      } +    virtual status_t setBufferCount(int bufferCount) +    { +        Parcel data, reply; +        data.writeInterfaceToken(ISurface::getInterfaceDescriptor()); +        data.writeInt32(bufferCount); +        remote()->transact(SET_BUFFER_COUNT, data, &reply); +        status_t err = reply.readInt32(); +        return err; +    } +      virtual status_t registerBuffers(const BufferHeap& buffers)      {          Parcel data, reply; @@ -140,12 +154,22 @@ status_t BnSurface::onTransact(          case REQUEST_BUFFER: {              CHECK_INTERFACE(ISurface, data, reply);              int bufferIdx = data.readInt32(); -            int usage = data.readInt32(); -            sp<GraphicBuffer> buffer(requestBuffer(bufferIdx, usage)); +            uint32_t w = data.readInt32(); +            uint32_t h = data.readInt32(); +            uint32_t format = data.readInt32(); +            uint32_t usage = data.readInt32(); +            sp<GraphicBuffer> buffer(requestBuffer(bufferIdx, w, h, format, usage));              if (buffer == NULL)                  return BAD_VALUE;              return reply->write(*buffer);          } +        case SET_BUFFER_COUNT: { +            CHECK_INTERFACE(ISurface, data, reply); +            int bufferCount = data.readInt32(); +            status_t err = setBufferCount(bufferCount); +            reply->writeInt32(err); +            return NO_ERROR; +        }          case REGISTER_BUFFERS: {              CHECK_INTERFACE(ISurface, data, reply);              BufferHeap buffer; | 
