182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/* 282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * Copyright 2016, The Android Open Source Project 382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * Licensed under the Apache License, Version 2.0 (the "License"); 582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * you may not use this file except in compliance with the License. 682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * You may obtain a copy of the License at 782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * http://www.apache.org/licenses/LICENSE-2.0 982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 1082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * Unless required by applicable law or agreed to in writing, software 1182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * distributed under the License is distributed on an "AS IS" BASIS, 1282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * See the License for the specific language governing permissions and 1482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * limitations under the License. 1582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 1682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 17b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasa#ifndef MEDIA_STAGEFRIGHT_BQHELPER_CONVERSION_H_ 18b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasa#define MEDIA_STAGEFRIGHT_BQHELPER_CONVERSION_H_ 1982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 2082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim#include <vector> 2182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim#include <list> 2282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 2382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim#include <unistd.h> 2482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 2582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim#include <hidl/MQDescriptor.h> 2682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim#include <hidl/Status.h> 2782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim#include <hidlmemory/mapping.h> 2882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 2982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim#include <binder/Binder.h> 3082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim#include <binder/Status.h> 3182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim#include <ui/FenceTime.h> 3282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim#include <cutils/native_handle.h> 3382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim#include <gui/IGraphicBufferProducer.h> 3482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 3582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim#include <media/hardware/VideoAPI.h> 3682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 3782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim#include <android/hidl/memory/1.0/IMemory.h> 3882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim#include <android/hardware/graphics/bufferqueue/1.0/IProducerListener.h> 3982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 4082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kimnamespace android { 4182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kimnamespace conversion { 4282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 4382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kimusing ::android::hardware::hidl_array; 4482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kimusing ::android::hardware::hidl_string; 4582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kimusing ::android::hardware::hidl_vec; 4682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kimusing ::android::hardware::hidl_handle; 4782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kimusing ::android::hardware::Return; 4882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kimusing ::android::hardware::Void; 4982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kimusing ::android::sp; 5082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kimusing ::android::status_t; 5182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 5282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kimusing ::android::String8; 5382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 5482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kimusing ::android::hardware::media::V1_0::Rect; 5582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kimusing ::android::hardware::media::V1_0::Region; 5682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 5782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kimusing ::android::hardware::graphics::common::V1_0::Dataspace; 5882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 5982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kimusing ::android::hardware::graphics::common::V1_0::PixelFormat; 6082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 6182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kimusing ::android::hardware::media::V1_0::AnwBuffer; 6282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kimusing ::android::GraphicBuffer; 6382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 6482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kimtypedef ::android::hardware::graphics::bufferqueue::V1_0::IGraphicBufferProducer 6582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim HGraphicBufferProducer; 6682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kimtypedef ::android::IGraphicBufferProducer 6782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim BGraphicBufferProducer; 6882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 6982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim// native_handle_t helper functions. 7082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 7182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 7282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Take an fd and create a native handle containing only the given fd. 7382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * The created handle will need to be deleted manually with 7482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * `native_handle_delete()`. 7582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 7682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] fd The source file descriptor (of type `int`). 7782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \return The create `native_handle_t*` that contains the given \p fd. If the 7882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * supplied \p fd is negative, the created native handle will contain no file 7982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * descriptors. 8082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 8182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * If the native handle cannot be created, the return value will be 8282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * `nullptr`. 8382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 8482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * This function does not duplicate the file descriptor. 8582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 86b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasanative_handle_t* native_handle_create_from_fd(int fd); 8782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 8882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 8982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Extract a file descriptor from a native handle. 9082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 9182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] nh The source `native_handle_t*`. 9282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] index The index of the file descriptor in \p nh to read from. This 9382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * input has the default value of `0`. 9482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \return The `index`-th file descriptor in \p nh. If \p nh does not have 9582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * enough file descriptors, the returned value will be `-1`. 9682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 9782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * This function does not duplicate the file descriptor. 9882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 99b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasaint native_handle_read_fd(native_handle_t const* nh, int index = 0); 10082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 10182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 10282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * Conversion functions 10382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * ==================== 10482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 10582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * There are two main directions of conversion: 10682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * - `inTargetType(...)`: Create a wrapper whose lifetime depends on the 10782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * input. The wrapper has type `TargetType`. 10882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * - `toTargetType(...)`: Create a standalone object of type `TargetType` that 10982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * corresponds to the input. The lifetime of the output does not depend on the 11082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * lifetime of the input. 11182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * - `wrapIn(TargetType*, ...)`: Same as `inTargetType()`, but for `TargetType` 11282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * that cannot be copied and/or moved efficiently, or when there are multiple 11382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * output arguments. 11482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * - `convertTo(TargetType*, ...)`: Same as `toTargetType()`, but for 11582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * `TargetType` that cannot be copied and/or moved efficiently, or when there 11682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * are multiple output arguments. 11782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 11882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * `wrapIn()` and `convertTo()` functions will take output arguments before 11982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * input arguments. Some of these functions might return a value to indicate 12082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * success or error. 12182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 12282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * In converting or wrapping something as a Treble type that contains a 12382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * `hidl_handle`, `native_handle_t*` will need to be created and returned as 12482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * an additional output argument, hence only `wrapIn()` or `convertTo()` would 12582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * be available. The caller must call `native_handle_delete()` to deallocate the 12682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * returned native handle when it is no longer needed. 12782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 12882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * For types that contain file descriptors, `inTargetType()` and `wrapAs()` do 12982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * not perform duplication of file descriptors, while `toTargetType()` and 13082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * `convertTo()` do. 13182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 13282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 13382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 13482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Convert `Return<void>` to `binder::Status`. 13582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 13682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] t The source `Return<void>`. 13782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \return The corresponding `binder::Status`. 13882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 13982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim// convert: Return<void> -> ::android::binder::Status 140b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasa::android::binder::Status toBinderStatus(Return<void> const& t); 14182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 14282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 14382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Convert `Return<void>` to `status_t`. This is for legacy binder calls. 14482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 14582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] t The source `Return<void>`. 14682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \return The corresponding `status_t`. 14782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 14882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim// convert: Return<void> -> status_t 149b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasastatus_t toStatusT(Return<void> const& t); 15082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 15182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 15282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Wrap `native_handle_t*` in `hidl_handle`. 15382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 15482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] nh The source `native_handle_t*`. 15582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \return The `hidl_handle` that points to \p nh. 15682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 15782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim// wrap: native_handle_t* -> hidl_handle 158b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasahidl_handle inHidlHandle(native_handle_t const* nh); 15982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 16082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 16182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Convert `int32_t` to `Dataspace`. 16282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 16382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] l The source `int32_t`. 16482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \result The corresponding `Dataspace`. 16582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 16682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim// convert: int32_t -> Dataspace 167b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin VongmasaDataspace toHardwareDataspace(int32_t l); 16882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 16982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 17082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Convert `Dataspace` to `int32_t`. 17182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 17282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] t The source `Dataspace`. 17382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \result The corresponding `int32_t`. 17482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 17582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim// convert: Dataspace -> int32_t 176b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasaint32_t toRawDataspace(Dataspace const& t); 17782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 17882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 17982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Wrap an opaque buffer inside a `hidl_vec<uint8_t>`. 18082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 18182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] l The pointer to the beginning of the opaque buffer. 18282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] size The size of the buffer. 18382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \return A `hidl_vec<uint8_t>` that points to the buffer. 18482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 18582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim// wrap: void*, size_t -> hidl_vec<uint8_t> 186b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasahidl_vec<uint8_t> inHidlBytes(void const* l, size_t size); 18782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 18882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 18982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Create a `hidl_vec<uint8_t>` that is a copy of an opaque buffer. 19082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 19182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] l The pointer to the beginning of the opaque buffer. 19282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] size The size of the buffer. 19382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \return A `hidl_vec<uint8_t>` that is a copy of the input buffer. 19482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 19582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim// convert: void*, size_t -> hidl_vec<uint8_t> 196b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasahidl_vec<uint8_t> toHidlBytes(void const* l, size_t size); 19782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 19882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 19982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Wrap `GraphicBuffer` in `AnwBuffer`. 20082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 20182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[out] t The wrapper of type `AnwBuffer`. 20282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] l The source `GraphicBuffer`. 20382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 20482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim// wrap: GraphicBuffer -> AnwBuffer 205b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasavoid wrapAs(AnwBuffer* t, GraphicBuffer const& l); 20682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 20782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 20882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Convert `AnwBuffer` to `GraphicBuffer`. 20982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 21082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[out] l The destination `GraphicBuffer`. 21182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] t The source `AnwBuffer`. 21282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 21382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * This function will duplicate all file descriptors in \p t. 21482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 21582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim// convert: AnwBuffer -> GraphicBuffer 21682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim// Ref: frameworks/native/libs/ui/GraphicBuffer.cpp: GraphicBuffer::flatten 217b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasabool convertTo(GraphicBuffer* l, AnwBuffer const& t); 21882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 21982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 22082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * Conversion functions for types outside media 22182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * ============================================ 22282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 22382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * Some objects in libui and libgui that were made to go through binder calls do 22482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * not expose ways to read or write their fields to the public. To pass an 22582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * object of this kind through the HIDL boundary, translation functions need to 22682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * work around the access restriction by using the publicly available 22782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * `flatten()` and `unflatten()` functions. 22882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 22982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * All `flatten()` and `unflatten()` overloads follow the same convention as 23082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * follows: 23182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 23282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * status_t flatten(ObjectType const& object, 23382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * [OtherType const& other, ...] 23482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * void*& buffer, size_t& size, 23582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * int*& fds, size_t& numFds) 23682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 23782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * status_t unflatten(ObjectType* object, 23882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * [OtherType* other, ...,] 23982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * void*& buffer, size_t& size, 24082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * int*& fds, size_t& numFds) 24182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 24282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * The number of `other` parameters varies depending on the `ObjectType`. For 24382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * example, in the process of unflattening an object that contains 24482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * `hidl_handle`, `other` is needed to hold `native_handle_t` objects that will 24582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * be created. 24682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 24782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * The last four parameters always work the same way in all overloads of 24882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * `flatten()` and `unflatten()`: 24982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * - For `flatten()`, `buffer` is the pointer to the non-fd buffer to be filled, 25082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * `size` is the size (in bytes) of the non-fd buffer pointed to by `buffer`, 25182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * `fds` is the pointer to the fd buffer to be filled, and `numFds` is the 25282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * size (in ints) of the fd buffer pointed to by `fds`. 25382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * - For `unflatten()`, `buffer` is the pointer to the non-fd buffer to be read 25482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * from, `size` is the size (in bytes) of the non-fd buffer pointed to by 25582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * `buffer`, `fds` is the pointer to the fd buffer to be read from, and 25682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * `numFds` is the size (in ints) of the fd buffer pointed to by `fds`. 25782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * - After a successful call to `flatten()` or `unflatten()`, `buffer` and `fds` 25882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * will be advanced, while `size` and `numFds` will be decreased to reflect 25982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * how much storage/data of the two buffers (fd and non-fd) have been used. 26082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * - After an unsuccessful call, the values of `buffer`, `size`, `fds` and 26182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * `numFds` are invalid. 26282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 26382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * The return value of a successful `flatten()` or `unflatten()` call will be 26482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * `OK` (also aliased as `NO_ERROR`). Any other values indicate a failure. 26582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 26682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * For each object type that supports flattening, there will be two accompanying 26782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * functions: `getFlattenedSize()` and `getFdCount()`. `getFlattenedSize()` will 26882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * return the size of the non-fd buffer that the object will need for 26982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * flattening. `getFdCount()` will return the size of the fd buffer that the 27082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * object will need for flattening. 27182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 27282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * The set of these four functions, `getFlattenedSize()`, `getFdCount()`, 27382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * `flatten()` and `unflatten()`, are similar to functions of the same name in 27482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * the abstract class `Flattenable`. The only difference is that functions in 27582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * this file are not member functions of the object type. For example, we write 27682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 27782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * flatten(x, buffer, size, fds, numFds) 27882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 27982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * instead of 28082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 28182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * x.flatten(buffer, size, fds, numFds) 28282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 28382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * because we cannot modify the type of `x`. 28482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 28582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * There is one exception to the naming convention: `hidl_handle` that 28682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * represents a fence. The four functions for this "Fence" type have the word 28782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * "Fence" attched to their names because the object type, which is 28882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * `hidl_handle`, does not carry the special meaning that the object itself can 28982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * only contain zero or one file descriptor. 29082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 29182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 29282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim// Ref: frameworks/native/libs/ui/Fence.cpp 29382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 29482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 29582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Return the size of the non-fd buffer required to flatten a fence. 29682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 29782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] fence The input fence of type `hidl_handle`. 29882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \return The required size of the flat buffer. 29982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 30082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * The current version of this function always returns 4, which is the number of 30182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * bytes required to store the number of file descriptors contained in the fd 30282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * part of the flat buffer. 30382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 304b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasasize_t getFenceFlattenedSize(hidl_handle const& fence); 30582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 30682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 30782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Return the number of file descriptors contained in a fence. 30882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 30982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] fence The input fence of type `hidl_handle`. 31082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \return `0` if \p fence does not contain a valid file descriptor, or `1` 31182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * otherwise. 31282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 313b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasasize_t getFenceFdCount(hidl_handle const& fence); 31482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 31582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 31682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Unflatten `Fence` to `hidl_handle`. 31782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 31882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[out] fence The destination `hidl_handle`. 31982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[out] nh The underlying native handle. 32082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] buffer The pointer to the flat non-fd buffer. 32182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] size The size of the flat non-fd buffer. 32282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] fds The pointer to the flat fd buffer. 32382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] numFds The size of the flat fd buffer. 32482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \return `NO_ERROR` on success; other value on failure. 32582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 32682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * If the return value is `NO_ERROR`, \p nh will point to a newly created 32782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * native handle, which needs to be deleted with `native_handle_delete()` 32882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * afterwards. 32982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 330b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasastatus_t unflattenFence(hidl_handle* fence, native_handle_t** nh, 331b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasa void const*& buffer, size_t& size, int const*& fds, size_t& numFds); 33282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 33382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 33482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Flatten `hidl_handle` as `Fence`. 33582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 33682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] t The source `hidl_handle`. 33782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] buffer The pointer to the flat non-fd buffer. 33882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] size The size of the flat non-fd buffer. 33982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] fds The pointer to the flat fd buffer. 34082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] numFds The size of the flat fd buffer. 34182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \return `NO_ERROR` on success; other value on failure. 34282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 343b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasastatus_t flattenFence(hidl_handle const& fence, 344b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasa void*& buffer, size_t& size, int*& fds, size_t& numFds); 34582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 34682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 34782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Wrap `Fence` in `hidl_handle`. 34882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 34982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[out] t The wrapper of type `hidl_handle`. 35082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[out] nh The native handle pointed to by \p t. 35182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] l The source `Fence`. 35282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 35382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * On success, \p nh will hold a newly created native handle, which must be 35482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * deleted manually with `native_handle_delete()` afterwards. 35582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 35682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim// wrap: Fence -> hidl_handle 357b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasabool wrapAs(hidl_handle* t, native_handle_t** nh, Fence const& l); 35882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 35982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 36082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Convert `hidl_handle` to `Fence`. 36182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 36282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[out] l The destination `Fence`. `l` must not have been used 36382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * (`l->isValid()` must return `false`) before this function is called. 36482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] t The source `hidl_handle`. 36582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 36682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * If \p t contains a valid file descriptor, it will be duplicated. 36782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 36882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim// convert: hidl_handle -> Fence 369b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasabool convertTo(Fence* l, hidl_handle const& t); 37082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 37182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim// Ref: frameworks/native/libs/ui/FenceTime.cpp: FenceTime::Snapshot 37282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 37382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 37482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Return the size of the non-fd buffer required to flatten 37582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * `FenceTimeSnapshot`. 37682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 37782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] t The input `FenceTimeSnapshot`. 37882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \return The required size of the flat buffer. 37982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 380b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasasize_t getFlattenedSize(HGraphicBufferProducer::FenceTimeSnapshot const& t); 38182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 38282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 38382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Return the number of file descriptors contained in 38482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * `FenceTimeSnapshot`. 38582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 38682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] t The input `FenceTimeSnapshot`. 38782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \return The number of file descriptors contained in \p snapshot. 38882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 389b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasasize_t getFdCount(HGraphicBufferProducer::FenceTimeSnapshot const& t); 39082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 39182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 39282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Flatten `FenceTimeSnapshot`. 39382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 39482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] t The source `FenceTimeSnapshot`. 39582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] buffer The pointer to the flat non-fd buffer. 39682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] size The size of the flat non-fd buffer. 39782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] fds The pointer to the flat fd buffer. 39882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] numFds The size of the flat fd buffer. 39982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \return `NO_ERROR` on success; other value on failure. 40082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 40182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * This function will duplicate the file descriptor in `t.fence` if `t.state == 40282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * FENCE`. 40382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 404b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasastatus_t flatten(HGraphicBufferProducer::FenceTimeSnapshot const& t, 405b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasa void*& buffer, size_t& size, int*& fds, size_t& numFds); 40682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 40782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 40882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Unflatten `FenceTimeSnapshot`. 40982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 41082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[out] t The destination `FenceTimeSnapshot`. 41182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[out] nh The underlying native handle. 41282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] buffer The pointer to the flat non-fd buffer. 41382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] size The size of the flat non-fd buffer. 41482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] fds The pointer to the flat fd buffer. 41582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] numFds The size of the flat fd buffer. 41682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \return `NO_ERROR` on success; other value on failure. 41782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 41882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * If the return value is `NO_ERROR` and the constructed snapshot contains a 41982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * file descriptor, \p nh will be created to hold that file descriptor. In this 42082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * case, \p nh needs to be deleted with `native_handle_delete()` afterwards. 42182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 422b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasastatus_t unflatten( 42382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim HGraphicBufferProducer::FenceTimeSnapshot* t, native_handle_t** nh, 424b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasa void const*& buffer, size_t& size, int const*& fds, size_t& numFds); 42582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 42682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim// Ref: frameworks/native/libs/gui/FrameTimestamps.cpp: FrameEventsDelta 42782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 42882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 42982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Return the size of the non-fd buffer required to flatten 43082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * `FrameEventsDelta`. 43182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 43282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] t The input `FrameEventsDelta`. 43382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \return The required size of the flat buffer. 43482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 435b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasasize_t getFlattenedSize(HGraphicBufferProducer::FrameEventsDelta const& t); 43682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 43782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 43882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Return the number of file descriptors contained in 43982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * `FrameEventsDelta`. 44082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 44182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] t The input `FrameEventsDelta`. 44282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \return The number of file descriptors contained in \p t. 44382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 444b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasasize_t getFdCount(HGraphicBufferProducer::FrameEventsDelta const& t); 44582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 44682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 44782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Unflatten `FrameEventsDelta`. 44882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 44982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[out] t The destination `FrameEventsDelta`. 45082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[out] nh The underlying array of native handles. 45182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] buffer The pointer to the flat non-fd buffer. 45282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] size The size of the flat non-fd buffer. 45382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] fds The pointer to the flat fd buffer. 45482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] numFds The size of the flat fd buffer. 45582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \return `NO_ERROR` on success; other value on failure. 45682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 45782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * If the return value is `NO_ERROR`, \p nh will have length 4, and it will be 45882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * populated with `nullptr` or newly created handles. Each non-null slot in \p 45982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * nh will need to be deleted manually with `native_handle_delete()`. 46082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 461b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasastatus_t unflatten(HGraphicBufferProducer::FrameEventsDelta* t, 46282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim std::vector<native_handle_t*>* nh, 463b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasa void const*& buffer, size_t& size, int const*& fds, size_t& numFds); 46482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 46582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 46682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Flatten `FrameEventsDelta`. 46782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 46882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] t The source `FrameEventsDelta`. 46982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] buffer The pointer to the flat non-fd buffer. 47082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] size The size of the flat non-fd buffer. 47182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] fds The pointer to the flat fd buffer. 47282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] numFds The size of the flat fd buffer. 47382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \return `NO_ERROR` on success; other value on failure. 47482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 47582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * This function will duplicate file descriptors contained in \p t. 47682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 47782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim// Ref: frameworks/native/libs/gui/FrameTimestamp.cpp: 47882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim// FrameEventsDelta::flatten 479b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasastatus_t flatten(HGraphicBufferProducer::FrameEventsDelta const& t, 480b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasa void*& buffer, size_t& size, int*& fds, size_t numFds); 48182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 48282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim// Ref: frameworks/native/libs/gui/FrameTimestamps.cpp: FrameEventHistoryDelta 48382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 48482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 48582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Return the size of the non-fd buffer required to flatten 48682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * `HGraphicBufferProducer::FrameEventHistoryDelta`. 48782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 48882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] t The input `HGraphicBufferProducer::FrameEventHistoryDelta`. 48982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \return The required size of the flat buffer. 49082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 491b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasasize_t getFlattenedSize( 492b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasa HGraphicBufferProducer::FrameEventHistoryDelta const& t); 49382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 49482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 49582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Return the number of file descriptors contained in 49682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * `HGraphicBufferProducer::FrameEventHistoryDelta`. 49782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 49882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] t The input `HGraphicBufferProducer::FrameEventHistoryDelta`. 49982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \return The number of file descriptors contained in \p t. 50082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 501b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasasize_t getFdCount( 502b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasa HGraphicBufferProducer::FrameEventHistoryDelta const& t); 50382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 50482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 50582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Unflatten `FrameEventHistoryDelta`. 50682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 50782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[out] t The destination `FrameEventHistoryDelta`. 50882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[out] nh The underlying array of arrays of native handles. 50982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] buffer The pointer to the flat non-fd buffer. 51082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] size The size of the flat non-fd buffer. 51182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] fds The pointer to the flat fd buffer. 51282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] numFds The size of the flat fd buffer. 51382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \return `NO_ERROR` on success; other value on failure. 51482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 51582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * If the return value is `NO_ERROR`, \p nh will be populated with `nullptr` or 51682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * newly created handles. The second dimension of \p nh will be 4. Each non-null 51782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * slot in \p nh will need to be deleted manually with `native_handle_delete()`. 51882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 519b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasastatus_t unflatten( 52082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim HGraphicBufferProducer::FrameEventHistoryDelta* t, 52182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim std::vector<std::vector<native_handle_t*> >* nh, 522b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasa void const*& buffer, size_t& size, int const*& fds, size_t& numFds); 52382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 52482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 52582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Flatten `FrameEventHistoryDelta`. 52682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 52782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] t The source `FrameEventHistoryDelta`. 52882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] buffer The pointer to the flat non-fd buffer. 52982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] size The size of the flat non-fd buffer. 53082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] fds The pointer to the flat fd buffer. 53182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] numFds The size of the flat fd buffer. 53282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \return `NO_ERROR` on success; other value on failure. 53382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 53482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * This function will duplicate file descriptors contained in \p t. 53582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 536b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasastatus_t flatten( 53782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim HGraphicBufferProducer::FrameEventHistoryDelta const& t, 538b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasa void*& buffer, size_t& size, int*& fds, size_t& numFds); 53982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 54082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 54182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Wrap `::android::FrameEventHistoryData` in 54282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * `HGraphicBufferProducer::FrameEventHistoryDelta`. 54382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 54482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[out] t The wrapper of type 54582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * `HGraphicBufferProducer::FrameEventHistoryDelta`. 54682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[out] nh The array of array of native handles that are referred to by 54782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * members of \p t. 54882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] l The source `::android::FrameEventHistoryDelta`. 54982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 55082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * On success, each member of \p nh will be either `nullptr` or a newly created 55182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * native handle. All the non-`nullptr` elements must be deleted individually 55282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * with `native_handle_delete()`. 55382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 554b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasabool wrapAs(HGraphicBufferProducer::FrameEventHistoryDelta* t, 55582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim std::vector<std::vector<native_handle_t*> >* nh, 556b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasa ::android::FrameEventHistoryDelta const& l); 55782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 55882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 55982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Convert `HGraphicBufferProducer::FrameEventHistoryDelta` to 56082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * `::android::FrameEventHistoryDelta`. 56182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 56282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[out] l The destination `::android::FrameEventHistoryDelta`. 56382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] t The source `HGraphicBufferProducer::FrameEventHistoryDelta`. 56482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 56582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * This function will duplicate all file descriptors contained in \p t. 56682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 567b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasabool convertTo( 56882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim ::android::FrameEventHistoryDelta* l, 569b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasa HGraphicBufferProducer::FrameEventHistoryDelta const& t); 57082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 57182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim// Ref: frameworks/native/libs/ui/Region.cpp 57282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 57382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 57482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Return the size of the buffer required to flatten `Region`. 57582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 57682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] t The input `Region`. 57782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \return The required size of the flat buffer. 57882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 579b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasasize_t getFlattenedSize(Region const& t); 58082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 58182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 58282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Unflatten `Region`. 58382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 58482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[out] t The destination `Region`. 58582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] buffer The pointer to the flat buffer. 58682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] size The size of the flat buffer. 58782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \return `NO_ERROR` on success; other value on failure. 58882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 589b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasastatus_t unflatten(Region* t, void const*& buffer, size_t& size); 59082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 59182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 59282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Flatten `Region`. 59382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 59482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] t The source `Region`. 59582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] buffer The pointer to the flat buffer. 59682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] size The size of the flat buffer. 59782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \return `NO_ERROR` on success; other value on failure. 59882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 599b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasastatus_t flatten(Region const& t, void*& buffer, size_t& size); 60082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 60182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 60282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Convert `::android::Region` to `Region`. 60382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 60482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[out] t The destination `Region`. 60582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] l The source `::android::Region`. 60682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 60782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim// convert: ::android::Region -> Region 608b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasabool convertTo(Region* t, ::android::Region const& l); 60982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 61082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 61182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Convert `Region` to `::android::Region`. 61282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 61382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[out] l The destination `::android::Region`. 61482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] t The source `Region`. 61582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 61682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim// convert: Region -> ::android::Region 617b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasabool convertTo(::android::Region* l, Region const& t); 61882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 61982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim// Ref: frameworks/native/libs/gui/BGraphicBufferProducer.cpp: 62082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim// BGraphicBufferProducer::QueueBufferInput 62182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 62282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 62382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Return the size of the buffer required to flatten 62482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * `HGraphicBufferProducer::QueueBufferInput`. 62582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 62682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] t The input `HGraphicBufferProducer::QueueBufferInput`. 62782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \return The required size of the flat buffer. 62882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 629b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasasize_t getFlattenedSize(HGraphicBufferProducer::QueueBufferInput const& t); 63082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 63182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 63282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Return the number of file descriptors contained in 63382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * `HGraphicBufferProducer::QueueBufferInput`. 63482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 63582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] t The input `HGraphicBufferProducer::QueueBufferInput`. 63682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \return The number of file descriptors contained in \p t. 63782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 638b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasasize_t getFdCount( 639b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasa HGraphicBufferProducer::QueueBufferInput const& t); 64082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 64182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Flatten `HGraphicBufferProducer::QueueBufferInput`. 64282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 64382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] t The source `HGraphicBufferProducer::QueueBufferInput`. 64482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[out] nh The native handle cloned from `t.fence`. 64582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] buffer The pointer to the flat non-fd buffer. 64682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] size The size of the flat non-fd buffer. 64782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] fds The pointer to the flat fd buffer. 64882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] numFds The size of the flat fd buffer. 64982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \return `NO_ERROR` on success; other value on failure. 65082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 65182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * This function will duplicate the file descriptor in `t.fence`. */ 652b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasastatus_t flatten(HGraphicBufferProducer::QueueBufferInput const& t, 65382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim native_handle_t** nh, 654b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasa void*& buffer, size_t& size, int*& fds, size_t& numFds); 65582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 65682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 65782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Unflatten `HGraphicBufferProducer::QueueBufferInput`. 65882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 65982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[out] t The destination `HGraphicBufferProducer::QueueBufferInput`. 66082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[out] nh The underlying native handle for `t->fence`. 66182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] buffer The pointer to the flat non-fd buffer. 66282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] size The size of the flat non-fd buffer. 66382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] fds The pointer to the flat fd buffer. 66482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in,out] numFds The size of the flat fd buffer. 66582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \return `NO_ERROR` on success; other value on failure. 66682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 66782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * If the return value is `NO_ERROR` and `t->fence` contains a valid file 66882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * descriptor, \p nh will be a newly created native handle holding that file 66982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * descriptor. \p nh needs to be deleted with `native_handle_delete()` 67082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * afterwards. 67182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 672b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasastatus_t unflatten( 67382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim HGraphicBufferProducer::QueueBufferInput* t, native_handle_t** nh, 674b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasa void const*& buffer, size_t& size, int const*& fds, size_t& numFds); 67582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 67682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 67782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Wrap `BGraphicBufferProducer::QueueBufferInput` in 67882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * `HGraphicBufferProducer::QueueBufferInput`. 67982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 68082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[out] t The wrapper of type 68182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * `HGraphicBufferProducer::QueueBufferInput`. 68282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[out] nh The underlying native handle for `t->fence`. 68382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] l The source `BGraphicBufferProducer::QueueBufferInput`. 68482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 68582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * If the return value is `true` and `t->fence` contains a valid file 68682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * descriptor, \p nh will be a newly created native handle holding that file 68782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * descriptor. \p nh needs to be deleted with `native_handle_delete()` 68882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * afterwards. 68982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 690b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasabool wrapAs( 69182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim HGraphicBufferProducer::QueueBufferInput* t, 69282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim native_handle_t** nh, 693b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasa BGraphicBufferProducer::QueueBufferInput const& l); 69482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 69582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 69682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Convert `HGraphicBufferProducer::QueueBufferInput` to 69782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * `BGraphicBufferProducer::QueueBufferInput`. 69882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 69982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[out] l The destination `BGraphicBufferProducer::QueueBufferInput`. 70082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] t The source `HGraphicBufferProducer::QueueBufferInput`. 70182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 70282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * If `t.fence` has a valid file descriptor, it will be duplicated. 70382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 704b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasabool convertTo( 70582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim BGraphicBufferProducer::QueueBufferInput* l, 706b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasa HGraphicBufferProducer::QueueBufferInput const& t); 70782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 70882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim// Ref: frameworks/native/libs/gui/BGraphicBufferProducer.cpp: 70982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim// BGraphicBufferProducer::QueueBufferOutput 71082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 71182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 71282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Wrap `BGraphicBufferProducer::QueueBufferOutput` in 71382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * `HGraphicBufferProducer::QueueBufferOutput`. 71482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 71582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[out] t The wrapper of type 71682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * `HGraphicBufferProducer::QueueBufferOutput`. 71782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[out] nh The array of array of native handles that are referred to by 71882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * members of \p t. 71982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] l The source `BGraphicBufferProducer::QueueBufferOutput`. 72082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 72182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * On success, each member of \p nh will be either `nullptr` or a newly created 72282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * native handle. All the non-`nullptr` elements must be deleted individually 72382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * with `native_handle_delete()`. 72482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 72582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim// wrap: BGraphicBufferProducer::QueueBufferOutput -> 72682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim// HGraphicBufferProducer::QueueBufferOutput 727b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasabool wrapAs(HGraphicBufferProducer::QueueBufferOutput* t, 72882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim std::vector<std::vector<native_handle_t*> >* nh, 729b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasa BGraphicBufferProducer::QueueBufferOutput const& l); 73082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 73182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 73282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Convert `HGraphicBufferProducer::QueueBufferOutput` to 73382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * `BGraphicBufferProducer::QueueBufferOutput`. 73482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 73582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[out] l The destination `BGraphicBufferProducer::QueueBufferOutput`. 73682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] t The source `HGraphicBufferProducer::QueueBufferOutput`. 73782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 73882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * This function will duplicate all file descriptors contained in \p t. 73982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 74082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim// convert: HGraphicBufferProducer::QueueBufferOutput -> 74182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim// BGraphicBufferProducer::QueueBufferOutput 742b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasabool convertTo( 74382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim BGraphicBufferProducer::QueueBufferOutput* l, 744b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasa HGraphicBufferProducer::QueueBufferOutput const& t); 74582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 74682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 74782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Convert `BGraphicBufferProducer::DisconnectMode` to 74882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * `HGraphicBufferProducer::DisconnectMode`. 74982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 75082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] l The source `BGraphicBufferProducer::DisconnectMode`. 75182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \return The corresponding `HGraphicBufferProducer::DisconnectMode`. 75282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 753b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin VongmasaHGraphicBufferProducer::DisconnectMode toHidlDisconnectMode( 754b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasa BGraphicBufferProducer::DisconnectMode l); 75582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 75682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim/** 75782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \brief Convert `HGraphicBufferProducer::DisconnectMode` to 75882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * `BGraphicBufferProducer::DisconnectMode`. 75982832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * 76082832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \param[in] l The source `HGraphicBufferProducer::DisconnectMode`. 76182832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim * \return The corresponding `BGraphicBufferProducer::DisconnectMode`. 76282832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim */ 763b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin VongmasaBGraphicBufferProducer::DisconnectMode toGuiDisconnectMode( 764b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasa HGraphicBufferProducer::DisconnectMode t); 76582832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 76682832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim} // namespace conversion 76782832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim} // namespace android 76882832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim 769b5d108dbdf2559858a5d1705eeb7bdc4c0a019c2Pawin Vongmasa#endif // MEDIA_STAGEFRIGHT_BQHELPER_CONVERSION_H_ 770