173dd808754c641fe798273d356ee38368715fa7bLajos Molnar/* 273dd808754c641fe798273d356ee38368715fa7bLajos Molnar * Copyright (C) 2016 The Android Open Source Project 373dd808754c641fe798273d356ee38368715fa7bLajos Molnar * 473dd808754c641fe798273d356ee38368715fa7bLajos Molnar * Licensed under the Apache License, Version 2.0 (the "License"); 573dd808754c641fe798273d356ee38368715fa7bLajos Molnar * you may not use this file except in compliance with the License. 673dd808754c641fe798273d356ee38368715fa7bLajos Molnar * You may obtain a copy of the License at 773dd808754c641fe798273d356ee38368715fa7bLajos Molnar * 873dd808754c641fe798273d356ee38368715fa7bLajos Molnar * http://www.apache.org/licenses/LICENSE-2.0 973dd808754c641fe798273d356ee38368715fa7bLajos Molnar * 1073dd808754c641fe798273d356ee38368715fa7bLajos Molnar * Unless required by applicable law or agreed to in writing, software 1173dd808754c641fe798273d356ee38368715fa7bLajos Molnar * distributed under the License is distributed on an "AS IS" BASIS, 1273dd808754c641fe798273d356ee38368715fa7bLajos Molnar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1373dd808754c641fe798273d356ee38368715fa7bLajos Molnar * See the License for the specific language governing permissions and 1473dd808754c641fe798273d356ee38368715fa7bLajos Molnar * limitations under the License. 1573dd808754c641fe798273d356ee38368715fa7bLajos Molnar */ 1673dd808754c641fe798273d356ee38368715fa7bLajos Molnar 1773dd808754c641fe798273d356ee38368715fa7bLajos Molnar//#define LOG_NDEBUG 0 1873dd808754c641fe798273d356ee38368715fa7bLajos Molnar#define LOG_TAG "OMXUtils" 1973dd808754c641fe798273d356ee38368715fa7bLajos Molnar 2073dd808754c641fe798273d356ee38368715fa7bLajos Molnar#include <string.h> 2173dd808754c641fe798273d356ee38368715fa7bLajos Molnar 2273dd808754c641fe798273d356ee38368715fa7bLajos Molnar#include <media/hardware/HardwareAPI.h> 2373dd808754c641fe798273d356ee38368715fa7bLajos Molnar#include <media/stagefright/MediaErrors.h> 2473dd808754c641fe798273d356ee38368715fa7bLajos Molnar#include "OMXUtils.h" 2573dd808754c641fe798273d356ee38368715fa7bLajos Molnar 2673dd808754c641fe798273d356ee38368715fa7bLajos Molnarnamespace android { 2773dd808754c641fe798273d356ee38368715fa7bLajos Molnar 2873dd808754c641fe798273d356ee38368715fa7bLajos Molnarstatus_t StatusFromOMXError(OMX_ERRORTYPE err) { 2973dd808754c641fe798273d356ee38368715fa7bLajos Molnar switch (err) { 3073dd808754c641fe798273d356ee38368715fa7bLajos Molnar case OMX_ErrorNone: 3173dd808754c641fe798273d356ee38368715fa7bLajos Molnar return OK; 3273dd808754c641fe798273d356ee38368715fa7bLajos Molnar case OMX_ErrorUnsupportedSetting: 3373dd808754c641fe798273d356ee38368715fa7bLajos Molnar case OMX_ErrorUnsupportedIndex: 3473dd808754c641fe798273d356ee38368715fa7bLajos Molnar return ERROR_UNSUPPORTED; // this is a media specific error 3573dd808754c641fe798273d356ee38368715fa7bLajos Molnar case OMX_ErrorInsufficientResources: 3673dd808754c641fe798273d356ee38368715fa7bLajos Molnar return NO_MEMORY; 3773dd808754c641fe798273d356ee38368715fa7bLajos Molnar case OMX_ErrorInvalidComponentName: 3873dd808754c641fe798273d356ee38368715fa7bLajos Molnar case OMX_ErrorComponentNotFound: 3973dd808754c641fe798273d356ee38368715fa7bLajos Molnar return NAME_NOT_FOUND; 4073dd808754c641fe798273d356ee38368715fa7bLajos Molnar default: 4173dd808754c641fe798273d356ee38368715fa7bLajos Molnar return UNKNOWN_ERROR; 4273dd808754c641fe798273d356ee38368715fa7bLajos Molnar } 4373dd808754c641fe798273d356ee38368715fa7bLajos Molnar} 4473dd808754c641fe798273d356ee38368715fa7bLajos Molnar 4573dd808754c641fe798273d356ee38368715fa7bLajos Molnar/**************************************************************************************************/ 4673dd808754c641fe798273d356ee38368715fa7bLajos Molnar 4773dd808754c641fe798273d356ee38368715fa7bLajos MolnarDescribeColorFormatParams::DescribeColorFormatParams(const DescribeColorFormat2Params ¶ms) { 4873dd808754c641fe798273d356ee38368715fa7bLajos Molnar InitOMXParams(this); 4973dd808754c641fe798273d356ee38368715fa7bLajos Molnar 5073dd808754c641fe798273d356ee38368715fa7bLajos Molnar eColorFormat = params.eColorFormat; 5173dd808754c641fe798273d356ee38368715fa7bLajos Molnar nFrameWidth = params.nFrameWidth; 5273dd808754c641fe798273d356ee38368715fa7bLajos Molnar nFrameHeight = params.nFrameHeight; 5373dd808754c641fe798273d356ee38368715fa7bLajos Molnar nStride = params.nStride; 5473dd808754c641fe798273d356ee38368715fa7bLajos Molnar nSliceHeight = params.nSliceHeight; 5573dd808754c641fe798273d356ee38368715fa7bLajos Molnar bUsingNativeBuffers = params.bUsingNativeBuffers; 5673dd808754c641fe798273d356ee38368715fa7bLajos Molnar // we don't copy media images as this conversion is only used pre-query 5773dd808754c641fe798273d356ee38368715fa7bLajos Molnar}; 5873dd808754c641fe798273d356ee38368715fa7bLajos Molnar 5973dd808754c641fe798273d356ee38368715fa7bLajos Molnarvoid DescribeColorFormat2Params::initFromV1(const DescribeColorFormatParams ¶ms) { 6073dd808754c641fe798273d356ee38368715fa7bLajos Molnar InitOMXParams(this); 6173dd808754c641fe798273d356ee38368715fa7bLajos Molnar 6273dd808754c641fe798273d356ee38368715fa7bLajos Molnar eColorFormat = params.eColorFormat; 6373dd808754c641fe798273d356ee38368715fa7bLajos Molnar nFrameWidth = params.nFrameWidth; 6473dd808754c641fe798273d356ee38368715fa7bLajos Molnar nFrameHeight = params.nFrameHeight; 6573dd808754c641fe798273d356ee38368715fa7bLajos Molnar nStride = params.nStride; 6673dd808754c641fe798273d356ee38368715fa7bLajos Molnar nSliceHeight = params.nSliceHeight; 6773dd808754c641fe798273d356ee38368715fa7bLajos Molnar bUsingNativeBuffers = params.bUsingNativeBuffers; 6873dd808754c641fe798273d356ee38368715fa7bLajos Molnar sMediaImage.initFromV1(params.sMediaImage); 6973dd808754c641fe798273d356ee38368715fa7bLajos Molnar}; 7073dd808754c641fe798273d356ee38368715fa7bLajos Molnar 7173dd808754c641fe798273d356ee38368715fa7bLajos Molnarvoid MediaImage2::initFromV1(const MediaImage &image) { 7273dd808754c641fe798273d356ee38368715fa7bLajos Molnar memset(this, 0, sizeof(*this)); 7373dd808754c641fe798273d356ee38368715fa7bLajos Molnar 7473dd808754c641fe798273d356ee38368715fa7bLajos Molnar if (image.mType != MediaImage::MEDIA_IMAGE_TYPE_YUV) { 7573dd808754c641fe798273d356ee38368715fa7bLajos Molnar mType = MediaImage2::MEDIA_IMAGE_TYPE_UNKNOWN; 7673dd808754c641fe798273d356ee38368715fa7bLajos Molnar return; 7773dd808754c641fe798273d356ee38368715fa7bLajos Molnar } 7873dd808754c641fe798273d356ee38368715fa7bLajos Molnar 7973dd808754c641fe798273d356ee38368715fa7bLajos Molnar for (size_t ix = 0; ix < image.mNumPlanes; ++ix) { 8073dd808754c641fe798273d356ee38368715fa7bLajos Molnar if (image.mPlane[ix].mHorizSubsampling > INT32_MAX 8173dd808754c641fe798273d356ee38368715fa7bLajos Molnar || image.mPlane[ix].mVertSubsampling > INT32_MAX) { 8273dd808754c641fe798273d356ee38368715fa7bLajos Molnar mType = MediaImage2::MEDIA_IMAGE_TYPE_UNKNOWN; 8373dd808754c641fe798273d356ee38368715fa7bLajos Molnar return; 8473dd808754c641fe798273d356ee38368715fa7bLajos Molnar } 8573dd808754c641fe798273d356ee38368715fa7bLajos Molnar } 8673dd808754c641fe798273d356ee38368715fa7bLajos Molnar 8773dd808754c641fe798273d356ee38368715fa7bLajos Molnar mType = (MediaImage2::Type)image.mType; 8873dd808754c641fe798273d356ee38368715fa7bLajos Molnar mNumPlanes = image.mNumPlanes; 8973dd808754c641fe798273d356ee38368715fa7bLajos Molnar mWidth = image.mWidth; 9073dd808754c641fe798273d356ee38368715fa7bLajos Molnar mHeight = image.mHeight; 9173dd808754c641fe798273d356ee38368715fa7bLajos Molnar mBitDepth = image.mBitDepth; 9273dd808754c641fe798273d356ee38368715fa7bLajos Molnar mBitDepthAllocated = 8; 9373dd808754c641fe798273d356ee38368715fa7bLajos Molnar for (size_t ix = 0; ix < image.mNumPlanes; ++ix) { 9473dd808754c641fe798273d356ee38368715fa7bLajos Molnar mPlane[ix].mOffset = image.mPlane[ix].mOffset; 9573dd808754c641fe798273d356ee38368715fa7bLajos Molnar mPlane[ix].mColInc = image.mPlane[ix].mColInc; 9673dd808754c641fe798273d356ee38368715fa7bLajos Molnar mPlane[ix].mRowInc = image.mPlane[ix].mRowInc; 9773dd808754c641fe798273d356ee38368715fa7bLajos Molnar mPlane[ix].mHorizSubsampling = (int32_t)image.mPlane[ix].mHorizSubsampling; 9873dd808754c641fe798273d356ee38368715fa7bLajos Molnar mPlane[ix].mVertSubsampling = (int32_t)image.mPlane[ix].mVertSubsampling; 9973dd808754c641fe798273d356ee38368715fa7bLajos Molnar } 10073dd808754c641fe798273d356ee38368715fa7bLajos Molnar} 10173dd808754c641fe798273d356ee38368715fa7bLajos Molnar 10273dd808754c641fe798273d356ee38368715fa7bLajos Molnar/**************************************************************************************************/ 10373dd808754c641fe798273d356ee38368715fa7bLajos Molnar 10473dd808754c641fe798273d356ee38368715fa7bLajos Molnar} // namespace android 10573dd808754c641fe798273d356ee38368715fa7bLajos Molnar 106