14344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim/* 24344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim * Copyright (C) 2018 The Android Open Source Project 34344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim * 44344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim * Licensed under the Apache License, Version 2.0 (the "License"); 54344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim * you may not use this file except in compliance with the License. 64344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim * You may obtain a copy of the License at 74344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim * 84344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim * http://www.apache.org/licenses/LICENSE-2.0 94344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim * 104344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim * Unless required by applicable law or agreed to in writing, software 114344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim * distributed under the License is distributed on an "AS IS" BASIS, 124344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim * See the License for the specific language governing permissions and 144344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim * limitations under the License. 154344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim */ 164344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim 174344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim#ifndef ANDROID_STAGEFRIGHT_C2PARAM_INTERNAL_H_ 184344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim#define ANDROID_STAGEFRIGHT_C2PARAM_INTERNAL_H_ 194344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim 204344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim#include <C2Param.h> 214344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim 224344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kimstruct C2_HIDE _C2ParamInspector { 234344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim inline static uint32_t GetOffset(const C2FieldDescriptor &fd) { 244344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim return fd._mFieldId._mOffset; 254344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim } 264344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim 2766f2b455c5bd1d38b5d06d39ffbad8a9d30a060aLajos Molnar inline static void SetOffset(C2FieldDescriptor &fd, uint32_t offset) { 2866f2b455c5bd1d38b5d06d39ffbad8a9d30a060aLajos Molnar fd._mFieldId._mOffset = offset; 2966f2b455c5bd1d38b5d06d39ffbad8a9d30a060aLajos Molnar } 3066f2b455c5bd1d38b5d06d39ffbad8a9d30a060aLajos Molnar 3163884071081694791fb0074ad6a4b1faf3455297Lajos Molnar inline static uint32_t GetEndOffset(const C2FieldDescriptor &fd, uint32_t paramSize = 0) { 3263884071081694791fb0074ad6a4b1faf3455297Lajos Molnar uint32_t endOffset = fd._mFieldId._mOffset + fd._mExtent * fd._mFieldId._mSize; 3363884071081694791fb0074ad6a4b1faf3455297Lajos Molnar /// for flex parameters return paramSize if given 3463884071081694791fb0074ad6a4b1faf3455297Lajos Molnar return fd._mExtent ? endOffset : std::max(endOffset, paramSize); 3563884071081694791fb0074ad6a4b1faf3455297Lajos Molnar } 3663884071081694791fb0074ad6a4b1faf3455297Lajos Molnar 374344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim inline static uint32_t GetSize(const C2FieldDescriptor &fd) { 384344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim return fd._mFieldId._mSize; 394344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim } 404344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim 414344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim inline static uint32_t GetIndex(const C2ParamField &pf) { 424344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim return pf._mIndex; 434344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim } 444344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim 454344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim inline static uint32_t GetOffset(const C2ParamField &pf) { 464344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim return pf._mFieldId._mOffset; 474344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim } 484344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim 494344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim inline static uint32_t GetSize(const C2ParamField &pf) { 504344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim return pf._mFieldId._mSize; 514344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim } 524344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim 5308aa7f79d0b194faf05864645b1f81ad6964267bLajos Molnar inline static uint32_t GetOffset(const _C2FieldId &f) { 5408aa7f79d0b194faf05864645b1f81ad6964267bLajos Molnar return f._mOffset; 5508aa7f79d0b194faf05864645b1f81ad6964267bLajos Molnar } 5608aa7f79d0b194faf05864645b1f81ad6964267bLajos Molnar 5708aa7f79d0b194faf05864645b1f81ad6964267bLajos Molnar inline static uint32_t GetSize(const _C2FieldId &f) { 5808aa7f79d0b194faf05864645b1f81ad6964267bLajos Molnar return f._mSize; 5908aa7f79d0b194faf05864645b1f81ad6964267bLajos Molnar } 6008aa7f79d0b194faf05864645b1f81ad6964267bLajos Molnar 6108aa7f79d0b194faf05864645b1f81ad6964267bLajos Molnar inline static _C2FieldId GetField(const C2FieldDescriptor &fd) { 6208aa7f79d0b194faf05864645b1f81ad6964267bLajos Molnar return fd._mFieldId; 6308aa7f79d0b194faf05864645b1f81ad6964267bLajos Molnar } 6408aa7f79d0b194faf05864645b1f81ad6964267bLajos Molnar 654344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim inline static uint32_t GetAttrib(const C2ParamDescriptor &pd) { 664344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim return pd._mAttrib; 674344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim } 684344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim 6908aa7f79d0b194faf05864645b1f81ad6964267bLajos Molnar inline static _C2FieldId GetField(const C2ParamField &pf) { 7008aa7f79d0b194faf05864645b1f81ad6964267bLajos Molnar return pf._mFieldId; 7108aa7f79d0b194faf05864645b1f81ad6964267bLajos Molnar } 7208aa7f79d0b194faf05864645b1f81ad6964267bLajos Molnar 734344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim inline static 744344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim C2ParamField CreateParamField(C2Param::Index index, uint32_t offset, uint32_t size) { 754344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim return C2ParamField(index, offset, size); 764344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim } 774344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim 784344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim inline static 794344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim C2ParamField CreateParamField(C2Param::Index index, _C2FieldId field) { 804344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim return C2ParamField(index, field._mOffset, field._mSize); 814344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim } 824344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim 833bce60a27e0b0a996e42bd2c9e5bf60373db2780Lajos Molnar inline static 843bce60a27e0b0a996e42bd2c9e5bf60373db2780Lajos Molnar void TrimParam(C2Param *param, uint32_t newSize) { 853bce60a27e0b0a996e42bd2c9e5bf60373db2780Lajos Molnar if (param && *param && param->size() > newSize && newSize >= sizeof(C2Param)) { 863bce60a27e0b0a996e42bd2c9e5bf60373db2780Lajos Molnar param->_mSize = newSize; 873bce60a27e0b0a996e42bd2c9e5bf60373db2780Lajos Molnar } 883bce60a27e0b0a996e42bd2c9e5bf60373db2780Lajos Molnar } 893bce60a27e0b0a996e42bd2c9e5bf60373db2780Lajos Molnar 90e1769037aea395c60e88cb882f2fd14d88036d24Lajos Molnar inline static void AddNamedValues( 91e1769037aea395c60e88cb882f2fd14d88036d24Lajos Molnar C2FieldDescriptor &fd, C2FieldDescriptor::NamedValuesType &&namedValues) { 92e1769037aea395c60e88cb882f2fd14d88036d24Lajos Molnar fd._mNamedValues = std::move(namedValues); 93e1769037aea395c60e88cb882f2fd14d88036d24Lajos Molnar } 94e1769037aea395c60e88cb882f2fd14d88036d24Lajos Molnar 95e1769037aea395c60e88cb882f2fd14d88036d24Lajos Molnar inline static 96e1769037aea395c60e88cb882f2fd14d88036d24Lajos Molnar C2StructDescriptor CreateStructDescriptor(C2Param::CoreIndex index, 97e1769037aea395c60e88cb882f2fd14d88036d24Lajos Molnar std::vector<C2FieldDescriptor> &&fields) { 98e1769037aea395c60e88cb882f2fd14d88036d24Lajos Molnar return C2StructDescriptor(index, std::move(fields)); 99e1769037aea395c60e88cb882f2fd14d88036d24Lajos Molnar } 100e1769037aea395c60e88cb882f2fd14d88036d24Lajos Molnar 10163884071081694791fb0074ad6a4b1faf3455297Lajos Molnar inline static 10263884071081694791fb0074ad6a4b1faf3455297Lajos Molnar C2FieldDescriptor OffsetFieldDescriptor(const C2FieldDescriptor &fd, size_t offset) { 10363884071081694791fb0074ad6a4b1faf3455297Lajos Molnar return C2FieldDescriptor(fd, offset); 10463884071081694791fb0074ad6a4b1faf3455297Lajos Molnar } 10563884071081694791fb0074ad6a4b1faf3455297Lajos Molnar 1064344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim // expose attributes 1074344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim typedef C2ParamDescriptor::attrib_t attrib_t; 1084344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim}; 1094344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim 1104344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim#endif // ANDROID_STAGEFRIGHT_C2PARAM_INTERNAL_H_ 1114344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim 112