diff options
| author | 2024-06-18 14:13:37 -0700 | |
|---|---|---|
| committer | 2024-06-18 14:13:37 -0700 | |
| commit | bb1814a0b94e8efb3fa3843c3d6a6533a382cac3 (patch) | |
| tree | 27e66123b9acee1a608b520afebbce3b6cd3c037 /libs/gui/IGraphicBufferProducer.cpp | |
| parent | 13fde70bd413e24c6667ec8ad84ea0d9e07058d6 (diff) | |
| parent | 29f1274c966a27f929cf8d6f21a538d53a3f9ac3 (diff) | |
Merge 24Q3 (ab/11976889) to aosp-main-future
Bug: 347831320
Merged-In: I30f4c21dfee68603d0dad01d205f8a5581e6db31
Change-Id: I301c522ae67cc1f30fe0ddc819aa3dffd4c32d1a
Diffstat (limited to 'libs/gui/IGraphicBufferProducer.cpp')
| -rw-r--r-- | libs/gui/IGraphicBufferProducer.cpp | 49 | 
1 files changed, 49 insertions, 0 deletions
diff --git a/libs/gui/IGraphicBufferProducer.cpp b/libs/gui/IGraphicBufferProducer.cpp index e81c098b85..09144806ee 100644 --- a/libs/gui/IGraphicBufferProducer.cpp +++ b/libs/gui/IGraphicBufferProducer.cpp @@ -80,6 +80,7 @@ enum {      QUERY_MULTIPLE,      GET_LAST_QUEUED_BUFFER2,      SET_FRAME_RATE, +    SET_ADDITIONAL_OPTIONS,  };  class BpGraphicBufferProducer : public BpInterface<IGraphicBufferProducer> @@ -778,6 +779,25 @@ public:          return result;      }  #endif +#if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(BQ_EXTENDEDALLOCATE) +    virtual status_t setAdditionalOptions(const std::vector<gui::AdditionalOptions>& options) { +        Parcel data, reply; +        data.writeInterfaceToken(IGraphicBufferProducer::getInterfaceDescriptor()); +        if (options.size() > 100) { +            return BAD_VALUE; +        } +        data.writeInt32(options.size()); +        for (const auto& it : options) { +            data.writeCString(it.name.c_str()); +            data.writeInt64(it.value); +        } +        status_t result = remote()->transact(SET_ADDITIONAL_OPTIONS, data, &reply); +        if (result == NO_ERROR) { +            result = reply.readInt32(); +        } +        return result; +    } +#endif  };  // Out-of-line virtual method definition to trigger vtable emission in this @@ -981,6 +1001,13 @@ status_t IGraphicBufferProducer::setFrameRate(float /*frameRate*/, int8_t /*comp  }  #endif +#if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(BQ_EXTENDEDALLOCATE) +status_t IGraphicBufferProducer::setAdditionalOptions(const std::vector<gui::AdditionalOptions>&) { +    // No-op for IGBP other than BufferQueue. +    return INVALID_OPERATION; +} +#endif +  status_t IGraphicBufferProducer::exportToParcel(Parcel* parcel) {      status_t res = OK;      res = parcel->writeUint32(USE_BUFFER_QUEUE); @@ -1533,6 +1560,28 @@ status_t BnGraphicBufferProducer::onTransact(              return NO_ERROR;          }  #endif +#if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(BQ_EXTENDEDALLOCATE) +        case SET_ADDITIONAL_OPTIONS: { +            CHECK_INTERFACE(IGraphicBuffer, data, reply); +            int optionCount = data.readInt32(); +            if (optionCount < 0 || optionCount > 100) { +                return BAD_VALUE; +            } +            std::vector<gui::AdditionalOptions> opts; +            opts.reserve(optionCount); +            for (int i = 0; i < optionCount; i++) { +                const char* name = data.readCString(); +                int64_t value = 0; +                if (name == nullptr || data.readInt64(&value) != NO_ERROR) { +                    return BAD_VALUE; +                } +                opts.emplace_back(name, value); +            } +            status_t result = setAdditionalOptions(opts); +            reply->writeInt32(result); +            return NO_ERROR; +        } +#endif      }      return BBinder::onTransact(code, data, reply, flags);  }  |