From 9ed80aa8e2998f0b073a4948991abbc8609ec428 Mon Sep 17 00:00:00 2001 From: Pawit Pornkitprasan Date: Sat, 18 Aug 2012 16:28:55 +0700 Subject: aries-common: Use exynos3 common Change-Id: I337ba107f248992d7e08be9f45efeb78529f8ba8 --- device_base.mk | 14 +- include/hal_public.h | 171 -- include/s3c_bc.h | 63 - include/s3c_mem.h | 56 - include/s5p_fimc.h | 153 -- include/sec_format.h | 43 - include/sec_lcd.h | 49 - include/sec_utils.h | 331 ---- include/videodev2_samsung.h | 638 -------- libcamera/Android.mk | 4 +- libhwcomposer/Android.mk | 32 - libhwcomposer/SecHWC.cpp | 688 -------- libhwcomposer/SecHWCUtils.cpp | 880 ----------- libhwcomposer/SecHWCUtils.h | 143 -- libs3cjpeg/Android.mk | 34 - libs3cjpeg/Exif.h | 233 --- libs3cjpeg/JpegEncoder.cpp | 796 ---------- libs3cjpeg/JpegEncoder.h | 240 --- libstagefrighthw/Android.mk | 26 - libstagefrighthw/SEC_OMX_Plugin.cpp | 149 -- libstagefrighthw/SEC_OMX_Plugin.h | 76 - sec_mm/Android.mk | 5 - sec_mm/sec_omx/Android.mk | 22 - sec_mm/sec_omx/sec_codecs/Android.mk | 7 - .../sec_codecs/video/mfc_c110/csc/Android.mk | 36 - .../video/mfc_c110/csc/color_space_convertor.c | 1092 ------------- .../video/mfc_c110/csc/csc_deinterleave_memcpy.s | 128 -- .../video/mfc_c110/csc/csc_interleave_memcpy.s | 133 -- .../video/mfc_c110/csc/csc_nv12t_yuv420_uv_neon.s | 768 --------- .../video/mfc_c110/csc/csc_nv12t_yuv420_y_neon.s | 680 -------- .../video/mfc_c110/csc/csc_yuv420_nv12t_uv_neon.s | 573 ------- .../video/mfc_c110/csc/csc_yuv420_nv12t_y_neon.s | 451 ------ .../sec_codecs/video/mfc_c110/dec/Android.mk | 26 - .../video/mfc_c110/dec/src/SsbSipMfcDecAPI.c | 518 ------ .../sec_codecs/video/mfc_c110/enc/Android.mk | 26 - .../video/mfc_c110/enc/src/SsbSipMfcEncAPI.c | 686 -------- .../video/mfc_c110/include/SsbSipMfcApi.h | 332 ---- .../video/mfc_c110/include/color_space_convertor.h | 176 --- .../video/mfc_c110/include/mfc_interface.h | 347 ---- sec_mm/sec_omx/sec_omx_component/common/Android.mk | 24 - .../common/SEC_OMX_Basecomponent.c | 1486 ------------------ .../common/SEC_OMX_Basecomponent.h | 174 --- .../sec_omx_component/common/SEC_OMX_Baseport.c | 1009 ------------ .../sec_omx_component/common/SEC_OMX_Baseport.h | 98 -- .../common/SEC_OMX_Resourcemanager.c | 383 ----- .../common/SEC_OMX_Resourcemanager.h | 59 - .../sec_omx/sec_omx_component/video/dec/Android.mk | 20 - .../sec_omx_component/video/dec/SEC_OMX_Vdec.c | 1389 ---------------- .../sec_omx_component/video/dec/SEC_OMX_Vdec.h | 129 -- .../sec_omx_component/video/dec/h264dec/Android.mk | 30 - .../video/dec/h264dec/SEC_OMX_H264dec.c | 1479 ------------------ .../video/dec/h264dec/SEC_OMX_H264dec.h | 73 - .../video/dec/h264dec/library_register.c | 55 - .../video/dec/h264dec/library_register.h | 55 - .../video/dec/mpeg4dec/Android.mk | 30 - .../video/dec/mpeg4dec/SEC_OMX_Mpeg4dec.c | 1652 -------------------- .../video/dec/mpeg4dec/SEC_OMX_Mpeg4dec.h | 98 -- .../video/dec/mpeg4dec/library_register.c | 63 - .../video/dec/mpeg4dec/library_register.h | 59 - .../sec_omx/sec_omx_component/video/enc/Android.mk | 20 - .../sec_omx_component/video/enc/SEC_OMX_Venc.c | 1467 ----------------- .../sec_omx_component/video/enc/SEC_OMX_Venc.h | 137 -- .../sec_omx_component/video/enc/h264enc/Android.mk | 30 - .../video/enc/h264enc/SEC_OMX_H264enc.c | 1307 ---------------- .../video/enc/h264enc/SEC_OMX_H264enc.h | 83 - .../video/enc/h264enc/library_register.c | 55 - .../video/enc/h264enc/library_register.h | 55 - .../video/enc/mpeg4enc/Android.mk | 30 - .../video/enc/mpeg4enc/SEC_OMX_Mpeg4enc.c | 1516 ------------------ .../video/enc/mpeg4enc/SEC_OMX_Mpeg4enc.h | 83 - .../video/enc/mpeg4enc/library_register.c | 64 - .../video/enc/mpeg4enc/library_register.h | 59 - sec_mm/sec_omx/sec_omx_core/Android.mk | 25 - .../sec_omx_core/SEC_OMX_Component_Register.c | 269 ---- .../sec_omx_core/SEC_OMX_Component_Register.h | 75 - sec_mm/sec_omx/sec_omx_core/SEC_OMX_Core.c | 363 ----- sec_mm/sec_omx/sec_omx_core/SEC_OMX_Core.h | 78 - sec_mm/sec_omx/sec_omx_core/secomxregistry | 4 - sec_mm/sec_omx/sec_omx_include/khronos/OMX_Audio.h | 1311 ---------------- .../sec_omx_include/khronos/OMX_Component.h | 579 ------- .../sec_omx_include/khronos/OMX_ContentPipe.h | 195 --- sec_mm/sec_omx/sec_omx_include/khronos/OMX_Core.h | 1431 ----------------- .../sec_omx/sec_omx_include/khronos/OMX_IVCommon.h | 920 ----------- sec_mm/sec_omx/sec_omx_include/khronos/OMX_Image.h | 328 ---- sec_mm/sec_omx/sec_omx_include/khronos/OMX_Index.h | 258 --- sec_mm/sec_omx/sec_omx_include/khronos/OMX_Other.h | 337 ---- sec_mm/sec_omx/sec_omx_include/khronos/OMX_Types.h | 347 ---- sec_mm/sec_omx/sec_omx_include/khronos/OMX_Video.h | 1060 ------------- sec_mm/sec_omx/sec_omx_include/sec/SEC_OMX_Def.h | 154 -- .../sec_omx/sec_omx_include/sec/SEC_OMX_Macros.h | 64 - sec_mm/sec_omx/sec_osal/Android.mk | 38 - sec_mm/sec_omx/sec_osal/SEC_OSAL_Buffer.cpp | 456 ------ sec_mm/sec_omx/sec_osal/SEC_OSAL_Buffer.h | 66 - sec_mm/sec_omx/sec_osal/SEC_OSAL_ETC.c | 144 -- sec_mm/sec_omx/sec_osal/SEC_OSAL_ETC.h | 48 - sec_mm/sec_omx/sec_osal/SEC_OSAL_Event.c | 217 --- sec_mm/sec_omx/sec_osal/SEC_OSAL_Event.h | 61 - sec_mm/sec_omx/sec_osal/SEC_OSAL_Library.c | 54 - sec_mm/sec_omx/sec_osal/SEC_OSAL_Library.h | 46 - sec_mm/sec_omx/sec_osal/SEC_OSAL_Log.c | 53 - sec_mm/sec_omx/sec_osal/SEC_OSAL_Log.h | 78 - sec_mm/sec_omx/sec_osal/SEC_OSAL_Memory.c | 71 - sec_mm/sec_omx/sec_osal/SEC_OSAL_Memory.h | 47 - sec_mm/sec_omx/sec_osal/SEC_OSAL_Mutex.c | 91 -- sec_mm/sec_omx/sec_osal/SEC_OSAL_Mutex.h | 47 - sec_mm/sec_omx/sec_osal/SEC_OSAL_Queue.c | 174 --- sec_mm/sec_omx/sec_osal/SEC_OSAL_Queue.h | 66 - sec_mm/sec_omx/sec_osal/SEC_OSAL_Semaphore.c | 132 -- sec_mm/sec_omx/sec_osal/SEC_OSAL_Semaphore.h | 49 - sec_mm/sec_omx/sec_osal/SEC_OSAL_Thread.c | 153 -- sec_mm/sec_omx/sec_osal/SEC_OSAL_Thread.h | 48 - 111 files changed, 9 insertions(+), 34024 deletions(-) delete mode 100644 include/hal_public.h delete mode 100755 include/s3c_bc.h delete mode 100755 include/s3c_mem.h delete mode 100755 include/s5p_fimc.h delete mode 100755 include/sec_format.h delete mode 100755 include/sec_lcd.h delete mode 100644 include/sec_utils.h delete mode 100755 include/videodev2_samsung.h delete mode 100644 libhwcomposer/Android.mk delete mode 100644 libhwcomposer/SecHWC.cpp delete mode 100644 libhwcomposer/SecHWCUtils.cpp delete mode 100644 libhwcomposer/SecHWCUtils.h delete mode 100644 libs3cjpeg/Android.mk delete mode 100644 libs3cjpeg/Exif.h delete mode 100644 libs3cjpeg/JpegEncoder.cpp delete mode 100644 libs3cjpeg/JpegEncoder.h delete mode 100644 libstagefrighthw/Android.mk delete mode 100644 libstagefrighthw/SEC_OMX_Plugin.cpp delete mode 100644 libstagefrighthw/SEC_OMX_Plugin.h delete mode 100644 sec_mm/Android.mk delete mode 100644 sec_mm/sec_omx/Android.mk delete mode 100644 sec_mm/sec_omx/sec_codecs/Android.mk delete mode 100644 sec_mm/sec_omx/sec_codecs/video/mfc_c110/csc/Android.mk delete mode 100644 sec_mm/sec_omx/sec_codecs/video/mfc_c110/csc/color_space_convertor.c delete mode 100644 sec_mm/sec_omx/sec_codecs/video/mfc_c110/csc/csc_deinterleave_memcpy.s delete mode 100644 sec_mm/sec_omx/sec_codecs/video/mfc_c110/csc/csc_interleave_memcpy.s delete mode 100644 sec_mm/sec_omx/sec_codecs/video/mfc_c110/csc/csc_nv12t_yuv420_uv_neon.s delete mode 100644 sec_mm/sec_omx/sec_codecs/video/mfc_c110/csc/csc_nv12t_yuv420_y_neon.s delete mode 100644 sec_mm/sec_omx/sec_codecs/video/mfc_c110/csc/csc_yuv420_nv12t_uv_neon.s delete mode 100644 sec_mm/sec_omx/sec_codecs/video/mfc_c110/csc/csc_yuv420_nv12t_y_neon.s delete mode 100644 sec_mm/sec_omx/sec_codecs/video/mfc_c110/dec/Android.mk delete mode 100644 sec_mm/sec_omx/sec_codecs/video/mfc_c110/dec/src/SsbSipMfcDecAPI.c delete mode 100644 sec_mm/sec_omx/sec_codecs/video/mfc_c110/enc/Android.mk delete mode 100644 sec_mm/sec_omx/sec_codecs/video/mfc_c110/enc/src/SsbSipMfcEncAPI.c delete mode 100644 sec_mm/sec_omx/sec_codecs/video/mfc_c110/include/SsbSipMfcApi.h delete mode 100644 sec_mm/sec_omx/sec_codecs/video/mfc_c110/include/color_space_convertor.h delete mode 100644 sec_mm/sec_omx/sec_codecs/video/mfc_c110/include/mfc_interface.h delete mode 100644 sec_mm/sec_omx/sec_omx_component/common/Android.mk delete mode 100644 sec_mm/sec_omx/sec_omx_component/common/SEC_OMX_Basecomponent.c delete mode 100644 sec_mm/sec_omx/sec_omx_component/common/SEC_OMX_Basecomponent.h delete mode 100644 sec_mm/sec_omx/sec_omx_component/common/SEC_OMX_Baseport.c delete mode 100644 sec_mm/sec_omx/sec_omx_component/common/SEC_OMX_Baseport.h delete mode 100644 sec_mm/sec_omx/sec_omx_component/common/SEC_OMX_Resourcemanager.c delete mode 100644 sec_mm/sec_omx/sec_omx_component/common/SEC_OMX_Resourcemanager.h delete mode 100644 sec_mm/sec_omx/sec_omx_component/video/dec/Android.mk delete mode 100644 sec_mm/sec_omx/sec_omx_component/video/dec/SEC_OMX_Vdec.c delete mode 100644 sec_mm/sec_omx/sec_omx_component/video/dec/SEC_OMX_Vdec.h delete mode 100644 sec_mm/sec_omx/sec_omx_component/video/dec/h264dec/Android.mk delete mode 100644 sec_mm/sec_omx/sec_omx_component/video/dec/h264dec/SEC_OMX_H264dec.c delete mode 100644 sec_mm/sec_omx/sec_omx_component/video/dec/h264dec/SEC_OMX_H264dec.h delete mode 100644 sec_mm/sec_omx/sec_omx_component/video/dec/h264dec/library_register.c delete mode 100644 sec_mm/sec_omx/sec_omx_component/video/dec/h264dec/library_register.h delete mode 100644 sec_mm/sec_omx/sec_omx_component/video/dec/mpeg4dec/Android.mk delete mode 100644 sec_mm/sec_omx/sec_omx_component/video/dec/mpeg4dec/SEC_OMX_Mpeg4dec.c delete mode 100644 sec_mm/sec_omx/sec_omx_component/video/dec/mpeg4dec/SEC_OMX_Mpeg4dec.h delete mode 100644 sec_mm/sec_omx/sec_omx_component/video/dec/mpeg4dec/library_register.c delete mode 100644 sec_mm/sec_omx/sec_omx_component/video/dec/mpeg4dec/library_register.h delete mode 100644 sec_mm/sec_omx/sec_omx_component/video/enc/Android.mk delete mode 100644 sec_mm/sec_omx/sec_omx_component/video/enc/SEC_OMX_Venc.c delete mode 100644 sec_mm/sec_omx/sec_omx_component/video/enc/SEC_OMX_Venc.h delete mode 100644 sec_mm/sec_omx/sec_omx_component/video/enc/h264enc/Android.mk delete mode 100644 sec_mm/sec_omx/sec_omx_component/video/enc/h264enc/SEC_OMX_H264enc.c delete mode 100644 sec_mm/sec_omx/sec_omx_component/video/enc/h264enc/SEC_OMX_H264enc.h delete mode 100644 sec_mm/sec_omx/sec_omx_component/video/enc/h264enc/library_register.c delete mode 100644 sec_mm/sec_omx/sec_omx_component/video/enc/h264enc/library_register.h delete mode 100644 sec_mm/sec_omx/sec_omx_component/video/enc/mpeg4enc/Android.mk delete mode 100644 sec_mm/sec_omx/sec_omx_component/video/enc/mpeg4enc/SEC_OMX_Mpeg4enc.c delete mode 100644 sec_mm/sec_omx/sec_omx_component/video/enc/mpeg4enc/SEC_OMX_Mpeg4enc.h delete mode 100644 sec_mm/sec_omx/sec_omx_component/video/enc/mpeg4enc/library_register.c delete mode 100644 sec_mm/sec_omx/sec_omx_component/video/enc/mpeg4enc/library_register.h delete mode 100644 sec_mm/sec_omx/sec_omx_core/Android.mk delete mode 100644 sec_mm/sec_omx/sec_omx_core/SEC_OMX_Component_Register.c delete mode 100644 sec_mm/sec_omx/sec_omx_core/SEC_OMX_Component_Register.h delete mode 100644 sec_mm/sec_omx/sec_omx_core/SEC_OMX_Core.c delete mode 100644 sec_mm/sec_omx/sec_omx_core/SEC_OMX_Core.h delete mode 100644 sec_mm/sec_omx/sec_omx_core/secomxregistry delete mode 100644 sec_mm/sec_omx/sec_omx_include/khronos/OMX_Audio.h delete mode 100644 sec_mm/sec_omx/sec_omx_include/khronos/OMX_Component.h delete mode 100644 sec_mm/sec_omx/sec_omx_include/khronos/OMX_ContentPipe.h delete mode 100644 sec_mm/sec_omx/sec_omx_include/khronos/OMX_Core.h delete mode 100644 sec_mm/sec_omx/sec_omx_include/khronos/OMX_IVCommon.h delete mode 100644 sec_mm/sec_omx/sec_omx_include/khronos/OMX_Image.h delete mode 100644 sec_mm/sec_omx/sec_omx_include/khronos/OMX_Index.h delete mode 100644 sec_mm/sec_omx/sec_omx_include/khronos/OMX_Other.h delete mode 100644 sec_mm/sec_omx/sec_omx_include/khronos/OMX_Types.h delete mode 100644 sec_mm/sec_omx/sec_omx_include/khronos/OMX_Video.h delete mode 100644 sec_mm/sec_omx/sec_omx_include/sec/SEC_OMX_Def.h delete mode 100644 sec_mm/sec_omx/sec_omx_include/sec/SEC_OMX_Macros.h delete mode 100644 sec_mm/sec_omx/sec_osal/Android.mk delete mode 100644 sec_mm/sec_omx/sec_osal/SEC_OSAL_Buffer.cpp delete mode 100644 sec_mm/sec_omx/sec_osal/SEC_OSAL_Buffer.h delete mode 100644 sec_mm/sec_omx/sec_osal/SEC_OSAL_ETC.c delete mode 100644 sec_mm/sec_omx/sec_osal/SEC_OSAL_ETC.h delete mode 100644 sec_mm/sec_omx/sec_osal/SEC_OSAL_Event.c delete mode 100644 sec_mm/sec_omx/sec_osal/SEC_OSAL_Event.h delete mode 100644 sec_mm/sec_omx/sec_osal/SEC_OSAL_Library.c delete mode 100644 sec_mm/sec_omx/sec_osal/SEC_OSAL_Library.h delete mode 100644 sec_mm/sec_omx/sec_osal/SEC_OSAL_Log.c delete mode 100644 sec_mm/sec_omx/sec_osal/SEC_OSAL_Log.h delete mode 100644 sec_mm/sec_omx/sec_osal/SEC_OSAL_Memory.c delete mode 100644 sec_mm/sec_omx/sec_osal/SEC_OSAL_Memory.h delete mode 100644 sec_mm/sec_omx/sec_osal/SEC_OSAL_Mutex.c delete mode 100644 sec_mm/sec_omx/sec_osal/SEC_OSAL_Mutex.h delete mode 100644 sec_mm/sec_omx/sec_osal/SEC_OSAL_Queue.c delete mode 100644 sec_mm/sec_omx/sec_osal/SEC_OSAL_Queue.h delete mode 100644 sec_mm/sec_omx/sec_osal/SEC_OSAL_Semaphore.c delete mode 100644 sec_mm/sec_omx/sec_osal/SEC_OSAL_Semaphore.h delete mode 100644 sec_mm/sec_omx/sec_osal/SEC_OSAL_Thread.c delete mode 100644 sec_mm/sec_omx/sec_osal/SEC_OSAL_Thread.h diff --git a/device_base.mk b/device_base.mk index bb3ba45..0460fab 100644 --- a/device_base.mk +++ b/device_base.mk @@ -80,23 +80,23 @@ PRODUCT_PACKAGES += \ # These are the OpenMAX IL configuration files PRODUCT_COPY_FILES += \ - device/samsung/aries-common/sec_mm/sec_omx/sec_omx_core/secomxregistry:system/etc/secomxregistry \ + hardware/samsung/exynos3/s5pc110/sec_mm/sec_omx/sec_omx_core/secomxregistry:system/etc/secomxregistry \ device/samsung/aries-common/media_profiles.xml:system/etc/media_profiles.xml \ device/samsung/aries-common/media_codecs.xml:system/etc/media_codecs.xml # These are the OpenMAX IL modules PRODUCT_PACKAGES += \ - libSEC_OMX_Core.aries \ - libOMX.SEC.AVC.Decoder.aries \ - libOMX.SEC.M4V.Decoder.aries \ - libOMX.SEC.M4V.Encoder.aries \ - libOMX.SEC.AVC.Encoder.aries + libSEC_OMX_Core \ + libOMX.SEC.AVC.Decoder \ + libOMX.SEC.M4V.Decoder \ + libOMX.SEC.M4V.Encoder \ + libOMX.SEC.AVC.Encoder # Misc other modules PRODUCT_PACKAGES += \ lights.aries \ sensors.aries \ - hwcomposer.aries \ + hwcomposer.s5pc110 \ camera.aries \ audio.primary.aries \ audio_policy.aries \ diff --git a/include/hal_public.h b/include/hal_public.h deleted file mode 100644 index 60f33a9..0000000 --- a/include/hal_public.h +++ /dev/null @@ -1,171 +0,0 @@ -/* Copyright (c) Imagination Technologies Ltd. - * - * The contents of this file are subject to the MIT license as set out below. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#ifndef HAL_PUBLIC_H -#define HAL_PUBLIC_H - -/* Authors of third party hardware composer (HWC) modules will need to include - * this header to access functionality in the gralloc and framebuffer HALs. - */ - -#include - -#define ALIGN(x,a) (((x) + (a) - 1L) & ~((a) - 1L)) -#define HW_ALIGN 32 - -/* This can be tuned down as appropriate for the SOC. - * - * IMG formats are usually a single sub-alloc. - * Some OEM video formats are two sub-allocs (Y, UV planes). - * Future OEM video formats might be three sub-allocs (Y, U, V planes). - */ -#define MAX_SUB_ALLOCS 3 - -typedef struct -{ - native_handle_t base; - - /* These fields can be sent cross process. They are also valid - * to duplicate within the same process. - * - * A table is stored within psPrivateData on gralloc_module_t (this - * is obviously per-process) which maps stamps to a mapped - * PVRSRV_CLIENT_MEM_INFO in that process. Each map entry has a lock - * count associated with it, satisfying the requirements of the - * Android API. This also prevents us from leaking maps/allocations. - * - * This table has entries inserted either by alloc() - * (alloc_device_t) or map() (gralloc_module_t). Entries are removed - * by free() (alloc_device_t) and unmap() (gralloc_module_t). - * - * As a special case for framebuffer_device_t, framebuffer_open() - * will add and framebuffer_close() will remove from this table. - */ - -#define IMG_NATIVE_HANDLE_NUMFDS MAX_SUB_ALLOCS - /* The `fd' field is used to "export" a meminfo to another process. - * Therefore, it is allocated by alloc_device_t, and consumed by - * gralloc_module_t. The framebuffer_device_t does not need a handle, - * and the special value IMG_FRAMEBUFFER_FD is used instead. - */ - int fd[MAX_SUB_ALLOCS]; - -#define IMG_NATIVE_HANDLE_NUMINTS ((sizeof(unsigned long long) / sizeof(int)) + 5) - /* A KERNEL unique identifier for any exported kernel meminfo. Each - * exported kernel meminfo will have a unique stamp, but note that in - * userspace, several meminfos across multiple processes could have - * the same stamp. As the native_handle can be dup(2)'d, there could be - * multiple handles with the same stamp but different file descriptors. - */ - unsigned long long ui64Stamp; - - /* This is used for buffer usage validation when locking a buffer, - * and also in WSEGL (for the composition bypass feature). - */ - int usage; - - //int dummy; - /* In order to do efficient cache flushes we need the buffer dimensions - * and format. These are available on the ANativeWindowBuffer, - * but the platform doesn't pass them down to the graphics HAL. - * - * These fields are also used in the composition bypass. In this - * capacity, these are the "real" values for the backing allocation. - */ - int iWidth; - int iHeight; - int iFormat; - unsigned int uiBpp; -} -__attribute__((aligned(sizeof(int)),packed)) IMG_native_handle_t; - -typedef struct -{ - framebuffer_device_t base; - - /* The HWC was loaded. post() is no longer responsible for presents */ - int bBypassPost; - - /* Custom-blit components in lieu of overlay hardware */ - int (*Blit)(framebuffer_device_t *device, buffer_handle_t src, - buffer_handle_t dest, int w, int h, int x, int y); - - /* HWC path for present posts */ - int (*Post2)(framebuffer_device_t *fb, buffer_handle_t *buffers, - int num_buffers, void *data, int data_length); -} -IMG_framebuffer_device_public_t; - -typedef struct IMG_gralloc_module_public_t -{ - gralloc_module_t base; - - /* If the framebuffer has been opened, this will point to the - * framebuffer device data required by the allocator, WSEGL - * modules and composerhal. - */ - IMG_framebuffer_device_public_t *psFrameBufferDevice; - - int (*GetPhyAddrs)(struct IMG_gralloc_module_public_t const* module, - buffer_handle_t handle, - unsigned int auiPhyAddr[MAX_SUB_ALLOCS]); - /* Custom-blit components in lieu of overlay hardware */ - int (*Blit)(struct IMG_gralloc_module_public_t const *module, - buffer_handle_t src, - void *dest[MAX_SUB_ALLOCS], int format); - - int (*Blit2)(struct IMG_gralloc_module_public_t const *module, - buffer_handle_t src, buffer_handle_t dest, - int w, int h, int x, int y); -} -IMG_gralloc_module_public_t; - -typedef struct -{ - int l, t, w, h; -} -IMG_write_lock_rect_t; - -typedef struct IMG_buffer_format_public_t -{ - /* Buffer formats are returned as a linked list */ - struct IMG_buffer_format_public_t *psNext; - - /* HAL_PIXEL_FORMAT_... enumerant */ - int iHalPixelFormat; - - /* WSEGL_PIXELFORMAT_... enumerant */ - int iWSEGLPixelFormat; - - /* Friendly name for format */ - const char *const szName; - - /* Bits (not bytes) per pixel */ - unsigned int uiBpp; - - /* GPU output format (creates EGLConfig for format) */ - int bGPURenderable; -} -IMG_buffer_format_public_t; - -#endif /* HAL_PUBLIC_H */ diff --git a/include/s3c_bc.h b/include/s3c_bc.h deleted file mode 100755 index e8ea490..0000000 --- a/include/s3c_bc.h +++ /dev/null @@ -1,63 +0,0 @@ -/*!**************************************************************************** -@File s3c_bc.h - -@Title s3c_bc kernel driver parameters - -@Author Imagination Technologies - Samsung Electronics Co. LTD - -@Date 03/03/2010 - -@Copyright Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -@Platform Generic - -@Description s3c_bc kernel driver parameters - -@DoxygenVer - -******************************************************************************/ - -/****************************************************************************** -Modifications :- -$Log: s3c_bc.h $ -******************************************************************************/ -#ifndef __S3C_BC_H__ -#define __S3C_BC_H__ - -#include - -#define S3C_BC_DEVICE_NAME "s3c_bc" - -#define S3C_BC_DEVICE_ID 0 -#define S3C_BC_DEVICE_BUFFER_COUNT 4 /* TODO: Modify this accordingly. */ - -#define S3C_BC_DEVICE_PHYS_PAGE_SIZE 0x1000 /* 4KB */ - -typedef struct S3C_BC_ioctl_package_TAG -{ - int inputparam; - int outputparam; -} S3C_BC_ioctl_package, *PS3C_BC_ioctl_package; - -/*!< Nov 2006: according to ioctl-number.txt 'g' wasn't in use. */ -#define S3C_BC_IOC_GID 'g' - -#define S3C_BC_IOWR(INDEX) _IOWR(S3C_BC_IOC_GID, INDEX, S3C_BC_ioctl_package) - -#define S3C_BC_ioctl_get_physical_base_address S3C_BC_IOWR(0) - -#endif /* __S3C_BC__H__ */ -/****************************************************************************** - End of file (s3c_bc.h) -******************************************************************************/ diff --git a/include/s3c_mem.h b/include/s3c_mem.h deleted file mode 100755 index d51398a..0000000 --- a/include/s3c_mem.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright@ Samsung Electronics Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _S3C_MEM_COMMON_H_ -#define _S3C_MEM_COMMON_H_ - -#define MEM_IOCTL_MAGIC 'M' - -#define S3C_MEM_ALLOC _IOWR(MEM_IOCTL_MAGIC, 310, struct s3c_mem_alloc) -#define S3C_MEM_FREE _IOWR(MEM_IOCTL_MAGIC, 311, struct s3c_mem_alloc) - -#define S3C_MEM_SHARE_ALLOC _IOWR(MEM_IOCTL_MAGIC, 314, struct s3c_mem_alloc) -#define S3C_MEM_SHARE_FREE _IOWR(MEM_IOCTL_MAGIC, 315, struct s3c_mem_alloc) - -#define S3C_MEM_CACHEABLE_ALLOC _IOWR(MEM_IOCTL_MAGIC, 316, struct s3c_mem_alloc) -#define S3C_MEM_CACHEABLE_SHARE_ALLOC _IOWR(MEM_IOCTL_MAGIC, 317, struct s3c_mem_alloc) - -#define S3C_MEM_DMA_COPY _IOWR(MEM_IOCTL_MAGIC, 318, struct s3c_mem_dma_param) -#define S3C_MEM_DMA_SET _IOWR(MEM_IOCTL_MAGIC, 319, struct s3c_mem_dma_param) - -#define S3C_MEM_CACHE_INV _IOWR(MEM_IOCTL_MAGIC, 330, struct s3c_mem_dma_param) - - -struct s3c_mem_alloc { - int size; - unsigned int vir_addr; - unsigned int phy_addr; -}; - -struct s3c_mem_dma_param { - int size; - unsigned int src_addr; - unsigned int dst_addr; - int cfg; -}; - -#if 0 -typedef struct _s3c_mem_t{ - int dev_fd; - struct s3c_mem_alloc mem_alloc_info; -}s3c_mem_t; -#endif -#endif // _S3C_MEM_COMMON_H_ diff --git a/include/s5p_fimc.h b/include/s5p_fimc.h deleted file mode 100755 index d2c760c..0000000 --- a/include/s5p_fimc.h +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Copyright@ Samsung Electronics Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -*/ - -#ifndef _S5P_FIMC_H_ -#define _S5P_FIMC_H_ - -#include - -/* - * G E N E R A L S - * -*/ -#define MIN(x, y) ((x < y) ? x : y) - -/* - * P I X E L F O R M A T G U I D E - * - * The 'x' means 'DO NOT CARE' - * The '*' means 'FIMC SPECIFIC' - * For some fimc formats, we couldn't find equivalent format in the V4L2 FOURCC. - * - * FIMC TYPE PLANES ORDER V4L2_PIX_FMT - * --------------------------------------------------------- - * RGB565 x x V4L2_PIX_FMT_RGB565 - * RGB888 x x V4L2_PIX_FMT_RGB24 - * YUV420 2 LSB_CBCR V4L2_PIX_FMT_NV12 - * YUV420 2 LSB_CRCB V4L2_PIX_FMT_NV21 - * YUV420 2 MSB_CBCR V4L2_PIX_FMT_NV21X* - * YUV420 2 MSB_CRCB V4L2_PIX_FMT_NV12X* - * YUV420 3 x V4L2_PIX_FMT_YUV420 - * YUV422 1 YCBYCR V4L2_PIX_FMT_YUYV - * YUV422 1 YCRYCB V4L2_PIX_FMT_YVYU - * YUV422 1 CBYCRY V4L2_PIX_FMT_UYVY - * YUV422 1 CRYCBY V4L2_PIX_FMT_VYUY* - * YUV422 2 LSB_CBCR V4L2_PIX_FMT_NV16* - * YUV422 2 LSB_CRCB V4L2_PIX_FMT_NV61* - * YUV422 2 MSB_CBCR V4L2_PIX_FMT_NV16X* - * YUV422 2 MSB_CRCB V4L2_PIX_FMT_NV61X* - * YUV422 3 x V4L2_PIX_FMT_YUV422P - * -*/ - -/* - * V 4 L 2 F I M C E X T E N S I O N S - * -*/ -#define V4L2_PIX_FMT_YVYU v4l2_fourcc('Y', 'V', 'Y', 'U') - -/* FOURCC for FIMC specific */ -#define V4L2_PIX_FMT_NV12X v4l2_fourcc('N', '1', '2', 'X') -#define V4L2_PIX_FMT_NV21X v4l2_fourcc('N', '2', '1', 'X') -#define V4L2_PIX_FMT_VYUY v4l2_fourcc('V', 'Y', 'U', 'Y') -#define V4L2_PIX_FMT_NV16 v4l2_fourcc('N', 'V', '1', '6') -#define V4L2_PIX_FMT_NV61 v4l2_fourcc('N', 'V', '6', '1') -#define V4L2_PIX_FMT_NV16X v4l2_fourcc('N', '1', '6', 'X') -#define V4L2_PIX_FMT_NV61X v4l2_fourcc('N', '6', '1', 'X') - -#define V4L2_PIX_FMT_NV12T v4l2_fourcc('T', 'V', '1', '2') /* 12 Y/CbCr 4:2:0 64x32 macroblocks */ - -/* CID extensions */ -#define V4L2_CID_ROTATION (V4L2_CID_PRIVATE_BASE + 0) -#define V4L2_CID_RESERVED_MEM_BASE_ADDR (V4L2_CID_PRIVATE_BASE + 20) -#define V4L2_CID_FIMC_VERSION (V4L2_CID_PRIVATE_BASE + 21) -/* - * U S E R D E F I N E D T Y P E S - * -*/ - -typedef unsigned int dma_addr_t; - -struct fimc_buf { - dma_addr_t base[3]; - size_t length[3]; -}; - -struct fimc_buffer { - void *virt_addr; - void *phys_addr; - size_t length; -}; - -struct yuv_fmt_list { - const char *name; - const char *desc; - unsigned int fmt; - int bpp; - int planes; -}; - -struct img_offset { - int y_h; - int y_v; - int cb_h; - int cb_v; - int cr_h; - int cr_v; -}; - -//------------ STRUCT ---------------------------------------------------------// - -typedef struct -{ - unsigned int full_width; // Source Image Full Width (Virtual screen size) - unsigned int full_height; // Source Image Full Height (Virtual screen size) - unsigned int start_x; // Source Image Start width offset - unsigned int start_y; // Source Image Start height offset - unsigned int width; // Source Image Width - unsigned int height; // Source Image Height - unsigned int buf_addr_phy_rgb_y; // Base Address of the Source Image (RGB or Y): Physical Address - unsigned int buf_addr_phy_cb; // Base Address of the Source Image (CB Component) : Physical Address - unsigned int buf_addr_phy_cr; // Base Address of the Source Image (CR Component) : Physical Address - unsigned int color_space; // Color Space of the Source Image -} s5p_fimc_img_info; - -typedef struct -{ - s5p_fimc_img_info src; - s5p_fimc_img_info dst; -} s5p_fimc_params_t; - -typedef struct _s5p_fimc_t { - int dev_fd; - struct fimc_buffer out_buf; - - s5p_fimc_params_t params; - - int use_ext_out_mem; - unsigned int hw_ver; -}s5p_fimc_t; - -//------------------------ functions for v4l2 ------------------------------// -int fimc_v4l2_set_src(int fd, unsigned int hw_ver, s5p_fimc_img_info *src); -int fimc_v4l2_set_dst(int fd, s5p_fimc_img_info *dst, int rotation, unsigned int addr); -int fimc_v4l2_stream_on(int fd, enum v4l2_buf_type type); -int fimc_v4l2_queue(int fd, struct fimc_buf *fimc_buf); -int fimc_v4l2_dequeue(int fd); -int fimc_v4l2_stream_off(int fd); -int fimc_v4l2_clr_buf(int fd); -int fimc_handle_oneshot(int fd, struct fimc_buf *fimc_buf); -#endif diff --git a/include/sec_format.h b/include/sec_format.h deleted file mode 100755 index 13604a9..0000000 --- a/include/sec_format.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright@ Samsung Electronics Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -*/ - -#ifndef _SEC_FORMAT_H_ -#define _SEC_FORMAT_H_ - -/* enum related to pixel format */ - -enum { - SAMSUNG_HAL_PIXEL_FORMAT_YCbCr_420_SP = 0x100, - SAMSUNG_HAL_PIXEL_FORMAT_YCbCr_420_P = 0x101, - SAMSUNG_HAL_PIXEL_FORMAT_YCbCr_420_I = 0x102, - SAMSUNG_HAL_PIXEL_FORMAT_CbYCrY_422_I = 0x103, - SAMSUNG_HAL_PIXEL_FORMAT_CbYCrY_420_I = 0x104, - SAMSUNG_HAL_PIXEL_FORMAT_YCbCr_422_P = 0x105, - SAMSUNG_HAL_PIXEL_FORMAT_YCrCb_422_SP = 0x106, - // support custom format for zero copy - SAMSUNG_HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP = 0x110, - SAMSUNG_HAL_PIXEL_FORMAT_CUSTOM_YCrCb_420_SP = 0x111, - SAMSUNG_HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP_TILED = 0x112, - SAMSUNG_HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_SP = 0x113, - SAMSUNG_HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_SP = 0x114, - SAMSUNG_HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_I = 0x115, - SAMSUNG_HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_I = 0x116, - SAMSUNG_HAL_PIXEL_FORMAT_CUSTOM_CbYCrY_422_I = 0x117, - SAMSUNG_HAL_PIXEL_FORMAT_CUSTOM_CrYCbY_422_I = 0x118, - SAMSUNG_HAL_PIXEL_FORMAT_CUSTOM_MAX -}; - -#endif diff --git a/include/sec_lcd.h b/include/sec_lcd.h deleted file mode 100755 index 6a3a34a..0000000 --- a/include/sec_lcd.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright@ Samsung Electronics Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _SEC_FB_LCD_ -#define _SEC_FB_LCD_ - -/* - * S T R U C T U R E S F O R C U S T O M I O C T L S - * -*/ -struct secfb_user_window { - int x; - int y; -}; - -/* - * C U S T O M I O C T L S - * -*/ - -#define FBIO_WAITFORVSYNC _IO ('F', 32) -#define SECFB_WIN_POSITION _IOW ('F', 203, struct secfb_user_window) -#define S3CFB_SET_VSYNC_INT _IOW ('F', 206, uint32_t) - -#define DEFAULT_LCD_WIDTH (480) -#define DEFAULT_LCD_HEIGHT (800) -#define DEFAULT_LCD_BPP (32) - -/***************** LCD frame buffer *****************/ -#define FB0_NAME "/dev/fb0" -#define FB1_NAME "/dev/fb1" -#define FB2_NAME "/dev/fb2" -#define FB3_NAME "/dev/fb3" -#define FB4_NAME "/dev/fb4" - -#endif diff --git a/include/sec_utils.h b/include/sec_utils.h deleted file mode 100644 index c414155..0000000 --- a/include/sec_utils.h +++ /dev/null @@ -1,331 +0,0 @@ -/* - * Copyright@ Samsung Electronics Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -*/ - -#ifndef __SAMSUNG_SYSLSI_SEC_COMMON_H__ -#define __SAMSUNG_SYSLSI_SEC_COMMON_H__ - -//---------------------------------------------------------// -// Include -//---------------------------------------------------------// - -#include -#include "sec_format.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -#ifdef __cplusplus -} -#endif - -//---------------------------------------------------------// -// Common structure // -//---------------------------------------------------------// -struct ADDRS { - unsigned int addr_y; - unsigned int addr_cbcr; - unsigned int buf_idx; - unsigned int reserved; -}; - -//---------------------------------------------------------// -// Common function // -//---------------------------------------------------------// -inline int HAL_PIXEL_FORMAT_2_V4L2_PIX(int HAL_PIXEL_FORMAT) -{ - int V4L2_PIX = -1; - - switch (HAL_PIXEL_FORMAT) { - case HAL_PIXEL_FORMAT_RGBA_8888: - case HAL_PIXEL_FORMAT_RGBX_8888: - V4L2_PIX = V4L2_PIX_FMT_RGB32; - break; - - case HAL_PIXEL_FORMAT_RGB_888: - V4L2_PIX = V4L2_PIX_FMT_RGB24; - break; - - case HAL_PIXEL_FORMAT_RGB_565: - V4L2_PIX = V4L2_PIX_FMT_RGB565; - break; - - case HAL_PIXEL_FORMAT_BGRA_8888: - //V4L2_PIX = V4L2_PIX_FMT_BGR32; // this is not proper on fimc. - V4L2_PIX = V4L2_PIX_FMT_RGB32; - break; - - case HAL_PIXEL_FORMAT_RGBA_5551: - V4L2_PIX = V4L2_PIX_FMT_RGB555X; - break; - - case HAL_PIXEL_FORMAT_RGBA_4444: - V4L2_PIX = V4L2_PIX_FMT_RGB444; - break; - - case HAL_PIXEL_FORMAT_YV12: - case SAMSUNG_HAL_PIXEL_FORMAT_YCbCr_420_P: - V4L2_PIX = V4L2_PIX_FMT_YUV420; - break; - - case HAL_PIXEL_FORMAT_YCbCr_422_SP: - case SAMSUNG_HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_SP: - V4L2_PIX = V4L2_PIX_FMT_NV61; - break; - - case SAMSUNG_HAL_PIXEL_FORMAT_YCbCr_420_SP: - case SAMSUNG_HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP: - V4L2_PIX = V4L2_PIX_FMT_NV12; - break; - - case HAL_PIXEL_FORMAT_YCbCr_422_I: - case SAMSUNG_HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_I: - V4L2_PIX = V4L2_PIX_FMT_YUYV; - break; - - case SAMSUNG_HAL_PIXEL_FORMAT_YCbCr_422_P: - V4L2_PIX = V4L2_PIX_FMT_YUV422P; - break; - - case SAMSUNG_HAL_PIXEL_FORMAT_CbYCrY_422_I: - case SAMSUNG_HAL_PIXEL_FORMAT_CUSTOM_CbYCrY_422_I: - V4L2_PIX = V4L2_PIX_FMT_UYVY; - break; - - case SAMSUNG_HAL_PIXEL_FORMAT_YCrCb_422_SP: - case SAMSUNG_HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_SP: - V4L2_PIX = V4L2_PIX_FMT_NV16; - break; - - case HAL_PIXEL_FORMAT_YCrCb_420_SP: - case SAMSUNG_HAL_PIXEL_FORMAT_CUSTOM_YCrCb_420_SP: - V4L2_PIX = V4L2_PIX_FMT_NV21; - break; - - case SAMSUNG_HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP_TILED: - V4L2_PIX = V4L2_PIX_FMT_NV12T; - break; - - case SAMSUNG_HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_I: - V4L2_PIX = V4L2_PIX_FMT_YVYU; - break; - - case SAMSUNG_HAL_PIXEL_FORMAT_CUSTOM_CrYCbY_422_I: - V4L2_PIX = V4L2_PIX_FMT_VYUY; - break; - - default: - ALOGE("%s::unmatched HAL_PIXEL_FORMAT color_space(0x%x)\n", - __func__, HAL_PIXEL_FORMAT); - break; - } - - return V4L2_PIX; -} - -inline int V4L2_PIX_2_HAL_PIXEL_FORMAT(int V4L2_PIX) -{ - int HAL_PIXEL_FORMAT = -1; - - switch (V4L2_PIX) { - case V4L2_PIX_FMT_RGB32: - HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_RGBA_8888; - //HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_RGBX_8888; - break; - - case V4L2_PIX_FMT_RGB24: - HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_RGB_888; - break; - - case V4L2_PIX_FMT_RGB565: - HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_RGB_565; - break; - - case V4L2_PIX_FMT_BGR32: - HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_BGRA_8888; - break; - - case V4L2_PIX_FMT_RGB555X: - HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_RGBA_5551; - break; - - case V4L2_PIX_FMT_RGB444: - HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_RGBA_4444; - break; - - case V4L2_PIX_FMT_YUV420: - //HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_YV12; - HAL_PIXEL_FORMAT = SAMSUNG_HAL_PIXEL_FORMAT_YCbCr_420_P; - break; - - case V4L2_PIX_FMT_NV16: - //HAL_PIXEL_FORMAT = SAMSUNG_HAL_PIXEL_FORMAT_YCrCb_422_SP; - HAL_PIXEL_FORMAT = SAMSUNG_HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_SP; - break; - - case V4L2_PIX_FMT_NV12: - //HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_YCrCb_420_SP; - HAL_PIXEL_FORMAT = SAMSUNG_HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP; - break; - - case V4L2_PIX_FMT_YUYV: - //HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_YCbCr_422_I; - HAL_PIXEL_FORMAT = SAMSUNG_HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_I; - break; - - case V4L2_PIX_FMT_YUV422P: - HAL_PIXEL_FORMAT = SAMSUNG_HAL_PIXEL_FORMAT_YCbCr_422_P; - break; - - case V4L2_PIX_FMT_UYVY: - //HAL_PIXEL_FORMAT = SAMSUNG_HAL_PIXEL_FORMAT_CbYCrY_422_I; - HAL_PIXEL_FORMAT = SAMSUNG_HAL_PIXEL_FORMAT_CUSTOM_CbYCrY_422_I; - break; - - case V4L2_PIX_FMT_NV21: - //HAL_PIXEL_FORMAT = SAMSUNG_HAL_PIXEL_FORMAT_YCbCr_420_SP; - HAL_PIXEL_FORMAT = SAMSUNG_HAL_PIXEL_FORMAT_CUSTOM_YCrCb_420_SP; - break; - - case V4L2_PIX_FMT_NV12T: - HAL_PIXEL_FORMAT = SAMSUNG_HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP_TILED; - break; - - case V4L2_PIX_FMT_NV61: - HAL_PIXEL_FORMAT = SAMSUNG_HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_SP; - break; - - case V4L2_PIX_FMT_YVYU: - HAL_PIXEL_FORMAT = SAMSUNG_HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_I; - break; - - case V4L2_PIX_FMT_VYUY: - HAL_PIXEL_FORMAT = SAMSUNG_HAL_PIXEL_FORMAT_CUSTOM_CrYCbY_422_I; - break; - - default: - ALOGE("%s::unmatched V4L2_PIX color_space(%d)\n", - __func__, V4L2_PIX); - break; - } - - return HAL_PIXEL_FORMAT; -} - -#define ALIGN_TO_32B(x) ((((x) + (1 << 5) - 1) >> 5) << 5) -#define ALIGN_TO_128B(x) ((((x) + (1 << 7) - 1) >> 7) << 7) -#define ALIGN_TO_8KB(x) ((((x) + (1 << 13) - 1) >> 13) << 13) - -#define GET_32BPP_FRAME_SIZE(w, h) (((w) * (h)) << 2) -#define GET_24BPP_FRAME_SIZE(w, h) (((w) * (h)) * 3) -#define GET_16BPP_FRAME_SIZE(w, h) (((w) * (h)) << 1) - -inline unsigned int FRAME_SIZE(int HAL_PIXEL_FORMAT, int w, int h) -{ - unsigned int frame_size = 0; - unsigned int size = 0; - - switch (HAL_PIXEL_FORMAT) { - // 16bpp - case HAL_PIXEL_FORMAT_RGB_565: - case HAL_PIXEL_FORMAT_RGBA_5551: - //case HAL_PIXEL_FORMAT_ARGB_1555: - //case HAL_PIXEL_FORMAT_BGRA_5551: - //case HAL_PIXEL_FORMAT_ABGR_1555: - - //case HAL_PIXEL_FORMAT_RGBX_5551: - //case HAL_PIXEL_FORMAT_XRGB_1555: - //case HAL_PIXEL_FORMAT_BGRX_5551: - //case HAL_PIXEL_FORMAT_XBGR_1555: - - case HAL_PIXEL_FORMAT_RGBA_4444: - //case HAL_PIXEL_FORMAT_ARGB_4444: - //case HAL_PIXEL_FORMAT_BGRA_4444: - //case HAL_PIXEL_FORMAT_ABGR_4444: - - //case HAL_PIXEL_FORMAT_RGBX_4444: - //case HAL_PIXEL_FORMAT_XRGB_4444: - //case HAL_PIXEL_FORMAT_BGRX_4444: - //case HAL_PIXEL_FORMAT_XBGR_4444: - frame_size = GET_16BPP_FRAME_SIZE(w, h); - break; - - // 24bpp - case HAL_PIXEL_FORMAT_RGB_888: - frame_size = GET_24BPP_FRAME_SIZE(w, h); - break; - - // 32bpp - case HAL_PIXEL_FORMAT_RGBA_8888: - //case HAL_PIXEL_FORMAT_ARGB_8888: - case HAL_PIXEL_FORMAT_BGRA_8888: - //case HAL_PIXEL_FORMAT_ABGR_8888: - - case HAL_PIXEL_FORMAT_RGBX_8888: - //case HAL_PIXEL_FORMAT_XRGB_8888: - //case HAL_PIXEL_FORMAT_BGRX_8888: - //case HAL_PIXEL_FORMAT_XBGR_8888: - frame_size = GET_32BPP_FRAME_SIZE(w, h); - break; - - // 12bpp - case HAL_PIXEL_FORMAT_YV12: - case HAL_PIXEL_FORMAT_YCrCb_420_SP: - case SAMSUNG_HAL_PIXEL_FORMAT_YCbCr_420_P: - case SAMSUNG_HAL_PIXEL_FORMAT_YCbCr_420_I: - case SAMSUNG_HAL_PIXEL_FORMAT_CbYCrY_420_I: - case SAMSUNG_HAL_PIXEL_FORMAT_YCbCr_420_SP: - case SAMSUNG_HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP: - case SAMSUNG_HAL_PIXEL_FORMAT_CUSTOM_YCrCb_420_SP: - size = w * h; - // frame_size = width * height * 3 / 2; - // sw5771.park : very curious... - // frame_size = size + ((size / 4) * 2); - frame_size = size + ((size >> 2) << 1); - break; - - case SAMSUNG_HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP_TILED: - frame_size = ALIGN_TO_8KB(ALIGN_TO_128B(w) * ALIGN_TO_32B(h)) - + ALIGN_TO_8KB(ALIGN_TO_128B(w) * ALIGN_TO_32B(h >> 1)); - break; - - // 16bpp - case HAL_PIXEL_FORMAT_YCbCr_422_SP: - case HAL_PIXEL_FORMAT_YCbCr_422_I: - case SAMSUNG_HAL_PIXEL_FORMAT_YCbCr_422_P: - case SAMSUNG_HAL_PIXEL_FORMAT_CbYCrY_422_I: - case SAMSUNG_HAL_PIXEL_FORMAT_YCrCb_422_SP: - case SAMSUNG_HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_SP: - case SAMSUNG_HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_SP: - case SAMSUNG_HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_I: - case SAMSUNG_HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_I: - case SAMSUNG_HAL_PIXEL_FORMAT_CUSTOM_CbYCrY_422_I: - case SAMSUNG_HAL_PIXEL_FORMAT_CUSTOM_CrYCbY_422_I: - frame_size = GET_16BPP_FRAME_SIZE(w, h); - break; - - default: - ALOGD("%s::no matching source colorformat(0x%x), w(%d), h(%d) fail\n", - __func__, HAL_PIXEL_FORMAT, w, h); - break; - } - - return frame_size; -} - -#endif //__SAMSUNG_SYSLSI_SEC_COMMON_H__ diff --git a/include/videodev2_samsung.h b/include/videodev2_samsung.h deleted file mode 100755 index 6c3fd7f..0000000 --- a/include/videodev2_samsung.h +++ /dev/null @@ -1,638 +0,0 @@ -/* - * Video for Linux Two header file for samsung - * - * Copyright (C) 2009, Samsung Electronics - * - * This header file contains several v4l2 APIs to be proposed to v4l2 - * community and until bein accepted, will be used restrictly in Samsung's - * camera interface driver FIMC. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * Alternatively, Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef __LINUX_VIDEODEV2_SAMSUNG_H -#define __LINUX_VIDEODEV2_SAMSUNG_H - -/* Values for 'capabilities' field */ -/* Object detection device */ -#define V4L2_CAP_OBJ_RECOGNITION 0x10000000 -/* strobe control */ -#define V4L2_CAP_STROBE 0x20000000 - -#define V4L2_CID_FOCUS_MODE (V4L2_CID_CAMERA_CLASS_BASE + 17) -/* Focus Methods */ -enum v4l2_focus_mode { - V4L2_FOCUS_MODE_AUTO = 0, - V4L2_FOCUS_MODE_MACRO = 1, - V4L2_FOCUS_MODE_MANUAL = 2, - V4L2_FOCUS_MODE_LASTP = 2, -}; - -#define V4L2_CID_ZOOM_MODE (V4L2_CID_CAMERA_CLASS_BASE + 18) -/* Zoom Methods */ -enum v4l2_zoom_mode { - V4L2_ZOOM_MODE_CONTINUOUS = 0, - V4L2_ZOOM_MODE_OPTICAL = 1, - V4L2_ZOOM_MODE_DIGITAL = 2, - V4L2_ZOOM_MODE_LASTP = 2, -}; - -/* Exposure Methods */ -#define V4L2_CID_PHOTOMETRY (V4L2_CID_CAMERA_CLASS_BASE + 19) -enum v4l2_photometry_mode { - V4L2_PHOTOMETRY_MULTISEG = 0, /*Multi Segment */ - V4L2_PHOTOMETRY_CWA = 1, /*Centre Weighted Average */ - V4L2_PHOTOMETRY_SPOT = 2, - V4L2_PHOTOMETRY_AFSPOT = 3, /*Spot metering on focused point */ - V4L2_PHOTOMETRY_LASTP = V4L2_PHOTOMETRY_AFSPOT, -}; - -/* Manual exposure control items menu type: iris, shutter, iso */ -#define V4L2_CID_CAM_APERTURE (V4L2_CID_CAMERA_CLASS_BASE + 20) -#define V4L2_CID_CAM_SHUTTER (V4L2_CID_CAMERA_CLASS_BASE + 21) -#define V4L2_CID_CAM_ISO (V4L2_CID_CAMERA_CLASS_BASE + 22) - -/* Following CIDs are menu type */ -#define V4L2_CID_SCENEMODE (V4L2_CID_CAMERA_CLASS_BASE + 23) -#define V4L2_CID_CAM_STABILIZE (V4L2_CID_CAMERA_CLASS_BASE + 24) -#define V4L2_CID_CAM_MULTISHOT (V4L2_CID_CAMERA_CLASS_BASE + 25) - -/* Control dynamic range */ -#define V4L2_CID_CAM_DR (V4L2_CID_CAMERA_CLASS_BASE + 26) - -/* White balance preset control */ -#define V4L2_CID_WHITE_BALANCE_PRESET (V4L2_CID_CAMERA_CLASS_BASE + 27) - -/* CID extensions */ -#define V4L2_CID_ROTATION (V4L2_CID_PRIVATE_BASE + 0) -#define V4L2_CID_PADDR_Y (V4L2_CID_PRIVATE_BASE + 1) -#define V4L2_CID_PADDR_CB (V4L2_CID_PRIVATE_BASE + 2) -#define V4L2_CID_PADDR_CR (V4L2_CID_PRIVATE_BASE + 3) -#define V4L2_CID_PADDR_CBCR (V4L2_CID_PRIVATE_BASE + 4) -#define V4L2_CID_OVERLAY_AUTO (V4L2_CID_PRIVATE_BASE + 5) -#define V4L2_CID_OVERLAY_VADDR0 (V4L2_CID_PRIVATE_BASE + 6) -#define V4L2_CID_OVERLAY_VADDR1 (V4L2_CID_PRIVATE_BASE + 7) -#define V4L2_CID_OVERLAY_VADDR2 (V4L2_CID_PRIVATE_BASE + 8) -#define V4L2_CID_OVLY_MODE (V4L2_CID_PRIVATE_BASE + 9) -#define V4L2_CID_DST_INFO (V4L2_CID_PRIVATE_BASE + 10) -#define V4L2_CID_IMAGE_EFFECT_FN (V4L2_CID_PRIVATE_BASE + 16) -#define V4L2_CID_IMAGE_EFFECT_APPLY (V4L2_CID_PRIVATE_BASE + 17) -#define V4L2_CID_IMAGE_EFFECT_CB (V4L2_CID_PRIVATE_BASE + 18) -#define V4L2_CID_IMAGE_EFFECT_CR (V4L2_CID_PRIVATE_BASE + 19) -#define V4L2_CID_RESERVED_MEM_BASE_ADDR (V4L2_CID_PRIVATE_BASE + 20) -#define V4L2_CID_FIMC_VERSION (V4L2_CID_PRIVATE_BASE + 21) - -#define V4L2_CID_STREAM_PAUSE (V4L2_CID_PRIVATE_BASE + 53) - -/* CID Extensions for camera sensor operations */ -#define V4L2_CID_CAM_PREVIEW_ONOFF (V4L2_CID_PRIVATE_BASE + 64) -#define V4L2_CID_CAM_CAPTURE (V4L2_CID_PRIVATE_BASE + 65) -#define V4L2_CID_CAM_JPEG_MEMSIZE (V4L2_CID_PRIVATE_BASE + 66) - -#define V4L2_CID_CAM_DATE_INFO_YEAR (V4L2_CID_PRIVATE_BASE + 14) -#define V4L2_CID_CAM_DATE_INFO_MONTH (V4L2_CID_PRIVATE_BASE + 15) -#define V4L2_CID_CAM_DATE_INFO_DATE (V4L2_CID_PRIVATE_BASE + 22) -#define V4L2_CID_CAM_SENSOR_VER (V4L2_CID_PRIVATE_BASE + 23) -#define V4L2_CID_CAM_FW_MINOR_VER (V4L2_CID_PRIVATE_BASE + 24) -#define V4L2_CID_CAM_FW_MAJOR_VER (V4L2_CID_PRIVATE_BASE + 25) -#define V4L2_CID_CAM_PRM_MINOR_VER (V4L2_CID_PRIVATE_BASE + 26) -#define V4L2_CID_CAM_PRM_MAJOR_VER (V4L2_CID_PRIVATE_BASE + 27) -#define V4L2_CID_CAM_FW_VER (V4L2_CID_PRIVATE_BASE + 28) -#define V4L2_CID_CAM_SET_FW_ADDR (V4L2_CID_PRIVATE_BASE + 29) -#define V4L2_CID_CAM_SET_FW_SIZE (V4L2_CID_PRIVATE_BASE + 30) -#define V4L2_CID_CAM_UPDATE_FW (V4L2_CID_PRIVATE_BASE + 31) -#define V4L2_CID_CAM_JPEG_MAIN_SIZE (V4L2_CID_PRIVATE_BASE + 32) -#define V4L2_CID_CAM_JPEG_MAIN_OFFSET (V4L2_CID_PRIVATE_BASE + 33) -#define V4L2_CID_CAM_JPEG_THUMB_SIZE (V4L2_CID_PRIVATE_BASE + 34) -#define V4L2_CID_CAM_JPEG_THUMB_OFFSET (V4L2_CID_PRIVATE_BASE + 35) -#define V4L2_CID_CAM_JPEG_POSTVIEW_OFFSET (V4L2_CID_PRIVATE_BASE + 36) -#define V4L2_CID_CAM_JPEG_QUALITY (V4L2_CID_PRIVATE_BASE + 37) -#define V4L2_CID_CAM_SENSOR_MAKER (V4L2_CID_PRIVATE_BASE + 38) -#define V4L2_CID_CAM_SENSOR_OPTICAL (V4L2_CID_PRIVATE_BASE + 39) -#define V4L2_CID_CAM_AF_VER_LOW (V4L2_CID_PRIVATE_BASE + 40) -#define V4L2_CID_CAM_AF_VER_HIGH (V4L2_CID_PRIVATE_BASE + 41) -#define V4L2_CID_CAM_GAMMA_RG_LOW (V4L2_CID_PRIVATE_BASE + 42) -#define V4L2_CID_CAM_GAMMA_RG_HIGH (V4L2_CID_PRIVATE_BASE + 43) -#define V4L2_CID_CAM_GAMMA_BG_LOW (V4L2_CID_PRIVATE_BASE + 44) -#define V4L2_CID_CAM_GAMMA_BG_HIGH (V4L2_CID_PRIVATE_BASE + 45) -#define V4L2_CID_CAM_DUMP_FW (V4L2_CID_PRIVATE_BASE + 46) -#define V4L2_CID_CAM_GET_DUMP_SIZE (V4L2_CID_PRIVATE_BASE + 47) -#define V4L2_CID_CAMERA_VT_MODE (V4L2_CID_PRIVATE_BASE + 48) -#define V4L2_CID_CAMERA_VGA_BLUR (V4L2_CID_PRIVATE_BASE + 49) -#define V4L2_CID_CAMERA_CAPTURE (V4L2_CID_PRIVATE_BASE + 50) - -#define V4L2_CID_MAIN_SW_DATE_INFO_YEAR (V4L2_CID_PRIVATE_BASE + 54) -#define V4L2_CID_MAIN_SW_DATE_INFO_MONTH (V4L2_CID_PRIVATE_BASE + 55) -#define V4L2_CID_MAIN_SW_DATE_INFO_DATE (V4L2_CID_PRIVATE_BASE + 56) -#define V4L2_CID_MAIN_SW_FW_MINOR_VER (V4L2_CID_PRIVATE_BASE + 57) -#define V4L2_CID_MAIN_SW_FW_MAJOR_VER (V4L2_CID_PRIVATE_BASE + 58) -#define V4L2_CID_MAIN_SW_PRM_MINOR_VER (V4L2_CID_PRIVATE_BASE + 59) -#define V4L2_CID_MAIN_SW_PRM_MAJOR_VER (V4L2_CID_PRIVATE_BASE + 60) - -enum v4l2_blur { - BLUR_LEVEL_0 = 0, - BLUR_LEVEL_1, - BLUR_LEVEL_2, - BLUR_LEVEL_3, - BLUR_LEVEL_MAX, -}; - -#define V4L2_CID_CAMERA_SCENE_MODE (V4L2_CID_PRIVATE_BASE + 70) -enum v4l2_scene_mode { - SCENE_MODE_BASE, - SCENE_MODE_NONE, - SCENE_MODE_PORTRAIT, - SCENE_MODE_NIGHTSHOT, - SCENE_MODE_BACK_LIGHT, - SCENE_MODE_LANDSCAPE, - SCENE_MODE_SPORTS, - SCENE_MODE_PARTY_INDOOR, - SCENE_MODE_BEACH_SNOW, - SCENE_MODE_SUNSET, - SCENE_MODE_DUST_DAWN, - SCENE_MODE_FALL_COLOR, - SCENE_MODE_FIREWORKS, - SCENE_MODE_TEXT, - SCENE_MODE_CANDLE_LIGHT, - SCENE_MODE_MAX, -}; - -#define V4L2_CID_CAMERA_FLASH_MODE (V4L2_CID_PRIVATE_BASE + 71) -enum v4l2_flash_mode { - FLASH_MODE_BASE, - FLASH_MODE_OFF, - FLASH_MODE_AUTO, - FLASH_MODE_ON, - FLASH_MODE_TORCH, - FLASH_MODE_MAX, -}; - -#define V4L2_CID_CAMERA_BRIGHTNESS (V4L2_CID_PRIVATE_BASE + 72) -enum v4l2_ev_mode { - EV_MINUS_4 = 0, - EV_MINUS_3, - EV_MINUS_2, - EV_MINUS_1, - EV_DEFAULT, - EV_PLUS_1, - EV_PLUS_2, - EV_PLUS_3, - EV_PLUS_4, - EV_MAX, -}; - -#define V4L2_CID_CAMERA_WHITE_BALANCE (V4L2_CID_PRIVATE_BASE + 73) -enum v4l2_wb_mode { - WHITE_BALANCE_BASE = 0, - WHITE_BALANCE_AUTO, - WHITE_BALANCE_SUNNY, - WHITE_BALANCE_CLOUDY, - WHITE_BALANCE_TUNGSTEN, - WHITE_BALANCE_FLUORESCENT, - WHITE_BALANCE_MAX, -}; - -#define V4L2_CID_CAMERA_EFFECT (V4L2_CID_PRIVATE_BASE + 74) -enum v4l2_effect_mode { - IMAGE_EFFECT_BASE = 0, - IMAGE_EFFECT_NONE, - IMAGE_EFFECT_BNW, - IMAGE_EFFECT_SEPIA, - IMAGE_EFFECT_AQUA, - IMAGE_EFFECT_ANTIQUE, - IMAGE_EFFECT_NEGATIVE, - IMAGE_EFFECT_SHARPEN, - IMAGE_EFFECT_MAX, -}; - -#define V4L2_CID_CAMERA_ISO (V4L2_CID_PRIVATE_BASE + 75) -enum v4l2_iso_mode { - ISO_AUTO = 0, - ISO_50, - ISO_100, - ISO_200, - ISO_400, - ISO_800, - ISO_1600, - ISO_SPORTS, - ISO_NIGHT, - ISO_MOVIE, - ISO_MAX, -}; - -#define V4L2_CID_CAMERA_METERING (V4L2_CID_PRIVATE_BASE + 76) -enum v4l2_metering_mode { - METERING_BASE = 0, - METERING_MATRIX, - METERING_CENTER, - METERING_SPOT, - METERING_MAX, -}; - -#define V4L2_CID_CAMERA_CONTRAST (V4L2_CID_PRIVATE_BASE + 77) -enum v4l2_contrast_mode { - CONTRAST_MINUS_2 = 0, - CONTRAST_MINUS_1, - CONTRAST_DEFAULT, - CONTRAST_PLUS_1, - CONTRAST_PLUS_2, - CONTRAST_MAX, -}; - -#define V4L2_CID_CAMERA_SATURATION (V4L2_CID_PRIVATE_BASE + 78) -enum v4l2_saturation_mode { - SATURATION_MINUS_2 = 0, - SATURATION_MINUS_1, - SATURATION_DEFAULT, - SATURATION_PLUS_1, - SATURATION_PLUS_2, - SATURATION_MAX, -}; - -#define V4L2_CID_CAMERA_SHARPNESS (V4L2_CID_PRIVATE_BASE + 79) -enum v4l2_sharpness_mode { - SHARPNESS_MINUS_2 = 0, - SHARPNESS_MINUS_1, - SHARPNESS_DEFAULT, - SHARPNESS_PLUS_1, - SHARPNESS_PLUS_2, - SHARPNESS_MAX, -}; - -#define V4L2_CID_CAMERA_WDR (V4L2_CID_PRIVATE_BASE + 80) -enum v4l2_wdr_mode { - WDR_OFF, - WDR_ON, - WDR_MAX, -}; - -#define V4L2_CID_CAMERA_ANTI_SHAKE (V4L2_CID_PRIVATE_BASE + 81) -enum v4l2_anti_shake_mode { - ANTI_SHAKE_OFF, - ANTI_SHAKE_STILL_ON, - ANTI_SHAKE_MOVIE_ON, - ANTI_SHAKE_MAX, -}; - -#define V4L2_CID_CAMERA_TOUCH_AF_START_STOP (V4L2_CID_PRIVATE_BASE + 82) -enum v4l2_touch_af { - TOUCH_AF_STOP = 0, - TOUCH_AF_START, - TOUCH_AF_MAX, -}; - -#define V4L2_CID_CAMERA_SMART_AUTO (V4L2_CID_PRIVATE_BASE + 83) -enum v4l2_smart_auto { - SMART_AUTO_OFF = 0, - SMART_AUTO_ON, - SMART_AUTO_MAX, -}; - -#define V4L2_CID_CAMERA_VINTAGE_MODE (V4L2_CID_PRIVATE_BASE + 84) -enum v4l2_vintage_mode { - VINTAGE_MODE_BASE, - VINTAGE_MODE_OFF, - VINTAGE_MODE_NORMAL, - VINTAGE_MODE_WARM, - VINTAGE_MODE_COOL, - VINTAGE_MODE_BNW, - VINTAGE_MODE_MAX, -}; - -#define V4L2_CID_CAMERA_JPEG_QUALITY (V4L2_CID_PRIVATE_BASE + 85) -#define V4L2_CID_CAMERA_GPS_LATITUDE (V4L2_CID_CAMERA_CLASS_BASE + 30) -#define V4L2_CID_CAMERA_GPS_LONGITUDE (V4L2_CID_CAMERA_CLASS_BASE + 31) -#define V4L2_CID_CAMERA_GPS_TIMESTAMP (V4L2_CID_CAMERA_CLASS_BASE + 32) -#define V4L2_CID_CAMERA_GPS_ALTITUDE (V4L2_CID_CAMERA_CLASS_BASE + 33) -#define V4L2_CID_CAMERA_EXIF_TIME_INFO (V4L2_CID_CAMERA_CLASS_BASE + 34) -#define V4L2_CID_CAMERA_GPS_PROCESSINGMETHOD \ - (V4L2_CID_CAMERA_CLASS_BASE + 35) -#define V4L2_CID_CAMERA_ZOOM (V4L2_CID_PRIVATE_BASE + 90) -enum v4l2_zoom_level { - ZOOM_LEVEL_0 = 0, - ZOOM_LEVEL_1, - ZOOM_LEVEL_2, - ZOOM_LEVEL_3, - ZOOM_LEVEL_4, - ZOOM_LEVEL_5, - ZOOM_LEVEL_6, - ZOOM_LEVEL_7, - ZOOM_LEVEL_8, - ZOOM_LEVEL_9, - ZOOM_LEVEL_10, - ZOOM_LEVEL_11, - ZOOM_LEVEL_12, - ZOOM_LEVEL_MAX, -}; - -#define V4L2_CID_CAMERA_FACE_DETECTION (V4L2_CID_PRIVATE_BASE + 91) -enum v4l2_face_detection { - FACE_DETECTION_OFF = 0, - FACE_DETECTION_ON, - FACE_DETECTION_NOLINE, - FACE_DETECTION_ON_BEAUTY, - FACE_DETECTION_MAX, -}; - -#define V4L2_CID_CAMERA_SMART_AUTO_STATUS (V4L2_CID_PRIVATE_BASE + 92) -enum v4l2_smart_auto_status { - SMART_AUTO_STATUS_AUTO = 0, - SMART_AUTO_STATUS_LANDSCAPE, - SMART_AUTO_STATUS_PORTRAIT, - SMART_AUTO_STATUS_MACRO, - SMART_AUTO_STATUS_NIGHT, - SMART_AUTO_STATUS_PORTRAIT_NIGHT, - SMART_AUTO_STATUS_BACKLIT, - SMART_AUTO_STATUS_PORTRAIT_BACKLIT, - SMART_AUTO_STATUS_ANTISHAKE, - SMART_AUTO_STATUS_PORTRAIT_ANTISHAKE, - SMART_AUTO_STATUS_MAX, -}; - -#define V4L2_CID_CAMERA_SET_AUTO_FOCUS (V4L2_CID_PRIVATE_BASE + 93) -enum v4l2_auto_focus { - AUTO_FOCUS_OFF = 0, - AUTO_FOCUS_ON, - AUTO_FOCUS_MAX, -}; - -#define V4L2_CID_CAMERA_BEAUTY_SHOT (V4L2_CID_PRIVATE_BASE + 94) -enum v4l2_beauty_shot { - BEAUTY_SHOT_OFF = 0, - BEAUTY_SHOT_ON, - BEAUTY_SHOT_MAX, -}; - -#define V4L2_CID_CAMERA_AEAWB_LOCK_UNLOCK (V4L2_CID_PRIVATE_BASE + 95) -enum v4l2_ae_awb_lockunlock { - AE_UNLOCK_AWB_UNLOCK = 0, - AE_LOCK_AWB_UNLOCK, - AE_UNLOCK_AWB_LOCK, - AE_LOCK_AWB_LOCK, - AE_AWB_MAX -}; - -#define V4L2_CID_CAMERA_FACEDETECT_LOCKUNLOCK (V4L2_CID_PRIVATE_BASE + 96) -enum v4l2_face_lock { - FACE_LOCK_OFF = 0, - FACE_LOCK_ON, - FIRST_FACE_TRACKING, - FACE_LOCK_MAX, -}; - -#define V4L2_CID_CAMERA_OBJECT_POSITION_X (V4L2_CID_PRIVATE_BASE + 97) -#define V4L2_CID_CAMERA_OBJECT_POSITION_Y (V4L2_CID_PRIVATE_BASE + 98) -#define V4L2_CID_CAMERA_FOCUS_MODE (V4L2_CID_PRIVATE_BASE + 99) -enum v4l2_focusmode { - FOCUS_MODE_AUTO = 0, - FOCUS_MODE_MACRO, - FOCUS_MODE_FACEDETECT, - FOCUS_MODE_AUTO_DEFAULT, - FOCUS_MODE_MACRO_DEFAULT, - FOCUS_MODE_FACEDETECT_DEFAULT, - FOCUS_MODE_INFINITY, - FOCUS_MODE_MAX, -}; - -#define V4L2_CID_CAMERA_OBJ_TRACKING_STATUS (V4L2_CID_PRIVATE_BASE + 100) -enum v4l2_obj_tracking_status { - OBJECT_TRACKING_STATUS_BASE, - OBJECT_TRACKING_STATUS_PROGRESSING, - OBJECT_TRACKING_STATUS_SUCCESS, - OBJECT_TRACKING_STATUS_FAIL, - OBJECT_TRACKING_STATUS_MISSING, - OBJECT_TRACKING_STATUS_MAX, -}; - -#define V4L2_CID_CAMERA_OBJ_TRACKING_START_STOP (V4L2_CID_PRIVATE_BASE + 101) -enum v4l2_ot_start_stop { - OT_STOP = 0, - OT_START, - OT_MAX, -}; - -#define V4L2_CID_CAMERA_CAF_START_STOP (V4L2_CID_PRIVATE_BASE + 102) -enum v4l2_caf_start_stop { - CAF_STOP = 0, - CAF_START, - CAF_MAX, -}; - -#define V4L2_CID_CAMERA_AUTO_FOCUS_RESULT_FIRST (V4L2_CID_PRIVATE_BASE + 103) -#define V4L2_CID_CAMERA_AUTO_FOCUS_RESULT_SECOND (V4L2_CID_PRIVATE_BASE + 120) -#define V4L2_CID_CAMERA_FINISH_AUTO_FOCUS (V4L2_CID_PRIVATE_BASE + 121) - -#define V4L2_CID_CAMERA_FRAME_RATE (V4L2_CID_PRIVATE_BASE + 104) -enum v4l2_frame_rate { - FRAME_RATE_AUTO = 0, - FRAME_RATE_7 = 7, - FRAME_RATE_15 = 15, - FRAME_RATE_30 = 30, - FRAME_RATE_60 = 60, - FRAME_RATE_120 = 120, - FRAME_RATE_MAX -}; - -#define V4L2_CID_CAMERA_ANTI_BANDING (V4L2_CID_PRIVATE_BASE + 105) -enum v4l2_anti_banding { - ANTI_BANDING_AUTO = 0, - ANTI_BANDING_50HZ = 1, - ANTI_BANDING_60HZ = 2, - ANTI_BANDING_OFF = 3, -}; - -#define V4L2_CID_CAMERA_SET_GAMMA (V4L2_CID_PRIVATE_BASE + 106) -enum v4l2_gamma_mode { - GAMMA_OFF = 0, - GAMMA_ON = 1, - GAMMA_MAX, -}; - -#define V4L2_CID_CAMERA_SET_SLOW_AE (V4L2_CID_PRIVATE_BASE + 107) -enum v4l2_slow_ae_mode { - SLOW_AE_OFF, - SLOW_AE_ON, - SLOW_AE_MAX, -}; - -#define V4L2_CID_CAMERA_BATCH_REFLECTION (V4L2_CID_PRIVATE_BASE + 108) -#define V4L2_CID_CAMERA_EXIF_ORIENTATION (V4L2_CID_PRIVATE_BASE + 109) - -#define V4L2_CID_CAMERA_RESET (V4L2_CID_PRIVATE_BASE + 111) -#define V4L2_CID_CAMERA_CHECK_DATALINE (V4L2_CID_PRIVATE_BASE + 112) -#define V4L2_CID_CAMERA_CHECK_DATALINE_STOP (V4L2_CID_PRIVATE_BASE + 113) -#define V4L2_CID_CAMERA_GET_ISO (V4L2_CID_PRIVATE_BASE + 114) -#define V4L2_CID_CAMERA_GET_SHT_TIME (V4L2_CID_PRIVATE_BASE + 115) -#define V4L2_CID_CAMERA_SENSOR_MODE (V4L2_CID_PRIVATE_BASE + 116) -#define V4L2_CID_ESD_INT (V4L2_CID_PRIVATE_BASE + 117) -#define V4L2_CID_CAMERA_GET_FLASH_ONOFF (V4L2_CID_PRIVATE_BASE + 118) -#define V4L2_CID_CAMERA_RETURN_FOCUS (V4L2_CID_PRIVATE_BASE + 119) - -/* Pixel format FOURCC depth Description */ -/* 12 Y/CbCr 4:2:0 64x32 macroblocks */ -#define V4L2_PIX_FMT_NV12T v4l2_fourcc('T', 'V', '1', '2') - -/* - * * V4L2 extention for digital camera - * */ -/* Strobe flash light */ -enum v4l2_strobe_control { - /* turn off the flash light */ - V4L2_STROBE_CONTROL_OFF = 0, - /* turn on the flash light */ - V4L2_STROBE_CONTROL_ON = 1, - /* act guide light before splash */ - V4L2_STROBE_CONTROL_AFGUIDE = 2, - /* charge the flash light */ - V4L2_STROBE_CONTROL_CHARGE = 3, -}; - -enum v4l2_strobe_conf { - V4L2_STROBE_OFF = 0, /* Always off */ - V4L2_STROBE_ON = 1, /* Always splashes */ - /* Auto control presets */ - V4L2_STROBE_AUTO = 2, - V4L2_STROBE_REDEYE_REDUCTION = 3, - V4L2_STROBE_SLOW_SYNC = 4, - V4L2_STROBE_FRONT_CURTAIN = 5, - V4L2_STROBE_REAR_CURTAIN = 6, - /* Extra manual control presets */ - /* keep turned on until turning off */ - V4L2_STROBE_PERMANENT = 7, - V4L2_STROBE_EXTERNAL = 8, -}; - -enum v4l2_strobe_status { - V4L2_STROBE_STATUS_OFF = 0, - /* while processing configurations */ - V4L2_STROBE_STATUS_BUSY = 1, - V4L2_STROBE_STATUS_ERR = 2, - V4L2_STROBE_STATUS_CHARGING = 3, - V4L2_STROBE_STATUS_CHARGED = 4, -}; - -/* capabilities field */ -/* No strobe supported */ -#define V4L2_STROBE_CAP_NONE 0x0000 -/* Always flash off mode */ -#define V4L2_STROBE_CAP_OFF 0x0001 -/* Always use flash light mode */ -#define V4L2_STROBE_CAP_ON 0x0002 -/* Flashlight works automatic */ -#define V4L2_STROBE_CAP_AUTO 0x0004 -/* Red-eye reduction */ -#define V4L2_STROBE_CAP_REDEYE 0x0008 -/* Slow sync */ -#define V4L2_STROBE_CAP_SLOWSYNC 0x0010 -/* Front curtain */ -#define V4L2_STROBE_CAP_FRONT_CURTAIN 0x0020 -/* Rear curtain */ -#define V4L2_STROBE_CAP_REAR_CURTAIN 0x0040 -/* keep turned on until turning off */ -#define V4L2_STROBE_CAP_PERMANENT 0x0080 -/* use external strobe */ -#define V4L2_STROBE_CAP_EXTERNAL 0x0100 - -/* Set mode and Get status */ -struct v4l2_strobe { - /* off/on/charge:0/1/2 */ - enum v4l2_strobe_control control; - /* supported strobe capabilities */ - __u32 capabilities; - enum v4l2_strobe_conf mode; - enum v4l2_strobe_status status; /* read only */ - /* default is 0 and range of value varies from each models */ - __u32 flash_ev; - __u32 reserved[4]; -}; - -#define VIDIOC_S_STROBE _IOWR('V', 83, struct v4l2_strobe) -#define VIDIOC_G_STROBE _IOR('V', 84, struct v4l2_strobe) - -/* Object recognition and collateral actions */ -enum v4l2_recog_mode { - V4L2_RECOGNITION_MODE_OFF = 0, - V4L2_RECOGNITION_MODE_ON = 1, - V4L2_RECOGNITION_MODE_LOCK = 2, -}; - -enum v4l2_recog_action { - V4L2_RECOGNITION_ACTION_NONE = 0, /* only recognition */ - V4L2_RECOGNITION_ACTION_BLINK = 1, /* Capture on blinking */ - V4L2_RECOGNITION_ACTION_SMILE = 2, /* Capture on smiling */ -}; - -enum v4l2_recog_pattern { - V4L2_RECOG_PATTERN_FACE = 0, /* Face */ - V4L2_RECOG_PATTERN_HUMAN = 1, /* Human */ - V4L2_RECOG_PATTERN_CHAR = 2, /* Character */ -}; - -struct v4l2_recog_rect { - enum v4l2_recog_pattern p; /* detected pattern */ - struct v4l2_rect o; /* detected area */ - __u32 reserved[4]; -}; - -struct v4l2_recog_data { - __u8 detect_cnt; /* detected object counter */ - struct v4l2_rect o; /* detected area */ - __u32 reserved[4]; -}; - -struct v4l2_recognition { - enum v4l2_recog_mode mode; - - /* Which pattern to detect */ - enum v4l2_recog_pattern pattern; - - /* How many object to detect */ - __u8 obj_num; - - /* select detected object */ - __u32 detect_idx; - - /* read only :Get object coordination */ - struct v4l2_recog_data data; - - enum v4l2_recog_action action; - __u32 reserved[4]; -}; - -#define VIDIOC_S_RECOGNITION _IOWR('V', 85, struct v4l2_recognition) -#define VIDIOC_G_RECOGNITION _IOR('V', 86, struct v4l2_recognition) - -/* We use this struct as the v4l2_streamparm raw_data for - * VIDIOC_G_PARM and VIDIOC_S_PARM - */ -struct sec_cam_parm { - struct v4l2_captureparm capture; - int contrast; - int effects; - int brightness; - int flash_mode; - int focus_mode; - int iso; - int metering; - int saturation; - int scene_mode; - int sharpness; - int white_balance; -}; - -#endif /* __LINUX_VIDEODEV2_SAMSUNG_H */ diff --git a/libcamera/Android.mk b/libcamera/Android.mk index 9eb531e..39308a9 100644 --- a/libcamera/Android.mk +++ b/libcamera/Android.mk @@ -7,8 +7,8 @@ include $(CLEAR_VARS) # hw/..so LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw -LOCAL_C_INCLUDES += $(LOCAL_PATH)/../include -LOCAL_C_INCLUDES += $(LOCAL_PATH)/../libs3cjpeg +LOCAL_C_INCLUDES += hardware/samsung/exynos3/s5pc110/include +LOCAL_C_INCLUDES += hardware/samsung/exynos3/s5pc110/libs3cjpeg LOCAL_C_INCLUDES += frameworks/native/include/media/hardware LOCAL_SRC_FILES:= \ diff --git a/libhwcomposer/Android.mk b/libhwcomposer/Android.mk deleted file mode 100644 index 405dcb0..0000000 --- a/libhwcomposer/Android.mk +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright (C) 2008 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -LOCAL_PATH:= $(call my-dir) -# HAL module implemenation, not prelinked and stored in -# hw/..so - -include $(CLEAR_VARS) -LOCAL_PRELINK_MODULE := false -LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw -LOCAL_SHARED_LIBRARIES := liblog libcutils libEGL libGLESv1_CM libhardware libhardware_legacy -LOCAL_CFLAGS += -DLOG_TAG=\"hwcomposer\" - -LOCAL_C_INCLUDES := \ - $(LOCAL_PATH)/../include - -LOCAL_SRC_FILES := SecHWCUtils.cpp SecHWC.cpp - -LOCAL_MODULE := hwcomposer.aries -LOCAL_MODULE_TAGS := optional -include $(BUILD_SHARED_LIBRARY) diff --git a/libhwcomposer/SecHWC.cpp b/libhwcomposer/SecHWC.cpp deleted file mode 100644 index dda1108..0000000 --- a/libhwcomposer/SecHWC.cpp +++ /dev/null @@ -1,688 +0,0 @@ -/* - * Copyright (C) 2010 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * - * @author Rama, Meka(v.meka@samsung.com) - Sangwoo, Park(sw5771.park@samsung.com) - Jamie Oh (jung-min.oh@samsung.com) - * @date 2011-07-28 - * - */ - -#include -#include -#include -#include -#include -#include -#include "SecHWCUtils.h" - -static IMG_gralloc_module_public_t *gpsGrallocModule; - -static int hwc_device_open(const struct hw_module_t* module, const char* name, - struct hw_device_t** device); - -static struct hw_module_methods_t hwc_module_methods = { - open: hwc_device_open -}; - -hwc_module_t HAL_MODULE_INFO_SYM = { - common: { - tag: HARDWARE_MODULE_TAG, - module_api_version: HWC_MODULE_API_VERSION_0_1, - hal_api_version: HARDWARE_HAL_API_VERSION, - id: HWC_HARDWARE_MODULE_ID, - name: "Samsung S5PC11X hwcomposer module", - author: "SAMSUNG", - methods: &hwc_module_methods, - } -}; - -static void dump_layer(hwc_layer_t const* l) { - ALOGD("\ttype=%d, flags=%08x, handle=%p, tr=%02x, blend=%04x, {%d,%d,%d,%d}, {%d,%d,%d,%d}", - l->compositionType, l->flags, l->handle, l->transform, l->blending, - l->sourceCrop.left, - l->sourceCrop.top, - l->sourceCrop.right, - l->sourceCrop.bottom, - l->displayFrame.left, - l->displayFrame.top, - l->displayFrame.right, - l->displayFrame.bottom); -} - -static int set_src_dst_info(hwc_layer_t *cur, - struct hwc_win_info_t *win, - struct sec_img *src_img, - struct sec_img *dst_img, - struct sec_rect *src_rect, - struct sec_rect *dst_rect, - int win_idx) -{ - IMG_native_handle_t *prev_handle = (IMG_native_handle_t *)(cur->handle); - - // set src image - src_img->w = prev_handle->iWidth; - src_img->h = prev_handle->iHeight; - src_img->format = prev_handle->iFormat; - src_img->base = NULL; - src_img->offset = 0; - src_img->mem_id =0; - - src_img->mem_type = HWC_PHYS_MEM_TYPE; - src_img->w = (src_img->w + 15) & (~15); - src_img->h = (src_img->h + 1) & (~1) ; - - //set src rect - src_rect->x = SEC_MAX(cur->sourceCrop.left, 0); - src_rect->y = SEC_MAX(cur->sourceCrop.top, 0); - src_rect->w = SEC_MAX(cur->sourceCrop.right - cur->sourceCrop.left, 0); - src_rect->w = SEC_MIN(src_rect->w, src_img->w - src_rect->x); - src_rect->h = SEC_MAX(cur->sourceCrop.bottom - cur->sourceCrop.top, 0); - src_rect->h = SEC_MIN(src_rect->h, src_img->h - src_rect->y); - - //set dst image - dst_img->w = win->lcd_info.xres; - dst_img->h = win->lcd_info.yres; - - switch (win->lcd_info.bits_per_pixel) { - case 32: - dst_img->format = HAL_PIXEL_FORMAT_RGBX_8888; - break; - default: - dst_img->format = HAL_PIXEL_FORMAT_RGB_565; - break; - } - - dst_img->base = win->addr[win->buf_index]; - dst_img->offset = 0; - dst_img->mem_id = 0; - dst_img->mem_type = HWC_PHYS_MEM_TYPE; - - //set dst rect - //fimc dst image will be stored from left top corner - dst_rect->x = 0; - dst_rect->y = 0; - dst_rect->w = win->rect_info.w; - dst_rect->h = win->rect_info.h; - - ALOGV("%s::sr_x %d sr_y %d sr_w %d sr_h %d dr_x %d dr_y %d dr_w %d dr_h %d ", - __func__, src_rect->x, src_rect->y, src_rect->w, src_rect->h, - dst_rect->x, dst_rect->y, dst_rect->w, dst_rect->h); - - return 0; -} - -static int get_hwc_compos_decision(hwc_layer_t* cur) -{ - if(cur->flags & HWC_SKIP_LAYER || !cur->handle) { - ALOGV("%s::is_skip_layer %d cur->handle %x", - __func__, cur->flags & HWC_SKIP_LAYER, (uint32_t)cur->handle); - return HWC_FRAMEBUFFER; - } - - IMG_native_handle_t *prev_handle = (IMG_native_handle_t *)(cur->handle); - int compositionType = HWC_FRAMEBUFFER; - - /* check here....if we have any resolution constraints */ - if (((cur->sourceCrop.right - cur->sourceCrop.left) < 16) || - ((cur->sourceCrop.bottom - cur->sourceCrop.top) < 8)) - return compositionType; - - if ((cur->transform == HAL_TRANSFORM_ROT_90) || - (cur->transform == HAL_TRANSFORM_ROT_270)) { - if(((cur->displayFrame.right - cur->displayFrame.left) < 4)|| - ((cur->displayFrame.bottom - cur->displayFrame.top) < 8)) - return compositionType; - } else if (((cur->displayFrame.right - cur->displayFrame.left) < 8) || - ((cur->displayFrame.bottom - cur->displayFrame.top) < 4)) - return compositionType; - - if((prev_handle->usage & GRALLOC_USAGE_PHYS_CONTIG) && - (cur->blending == HWC_BLENDING_NONE)) - compositionType = HWC_OVERLAY; - else - compositionType = HWC_FRAMEBUFFER; - - ALOGV("%s::compositionType %d bpp %d format %x usage %x", - __func__,compositionType, prev_handle->uiBpp, prev_handle->iFormat, - prev_handle->usage & GRALLOC_USAGE_PHYS_CONTIG); - - return compositionType; -} - -static int assign_overlay_window(struct hwc_context_t *ctx, - hwc_layer_t *cur, - int win_idx, - int layer_idx) -{ - struct hwc_win_info_t *win; - sec_rect rect; - int ret = 0; - - if(NUM_OF_WIN <= win_idx) - return -1; - - win = &ctx->win[win_idx]; - - rect.x = SEC_MAX(cur->displayFrame.left, 0); - rect.y = SEC_MAX(cur->displayFrame.top, 0); - rect.w = SEC_MIN(cur->displayFrame.right - rect.x, win->lcd_info.xres - rect.x); - rect.h = SEC_MIN(cur->displayFrame.bottom - rect.y, win->lcd_info.yres - rect.y); - win->set_win_flag = 0; - - if((rect.x != win->rect_info.x) || (rect.y != win->rect_info.y) || - (rect.w != win->rect_info.w) || (rect.h != win->rect_info.h)){ - win->rect_info.x = rect.x; - win->rect_info.y = rect.y; - win->rect_info.w = rect.w; - win->rect_info.h = rect.h; - win->set_win_flag = 1; - win->layer_prev_buf = 0; - } - - win->layer_index = layer_idx; - win->status = HWC_WIN_RESERVED; - - ALOGV("%s:: win_x %d win_y %d win_w %d win_h %d lay_idx %d win_idx %d", - __func__, win->rect_info.x, win->rect_info.y, win->rect_info.w, - win->rect_info.h, win->layer_index, win_idx ); - - return 0; -} - -static void reset_win_rect_info(hwc_win_info_t *win) -{ - win->rect_info.x = 0; - win->rect_info.y = 0; - win->rect_info.w = 0; - win->rect_info.h = 0; - return; -} - -static int hwc_prepare(hwc_composer_device_t *dev, hwc_layer_list_t* list) -{ - - struct hwc_context_t* ctx = (struct hwc_context_t*)dev; - int overlay_win_cnt = 0; - int compositionType = 0; - int ret; - - //if geometry is not changed, there is no need to do any work here - if( !list || (!(list->flags & HWC_GEOMETRY_CHANGED))) - return 0; - - //all the windows are free here.... - for (int i = 0; i < NUM_OF_WIN; i++) { - ctx->win[i].status = HWC_WIN_FREE; - ctx->win[i].buf_index = 0; - } - ctx->num_of_hwc_layer = 0; - ctx->num_of_fb_layer = 0; - ALOGV("%s:: hwc_prepare list->numHwLayers %d", __func__, list->numHwLayers); - - for (int i = 0; i < list->numHwLayers ; i++) { - hwc_layer_t* cur = &list->hwLayers[i]; - - if (overlay_win_cnt < NUM_OF_WIN) { - compositionType = get_hwc_compos_decision(cur); - - if (compositionType == HWC_FRAMEBUFFER) { - cur->compositionType = HWC_FRAMEBUFFER; - ctx->num_of_fb_layer++; - } else { - ret = assign_overlay_window(ctx, cur, overlay_win_cnt, i); - if (ret != 0) { - cur->compositionType = HWC_FRAMEBUFFER; - ctx->num_of_fb_layer++; - continue; - } - - cur->compositionType = HWC_OVERLAY; - cur->hints = HWC_HINT_CLEAR_FB; - overlay_win_cnt++; - ctx->num_of_hwc_layer++; - } - } else { - cur->compositionType = HWC_FRAMEBUFFER; - ctx->num_of_fb_layer++; - } - } - - if(list->numHwLayers != (ctx->num_of_fb_layer + ctx->num_of_hwc_layer)) - ALOGV("%s:: numHwLayers %d num_of_fb_layer %d num_of_hwc_layer %d ", - __func__, list->numHwLayers, ctx->num_of_fb_layer, - ctx->num_of_hwc_layer); - - if (overlay_win_cnt < NUM_OF_WIN) { - //turn off the free windows - for (int i = overlay_win_cnt; i < NUM_OF_WIN; i++) { - window_hide(&ctx->win[i]); - reset_win_rect_info(&ctx->win[i]); - } - } - return 0; -} - -static int hwc_set(hwc_composer_device_t *dev, - hwc_display_t dpy, - hwc_surface_t sur, - hwc_layer_list_t* list) -{ - struct hwc_context_t *ctx = (struct hwc_context_t *)dev; - unsigned int phyAddr[MAX_NUM_PLANES]; - int skipped_window_mask = 0; - hwc_layer_t* cur; - struct hwc_win_info_t *win; - int ret; - struct sec_img src_img; - struct sec_img dst_img; - struct sec_rect src_rect; - struct sec_rect dst_rect; - - if (dpy == NULL && sur == NULL && list == NULL) { - // release our resources, the screen is turning off - // in our case, there is nothing to do. - ctx->num_of_fb_layer_prev = 0; - return 0; - } - - bool need_swap_buffers = ctx->num_of_fb_layer > 0; - - /* - * H/W composer documentation states: - * There is an implicit layer containing opaque black - * pixels behind all the layers in the list. - * It is the responsibility of the hwcomposer module to make - * sure black pixels are output (or blended from). - * - * Since we're using a blitter, we need to erase the frame-buffer when - * switching to all-overlay mode. - * - */ - if (ctx->num_of_hwc_layer && - ctx->num_of_fb_layer==0 && ctx->num_of_fb_layer_prev) { - /* we're clearing the screen using GLES here, this is very - * hack-ish, ideal we would use the fimc (if it can do it) */ - glDisable(GL_SCISSOR_TEST); - glClearColor(0, 0, 0, 0); - glClear(GL_COLOR_BUFFER_BIT); - glEnable(GL_SCISSOR_TEST); - need_swap_buffers = true; - } - - ctx->num_of_fb_layer_prev = ctx->num_of_fb_layer; - - if (need_swap_buffers || !list) { - EGLBoolean sucess = eglSwapBuffers((EGLDisplay)dpy, (EGLSurface)sur); - if (!sucess) { - return HWC_EGL_ERROR; - } - } - - if (!list) { - /* turn off the all windows */ - for (int i = 0; i < NUM_OF_WIN; i++) { - window_hide(&ctx->win[i]); - reset_win_rect_info(&ctx->win[i]); - ctx->win[i].status = HWC_WIN_FREE; - } - ctx->num_of_hwc_layer = 0; - return 0; - } - - if(ctx->num_of_hwc_layer > NUM_OF_WIN) - ctx->num_of_hwc_layer = NUM_OF_WIN; - - /* compose hardware layers here */ - for (uint32_t i = 0; i < ctx->num_of_hwc_layer; i++) { - win = &ctx->win[i]; - if (win->status == HWC_WIN_RESERVED) { - cur = &list->hwLayers[win->layer_index]; - - if (cur->compositionType == HWC_OVERLAY) { - - ret = gpsGrallocModule->GetPhyAddrs(gpsGrallocModule, - cur->handle, phyAddr); - if (ret) { - ALOGE("%s::GetPhyAddrs fail : ret=%d\n", __func__, ret); - skipped_window_mask |= (1 << i); - continue; - } - - /* initialize the src & dist context for fimc */ - set_src_dst_info (cur, win, &src_img, &dst_img, &src_rect, - &dst_rect, i); - - ret = runFimc(ctx, &src_img, &src_rect, &dst_img, &dst_rect, - phyAddr, cur->transform); - if (ret < 0){ - ALOGE("%s::runFimc fail : ret=%d\n", __func__, ret); - skipped_window_mask |= (1 << i); - continue; - } - - if (win->set_win_flag == 1) { - /* turnoff the window and set the window position with new conf... */ - if (window_set_pos(win) < 0) { - ALOGE("%s::window_set_pos is failed : %s", __func__, - strerror(errno)); - skipped_window_mask |= (1 << i); - continue; - } - win->set_win_flag = 0; - } - - /* is the frame didn't change, it needs to be composited - * because something else below it could have changed, however - * it doesn't need to be swapped. - */ - if (win->layer_prev_buf != (uint32_t)cur->handle) { - win->layer_prev_buf = (uint32_t)cur->handle; - window_pan_display(win); - win->buf_index = (win->buf_index + 1) % NUM_OF_WIN_BUF; - } - - if(win->power_state == 0) - window_show(win); - - } else { - ALOGE("%s:: error : layer %d compositionType should have been \ - HWC_OVERLAY", __func__, win->layer_index); - skipped_window_mask |= (1 << i); - continue; - } - } else { - ALOGE("%s:: error : window status should have been HWC_WIN_RESERVED \ - by now... ", __func__); - skipped_window_mask |= (1 << i); - continue; - } - } - - if (skipped_window_mask) { - //turn off the free windows - for (int i = 0; i < NUM_OF_WIN; i++) { - if (skipped_window_mask & (1 << i)) - window_hide(&ctx->win[i]); - } - } - - return 0; -} - -static void hwc_registerProcs(struct hwc_composer_device* dev, - hwc_procs_t const* procs) -{ - struct hwc_context_t* ctx = (struct hwc_context_t*)dev; - ctx->procs = const_cast(procs); -} - -static int hwc_query(struct hwc_composer_device* dev, - int what, int* value) -{ - struct hwc_context_t* ctx = (struct hwc_context_t*)dev; - - switch (what) { - case HWC_BACKGROUND_LAYER_SUPPORTED: - // we don't support the background layer yet - value[0] = 0; - break; - case HWC_VSYNC_PERIOD: - // vsync period in nanosecond - value[0] = 1000000000.0 / gpsGrallocModule->psFrameBufferDevice->base.fps; - break; - default: - // unsupported query - return -EINVAL; - } - return 0; -} - -static int hwc_eventControl(struct hwc_composer_device* dev, - int event, int enabled) -{ - struct hwc_context_t* ctx = (struct hwc_context_t*)dev; - - switch (event) { - case HWC_EVENT_VSYNC: - int val = !!enabled; - int err = ioctl(ctx->global_lcd_win.fd, S3CFB_SET_VSYNC_INT, &val); - if (err < 0) - return -errno; - - return 0; - } - - return -EINVAL; -} - -void handle_vsync_uevent(hwc_context_t *ctx, const char *buff, int len) -{ - uint64_t timestamp = 0; - const char *s = buff; - - if(!ctx->procs || !ctx->procs->vsync) - return; - - s += strlen(s) + 1; - - while(*s) { - if (!strncmp(s, "VSYNC=", strlen("VSYNC="))) - timestamp = strtoull(s + strlen("VSYNC="), NULL, 0); - - s += strlen(s) + 1; - if (s - buff >= len) - break; - } - - ctx->procs->vsync(ctx->procs, 0, timestamp); -} - -static void *hwc_vsync_thread(void *data) -{ - hwc_context_t *ctx = (hwc_context_t *)(data); - char uevent_desc[4096]; - memset(uevent_desc, 0, sizeof(uevent_desc)); - - setpriority(PRIO_PROCESS, 0, HAL_PRIORITY_URGENT_DISPLAY); - - uevent_init(); - while(true) { - int len = uevent_next_event(uevent_desc, sizeof(uevent_desc) - 2); - - bool vsync = !strcmp(uevent_desc, "change@/devices/platform/s3cfb"); - if(vsync) - handle_vsync_uevent(ctx, uevent_desc, len); - } - - return NULL; -} - -static int hwc_device_close(struct hw_device_t *dev) -{ - struct hwc_context_t* ctx = (struct hwc_context_t*)dev; - int ret = 0; - int i; - - if (ctx) { - if (destroyFimc(&ctx->fimc) < 0) { - ALOGE("%s::destroyFimc fail", __func__); - ret = -1; - } - - if (window_close(&ctx->global_lcd_win) < 0) { - ALOGE("%s::window_close() fail", __func__); - ret = -1; - } - - for (i = 0; i < NUM_OF_WIN; i++) { - if (window_close(&ctx->win[i]) < 0) { - ALOGE("%s::window_close() fail", __func__); - ret = -1; - } - } - - // TODO: stop vsync_thread - - free(ctx); - } - return ret; -} - -static const struct hwc_methods hwc_methods = { - eventControl: hwc_eventControl -}; - -static int hwc_device_open(const struct hw_module_t* module, const char* name, - struct hw_device_t** device) -{ - int status = 0; - int err; - struct hwc_win_info_t *win; - - if(hw_get_module(GRALLOC_HARDWARE_MODULE_ID, - (const hw_module_t**)&gpsGrallocModule)) - return -EINVAL; - - if(strcmp(gpsGrallocModule->base.common.author, "Imagination Technologies")) - return -EINVAL; - - if (strcmp(name, HWC_HARDWARE_COMPOSER)) - return -EINVAL; - - struct hwc_context_t *dev; - dev = (hwc_context_t*)malloc(sizeof(*dev)); - - /* initialize our state here */ - memset(dev, 0, sizeof(*dev)); - - /* initialize the procs */ - dev->device.common.tag = HARDWARE_DEVICE_TAG; - dev->device.common.version = HWC_DEVICE_API_VERSION_0_3; - dev->device.common.module = const_cast(module); - dev->device.common.close = hwc_device_close; - - dev->device.prepare = hwc_prepare; - dev->device.set = hwc_set; - dev->device.registerProcs = hwc_registerProcs; - dev->device.query = hwc_query; - dev->device.methods = &hwc_methods; - - *device = &dev->device.common; - - /* initializing */ - memset(&(dev->fimc), 0, sizeof(s5p_fimc_t)); - dev->fimc.dev_fd = -1; - - /* open WIN0 & WIN1 here */ - for (int i = 0; i < NUM_OF_WIN; i++) { - if (window_open(&(dev->win[i]), i) < 0) { - ALOGE("%s:: Failed to open window %d device ", __func__, i); - status = -EINVAL; - goto err; - } - } - - /* open window 2, used to query global LCD info */ - if (window_open(&dev->global_lcd_win, 2) < 0) { - ALOGE("%s:: Failed to open window 2 device ", __func__); - status = -EINVAL; - goto err; - } - - /* get default window config */ - if (window_get_global_lcd_info(dev) < 0) { - ALOGE("%s::window_get_global_lcd_info is failed : %s", - __func__, strerror(errno)); - status = -EINVAL; - goto err; - } - - dev->lcd_info.yres_virtual = dev->lcd_info.yres * NUM_OF_WIN_BUF; - - /* initialize the window context */ - for (int i = 0; i < NUM_OF_WIN; i++) { - win = &dev->win[i]; - memcpy(&win->lcd_info, &dev->lcd_info, sizeof(struct fb_var_screeninfo)); - memcpy(&win->var_info, &dev->lcd_info, sizeof(struct fb_var_screeninfo)); - - win->rect_info.x = 0; - win->rect_info.y = 0; - win->rect_info.w = win->var_info.xres; - win->rect_info.h = win->var_info.yres; - - if (window_set_pos(win) < 0) { - ALOGE("%s::window_set_pos is failed : %s", - __func__, strerror(errno)); - status = -EINVAL; - goto err; - } - - if (window_get_info(win) < 0) { - ALOGE("%s::window_get_info is failed : %s", - __func__, strerror(errno)); - status = -EINVAL; - goto err; - } - - win->size = win->fix_info.line_length * win->var_info.yres; - - if (!win->fix_info.smem_start){ - ALOGE("%s:: win-%d failed to get the reserved memory", __func__, i); - status = -EINVAL; - goto err; - } - - for (int j = 0; j < NUM_OF_WIN_BUF; j++) { - win->addr[j] = win->fix_info.smem_start + (win->size * j); - ALOGI("%s::win-%d add[%d] %x ", __func__, i, j, win->addr[j]); - } - } - - /* open pp */ - if (createFimc(&dev->fimc) < 0) { - ALOGE("%s::creatFimc() fail", __func__); - status = -EINVAL; - goto err; - } - - err = pthread_create(&dev->vsync_thread, NULL, hwc_vsync_thread, dev); - if (err) { - ALOGE("%s::pthread_create() failed : %s", __func__, strerror(err)); - status = -err; - goto err; - } - - ALOGD("%s:: success\n", __func__); - - return 0; - -err: - if (destroyFimc(&dev->fimc) < 0) - ALOGE("%s::destroyFimc() fail", __func__); - - if (window_close(&dev->global_lcd_win) < 0) - ALOGE("%s::window_close() fail", __func__); - - for (int i = 0; i < NUM_OF_WIN; i++) { - if (window_close(&dev->win[i]) < 0) - ALOGE("%s::window_close() fail", __func__); - } - - return status; -} diff --git a/libhwcomposer/SecHWCUtils.cpp b/libhwcomposer/SecHWCUtils.cpp deleted file mode 100644 index 3c0f6f9..0000000 --- a/libhwcomposer/SecHWCUtils.cpp +++ /dev/null @@ -1,880 +0,0 @@ -/* - * Copyright (C) 2010 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * - * @author Rama, Meka(v.meka@samsung.com) - Sangwoo, Park(sw5771.park@samsung.com) - Jamie Oh (jung-min.oh@samsung.com) - * @date 2011-07-28 - * - */ - -#include "SecHWCUtils.h" - -int window_open(struct hwc_win_info_t *win, int id) -{ - char name[64]; - - char const * const device_template = "/dev/graphics/fb%u"; - /* window & FB maping - fb0 -> win-id : 2 - fb1 -> win-id : 3 - fb2 -> win-id : 4 - fb3 -> win-id : 0 - fb4 -> win_id : 1 - it is pre assumed that ...win0 or win1 is used here.. - */ - switch (id) { - case 0: - case 1: - case 2: - break; - default: - ALOGE("%s::id(%d) is weird", __func__, id); - goto error; - } - - snprintf(name, 64, device_template, (id + 3)%5); - - win->fd = open(name, O_RDWR); - if (win->fd < 0) { - ALOGE("%s::Failed to open window device (%s) : %s", - __func__, strerror(errno), device_template); - goto error; - } - - return 0; - -error: - if (0 <= win->fd) - close(win->fd); - win->fd = -1; - - return -1; -} - -int window_close(struct hwc_win_info_t *win) -{ - int ret = 0; - - if (0 <= win->fd) - ret = close(win->fd); - win->fd = -1; - - return ret; -} - -int window_set_pos(struct hwc_win_info_t *win) -{ - struct secfb_user_window window; - - /* before changing the screen configuration...powerdown the window */ - if(window_hide(win) != 0) - return -1; - - win->var_info.xres = win->rect_info.w; - win->var_info.yres = win->rect_info.h; - - win->var_info.activate &= ~FB_ACTIVATE_MASK; - win->var_info.activate |= FB_ACTIVATE_FORCE; - - if (ioctl(win->fd, FBIOPUT_VSCREENINFO, &(win->var_info)) < 0) { - ALOGE("%s::FBIOPUT_VSCREENINFO(%d, %d) fail", - __func__, win->rect_info.w, win->rect_info.h); - return -1; - } - - window.x = win->rect_info.x; - window.y = win->rect_info.y; - - if (ioctl(win->fd, SECFB_WIN_POSITION, &window) < 0) { - ALOGE("%s::S3CFB_WIN_POSITION(%d, %d) fail", - __func__, window.x, window.y); - return -1; - } - - return 0; -} - -int window_get_info(struct hwc_win_info_t *win) -{ - if (ioctl(win->fd, FBIOGET_FSCREENINFO, &win->fix_info) < 0) { - ALOGE("FBIOGET_FSCREENINFO failed : %s", strerror(errno)); - goto error; - } - - return 0; - -error: - win->fix_info.smem_start = 0; - - return -1; -} - -int window_pan_display(struct hwc_win_info_t *win) -{ - struct fb_var_screeninfo *lcd_info = &(win->lcd_info); - - lcd_info->yoffset = lcd_info->yres * win->buf_index; - - if (ioctl(win->fd, FBIOPAN_DISPLAY, lcd_info) < 0) { - ALOGE("%s::FBIOPAN_DISPLAY(%d / %d / %d) fail(%s)", - __func__, lcd_info->yres, win->buf_index, lcd_info->yres_virtual, - strerror(errno)); - return -1; - } - return 0; -} - -int window_show(struct hwc_win_info_t *win) -{ - if(win->power_state == 0) { - if (ioctl(win->fd, FBIOBLANK, FB_BLANK_UNBLANK) < 0) { - ALOGE("%s: FBIOBLANK failed : (%d:%s)", __func__, win->fd, - strerror(errno)); - return -1; - } - win->power_state = 1; - } - return 0; -} - -int window_hide(struct hwc_win_info_t *win) -{ - if (win->power_state == 1) { - if (ioctl(win->fd, FBIOBLANK, FB_BLANK_POWERDOWN) < 0) { - ALOGE("%s::FBIOBLANK failed : (%d:%s)", - __func__, win->fd, strerror(errno)); - return -1; - } - win->power_state = 0; - } - return 0; -} - -int window_get_global_lcd_info(struct hwc_context_t *ctx) -{ - struct hwc_win_info_t win; - int ret = 0; - - if (ioctl(ctx->global_lcd_win.fd, FBIOGET_VSCREENINFO, &ctx->lcd_info) < 0) { - ALOGE("FBIOGET_VSCREENINFO failed : %s", strerror(errno)); - return -1; - } - - if (ctx->lcd_info.xres == 0) { - ctx->lcd_info.xres = DEFAULT_LCD_WIDTH; - ctx->lcd_info.xres_virtual = DEFAULT_LCD_WIDTH; - } - - if (ctx->lcd_info.yres == 0) { - ctx->lcd_info.yres = DEFAULT_LCD_HEIGHT; - ctx->lcd_info.yres_virtual = DEFAULT_LCD_HEIGHT * NUM_OF_WIN_BUF; - } - - if (ctx->lcd_info.bits_per_pixel == 0) - ctx->lcd_info.bits_per_pixel = DEFAULT_LCD_BPP; - - return 0; -} - -int fimc_v4l2_set_src(int fd, unsigned int hw_ver, s5p_fimc_img_info *src) -{ - struct v4l2_format fmt; - struct v4l2_cropcap cropcap; - struct v4l2_crop crop; - struct v4l2_requestbuffers req; - - /* - * To set size & format for source image (DMA-INPUT) - */ - fmt.type = V4L2_BUF_TYPE_VIDEO_OUTPUT; - fmt.fmt.pix.width = src->full_width; - fmt.fmt.pix.height = src->full_height; - fmt.fmt.pix.pixelformat = src->color_space; - fmt.fmt.pix.field = V4L2_FIELD_NONE; - - if (ioctl (fd, VIDIOC_S_FMT, &fmt) < 0) { - ALOGE("VIDIOC_S_FMT failed : errno=%d (%s) : fd=%d", errno, - strerror(errno), fd); - return -1; - } - - /* - * crop input size - */ - crop.type = V4L2_BUF_TYPE_VIDEO_OUTPUT; - if (0x50 == hw_ver) { - crop.c.left = src->start_x; - crop.c.top = src->start_y; - } else { - crop.c.left = 0; - crop.c.top = 0; - } - crop.c.width = src->width; - crop.c.height = src->height; - if (ioctl(fd, VIDIOC_S_CROP, &crop) < 0) { - ALOGE("Error in video VIDIOC_S_CROP (%d, %d, %d, %d)", - crop.c.left, crop.c.top, crop.c.width, crop.c.height); - return -1; - } - - /* - * input buffer type - */ - req.count = 1; - req.type = V4L2_BUF_TYPE_VIDEO_OUTPUT; - req.memory = V4L2_MEMORY_USERPTR; - - if (ioctl (fd, VIDIOC_REQBUFS, &req) < 0) { - ALOGE("Error in VIDIOC_REQBUFS"); - return -1; - } - - return 0; -} - -int fimc_v4l2_set_dst(int fd, - s5p_fimc_img_info *dst, - int rotation, - int flag_h_flip, - int flag_v_flip, - unsigned int addr) -{ - struct v4l2_format sFormat; - struct v4l2_control vc; - struct v4l2_framebuffer fbuf; - - /* - * set rotation configuration - */ - vc.id = V4L2_CID_HFLIP; - vc.value = flag_h_flip; - if (ioctl(fd, VIDIOC_S_CTRL, &vc) < 0) { - ALOGE("Error in video VIDIOC_S_CTRL - flag_h_flip (%d)", flag_h_flip); - return -1; - } - - vc.id = V4L2_CID_VFLIP; - vc.value = flag_v_flip; - if (ioctl(fd, VIDIOC_S_CTRL, &vc) < 0) { - ALOGE("Error in video VIDIOC_S_CTRL - flag_v_flip (%d)", flag_v_flip); - return -1; - } - - vc.id = V4L2_CID_ROTATION; - vc.value = rotation; - if (ioctl(fd, VIDIOC_S_CTRL, &vc) < 0) { - ALOGE("Error in video VIDIOC_S_CTRL - rotation (%d)", rotation); - return -1; - } - - /* - * set size, format & address for destination image (DMA-OUTPUT) - */ - if (ioctl (fd, VIDIOC_G_FBUF, &fbuf) < 0) { - ALOGE("Error in video VIDIOC_G_FBUF"); - return -1; - } - - fbuf.base = (void *)addr; - fbuf.fmt.width = dst->full_width; - fbuf.fmt.height = dst->full_height; - fbuf.fmt.pixelformat = dst->color_space; - if (ioctl (fd, VIDIOC_S_FBUF, &fbuf) < 0) { - ALOGE("Error in video VIDIOC_S_FBUF 0x%x %d %d %d", - (void *)addr, dst->full_width, dst->full_height, - dst->color_space); - return -1; - } - - /* - * set destination window - */ - sFormat.type = V4L2_BUF_TYPE_VIDEO_OVERLAY; - sFormat.fmt.win.w.left = dst->start_x; - sFormat.fmt.win.w.top = dst->start_y; - sFormat.fmt.win.w.width = dst->width; - sFormat.fmt.win.w.height = dst->height; - if (ioctl(fd, VIDIOC_S_FMT, &sFormat) < 0) { - ALOGE("Error in video VIDIOC_S_FMT %d %d %d %d", - dst->start_x, dst->start_y, dst->width, dst->height); - return -1; - } - - return 0; -} - -int fimc_v4l2_stream_on(int fd, enum v4l2_buf_type type) -{ - if (ioctl (fd, VIDIOC_STREAMON, &type) < 0) { - ALOGE("Error in VIDIOC_STREAMON"); - return -1; - } - - return 0; -} - -int fimc_v4l2_queue(int fd, struct fimc_buf *fimc_buf) -{ - struct v4l2_buffer buf; - - buf.type = V4L2_BUF_TYPE_VIDEO_OUTPUT; - buf.memory = V4L2_MEMORY_USERPTR; - buf.m.userptr = (unsigned long)fimc_buf; - buf.length = 0; - buf.index = 0; - - if (ioctl (fd, VIDIOC_QBUF, &buf) < 0) { - ALOGE("Error in VIDIOC_QBUF"); - return -1; - } - - return 0; -} - -int fimc_v4l2_dequeue(int fd) -{ - struct v4l2_buffer buf; - - buf.type = V4L2_BUF_TYPE_VIDEO_OUTPUT; - buf.memory = V4L2_MEMORY_USERPTR; - - if (ioctl (fd, VIDIOC_DQBUF, &buf) < 0) { - ALOGE("Error in VIDIOC_DQBUF"); - return -1; - } - - return buf.index; -} - -int fimc_v4l2_stream_off(int fd) -{ - enum v4l2_buf_type type; - type = V4L2_BUF_TYPE_VIDEO_OUTPUT; - - if (ioctl (fd, VIDIOC_STREAMOFF, &type) < 0) { - ALOGE("Error in VIDIOC_STREAMOFF"); - return -1; - } - - return 0; -} - -int fimc_v4l2_clr_buf(int fd) -{ - struct v4l2_requestbuffers req; - - req.count = 0; - req.type = V4L2_BUF_TYPE_VIDEO_OUTPUT; - req.memory = V4L2_MEMORY_USERPTR; - - if (ioctl (fd, VIDIOC_REQBUFS, &req) < 0) { - ALOGE("Error in VIDIOC_REQBUFS"); - } - - return 0; -} - -int fimc_handle_oneshot(int fd, struct fimc_buf *fimc_buf) -{ - int ret =0; - - if (fimc_v4l2_stream_on(fd, V4L2_BUF_TYPE_VIDEO_OUTPUT) < 0) { - ALOGE("Fail : v4l2_stream_on()"); - return -1; - } - - if (fimc_v4l2_queue(fd, fimc_buf) < 0) { - ALOGE("Fail : v4l2_queue()"); - ret = -1; - goto stream_off; - } - - if (fimc_v4l2_dequeue(fd) < 0) { - ALOGE("Fail : v4l2_dequeue()"); - ret = -1; - goto stream_off; - } - -stream_off: - if (fimc_v4l2_stream_off(fd) < 0) { - ALOGE("Fail : v4l2_stream_off()"); - return -1; - } - - if (fimc_v4l2_clr_buf(fd) < 0) { - ALOGE("Fail : v4l2_clr_buf()"); - return -1; - } - - return ret; -} - -static int get_src_phys_addr(struct hwc_context_t *ctx, - sec_img *src_img, - unsigned int *phyAddr) -{ - s5p_fimc_t *fimc = &ctx->fimc; - - if(src_img->mem_type == HWC_PHYS_MEM_TYPE) { - switch(src_img->format) { - case SAMSUNG_HAL_PIXEL_FORMAT_YCbCr_420_SP: - fimc->params.src.buf_addr_phy_rgb_y = phyAddr[0]; - fimc->params.src.buf_addr_phy_cb = phyAddr[1]; - break; - default: - ALOGE("%s format error (format=0x%x)", __func__, - src_img->format); - return -1; - } - } else { - ALOGE("%s mem_type error (mem_type=%d)", __func__, src_img->mem_type); - return -1; - } - - return 0; -} - -static int get_dst_phys_addr(struct hwc_context_t *ctx, - sec_img *dst_img) -{ - unsigned int dst_phys_addr = 0; - - if (HWC_PHYS_MEM_TYPE == dst_img->mem_type && 0 != dst_img->base) - dst_phys_addr = dst_img->base; - else { - ALOGE("%s::get_dst_phys_addr fail ", __func__); - dst_phys_addr = 0; - } - return dst_phys_addr; -} - -static inline int rotateValueHAL2PP(unsigned char transform, - int *flag_h_flip, - int *flag_v_flip) -{ - int rotate_result = 0; - int rotate_flag = transform & 0x7; - - switch (rotate_flag) { - case HAL_TRANSFORM_ROT_90: - rotate_result = 90; - break; - case HAL_TRANSFORM_ROT_180: - rotate_result = 180; - break; - case HAL_TRANSFORM_ROT_270: - rotate_result = 270; - break; - } - - switch (rotate_flag) { - case HAL_TRANSFORM_FLIP_H: - *flag_h_flip = 1; - *flag_v_flip = 0; - break; - case HAL_TRANSFORM_FLIP_V: - *flag_h_flip = 0; - *flag_v_flip = 1; - break; - default: - *flag_h_flip = 0; - *flag_v_flip = 0; - break; - } - - return rotate_result; -} - -static inline int multipleOfN(int number, int N) -{ - int result = number; - switch (N) { - case 1: - case 2: - case 4: - case 8: - case 16: - case 32: - case 64: - case 128: - case 256: - result = (number - (number & (N-1))); - break; - default: - result = number - (number % N); - break; - } - return result; -} - -static inline int widthOfPP(unsigned int ver, - int pp_color_format, - int number) -{ - if (0x50 == ver) { - switch(pp_color_format) { - /* 422 1/2/3 plane */ - case V4L2_PIX_FMT_YUYV: - case V4L2_PIX_FMT_UYVY: - case V4L2_PIX_FMT_NV61: - case V4L2_PIX_FMT_NV16: - case V4L2_PIX_FMT_YUV422P: - - /* 420 2/3 plane */ - case V4L2_PIX_FMT_NV21: - case V4L2_PIX_FMT_NV12: - case V4L2_PIX_FMT_NV12T: - case V4L2_PIX_FMT_YUV420: - return multipleOfN(number, 2); - - default : - return number; - } - } else { - switch(pp_color_format) { - case V4L2_PIX_FMT_RGB565: - return multipleOfN(number, 8); - - case V4L2_PIX_FMT_RGB32: - return multipleOfN(number, 4); - - case V4L2_PIX_FMT_YUYV: - case V4L2_PIX_FMT_UYVY: - return multipleOfN(number, 4); - - case V4L2_PIX_FMT_NV61: - case V4L2_PIX_FMT_NV16: - return multipleOfN(number, 8); - - case V4L2_PIX_FMT_YUV422P: - return multipleOfN(number, 16); - - case V4L2_PIX_FMT_NV21: - case V4L2_PIX_FMT_NV12: - case V4L2_PIX_FMT_NV12T: - return multipleOfN(number, 8); - - case V4L2_PIX_FMT_YUV420: - return multipleOfN(number, 16); - - default : - return number; - } - } - return number; -} - -static inline int heightOfPP(int pp_color_format, - int number) -{ - switch(pp_color_format) { - case V4L2_PIX_FMT_NV21: - case V4L2_PIX_FMT_NV12: - case V4L2_PIX_FMT_NV12T: - case V4L2_PIX_FMT_YUV420: - return multipleOfN(number, 2); - - default : - return number; - } - return number; -} - -static int runcFimcCore(struct hwc_context_t *ctx, - sec_img *src_img, - sec_rect *src_rect, - uint32_t src_color_space, - unsigned int dst_phys_addr, - sec_img *dst_img, - sec_rect *dst_rect, - uint32_t dst_color_space, - int transform) -{ - s5p_fimc_t * fimc = &ctx->fimc; - s5p_fimc_params_t * params = &(fimc->params); - - unsigned int frame_size = 0; - struct fimc_buf fimc_src_buf; - - int src_bpp, src_planes; - int flag_h_flip = 0; - int flag_v_flip = 0; - int rotate_value = rotateValueHAL2PP(transform, &flag_h_flip, &flag_v_flip); - - /* set post processor configuration */ - params->src.full_width = src_img->w; - params->src.full_height = src_img->h; - params->src.start_x = src_rect->x; - params->src.start_y = src_rect->y; - params->src.width = widthOfPP(fimc->hw_ver, src_color_space, src_rect->w); - params->src.height = heightOfPP(src_color_space, src_rect->h); - params->src.color_space = src_color_space; - - - /* check minimum */ - if (src_rect->w < 16 || src_rect->h < 8) { - ALOGE("%s src size is not supported by fimc : f_w=%d f_h=%d x=%d y=%d \ - w=%d h=%d (ow=%d oh=%d) format=0x%x", __func__, - params->src.full_width, params->src.full_height, - params->src.start_x, params->src.start_y, params->src.width, - params->src.height, src_rect->w, src_rect->h, - params->src.color_space); - return -1; - } - -switch (rotate_value) { - case 0: - params->dst.full_width = dst_img->w; - params->dst.full_height = dst_img->h; - - params->dst.start_x = dst_rect->x; - params->dst.start_y = dst_rect->y; - - params->dst.width = - widthOfPP(fimc->hw_ver, dst_color_space, dst_rect->w); - params->dst.height = heightOfPP(dst_color_space, dst_rect->h); - break; - case 90: - params->dst.full_width = dst_img->h; - params->dst.full_height = dst_img->w; - - params->dst.start_x = dst_rect->y; - params->dst.start_y = dst_img->w - (dst_rect->x + dst_rect->w); - - params->dst.width = - widthOfPP(fimc->hw_ver, dst_color_space, dst_rect->h); - params->dst.height = - widthOfPP(fimc->hw_ver, dst_color_space, dst_rect->w); - - if (0x50 > fimc->hw_ver) - params->dst.start_y += (dst_rect->w - params->dst.height); - break; - case 180: - params->dst.full_width = dst_img->w; - params->dst.full_height = dst_img->h; - - params->dst.start_x = dst_img->w - (dst_rect->x + dst_rect->w); - params->dst.start_y = dst_img->h - (dst_rect->y + dst_rect->h); - - params->dst.width = - widthOfPP(fimc->hw_ver, dst_color_space, dst_rect->w); - params->dst.height = heightOfPP(dst_color_space, dst_rect->h); - break; - case 270: - params->dst.full_width = dst_img->h; - params->dst.full_height = dst_img->w; - - params->dst.start_x = dst_img->h - (dst_rect->y + dst_rect->h); - params->dst.start_y = dst_rect->x; - - params->dst.width = - widthOfPP(fimc->hw_ver, dst_color_space, dst_rect->h); - params->dst.height = - widthOfPP(fimc->hw_ver, dst_color_space, dst_rect->w); - - if (0x50 > fimc->hw_ver) - params->dst.start_y += (dst_rect->w - params->dst.height); - break; - } - - - params->dst.color_space = dst_color_space; - - /* check minimum */ - if (dst_rect->w < 8 || dst_rect->h < 4) { - ALOGE("%s dst size is not supported by fimc : \ - f_w=%d f_h=%d x=%d y=%d w=%d h=%d (ow=%d oh=%d) format=0x%x", - __func__, params->dst.full_width, params->dst.full_height, - params->dst.start_x, params->dst.start_y, params->dst.width, - params->dst.height, dst_rect->w, dst_rect->h, - params->dst.color_space); - return -1; - } - - /* check scaling limit - * the scaling limie must not be more than MAX_RESIZING_RATIO_LIMIT - */ - if (((src_rect->w > dst_rect->w) && - ((src_rect->w / dst_rect->w) > MAX_RESIZING_RATIO_LIMIT)) || - ((dst_rect->w > src_rect->w) && - ((dst_rect->w / src_rect->w) > MAX_RESIZING_RATIO_LIMIT))) { - ALOGE("%s over scaling limit : src.w=%d dst.w=%d (limit=%d)", - __func__, src_rect->w, dst_rect->w, MAX_RESIZING_RATIO_LIMIT); - return -1; - } - - - /* set configuration related to destination (DMA-OUT) - * - set input format & size - * - crop input size - * - set input buffer - * - set buffer type (V4L2_MEMORY_USERPTR) - */ - if (fimc_v4l2_set_dst(fimc->dev_fd, - ¶ms->dst, - rotate_value, - flag_h_flip, - flag_v_flip, - dst_phys_addr) < 0) { - return -1; - } - - /* set configuration related to source (DMA-INPUT) - * - set input format & size - * - crop input size - * - set input buffer - * - set buffer type (V4L2_MEMORY_USERPTR) - */ - if (fimc_v4l2_set_src(fimc->dev_fd, fimc->hw_ver, ¶ms->src) < 0) - return -1; - - /* set input dma address (Y/RGB, Cb, Cr) */ - switch (src_img->format) { - case SAMSUNG_HAL_PIXEL_FORMAT_YCbCr_420_SP: - /* for video display zero copy case */ - fimc_src_buf.base[0] = params->src.buf_addr_phy_rgb_y; - fimc_src_buf.base[1] = params->src.buf_addr_phy_cb; - break; - - default: - /* set source image */ - fimc_src_buf.base[0] = params->src.buf_addr_phy_rgb_y; - break; - } - - if (fimc_handle_oneshot(fimc->dev_fd, &fimc_src_buf) < 0) { - fimc_v4l2_clr_buf(fimc->dev_fd); - return -1; - } - - return 0; -} - -int createFimc(s5p_fimc_t *fimc) -{ - struct v4l2_capability cap; - struct v4l2_format fmt; - struct v4l2_control vc; - - #define PP_DEVICE_DEV_NAME "/dev/video1" - - /* open device file */ - if(fimc->dev_fd < 0) { - fimc->dev_fd = open(PP_DEVICE_DEV_NAME, O_RDWR); - - if (fimc->dev_fd < 0) { - ALOGE("%s::Post processor open error (%d)", __func__, errno); - goto err; - } - } - - /* check capability */ - if (ioctl(fimc->dev_fd, VIDIOC_QUERYCAP, &cap) < 0) { - ALOGE("VIDIOC_QUERYCAP failed"); - goto err; - } - - if (!(cap.capabilities & V4L2_CAP_STREAMING)) { - ALOGE("%d has no streaming support", fimc->dev_fd); - goto err; - } - - if (!(cap.capabilities & V4L2_CAP_VIDEO_OUTPUT)) { - ALOGE("%d is no video output", fimc->dev_fd); - goto err; - } - - /* - * malloc fimc_outinfo structure - */ - fmt.type = V4L2_BUF_TYPE_VIDEO_OUTPUT; - if (ioctl(fimc->dev_fd, VIDIOC_G_FMT, &fmt) < 0) { - ALOGE("%s::Error in video VIDIOC_G_FMT", __func__); - goto err; - } - - vc.id = V4L2_CID_FIMC_VERSION; - vc.value = 0; - - if (ioctl(fimc->dev_fd, VIDIOC_G_CTRL, &vc) < 0) { - ALOGE("%s::Error in video VIDIOC_G_CTRL", __func__); - goto err; - } - fimc->hw_ver = vc.value; - - return 0; - -err: - if (0 <= fimc->dev_fd) - close(fimc->dev_fd); - fimc->dev_fd = -1; - - return -1; -} - -int destroyFimc(s5p_fimc_t *fimc) -{ - if (fimc->out_buf.virt_addr != NULL) { - fimc->out_buf.virt_addr = NULL; - fimc->out_buf.length = 0; - } - - /* close */ - if (0 <= fimc->dev_fd) - close(fimc->dev_fd); - fimc->dev_fd = -1; - - return 0; -} - -int runFimc(struct hwc_context_t *ctx, - struct sec_img *src_img, - struct sec_rect *src_rect, - struct sec_img *dst_img, - struct sec_rect *dst_rect, - unsigned int *phyAddr, - uint32_t transform) -{ - s5p_fimc_t *fimc = &ctx->fimc; - unsigned int dst_phys_addr = 0; - int32_t src_color_space; - int32_t dst_color_space; - - /* 1 : source address and size */ - - if(0 > get_src_phys_addr(ctx, src_img, phyAddr)) - return -1; - - /* 2 : destination address and size */ - if(0 == (dst_phys_addr = get_dst_phys_addr(ctx, dst_img))) - return -2; - - /* check whether fimc supports the src format */ - if (0 > (src_color_space = HAL_PIXEL_FORMAT_2_V4L2_PIX(src_img->format))) - return -3; - - if (0 > (dst_color_space = HAL_PIXEL_FORMAT_2_V4L2_PIX(dst_img->format))) - return -4; - - if(runcFimcCore(ctx, src_img, src_rect, (uint32_t)src_color_space, - dst_phys_addr, dst_img, dst_rect, (uint32_t)dst_color_space, transform) < 0) - return -5; - - return 0; -} diff --git a/libhwcomposer/SecHWCUtils.h b/libhwcomposer/SecHWCUtils.h deleted file mode 100644 index d59c120..0000000 --- a/libhwcomposer/SecHWCUtils.h +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Copyright (C) 2010 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * - * @author Rama, Meka(v.meka@samsung.com) - Sangwoo, Park(sw5771.park@samsung.com) - Jamie, Oh (jung-min.oh@samsung.com) - * @date 2011-07-28 - * - */ - -#ifndef ANDROID_SEC_HWC_UTILS_H_ -#define ANDROID_SEC_HWC_UTILS_H_ -#include -#include -#include -#include -#include -#include -#include "linux/fb.h" -#include - -#include -#include -#include - -#include "s5p_fimc.h" -#include "sec_lcd.h" -#include "sec_format.h" -#include "sec_utils.h" -#include "hal_public.h" - -#define GRALLOC_USAGE_PHYS_CONTIG GRALLOC_USAGE_PRIVATE_1 - -#define NUM_OF_WIN (1) -#define NUM_OF_WIN_BUF (3) -#define NUM_OF_MEM_OBJ (1) -#define MAX_NUM_PLANES (3) - -#define MAX_RESIZING_RATIO_LIMIT (63) - -struct sec_rect { - uint32_t x; - uint32_t y; - uint32_t w; - uint32_t h; -}; - -struct sec_img { - uint32_t w; - uint32_t h; - uint32_t format; - uint32_t base; - uint32_t offset; - int mem_id; - int mem_type; -}; - -inline int SEC_MIN(int x, int y) { - return ((x < y) ? x : y); -} - -inline int SEC_MAX(int x, int y) { - return ((x > y) ? x : y); -} - -struct hwc_win_info_t { - int fd; - int size; - sec_rect rect_info; - uint32_t addr[NUM_OF_WIN_BUF]; - int buf_index; - int power_state; - int blending; - int layer_index; - uint32_t layer_prev_buf; - int set_win_flag; - int status; - int vsync; - - struct fb_fix_screeninfo fix_info; - struct fb_var_screeninfo var_info; - struct fb_var_screeninfo lcd_info; -}; - -enum { - HWC_WIN_FREE = 0, - HWC_WIN_RESERVED, -}; - -enum { - HWC_UNKNOWN_MEM_TYPE = 0, - HWC_PHYS_MEM_TYPE, - HWC_VIRT_MEM_TYPE, -}; - -struct hwc_context_t { - hwc_composer_device_t device; - - /* our private state goes below here */ - struct hwc_win_info_t win[NUM_OF_WIN]; - struct hwc_win_info_t global_lcd_win; - struct fb_var_screeninfo lcd_info; - s5p_fimc_t fimc; - hwc_procs_t *procs; - pthread_t vsync_thread; - unsigned int num_of_fb_layer; - unsigned int num_of_hwc_layer; - unsigned int num_of_fb_layer_prev; -}; - -int window_open(struct hwc_win_info_t *win, int id); -int window_close(struct hwc_win_info_t *win); -int window_set_pos(struct hwc_win_info_t *win); -int window_get_info(struct hwc_win_info_t *win); -int window_pan_display(struct hwc_win_info_t *win); -int window_show(struct hwc_win_info_t *win); -int window_hide(struct hwc_win_info_t *win); -int window_get_global_lcd_info(struct hwc_context_t *ctx); - -int createFimc(s5p_fimc_t *fimc); -int destroyFimc(s5p_fimc_t *fimc); -int runFimc(struct hwc_context_t *ctx, - struct sec_img *src_img, struct sec_rect *src_rect, - struct sec_img *dst_img, struct sec_rect *dst_rect, - unsigned int *phyAddr, - uint32_t transform); -#endif /* ANDROID_SEC_HWC_UTILS_H_*/ - diff --git a/libs3cjpeg/Android.mk b/libs3cjpeg/Android.mk deleted file mode 100644 index ce61cfa..0000000 --- a/libs3cjpeg/Android.mk +++ /dev/null @@ -1,34 +0,0 @@ -# Copyright (C) 2008 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - - -LOCAL_C_INCLUDES := $(LOCAL_PATH) -LOCAL_C_INCLUDES += $(LOCAL_PATH)/../include - -LOCAL_SRC_FILES:= \ - JpegEncoder.cpp - -LOCAL_SHARED_LIBRARIES:= liblog -LOCAL_SHARED_LIBRARIES+= libdl - -LOCAL_MODULE:= libs3cjpeg - -LOCAL_MODULE_TAGS := optional - -LOCAL_PRELINK_MODULE := false - -include $(BUILD_SHARED_LIBRARY) \ No newline at end of file diff --git a/libs3cjpeg/Exif.h b/libs3cjpeg/Exif.h deleted file mode 100644 index 96e11dd..0000000 --- a/libs3cjpeg/Exif.h +++ /dev/null @@ -1,233 +0,0 @@ -/* - * Copyright Samsung Electronics Co.,LTD. - * Copyright (C) 2010 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef ANDROID_HARDWARE_EXIF_H -#define ANDROID_HARDWARE_EXIF_H - -#include - -#define EXIF_LOG2(x) (log((double)(x)) / log(2.0)) -#define APEX_FNUM_TO_APERTURE(x) ((int)(EXIF_LOG2((double)(x)) * 2 + 0.5)) -#define APEX_EXPOSURE_TO_SHUTTER(x) ((x) >= 1 ? \ - (int)(-(EXIF_LOG2((double)(x)) + 0.5)) : \ - (int)(-(EXIF_LOG2((double)(x)) - 0.5))) -#define APEX_ISO_TO_FILMSENSITIVITY(x) ((int)(EXIF_LOG2((x) / 3.125) + 0.5)) - -#define NUM_SIZE 2 -#define IFD_SIZE 12 -#define OFFSET_SIZE 4 - -#define NUM_0TH_IFD_TIFF 10 -#define NUM_0TH_IFD_EXIF 22 -#define NUM_0TH_IFD_GPS 10 -#define NUM_1TH_IFD_TIFF 9 - -/* Type */ -#define EXIF_TYPE_BYTE 1 -#define EXIF_TYPE_ASCII 2 -#define EXIF_TYPE_SHORT 3 -#define EXIF_TYPE_LONG 4 -#define EXIF_TYPE_RATIONAL 5 -#define EXIF_TYPE_UNDEFINED 7 -#define EXIF_TYPE_SLONG 9 -#define EXIF_TYPE_SRATIONAL 10 - -#define EXIF_FILE_SIZE 28800 - -/* 0th IFD TIFF Tags */ -#define EXIF_TAG_IMAGE_WIDTH 0x0100 -#define EXIF_TAG_IMAGE_HEIGHT 0x0101 -#define EXIF_TAG_MAKE 0x010f -#define EXIF_TAG_MODEL 0x0110 -#define EXIF_TAG_ORIENTATION 0x0112 -#define EXIF_TAG_SOFTWARE 0x0131 -#define EXIF_TAG_DATE_TIME 0x0132 -#define EXIF_TAG_YCBCR_POSITIONING 0x0213 -#define EXIF_TAG_EXIF_IFD_POINTER 0x8769 -#define EXIF_TAG_GPS_IFD_POINTER 0x8825 - -/* 0th IFD Exif Private Tags */ -#define EXIF_TAG_EXPOSURE_TIME 0x829A -#define EXIF_TAG_FNUMBER 0x829D -#define EXIF_TAG_EXPOSURE_PROGRAM 0x8822 -#define EXIF_TAG_ISO_SPEED_RATING 0x8827 -#define EXIF_TAG_EXIF_VERSION 0x9000 -#define EXIF_TAG_DATE_TIME_ORG 0x9003 -#define EXIF_TAG_DATE_TIME_DIGITIZE 0x9004 -#define EXIF_TAG_SHUTTER_SPEED 0x9201 -#define EXIF_TAG_APERTURE 0x9202 -#define EXIF_TAG_BRIGHTNESS 0x9203 -#define EXIF_TAG_EXPOSURE_BIAS 0x9204 -#define EXIF_TAG_MAX_APERTURE 0x9205 -#define EXIF_TAG_METERING_MODE 0x9207 -#define EXIF_TAG_FLASH 0x9209 -#define EXIF_TAG_FOCAL_LENGTH 0x920A -#define EXIF_TAG_USER_COMMENT 0x9286 -#define EXIF_TAG_COLOR_SPACE 0xA001 -#define EXIF_TAG_PIXEL_X_DIMENSION 0xA002 -#define EXIF_TAG_PIXEL_Y_DIMENSION 0xA003 -#define EXIF_TAG_EXPOSURE_MODE 0xA402 -#define EXIF_TAG_WHITE_BALANCE 0xA403 -#define EXIF_TAG_SCENCE_CAPTURE_TYPE 0xA406 - -/* 0th IFD GPS Info Tags */ -#define EXIF_TAG_GPS_VERSION_ID 0x0000 -#define EXIF_TAG_GPS_LATITUDE_REF 0x0001 -#define EXIF_TAG_GPS_LATITUDE 0x0002 -#define EXIF_TAG_GPS_LONGITUDE_REF 0x0003 -#define EXIF_TAG_GPS_LONGITUDE 0x0004 -#define EXIF_TAG_GPS_ALTITUDE_REF 0x0005 -#define EXIF_TAG_GPS_ALTITUDE 0x0006 -#define EXIF_TAG_GPS_TIMESTAMP 0x0007 -#define EXIF_TAG_GPS_PROCESSING_METHOD 0x001B -#define EXIF_TAG_GPS_DATESTAMP 0x001D - -/* 1th IFD TIFF Tags */ -#define EXIF_TAG_COMPRESSION_SCHEME 0x0103 -#define EXIF_TAG_X_RESOLUTION 0x011A -#define EXIF_TAG_Y_RESOLUTION 0x011B -#define EXIF_TAG_RESOLUTION_UNIT 0x0128 -#define EXIF_TAG_JPEG_INTERCHANGE_FORMAT 0x0201 -#define EXIF_TAG_JPEG_INTERCHANGE_FORMAT_LEN 0x0202 - - -typedef enum { - EXIF_ORIENTATION_UP = 1, - EXIF_ORIENTATION_90 = 6, - EXIF_ORIENTATION_180 = 3, - EXIF_ORIENTATION_270 = 8, -} ExifOrientationType; - -typedef enum { - EXIF_SCENE_STANDARD, - EXIF_SCENE_LANDSCAPE, - EXIF_SCENE_PORTRAIT, - EXIF_SCENE_NIGHT, -} CamExifSceneCaptureType; - -typedef enum { - EXIF_METERING_UNKNOWN, - EXIF_METERING_AVERAGE, - EXIF_METERING_CENTER, - EXIF_METERING_SPOT, - EXIF_METERING_MULTISPOT, - EXIF_METERING_PATTERN, - EXIF_METERING_PARTIAL, - EXIF_METERING_OTHER = 255, -} CamExifMeteringModeType; - -typedef enum { - EXIF_EXPOSURE_AUTO, - EXIF_EXPOSURE_MANUAL, - EXIF_EXPOSURE_AUTO_BRACKET, -} CamExifExposureModeType; - -typedef enum { - EXIF_WB_AUTO, - EXIF_WB_MANUAL, -} CamExifWhiteBalanceType; - -/* Values */ -#define EXIF_DEF_MAKER "SAMSUNG" -#define EXIF_DEF_MODEL "GT-I9020" -#define EXIF_DEF_SOFTWARE "CRESPOJH2" -#define EXIF_DEF_EXIF_VERSION "0220" -#define EXIF_DEF_USERCOMMENTS "User comments" - -#define EXIF_DEF_YCBCR_POSITIONING 1 /* centered */ -#define EXIF_DEF_FNUMBER_NUM 26 /* 2.6 */ -#define EXIF_DEF_FNUMBER_DEN 10 -#define EXIF_DEF_EXPOSURE_PROGRAM 3 /* aperture priority */ -#define EXIF_DEF_FOCAL_LEN_NUM 278 /* 2.78mm */ -#define EXIF_DEF_FOCAL_LEN_DEN 100 -#define EXIF_DEF_FLASH 0 /* O: off, 1: on*/ -#define EXIF_DEF_COLOR_SPACE 1 -#define EXIF_DEF_EXPOSURE_MODE EXIF_EXPOSURE_AUTO -#define EXIF_DEF_APEX_DEN 10 - -#define EXIF_DEF_COMPRESSION 6 -#define EXIF_DEF_RESOLUTION_NUM 72 -#define EXIF_DEF_RESOLUTION_DEN 1 -#define EXIF_DEF_RESOLUTION_UNIT 2 /* inches */ - -typedef struct { - uint32_t num; - uint32_t den; -} rational_t; - -typedef struct { - int32_t num; - int32_t den; -} srational_t; - -typedef struct { - bool enableGps; - bool enableThumb; - - unsigned char maker[32]; - unsigned char model[32]; - unsigned char software[32]; - unsigned char exif_version[4]; - unsigned char date_time[20]; - unsigned char user_comment[150]; - - uint32_t width; - uint32_t height; - uint32_t widthThumb; - uint32_t heightThumb; - - uint16_t orientation; - uint16_t ycbcr_positioning; - uint16_t exposure_program; - uint16_t iso_speed_rating; - uint16_t metering_mode; - uint16_t flash; - uint16_t color_space; - uint16_t exposure_mode; - uint16_t white_balance; - uint16_t scene_capture_type; - - rational_t exposure_time; - rational_t fnumber; - rational_t aperture; - rational_t max_aperture; - rational_t focal_length; - - srational_t shutter_speed; - srational_t brightness; - srational_t exposure_bias; - - unsigned char gps_latitude_ref[2]; - unsigned char gps_longitude_ref[2]; - - uint8_t gps_version_id[4]; - uint8_t gps_altitude_ref; - - rational_t gps_latitude[3]; - rational_t gps_longitude[3]; - rational_t gps_altitude; - rational_t gps_timestamp[3]; - unsigned char gps_datestamp[11]; - unsigned char gps_processing_method[100]; - - rational_t x_resolution; - rational_t y_resolution; - uint16_t resolution_unit; - uint16_t compression_scheme; -} exif_attribute_t; - - -#endif /* ANDROID_HARDWARE_EXIF_H */ diff --git a/libs3cjpeg/JpegEncoder.cpp b/libs3cjpeg/JpegEncoder.cpp deleted file mode 100644 index d2b6a6f..0000000 --- a/libs3cjpeg/JpegEncoder.cpp +++ /dev/null @@ -1,796 +0,0 @@ -/* - * Copyright Samsung Electronics Co.,LTD. - * Copyright (C) 2010 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * JPEG DRIVER MODULE (JpegEncoder.cpp) - * Author : ge.lee -- initial version - * Date : 03 June 2010 - * Purpose : This file implements the JPEG encoder APIs as needed by Camera HAL - */ -#define LOG_TAG "JpegEncoder" -#define MAIN_DUMP 0 -#define THUMB_DUMP 0 - -#include -#include -#include - -#include "JpegEncoder.h" - -static const char ExifAsciiPrefix[] = { 0x41, 0x53, 0x43, 0x49, 0x49, 0x0, 0x0, 0x0 }; - -namespace android { -JpegEncoder::JpegEncoder() : available(false) -{ - mArgs.mmapped_addr = (char *)MAP_FAILED; - mArgs.enc_param = NULL; - mArgs.thumb_enc_param = NULL; - - mDevFd = open(JPG_DRIVER_NAME, O_RDWR); - if (mDevFd < 0) { - ALOGE("Failed to open the device"); - return; - } - - mArgs.mmapped_addr = (char *)mmap(0, - JPG_TOTAL_BUF_SIZE, - PROT_READ | PROT_WRITE, - MAP_SHARED, - mDevFd, - 0); - - if (mArgs.mmapped_addr == MAP_FAILED) { - ALOGE("Failed to mmap"); - return; - } - - mArgs.enc_param = new jpg_enc_proc_param; - if (mArgs.enc_param == NULL) { - ALOGE("Failed to allocate the memory for enc_param"); - return; - } - memset(mArgs.enc_param, 0, sizeof(jpg_enc_proc_param)); - - mArgs.thumb_enc_param = new jpg_enc_proc_param; - if (mArgs.thumb_enc_param == NULL) { - ALOGE("Failed to allocate the memory for thumb_enc_param"); - delete mArgs.enc_param; - return; - } - memset(mArgs.thumb_enc_param, 0, sizeof(jpg_enc_proc_param)); - - mArgs.enc_param->sample_mode = JPG_420; - mArgs.enc_param->enc_type = JPG_MAIN; - mArgs.thumb_enc_param->sample_mode = JPG_420; - mArgs.thumb_enc_param->enc_type = JPG_THUMBNAIL; - - available = true; -} - -JpegEncoder::~JpegEncoder() -{ - if (mArgs.mmapped_addr != (char*)MAP_FAILED) - munmap(mArgs.mmapped_addr, JPG_TOTAL_BUF_SIZE); - - delete mArgs.enc_param; - - delete mArgs.thumb_enc_param; - - if (mDevFd > 0) - close(mDevFd); -} - -jpg_return_status JpegEncoder::setConfig(jpeg_conf type, int32_t value) -{ - if (!available) - return JPG_FAIL; - - jpg_return_status ret = JPG_SUCCESS; - - switch (type) { - case JPEG_SET_ENCODE_WIDTH: - if (value < 0 || value > MAX_JPG_WIDTH) - ret = JPG_FAIL; - else - mArgs.enc_param->width = value; - break; - - case JPEG_SET_ENCODE_HEIGHT: - if (value < 0 || value > MAX_JPG_HEIGHT) - ret = JPG_FAIL; - else - mArgs.enc_param->height = value; - break; - - case JPEG_SET_ENCODE_QUALITY: - if (value < JPG_QUALITY_LEVEL_1 || value > JPG_QUALITY_LEVEL_4) - ret = JPG_FAIL; - else - mArgs.enc_param->quality = (image_quality_type_t)value; - break; - - case JPEG_SET_ENCODE_IN_FORMAT: - if (value != JPG_MODESEL_YCBCR && value != JPG_MODESEL_RGB) { - ret = JPG_FAIL; - } else { - mArgs.enc_param->in_format = (in_mode_t)value; - mArgs.thumb_enc_param->in_format = (in_mode_t)value; - } - break; - - case JPEG_SET_SAMPING_MODE: - if (value != JPG_420 && value != JPG_422) { - ret = JPG_FAIL; - } else { - mArgs.enc_param->sample_mode = (sample_mode_t)value; - mArgs.thumb_enc_param->sample_mode = (sample_mode_t)value; - } - break; - - case JPEG_SET_THUMBNAIL_WIDTH: - if (value < 0 || value > MAX_JPG_THUMBNAIL_WIDTH) - ret = JPG_FAIL; - else - mArgs.thumb_enc_param->width = value; - break; - - case JPEG_SET_THUMBNAIL_HEIGHT: - if (value < 0 || value > MAX_JPG_THUMBNAIL_HEIGHT) - ret = JPG_FAIL; - else - mArgs.thumb_enc_param->height = value; - break; - - default: - ALOGE("Invalid Config type"); - ret = ERR_UNKNOWN; - } - - if (ret == JPG_FAIL) - ALOGE("Invalid value(%d) for %d type", value, type); - - return ret; -} - -void* JpegEncoder::getInBuf(uint64_t size) -{ - if (!available) - return NULL; - - if (size > JPG_FRAME_BUF_SIZE) { - ALOGE("The buffer size requested is too large"); - return NULL; - } - mArgs.in_buf = (char *)ioctl(mDevFd, IOCTL_JPG_GET_FRMBUF, mArgs.mmapped_addr); - return (void *)(mArgs.in_buf); -} - -void* JpegEncoder::getOutBuf(uint64_t *size) -{ - if (!available) - return NULL; - - if (mArgs.enc_param->file_size <= 0) { - ALOGE("The buffer requested doesn't have data"); - return NULL; - } - mArgs.out_buf = (char *)ioctl(mDevFd, IOCTL_JPG_GET_STRBUF, mArgs.mmapped_addr); - *size = mArgs.enc_param->file_size; - return (void *)(mArgs.out_buf); -} - -void* JpegEncoder::getThumbInBuf(uint64_t size) -{ - if (!available) - return NULL; - - if (size > JPG_FRAME_THUMB_BUF_SIZE) { - ALOGE("The buffer size requested is too large"); - return NULL; - } - mArgs.in_thumb_buf = (char *)ioctl(mDevFd, IOCTL_JPG_GET_THUMB_FRMBUF, mArgs.mmapped_addr); - return (void *)(mArgs.in_thumb_buf); -} - -void* JpegEncoder::getThumbOutBuf(uint64_t *size) -{ - if (!available) - return NULL; - - if (mArgs.thumb_enc_param->file_size <= 0) { - ALOGE("The buffer requested doesn't have data"); - return NULL; - } - mArgs.out_thumb_buf = (char *)ioctl(mDevFd, IOCTL_JPG_GET_THUMB_STRBUF, mArgs.mmapped_addr); - *size = mArgs.thumb_enc_param->file_size; - return (void *)(mArgs.out_thumb_buf); -} - -jpg_return_status JpegEncoder::encode(unsigned int *size, exif_attribute_t *exifInfo) -{ - if (!available) - return JPG_FAIL; - - ALOGD("encode E"); - - jpg_return_status ret = JPG_FAIL; - unsigned char *exifOut = NULL; - jpg_enc_proc_param *param = mArgs.enc_param; - - ret = checkMcu(param->sample_mode, param->width, param->height, false); - if (ret != JPG_SUCCESS) - return ret; - - param->enc_type = JPG_MAIN; - ret = (jpg_return_status)ioctl(mDevFd, IOCTL_JPG_ENCODE, &mArgs); - if (ret != JPG_SUCCESS) { - ALOGE("Failed to encode main image"); - return ret; - } - - mArgs.out_buf = (char *)ioctl(mDevFd, IOCTL_JPG_GET_STRBUF, mArgs.mmapped_addr); - - if (exifInfo) { - unsigned int thumbLen, exifLen; - - uint_t bufSize = 0; - if (exifInfo->enableThumb) { - ret = encodeThumbImg(&thumbLen); - if (ret != JPG_SUCCESS) { - ALOGE("Failed to encode for thumbnail image"); - bufSize = EXIF_FILE_SIZE; - exifInfo->enableThumb = false; - } else { - bufSize = EXIF_FILE_SIZE + thumbLen; - } - } else { - bufSize = EXIF_FILE_SIZE; - } - - if (mArgs.enc_param->file_size + bufSize > JPG_TOTAL_BUF_SIZE) - return ret; - - exifOut = new unsigned char[bufSize]; - if (exifOut == NULL) { - ALOGE("Failed to allocate for exifOut"); - return ret; - } - memset(exifOut, 0, bufSize); - - ret = makeExif (exifOut, exifInfo, &exifLen); - if (ret != JPG_SUCCESS) { - ALOGE("Failed to make EXIF"); - delete[] exifOut; - return ret; - } - - memmove(&mArgs.out_buf[exifLen + 2], &mArgs.out_buf[2], param->file_size - 2); - memcpy(&mArgs.out_buf[2], exifOut, exifLen); - param->file_size += exifLen; - } - - delete[] exifOut; - - *size = param->file_size; - -#if MAIN_DUMP - FILE *fout = NULL; - char file_name[50] = "/data/main.jpg"; - fout = fopen(file_name, "wb"); - if (!fout) - perror(&file_name[0]); - size_t nwrite = fwrite(mArgs.out_buf, sizeof(char), param->file_size, fout); - fclose(fout); -#endif - - ALOGD("encode X"); - - return ret; -} - -jpg_return_status JpegEncoder::encodeThumbImg(unsigned int *size, bool useMain) -{ - if (!available) - return JPG_FAIL; - - ALOGD("encodeThumbImg E"); - - jpg_return_status ret = JPG_FAIL; - jpg_enc_proc_param *param = mArgs.thumb_enc_param; - - if (useMain) { - mArgs.in_thumb_buf = (char *)getThumbInBuf(param->width*param->height*2); - if (mArgs.in_thumb_buf == NULL) { - ALOGE("Failed to get the buffer for thumbnail"); - return JPG_FAIL; - } - - ret = (jpg_return_status)scaleDownYuv422(mArgs.in_buf, - mArgs.enc_param->width, - mArgs.enc_param->height, - mArgs.in_thumb_buf, - param->width, - param->height); - if (ret != JPG_SUCCESS) - return JPG_FAIL; - } - - ret = checkMcu(param->sample_mode, param->width, param->height, true); - if (ret != JPG_SUCCESS) - return JPG_FAIL; - - mArgs.enc_param->enc_type = JPG_THUMBNAIL; - ret = (jpg_return_status)ioctl(mDevFd, IOCTL_JPG_ENCODE, &mArgs); - if (ret != JPG_SUCCESS) { - ALOGE("Failed to encode for thumbnail"); - return JPG_FAIL; - } - - mArgs.out_thumb_buf = (char *)ioctl(mDevFd, IOCTL_JPG_GET_THUMB_STRBUF, mArgs.mmapped_addr); - -#if THUMB_DUMP - FILE *fout = NULL; - char file_name[50] = "/data/thumb.jpg"; - fout = fopen(file_name, "wb"); - if (!fout) - perror(&file_name[0]); - size_t nwrite = fwrite(mArgs.out_thumb_buf, sizeof(char), param->file_size, fout); - fclose(fout); -#endif - - ALOGD("encodeThumbImg X"); - - return JPG_SUCCESS; -} - -jpg_return_status JpegEncoder::makeExif (unsigned char *exifOut, - exif_attribute_t *exifInfo, - unsigned int *size, - bool useMainbufForThumb) -{ - if (!available) - return JPG_FAIL; - - ALOGD("makeExif E"); - - unsigned char *pCur, *pApp1Start, *pIfdStart, *pGpsIfdPtr, *pNextIfdOffset; - unsigned int tmp, LongerTagOffest = 0; - pApp1Start = pCur = exifOut; - - //2 Exif Identifier Code & TIFF Header - pCur += 4; // Skip 4 Byte for APP1 marker and length - unsigned char ExifIdentifierCode[6] = { 0x45, 0x78, 0x69, 0x66, 0x00, 0x00 }; - memcpy(pCur, ExifIdentifierCode, 6); - pCur += 6; - - /* Byte Order - little endian, Offset of IFD - 0x00000008.H */ - unsigned char TiffHeader[8] = { 0x49, 0x49, 0x2A, 0x00, 0x08, 0x00, 0x00, 0x00 }; - memcpy(pCur, TiffHeader, 8); - pIfdStart = pCur; - pCur += 8; - - //2 0th IFD TIFF Tags - if (exifInfo->enableGps) - tmp = NUM_0TH_IFD_TIFF; - else - tmp = NUM_0TH_IFD_TIFF - 1; - - memcpy(pCur, &tmp, NUM_SIZE); - pCur += NUM_SIZE; - - LongerTagOffest += 8 + NUM_SIZE + tmp*IFD_SIZE + OFFSET_SIZE; - - writeExifIfd(&pCur, EXIF_TAG_IMAGE_WIDTH, EXIF_TYPE_LONG, - 1, exifInfo->width); - writeExifIfd(&pCur, EXIF_TAG_IMAGE_HEIGHT, EXIF_TYPE_LONG, - 1, exifInfo->height); - writeExifIfd(&pCur, EXIF_TAG_MAKE, EXIF_TYPE_ASCII, - strlen((char *)exifInfo->maker) + 1, exifInfo->maker, &LongerTagOffest, pIfdStart); - writeExifIfd(&pCur, EXIF_TAG_MODEL, EXIF_TYPE_ASCII, - strlen((char *)exifInfo->model) + 1, exifInfo->model, &LongerTagOffest, pIfdStart); - writeExifIfd(&pCur, EXIF_TAG_ORIENTATION, EXIF_TYPE_SHORT, - 1, exifInfo->orientation); - writeExifIfd(&pCur, EXIF_TAG_SOFTWARE, EXIF_TYPE_ASCII, - strlen((char *)exifInfo->software) + 1, exifInfo->software, &LongerTagOffest, pIfdStart); - writeExifIfd(&pCur, EXIF_TAG_DATE_TIME, EXIF_TYPE_ASCII, - 20, exifInfo->date_time, &LongerTagOffest, pIfdStart); - writeExifIfd(&pCur, EXIF_TAG_YCBCR_POSITIONING, EXIF_TYPE_SHORT, - 1, exifInfo->ycbcr_positioning); - writeExifIfd(&pCur, EXIF_TAG_EXIF_IFD_POINTER, EXIF_TYPE_LONG, - 1, LongerTagOffest); - if (exifInfo->enableGps) { - pGpsIfdPtr = pCur; - pCur += IFD_SIZE; // Skip a ifd size for gps IFD pointer - } - - pNextIfdOffset = pCur; // Skip a offset size for next IFD offset - pCur += OFFSET_SIZE; - - //2 0th IFD Exif Private Tags - pCur = pIfdStart + LongerTagOffest; - - tmp = NUM_0TH_IFD_EXIF; - memcpy(pCur, &tmp , NUM_SIZE); - pCur += NUM_SIZE; - - LongerTagOffest += NUM_SIZE + NUM_0TH_IFD_EXIF*IFD_SIZE + OFFSET_SIZE; - - writeExifIfd(&pCur, EXIF_TAG_EXPOSURE_TIME, EXIF_TYPE_RATIONAL, - 1, &exifInfo->exposure_time, &LongerTagOffest, pIfdStart); - writeExifIfd(&pCur, EXIF_TAG_FNUMBER, EXIF_TYPE_RATIONAL, - 1, &exifInfo->fnumber, &LongerTagOffest, pIfdStart); - writeExifIfd(&pCur, EXIF_TAG_EXPOSURE_PROGRAM, EXIF_TYPE_SHORT, - 1, exifInfo->exposure_program); - writeExifIfd(&pCur, EXIF_TAG_ISO_SPEED_RATING, EXIF_TYPE_SHORT, - 1, exifInfo->iso_speed_rating); - writeExifIfd(&pCur, EXIF_TAG_EXIF_VERSION, EXIF_TYPE_UNDEFINED, - 4, exifInfo->exif_version); - writeExifIfd(&pCur, EXIF_TAG_DATE_TIME_ORG, EXIF_TYPE_ASCII, - 20, exifInfo->date_time, &LongerTagOffest, pIfdStart); - writeExifIfd(&pCur, EXIF_TAG_DATE_TIME_DIGITIZE, EXIF_TYPE_ASCII, - 20, exifInfo->date_time, &LongerTagOffest, pIfdStart); - writeExifIfd(&pCur, EXIF_TAG_SHUTTER_SPEED, EXIF_TYPE_SRATIONAL, - 1, (rational_t *)&exifInfo->shutter_speed, &LongerTagOffest, pIfdStart); - writeExifIfd(&pCur, EXIF_TAG_APERTURE, EXIF_TYPE_RATIONAL, - 1, &exifInfo->aperture, &LongerTagOffest, pIfdStart); - writeExifIfd(&pCur, EXIF_TAG_BRIGHTNESS, EXIF_TYPE_SRATIONAL, - 1, (rational_t *)&exifInfo->brightness, &LongerTagOffest, pIfdStart); - writeExifIfd(&pCur, EXIF_TAG_EXPOSURE_BIAS, EXIF_TYPE_SRATIONAL, - 1, (rational_t *)&exifInfo->exposure_bias, &LongerTagOffest, pIfdStart); - writeExifIfd(&pCur, EXIF_TAG_MAX_APERTURE, EXIF_TYPE_RATIONAL, - 1, &exifInfo->max_aperture, &LongerTagOffest, pIfdStart); - writeExifIfd(&pCur, EXIF_TAG_METERING_MODE, EXIF_TYPE_SHORT, - 1, exifInfo->metering_mode); - writeExifIfd(&pCur, EXIF_TAG_FLASH, EXIF_TYPE_SHORT, - 1, exifInfo->flash); - writeExifIfd(&pCur, EXIF_TAG_FOCAL_LENGTH, EXIF_TYPE_RATIONAL, - 1, &exifInfo->focal_length, &LongerTagOffest, pIfdStart); - char code[8] = { 0x00, 0x00, 0x00, 0x49, 0x49, 0x43, 0x53, 0x41 }; - int commentsLen = strlen((char *)exifInfo->user_comment) + 1; - memmove(exifInfo->user_comment + sizeof(code), exifInfo->user_comment, commentsLen); - memcpy(exifInfo->user_comment, code, sizeof(code)); - writeExifIfd(&pCur, EXIF_TAG_USER_COMMENT, EXIF_TYPE_UNDEFINED, - commentsLen + sizeof(code), exifInfo->user_comment, &LongerTagOffest, pIfdStart); - writeExifIfd(&pCur, EXIF_TAG_COLOR_SPACE, EXIF_TYPE_SHORT, - 1, exifInfo->color_space); - writeExifIfd(&pCur, EXIF_TAG_PIXEL_X_DIMENSION, EXIF_TYPE_LONG, - 1, exifInfo->width); - writeExifIfd(&pCur, EXIF_TAG_PIXEL_Y_DIMENSION, EXIF_TYPE_LONG, - 1, exifInfo->height); - writeExifIfd(&pCur, EXIF_TAG_EXPOSURE_MODE, EXIF_TYPE_LONG, - 1, exifInfo->exposure_mode); - writeExifIfd(&pCur, EXIF_TAG_WHITE_BALANCE, EXIF_TYPE_LONG, - 1, exifInfo->white_balance); - writeExifIfd(&pCur, EXIF_TAG_SCENCE_CAPTURE_TYPE, EXIF_TYPE_LONG, - 1, exifInfo->scene_capture_type); - tmp = 0; - memcpy(pCur, &tmp, OFFSET_SIZE); // next IFD offset - pCur += OFFSET_SIZE; - - //2 0th IFD GPS Info Tags - if (exifInfo->enableGps) { - writeExifIfd(&pGpsIfdPtr, EXIF_TAG_GPS_IFD_POINTER, EXIF_TYPE_LONG, - 1, LongerTagOffest); // GPS IFD pointer skipped on 0th IFD - - pCur = pIfdStart + LongerTagOffest; - - if (exifInfo->gps_processing_method[0] == 0) { - // don't create GPS_PROCESSING_METHOD tag if there isn't any - tmp = NUM_0TH_IFD_GPS - 1; - } else { - tmp = NUM_0TH_IFD_GPS; - } - memcpy(pCur, &tmp, NUM_SIZE); - pCur += NUM_SIZE; - - LongerTagOffest += NUM_SIZE + tmp*IFD_SIZE + OFFSET_SIZE; - - writeExifIfd(&pCur, EXIF_TAG_GPS_VERSION_ID, EXIF_TYPE_BYTE, - 4, exifInfo->gps_version_id); - writeExifIfd(&pCur, EXIF_TAG_GPS_LATITUDE_REF, EXIF_TYPE_ASCII, - 2, exifInfo->gps_latitude_ref); - writeExifIfd(&pCur, EXIF_TAG_GPS_LATITUDE, EXIF_TYPE_RATIONAL, - 3, exifInfo->gps_latitude, &LongerTagOffest, pIfdStart); - writeExifIfd(&pCur, EXIF_TAG_GPS_LONGITUDE_REF, EXIF_TYPE_ASCII, - 2, exifInfo->gps_longitude_ref); - writeExifIfd(&pCur, EXIF_TAG_GPS_LONGITUDE, EXIF_TYPE_RATIONAL, - 3, exifInfo->gps_longitude, &LongerTagOffest, pIfdStart); - writeExifIfd(&pCur, EXIF_TAG_GPS_ALTITUDE_REF, EXIF_TYPE_BYTE, - 1, exifInfo->gps_altitude_ref); - writeExifIfd(&pCur, EXIF_TAG_GPS_ALTITUDE, EXIF_TYPE_RATIONAL, - 1, &exifInfo->gps_altitude, &LongerTagOffest, pIfdStart); - writeExifIfd(&pCur, EXIF_TAG_GPS_TIMESTAMP, EXIF_TYPE_RATIONAL, - 3, exifInfo->gps_timestamp, &LongerTagOffest, pIfdStart); - tmp = strlen((char*)exifInfo->gps_processing_method); - if (tmp > 0) { - if (tmp > 100) { - tmp = 100; - } - unsigned char tmp_buf[100+sizeof(ExifAsciiPrefix)]; - memcpy(tmp_buf, ExifAsciiPrefix, sizeof(ExifAsciiPrefix)); - memcpy(&tmp_buf[sizeof(ExifAsciiPrefix)], exifInfo->gps_processing_method, tmp); - writeExifIfd(&pCur, EXIF_TAG_GPS_PROCESSING_METHOD, EXIF_TYPE_UNDEFINED, - tmp+sizeof(ExifAsciiPrefix), tmp_buf, &LongerTagOffest, pIfdStart); - } - writeExifIfd(&pCur, EXIF_TAG_GPS_DATESTAMP, EXIF_TYPE_ASCII, - 11, exifInfo->gps_datestamp, &LongerTagOffest, pIfdStart); - tmp = 0; - memcpy(pCur, &tmp, OFFSET_SIZE); // next IFD offset - pCur += OFFSET_SIZE; - } - - //2 1th IFD TIFF Tags - char *thumbBuf; - int thumbSize; - - if (useMainbufForThumb) { - thumbBuf = mArgs.out_buf; - thumbSize = mArgs.enc_param->file_size; - } else { - thumbBuf = mArgs.out_thumb_buf; - thumbSize = mArgs.thumb_enc_param->file_size; - } - - if (exifInfo->enableThumb && (thumbBuf != NULL) && (thumbSize > 0)) { - tmp = LongerTagOffest; - memcpy(pNextIfdOffset, &tmp, OFFSET_SIZE); // NEXT IFD offset skipped on 0th IFD - - pCur = pIfdStart + LongerTagOffest; - - tmp = NUM_1TH_IFD_TIFF; - memcpy(pCur, &tmp, NUM_SIZE); - pCur += NUM_SIZE; - - LongerTagOffest += NUM_SIZE + NUM_1TH_IFD_TIFF*IFD_SIZE + OFFSET_SIZE; - - writeExifIfd(&pCur, EXIF_TAG_IMAGE_WIDTH, EXIF_TYPE_LONG, - 1, exifInfo->widthThumb); - writeExifIfd(&pCur, EXIF_TAG_IMAGE_HEIGHT, EXIF_TYPE_LONG, - 1, exifInfo->heightThumb); - writeExifIfd(&pCur, EXIF_TAG_COMPRESSION_SCHEME, EXIF_TYPE_SHORT, - 1, exifInfo->compression_scheme); - writeExifIfd(&pCur, EXIF_TAG_ORIENTATION, EXIF_TYPE_SHORT, - 1, exifInfo->orientation); - writeExifIfd(&pCur, EXIF_TAG_X_RESOLUTION, EXIF_TYPE_RATIONAL, - 1, &exifInfo->x_resolution, &LongerTagOffest, pIfdStart); - writeExifIfd(&pCur, EXIF_TAG_Y_RESOLUTION, EXIF_TYPE_RATIONAL, - 1, &exifInfo->y_resolution, &LongerTagOffest, pIfdStart); - writeExifIfd(&pCur, EXIF_TAG_RESOLUTION_UNIT, EXIF_TYPE_SHORT, - 1, exifInfo->resolution_unit); - writeExifIfd(&pCur, EXIF_TAG_JPEG_INTERCHANGE_FORMAT, EXIF_TYPE_LONG, - 1, LongerTagOffest); - writeExifIfd(&pCur, EXIF_TAG_JPEG_INTERCHANGE_FORMAT_LEN, EXIF_TYPE_LONG, - 1, thumbSize); - - tmp = 0; - memcpy(pCur, &tmp, OFFSET_SIZE); // next IFD offset - pCur += OFFSET_SIZE; - - memcpy(pIfdStart + LongerTagOffest, - thumbBuf, thumbSize); - LongerTagOffest += thumbSize; - } else { - tmp = 0; - memcpy(pNextIfdOffset, &tmp, OFFSET_SIZE); // NEXT IFD offset skipped on 0th IFD - } - - unsigned char App1Marker[2] = { 0xff, 0xe1 }; - memcpy(pApp1Start, App1Marker, 2); - pApp1Start += 2; - - *size = 10 + LongerTagOffest; - tmp = *size - 2; // APP1 Maker isn't counted - unsigned char size_mm[2] = {(tmp >> 8) & 0xFF, tmp & 0xFF}; - memcpy(pApp1Start, size_mm, 2); - - ALOGD("makeExif X"); - - return JPG_SUCCESS; -} - -jpg_return_status JpegEncoder::checkMcu(sample_mode_t sampleMode, - uint32_t width, uint32_t height, bool isThumb) -{ - if (!available) - return JPG_FAIL; - - uint32_t expectedWidth = width; - uint32_t expectedHeight = height; - - switch (sampleMode){ - case JPG_422: - if (width % 16 != 0) - expectedWidth = width + 16 - (width % 16); - if (height % 8 != 0) - expectedHeight = height + 8 - (height % 8); - break; - - case JPG_420: - if (width % 16 != 0) - expectedWidth = width + 16 - (width % 16); - if (height % 16 != 0) - expectedHeight = height + 16 - (height % 16); - break; - - default: - ALOGE("Invaild sample mode"); - return JPG_FAIL; - } - - if (expectedWidth == width && expectedHeight == height) - return JPG_SUCCESS; - - ALOGW("The image is not matched for MCU"); - - uint32_t size = width*height * 2; - char *srcBuf, *dstBuf; - - if ((srcBuf = new char[size]) == NULL) { - ALOGE("Failed to allocate for srcBuf"); - return JPG_FAIL; - } - - if (!isThumb) - dstBuf = mArgs.in_buf; - else - dstBuf = mArgs.in_thumb_buf; - - memcpy(srcBuf, dstBuf, size); - bool ret = pad(srcBuf, width, height, dstBuf, expectedWidth, expectedHeight); - - delete[] srcBuf; - - return JPG_SUCCESS; -} - -bool JpegEncoder::pad(char *srcBuf, uint32_t srcWidth, uint32_t srcHight, - char *dstBuf, uint32_t dstWidth, uint32_t dstHight) -{ - if (!available) - return false; - - if (srcBuf == NULL || dstBuf == NULL) { - ALOGE("srcBuf or dstBuf is NULL"); - return false; - } - - int padW = dstWidth - srcWidth; - int padH = dstHight - srcHight; - - if ((int)(dstWidth - srcWidth) < 0 || - (int)(dstHight - srcHight) < 0) { - ALOGE("dstSize is smaller than srcSize"); - return false; - } - memset(dstBuf, 0, dstWidth*dstHight * 2); - - for (uint32_t i = 0; i < srcHight; i++) - memcpy(dstBuf + i * dstWidth * 2, srcBuf + i * srcWidth * 2, srcWidth * 2); - - return true; -} - -bool JpegEncoder::scaleDownYuv422(char *srcBuf, uint32_t srcWidth, uint32_t srcHight, - char *dstBuf, uint32_t dstWidth, uint32_t dstHight) -{ - if (!available) - return false; - - int32_t step_x, step_y; - int32_t iXsrc, iXdst; - int32_t x, y, src_y_start_pos, dst_pos, src_pos; - - if (dstWidth % 2 != 0 || dstHight % 2 != 0){ - ALOGE("scale_down_yuv422: invalid width, height for scaling"); - return false; - } - - step_x = srcWidth / dstWidth; - step_y = srcHight / dstHight; - - dst_pos = 0; - for (uint32_t y = 0; y < dstHight; y++) { - src_y_start_pos = (y * step_y * (srcWidth * 2)); - - for (uint32_t x = 0; x < dstWidth; x += 2) { - src_pos = src_y_start_pos + (x * (step_x * 2)); - - dstBuf[dst_pos++] = srcBuf[src_pos ]; - dstBuf[dst_pos++] = srcBuf[src_pos + 1]; - dstBuf[dst_pos++] = srcBuf[src_pos + 2]; - dstBuf[dst_pos++] = srcBuf[src_pos + 3]; - } - } - - return true; -} - -inline void JpegEncoder::writeExifIfd(unsigned char **pCur, - unsigned short tag, - unsigned short type, - unsigned int count, - uint32_t value) -{ - memcpy(*pCur, &tag, 2); - *pCur += 2; - memcpy(*pCur, &type, 2); - *pCur += 2; - memcpy(*pCur, &count, 4); - *pCur += 4; - memcpy(*pCur, &value, 4); - *pCur += 4; -} - -inline void JpegEncoder::writeExifIfd(unsigned char **pCur, - unsigned short tag, - unsigned short type, - unsigned int count, - unsigned char *pValue) -{ - char buf[4] = { 0,}; - - memcpy(buf, pValue, count); - memcpy(*pCur, &tag, 2); - *pCur += 2; - memcpy(*pCur, &type, 2); - *pCur += 2; - memcpy(*pCur, &count, 4); - *pCur += 4; - memcpy(*pCur, buf, 4); - *pCur += 4; -} - - -inline void JpegEncoder::writeExifIfd(unsigned char **pCur, - unsigned short tag, - unsigned short type, - unsigned int count, - unsigned char *pValue, - unsigned int *offset, - unsigned char *start) -{ - memcpy(*pCur, &tag, 2); - *pCur += 2; - memcpy(*pCur, &type, 2); - *pCur += 2; - memcpy(*pCur, &count, 4); - *pCur += 4; - memcpy(*pCur, offset, 4); - *pCur += 4; - memcpy(start + *offset, pValue, count); - *offset += count; -} - -inline void JpegEncoder::writeExifIfd(unsigned char **pCur, - unsigned short tag, - unsigned short type, - unsigned int count, - rational_t *pValue, - unsigned int *offset, - unsigned char *start) -{ - memcpy(*pCur, &tag, 2); - *pCur += 2; - memcpy(*pCur, &type, 2); - *pCur += 2; - memcpy(*pCur, &count, 4); - *pCur += 4; - memcpy(*pCur, offset, 4); - *pCur += 4; - memcpy(start + *offset, pValue, 8 * count); - *offset += 8 * count; -} - -}; diff --git a/libs3cjpeg/JpegEncoder.h b/libs3cjpeg/JpegEncoder.h deleted file mode 100644 index b95b1b1..0000000 --- a/libs3cjpeg/JpegEncoder.h +++ /dev/null @@ -1,240 +0,0 @@ -/* - * Copyright Samsung Electronics Co.,LTD. - * Copyright (C) 2010 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * JPEG DRIVER MODULE (JpegEncoder.h) - * Author : ge.lee -- initial version - * Date : 03 June 2010 - * Purpose : This file implements the JPEG encoder APIs as needed by Camera HAL - */ -#ifndef __JPG_API_H__ -#define __JPG_API_H__ - -#include -#include - -#include "Exif.h" - -namespace android { -#define MAX_JPG_WIDTH 800 -#define MAX_JPG_HEIGHT 480 -#define MAX_JPG_RESOLUTION (MAX_JPG_WIDTH * MAX_JPG_HEIGHT) - -#define MAX_JPG_THUMBNAIL_WIDTH 320 -#define MAX_JPG_THUMBNAIL_HEIGHT 240 -#define MAX_JPG_THUMBNAIL_RESOLUTION (MAX_JPG_THUMBNAIL_WIDTH * \ - MAX_JPG_THUMBNAIL_HEIGHT) - -#define MAX_RGB_WIDTH 800 -#define MAX_RGB_HEIGHT 480 -#define MAX_RGB_RESOLUTION (MAX_RGB_WIDTH * MAX_RGB_HEIGHT) - -/*******************************************************************************/ -/* define JPG & image memory */ -/* memory area is 4k(PAGE_SIZE) aligned because of VirtualCopyEx() */ -#define JPG_STREAM_BUF_SIZE \ - (MAX_JPG_RESOLUTION / PAGE_SIZE + 1) * PAGE_SIZE -#define JPG_STREAM_THUMB_BUF_SIZE \ - (MAX_JPG_THUMBNAIL_RESOLUTION / PAGE_SIZE + 1) * PAGE_SIZE -#define JPG_FRAME_BUF_SIZE \ - ((MAX_JPG_RESOLUTION * 3) / PAGE_SIZE + 1) * PAGE_SIZE -#define JPG_FRAME_THUMB_BUF_SIZE \ - ((MAX_JPG_THUMBNAIL_RESOLUTION * 3) / PAGE_SIZE + 1) * PAGE_SIZE -#define JPG_RGB_BUF_SIZE \ - ((MAX_RGB_RESOLUTION * 4) / PAGE_SIZE + 1) * PAGE_SIZE - -#define JPG_TOTAL_BUF_SIZE (JPG_STREAM_BUF_SIZE + \ - JPG_STREAM_THUMB_BUF_SIZE + \ - JPG_FRAME_BUF_SIZE + \ - JPG_FRAME_THUMB_BUF_SIZE + \ - JPG_RGB_BUF_SIZE) - -#define JPG_MAIN_START 0x00 -#define JPG_THUMB_START JPG_STREAM_BUF_SIZE -#define IMG_MAIN_START (JPG_STREAM_BUF_SIZE + JPG_STREAM_THUMB_BUF_SIZE) -#define IMG_THUMB_START (IMG_MAIN_START + JPG_FRAME_BUF_SIZE) -/*******************************************************************************/ - -#define JPG_DRIVER_NAME "/dev/s3c-jpg" - -#define JPEG_IOCTL_MAGIC 'J' -#define IOCTL_JPG_DECODE _IO(JPEG_IOCTL_MAGIC, 1) -#define IOCTL_JPG_ENCODE _IO(JPEG_IOCTL_MAGIC, 2) -#define IOCTL_JPG_GET_STRBUF _IO(JPEG_IOCTL_MAGIC, 3) -#define IOCTL_JPG_GET_FRMBUF _IO(JPEG_IOCTL_MAGIC, 4) -#define IOCTL_JPG_GET_THUMB_STRBUF _IO(JPEG_IOCTL_MAGIC, 5) -#define IOCTL_JPG_GET_THUMB_FRMBUF _IO(JPEG_IOCTL_MAGIC, 6) -#define IOCTL_JPG_GET_PHY_FRMBUF _IO(JPEG_IOCTL_MAGIC, 7) -#define IOCTL_JPG_GET_PHY_THUMB_FRMBUF _IO(JPEG_IOCTL_MAGIC, 8) - -typedef enum { - JPEG_SET_ENCODE_WIDTH, - JPEG_SET_ENCODE_HEIGHT, - JPEG_SET_ENCODE_QUALITY, - JPEG_SET_ENCODE_IN_FORMAT, - JPEG_SET_SAMPING_MODE, - JPEG_SET_THUMBNAIL_WIDTH, - JPEG_SET_THUMBNAIL_HEIGHT -} jpeg_conf; - -typedef enum { - JPG_FAIL, - JPG_SUCCESS, - OK_HD_PARSING, - ERR_HD_PARSING, - OK_ENC_OR_DEC, - ERR_ENC_OR_DEC, - ERR_UNKNOWN -} jpg_return_status; - -typedef enum { - JPG_RGB16, - JPG_YCBYCR, - JPG_TYPE_UNKNOWN -} image_type_t; - -typedef enum { - JPG_444, - JPG_422, - JPG_420, - JPG_400, - RESERVED1, - RESERVED2, - JPG_411, - JPG_SAMPLE_UNKNOWN -} sample_mode_t; - -typedef enum { - YCBCR_422, - YCBCR_420, - YCBCR_SAMPLE_UNKNOWN -} out_mode_t; - -typedef enum { - JPG_MODESEL_YCBCR = 1, - JPG_MODESEL_RGB, - JPG_MODESEL_UNKNOWN -} in_mode_t; - -typedef enum { - JPG_MAIN, - JPG_THUMBNAIL -} encode_type_t; - -typedef enum { - JPG_QUALITY_LEVEL_1, /* high */ - JPG_QUALITY_LEVEL_2, - JPG_QUALITY_LEVEL_3, - JPG_QUALITY_LEVEL_4 /* low */ -} image_quality_type_t; - -typedef struct { - sample_mode_t sample_mode; - encode_type_t dec_type; - out_mode_t out_format; - uint32_t width; - uint32_t height; - uint32_t data_size; - uint32_t file_size; -} jpg_dec_proc_param; - -typedef struct { - sample_mode_t sample_mode; - encode_type_t enc_type; - in_mode_t in_format; - image_quality_type_t quality; - uint32_t width; - uint32_t height; - uint32_t data_size; - uint32_t file_size; - uint32_t set_framebuf; -} jpg_enc_proc_param; - -typedef struct { - char *in_buf; - char *phy_in_buf; - int in_buf_size; - char *out_buf; - char *phy_out_buf; - int out_buf_size; - char *in_thumb_buf; - char *phy_in_thumb_buf; - int in_thumb_buf_size; - char *out_thumb_buf; - char *phy_out_thumb_buf; - int out_thumb_buf_size; - char *mmapped_addr; - jpg_dec_proc_param *dec_param; - jpg_enc_proc_param *enc_param; - jpg_enc_proc_param *thumb_enc_param; -} jpg_args; - -class JpegEncoder { -public: - JpegEncoder(); - virtual ~JpegEncoder(); - - int openHardware(); - jpg_return_status setConfig(jpeg_conf type, int32_t value); - void *getInBuf(uint64_t size); - void *getOutBuf(uint64_t *size); - void *getThumbInBuf(uint64_t size); - void *getThumbOutBuf(uint64_t *size); - jpg_return_status encode(unsigned int *size, exif_attribute_t *exifInfo); - jpg_return_status encodeThumbImg(unsigned int *size, bool useMain = true); - jpg_return_status makeExif(unsigned char *exifOut, - exif_attribute_t *exifIn, - unsigned int *size, - bool useMainbufForThumb = false); - -private: - jpg_return_status checkMcu(sample_mode_t sampleMode, uint32_t width, uint32_t height, bool isThumb); - bool pad(char *srcBuf, uint32_t srcWidth, uint32_t srcHight, - char *dstBuf, uint32_t dstWidth, uint32_t dstHight); - bool scaleDownYuv422(char *srcBuf, uint32_t srcWidth, uint32_t srcHight, - char *dstBuf, uint32_t dstWidth, uint32_t dstHight); - - inline void writeExifIfd(unsigned char **pCur, - unsigned short tag, - unsigned short type, - unsigned int count, - uint32_t value); - inline void writeExifIfd(unsigned char **pCur, - unsigned short tag, - unsigned short type, - unsigned int count, - unsigned char *pValue); - inline void writeExifIfd(unsigned char **pCur, - unsigned short tag, - unsigned short type, - unsigned int count, - rational_t *pValue, - unsigned int *offset, - unsigned char *start); - inline void writeExifIfd(unsigned char **pCur, - unsigned short tag, - unsigned short type, - unsigned int count, - unsigned char *pValue, - unsigned int *offset, - unsigned char *start); - int mDevFd; - jpg_args mArgs; - - bool available; - -}; -}; -#endif /* __JPG_API_H__ */ diff --git a/libstagefrighthw/Android.mk b/libstagefrighthw/Android.mk deleted file mode 100644 index a5ca416..0000000 --- a/libstagefrighthw/Android.mk +++ /dev/null @@ -1,26 +0,0 @@ -LOCAL_PATH := $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := \ - SEC_OMX_Plugin.cpp - -LOCAL_CFLAGS += $(PV_CFLAGS_MINUS_VISIBILITY) - -LOCAL_C_INCLUDES:= \ - $(TOP)/frameworks/native/include/media/openmax \ - $(TOP)/frameworks/native/include/media/hardware \ - $(LOCAL_PATH)/../include \ - -LOCAL_SHARED_LIBRARIES := \ - libbinder \ - libutils \ - libcutils \ - libui \ - libdl \ - -LOCAL_MODULE := libstagefrighthw - -LOCAL_MODULE_TAGS := optional -include $(BUILD_SHARED_LIBRARY) - - diff --git a/libstagefrighthw/SEC_OMX_Plugin.cpp b/libstagefrighthw/SEC_OMX_Plugin.cpp deleted file mode 100644 index cb91069..0000000 --- a/libstagefrighthw/SEC_OMX_Plugin.cpp +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright (C) 2010 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "SEC_OMX_Plugin.h" - -#include - -#include - -namespace android { - -OMXPluginBase *createOMXPlugin() { - return new SECOMXPlugin; -} - -SECOMXPlugin::SECOMXPlugin() - : mLibHandle(dlopen("libSEC_OMX_Core.aries.so", RTLD_NOW)), - mInit(NULL), - mDeinit(NULL), - mComponentNameEnum(NULL), - mGetHandle(NULL), - mFreeHandle(NULL), - mGetRolesOfComponentHandle(NULL) { - if (mLibHandle != NULL) { - mInit = (InitFunc)dlsym(mLibHandle, "SEC_OMX_Init"); - mDeinit = (DeinitFunc)dlsym(mLibHandle, "SEC_OMX_Deinit"); - - mComponentNameEnum = - (ComponentNameEnumFunc)dlsym(mLibHandle, "SEC_OMX_ComponentNameEnum"); - - mGetHandle = (GetHandleFunc)dlsym(mLibHandle, "SEC_OMX_GetHandle"); - mFreeHandle = (FreeHandleFunc)dlsym(mLibHandle, "SEC_OMX_FreeHandle"); - - mGetRolesOfComponentHandle = - (GetRolesOfComponentFunc)dlsym( - mLibHandle, "SEC_OMX_GetRolesOfComponent"); - - (*mInit)(); - - } -} - -SECOMXPlugin::~SECOMXPlugin() { - if (mLibHandle != NULL) { - (*mDeinit)(); - - dlclose(mLibHandle); - mLibHandle = NULL; - } -} - -OMX_ERRORTYPE SECOMXPlugin::makeComponentInstance( - const char *name, - const OMX_CALLBACKTYPE *callbacks, - OMX_PTR appData, - OMX_COMPONENTTYPE **component) { - if (mLibHandle == NULL) { - return OMX_ErrorUndefined; - } - - return (*mGetHandle)( - reinterpret_cast(component), - const_cast(name), - appData, const_cast(callbacks)); -} - -OMX_ERRORTYPE SECOMXPlugin::destroyComponentInstance( - OMX_COMPONENTTYPE *component) { - if (mLibHandle == NULL) { - return OMX_ErrorUndefined; - } - - return (*mFreeHandle)(reinterpret_cast(component)); -} - -OMX_ERRORTYPE SECOMXPlugin::enumerateComponents( - OMX_STRING name, - size_t size, - OMX_U32 index) { - if (mLibHandle == NULL) { - return OMX_ErrorUndefined; - } - - return (*mComponentNameEnum)(name, size, index); -} - -OMX_ERRORTYPE SECOMXPlugin::getRolesOfComponent( - const char *name, - Vector *roles) { - roles->clear(); - - if (mLibHandle == NULL) { - return OMX_ErrorUndefined; - } - - OMX_U32 numRoles; - OMX_ERRORTYPE err = (*mGetRolesOfComponentHandle)( - const_cast(name), &numRoles, NULL); - - if (err != OMX_ErrorNone) { - return err; - } - - if (numRoles > 0) { - OMX_U8 **array = new OMX_U8 *[numRoles]; - for (OMX_U32 i = 0; i < numRoles; ++i) { - array[i] = new OMX_U8[OMX_MAX_STRINGNAME_SIZE]; - } - - OMX_U32 numRoles2; - err = (*mGetRolesOfComponentHandle)( - const_cast(name), &numRoles2, array); - - if (err == OMX_ErrorNone && numRoles != numRoles2) { - err = OMX_ErrorUndefined; - } - - for (OMX_U32 i = 0; i < numRoles; ++i) { - if (err == OMX_ErrorNone) { - String8 s((const char *)array[i]); - roles->push(s); - } - - delete[] array[i]; - array[i] = NULL; - } - - delete[] array; - array = NULL; - } - - return err; -} - -} // namespace android - diff --git a/libstagefrighthw/SEC_OMX_Plugin.h b/libstagefrighthw/SEC_OMX_Plugin.h deleted file mode 100644 index 3d640db..0000000 --- a/libstagefrighthw/SEC_OMX_Plugin.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright (C) 2010 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef SEC_OMX_PLUGIN - -#define SEC_OMX_PLUGIN - -#include - -namespace android { - -struct SECOMXPlugin : public OMXPluginBase { - SECOMXPlugin(); - virtual ~SECOMXPlugin(); - - virtual OMX_ERRORTYPE makeComponentInstance( - const char *name, - const OMX_CALLBACKTYPE *callbacks, - OMX_PTR appData, - OMX_COMPONENTTYPE **component); - - virtual OMX_ERRORTYPE destroyComponentInstance( - OMX_COMPONENTTYPE *component); - - virtual OMX_ERRORTYPE enumerateComponents( - OMX_STRING name, - size_t size, - OMX_U32 index); - - virtual OMX_ERRORTYPE getRolesOfComponent( - const char *name, - Vector *roles); - -private: - void *mLibHandle; - - typedef OMX_ERRORTYPE (*InitFunc)(); - typedef OMX_ERRORTYPE (*DeinitFunc)(); - typedef OMX_ERRORTYPE (*ComponentNameEnumFunc)( - OMX_STRING, OMX_U32, OMX_U32); - - typedef OMX_ERRORTYPE (*GetHandleFunc)( - OMX_HANDLETYPE *, OMX_STRING, OMX_PTR, OMX_CALLBACKTYPE *); - - typedef OMX_ERRORTYPE (*FreeHandleFunc)(OMX_HANDLETYPE *); - - typedef OMX_ERRORTYPE (*GetRolesOfComponentFunc)( - OMX_STRING, OMX_U32 *, OMX_U8 **); - - InitFunc mInit; - DeinitFunc mDeinit; - ComponentNameEnumFunc mComponentNameEnum; - GetHandleFunc mGetHandle; - FreeHandleFunc mFreeHandle; - GetRolesOfComponentFunc mGetRolesOfComponentHandle; - - SECOMXPlugin(const SECOMXPlugin &); - SECOMXPlugin &operator=(const SECOMXPlugin &); -}; - -} // namespace android - -#endif // SEC_OMX_PLUGIN diff --git a/sec_mm/Android.mk b/sec_mm/Android.mk deleted file mode 100644 index 16298da..0000000 --- a/sec_mm/Android.mk +++ /dev/null @@ -1,5 +0,0 @@ -WITH_SEC_OMX := true - -ifeq ($(WITH_SEC_OMX), true) - include $(all-subdir-makefiles) -endif diff --git a/sec_mm/sec_omx/Android.mk b/sec_mm/sec_omx/Android.mk deleted file mode 100644 index cbae428..0000000 --- a/sec_mm/sec_omx/Android.mk +++ /dev/null @@ -1,22 +0,0 @@ - -LOCAL_PATH := $(call my-dir) - -include $(CLEAR_VARS) - -SEC_OMX_TOP := $(LOCAL_PATH) -SEC_CODECS := $(SEC_OMX_TOP)/sec_codecs/ - -SEC_OMX_INC := $(SEC_OMX_TOP)/sec_omx_include/ -SEC_OMX_COMPONENT := $(SEC_OMX_TOP)/sec_omx_component - -include $(SEC_OMX_TOP)/sec_osal/Android.mk -include $(SEC_OMX_TOP)/sec_omx_core/Android.mk - -include $(SEC_CODECS)/Android.mk -include $(SEC_OMX_COMPONENT)/common/Android.mk -include $(SEC_OMX_COMPONENT)/video/dec/Android.mk -include $(SEC_OMX_COMPONENT)/video/dec/h264dec/Android.mk -include $(SEC_OMX_COMPONENT)/video/dec/mpeg4dec/Android.mk -include $(SEC_OMX_COMPONENT)/video/enc/Android.mk -include $(SEC_OMX_COMPONENT)/video/enc/h264enc/Android.mk -include $(SEC_OMX_COMPONENT)/video/enc/mpeg4enc/Android.mk diff --git a/sec_mm/sec_omx/sec_codecs/Android.mk b/sec_mm/sec_omx/sec_codecs/Android.mk deleted file mode 100644 index 3c163a4..0000000 --- a/sec_mm/sec_omx/sec_codecs/Android.mk +++ /dev/null @@ -1,7 +0,0 @@ -LOCAL_PATH := $(call my-dir) - -include $(CLEAR_VARS) - -include $(SEC_CODECS)/video/mfc_c110/dec/Android.mk -include $(SEC_CODECS)/video/mfc_c110/enc/Android.mk -include $(SEC_CODECS)/video/mfc_c110/csc/Android.mk \ No newline at end of file diff --git a/sec_mm/sec_omx/sec_codecs/video/mfc_c110/csc/Android.mk b/sec_mm/sec_omx/sec_codecs/video/mfc_c110/csc/Android.mk deleted file mode 100644 index 5c5fd67..0000000 --- a/sec_mm/sec_omx/sec_codecs/video/mfc_c110/csc/Android.mk +++ /dev/null @@ -1,36 +0,0 @@ - -LOCAL_PATH := $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := optional - -ifeq ($(ARCH_ARM_HAVE_NEON),true) -LOCAL_SRC_FILES := \ - csc_yuv420_nv12t_y_neon.s \ - csc_yuv420_nv12t_uv_neon.s \ - csc_nv12t_yuv420_y_neon.s \ - csc_nv12t_yuv420_uv_neon.s \ - csc_interleave_memcpy.s \ - csc_deinterleave_memcpy.s - -else -LOCAL_SRC_FILES := \ - color_space_convertor.c - -endif - -LOCAL_MODULE := libseccsc.aries - -LOCAL_CFLAGS := - -LOCAL_ARM_MODE := arm - -LOCAL_STATIC_LIBRARIES := - -LOCAL_SHARED_LIBRARIES := liblog - -LOCAL_C_INCLUDES := \ - $(SEC_CODECS)/video/mfc_c110/include - -include $(BUILD_STATIC_LIBRARY) - diff --git a/sec_mm/sec_omx/sec_codecs/video/mfc_c110/csc/color_space_convertor.c b/sec_mm/sec_omx/sec_codecs/video/mfc_c110/csc/color_space_convertor.c deleted file mode 100644 index c1ac638..0000000 --- a/sec_mm/sec_omx/sec_codecs/video/mfc_c110/csc/color_space_convertor.c +++ /dev/null @@ -1,1092 +0,0 @@ -/* - * - * Copyright 2011 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file color_space_convertor.c - * @brief SEC_OMX specific define - * @author ShinWon Lee (shinwon.lee@samsung.com) - * @version 1.0 - * @history - * 2011.7.01 : Create - */ - -#include "stdlib.h" -#include "color_space_convertor.h" - -#define TILED_SIZE 64*32 - -/* - * De-interleaves src to dest1, dest2 - * - * @param dest1 - * Address of de-interleaved data[out] - * - * @param dest2 - * Address of de-interleaved data[out] - * - * @param src - * Address of interleaved data[in] - * - * @param src_size - * Size of interleaved data[in] - */ -void csc_deinterleave_memcpy(char *dest1, char *dest2, char *src, int src_size) -{ - int i = 0; - for(i=0; i= 1024) { - for (i=0; i>5; - if (tiled_y_index & 0x1) { - /* odd fomula: 2+x_block_num*(y-1) */ - tiled_offset = tiled_y_index-1; - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_offset*(temp1>>6); - tiled_offset = tiled_offset+2; - tiled_offset = tiled_offset<<11; - tiled_offset1 = tiled_offset+2048*1; - tiled_offset2 = tiled_offset+2048*2; - tiled_offset3 = tiled_offset+2048*3; - temp2 = 8; - } else { - temp2 = ((yuv420_height+31)>>5)<<5; - /* even fomula: x_block_num*y */ - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_y_index*(temp1>>6); - tiled_offset = tiled_offset<<11; - if ((i+32)= 512) { - for (i=0; i>5; - if (tiled_y_index & 0x1) { - /* odd fomula: 2+x_block_num*(y-1) */ - tiled_offset = tiled_y_index-1; - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_offset*(temp1>>6); - tiled_offset = tiled_offset+2; - temp1 = aligned_x_size>>5; - tiled_offset = tiled_offset+temp1; - tiled_offset = tiled_offset<<11; - tiled_offset1 = tiled_offset+2048*1; - tiled_offset2 = tiled_offset+2048*2; - tiled_offset3 = tiled_offset+2048*3; - temp2 = 8; - } else { - temp2 = ((yuv420_height+31)>>5)<<5; - /* even fomula: x_block_num*y */ - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_y_index*(temp1>>6); - tiled_offset = tiled_offset<<11; - if ((i+32)>5; - tiled_offset = tiled_offset+(temp1<<11); - tiled_offset1 = tiled_offset+2048*1; - tiled_offset2 = tiled_offset+2048*6; - tiled_offset3 = tiled_offset+2048*7; - temp2 = 8; - } else { - temp1 = aligned_x_size>>6; - tiled_offset = tiled_offset+(temp1<<11); - tiled_offset1 = tiled_offset+2048*1; - tiled_offset2 = tiled_offset+2048*2; - tiled_offset3 = tiled_offset+2048*3; - temp2 = 4; - } - } - temp1 = i&0x1F; - memcpy(yuv420_dest+aligned_x_size+yuv420_width*(i), nv12t_src+tiled_offset+64*(temp1), 64); - memcpy(yuv420_dest+aligned_x_size+yuv420_width*(i)+64*1, nv12t_src+tiled_offset1+64*(temp1), 64); - memcpy(yuv420_dest+aligned_x_size+yuv420_width*(i)+64*2, nv12t_src+tiled_offset2+64*(temp1), 64); - memcpy(yuv420_dest+aligned_x_size+yuv420_width*(i)+64*3, nv12t_src+tiled_offset3+64*(temp1), 64); - - tiled_offset = tiled_offset+temp2*2048; - tiled_offset1 = tiled_offset1+temp2*2048; - tiled_offset2 = tiled_offset2+temp2*2048; - tiled_offset3 = tiled_offset3+temp2*2048; - memcpy(yuv420_dest+aligned_x_size+yuv420_width*(i)+64*4, nv12t_src+tiled_offset+64*(temp1), 64); - memcpy(yuv420_dest+aligned_x_size+yuv420_width*(i)+64*5, nv12t_src+tiled_offset1+64*(temp1), 64); - memcpy(yuv420_dest+aligned_x_size+yuv420_width*(i)+64*6, nv12t_src+tiled_offset2+64*(temp1), 64); - memcpy(yuv420_dest+aligned_x_size+yuv420_width*(i)+64*7, nv12t_src+tiled_offset3+64*(temp1), 64); - } - aligned_x_size = aligned_x_size+512; - } - - if ((yuv420_width-aligned_x_size) >= 256) { - for (i=0; i>5; - if (tiled_y_index & 0x1) { - /* odd fomula: 2+x_block_num*(y-1) */ - tiled_offset = tiled_y_index-1; - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_offset*(temp1>>6); - tiled_offset = tiled_offset+2; - temp1 = aligned_x_size>>5; - tiled_offset = tiled_offset+temp1; - tiled_offset = tiled_offset<<11; - tiled_offset1 = tiled_offset+2048*1; - tiled_offset2 = tiled_offset+2048*2; - tiled_offset3 = tiled_offset+2048*3; - } else { - temp2 = ((yuv420_height+31)>>5)<<5; - /* even fomula: x_block_num*y */ - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_y_index*(temp1>>6); - tiled_offset = tiled_offset<<11; - if ((i+32)>5; - tiled_offset = tiled_offset+(temp1<<11); - tiled_offset1 = tiled_offset+2048*1; - tiled_offset2 = tiled_offset+2048*6; - tiled_offset3 = tiled_offset+2048*7; - } else { - temp1 = aligned_x_size>>6; - tiled_offset = tiled_offset+(temp1<<11); - tiled_offset1 = tiled_offset+2048*1; - tiled_offset2 = tiled_offset+2048*2; - tiled_offset3 = tiled_offset+2048*3; - } - } - temp1 = i&0x1F; - memcpy(yuv420_dest+aligned_x_size+yuv420_width*(i), nv12t_src+tiled_offset+64*(temp1), 64); - memcpy(yuv420_dest+aligned_x_size+yuv420_width*(i)+64*1, nv12t_src+tiled_offset1+64*(temp1), 64); - memcpy(yuv420_dest+aligned_x_size+yuv420_width*(i)+64*2, nv12t_src+tiled_offset2+64*(temp1), 64); - memcpy(yuv420_dest+aligned_x_size+yuv420_width*(i)+64*3, nv12t_src+tiled_offset3+64*(temp1), 64); - } - aligned_x_size = aligned_x_size+256; - } - - if ((yuv420_width-aligned_x_size) >= 128) { - for (i=0; i>5; - if (tiled_y_index & 0x1) { - /* odd fomula: 2+x_block_num*(y-1) */ - tiled_offset = tiled_y_index-1; - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_offset*(temp1>>6); - tiled_offset = tiled_offset+2; - temp1 = aligned_x_size>>5; - tiled_offset = tiled_offset+temp1; - tiled_offset = tiled_offset<<11; - tiled_offset1 = tiled_offset+2048*1; - } else { - temp2 = ((yuv420_height+31)>>5)<<5; - /* even fomula: x_block_num*y */ - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_y_index*(temp1>>6); - tiled_offset = tiled_offset<<11; - if ((i+32)>5; - tiled_offset = tiled_offset+(temp1<<11); - tiled_offset1 = tiled_offset+2048*1; - } else { - temp1 = aligned_x_size>>6; - tiled_offset = tiled_offset+(temp1<<11); - tiled_offset1 = tiled_offset+2048*1; - } - } - temp1 = i&0x1F; - memcpy(yuv420_dest+aligned_x_size+yuv420_width*(i), nv12t_src+tiled_offset+64*(temp1), 64); - memcpy(yuv420_dest+aligned_x_size+yuv420_width*(i)+64, nv12t_src+tiled_offset1+64*(temp1), 64); - memcpy(yuv420_dest+aligned_x_size+yuv420_width*(i+1), nv12t_src+tiled_offset+64*(temp1+1), 64); - memcpy(yuv420_dest+aligned_x_size+yuv420_width*(i+1)+64, nv12t_src+tiled_offset1+64*(temp1+1), 64); - } - aligned_x_size = aligned_x_size+128; - } - - if ((yuv420_width-aligned_x_size) >= 64) { - for (i=0; i>6; - tiled_y_index = i>>5; - if (tiled_y_index & 0x1) { - /* odd fomula: 2+x+(x>>2)<<2+x_block_num*(y-1) */ - tiled_offset = tiled_y_index-1; - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_offset*(temp1>>6); - tiled_offset = tiled_offset+tiled_x_index; - tiled_offset = tiled_offset+2; - temp1 = (tiled_x_index>>2)<<2; - tiled_offset = tiled_offset+temp1; - tiled_offset = tiled_offset<<11; - } else { - temp2 = ((yuv420_height+31)>>5)<<5; - if ((i+32)>2)<<2+x_block_num*y */ - temp1 = tiled_x_index+2; - temp1 = (temp1>>2)<<2; - tiled_offset = tiled_x_index+temp1; - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_offset+tiled_y_index*(temp1>>6); - tiled_offset = tiled_offset<<11; - } else { - /* even2 fomula: x+x_block_num*y */ - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_y_index*(temp1>>6); - tiled_offset = tiled_offset+tiled_x_index; - tiled_offset = tiled_offset<<11; - } - } - - temp1 = i&0x1F; - temp2 = aligned_x_size&0x3F; - memcpy(yuv420_dest+aligned_x_size+yuv420_width*(i), nv12t_src+tiled_offset+temp2+64*(temp1), 64); - memcpy(yuv420_dest+aligned_x_size+yuv420_width*(i+1), nv12t_src+tiled_offset+temp2+64*(temp1+1), 64); - memcpy(yuv420_dest+aligned_x_size+yuv420_width*(i+2), nv12t_src+tiled_offset+temp2+64*(temp1+2), 64); - memcpy(yuv420_dest+aligned_x_size+yuv420_width*(i+3), nv12t_src+tiled_offset+temp2+64*(temp1+3), 64); - } - aligned_x_size = aligned_x_size+64; - } - - if (yuv420_width != aligned_x_size) { - for (i=0; i>6; - tiled_y_index = i>>5; - if (tiled_y_index & 0x1) { - /* odd fomula: 2+x+(x>>2)<<2+x_block_num*(y-1) */ - tiled_offset = tiled_y_index-1; - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_offset*(temp1>>6); - tiled_offset = tiled_offset+tiled_x_index; - tiled_offset = tiled_offset+2; - temp1 = (tiled_x_index>>2)<<2; - tiled_offset = tiled_offset+temp1; - tiled_offset = tiled_offset<<11; - } else { - temp2 = ((yuv420_height+31)>>5)<<5; - if ((i+32)>2)<<2+x_block_num*y */ - temp1 = tiled_x_index+2; - temp1 = (temp1>>2)<<2; - tiled_offset = tiled_x_index+temp1; - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_offset+tiled_y_index*(temp1>>6); - tiled_offset = tiled_offset<<11; - } else { - /* even2 fomula: x+x_block_num*y */ - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_y_index*(temp1>>6); - tiled_offset = tiled_offset+tiled_x_index; - tiled_offset = tiled_offset<<11; - } - } - - temp1 = i&0x1F; - temp2 = j&0x3F; - memcpy(yuv420_dest+j+yuv420_width*(i), nv12t_src+tiled_offset+temp2+64*(temp1), 4); - memcpy(yuv420_dest+j+yuv420_width*(i+1), nv12t_src+tiled_offset+temp2+64*(temp1+1), 4); - memcpy(yuv420_dest+j+yuv420_width*(i+2), nv12t_src+tiled_offset+temp2+64*(temp1+2), 4); - memcpy(yuv420_dest+j+yuv420_width*(i+3), nv12t_src+tiled_offset+temp2+64*(temp1+3), 4); - } - } - } -} - -/* - * Converts and Deinterleaves tiled data to linear - * 1. UV of NV12T to UV of YUV420P - * - * @param yuv420_u_dest - * U plane address of YUV420P[out] - * - * @param yuv420_v_dest - * V plane address of YUV420P[out] - * - * @param nv12t_src - * UV plane address of NV12T[in] - * - * @param yuv420_width - * Width of YUV420[in] - * - * @param yuv420_uv_height - * Height/2 of YUV420[in] - */ -void csc_tiled_to_linear_deinterleave(char *yuv420_u_dest, char *yuv420_v_dest, char *nv12t_uv_src, int yuv420_width, int yuv420_uv_height) -{ - unsigned int i, j; - unsigned int tiled_x_index = 0, tiled_y_index = 0; - unsigned int aligned_x_size = 0; - unsigned int tiled_offset = 0, tiled_offset1 = 0, tiled_offset2 = 0, tiled_offset3 = 0; - unsigned int temp1 = 0, temp2 = 0; - - if (yuv420_width >= 1024) { - for (i=0; i>5; - if (tiled_y_index & 0x1) { - /* odd fomula: 2+x_block_num*(y-1) */ - tiled_offset = tiled_y_index-1; - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_offset*(temp1>>6); - tiled_offset = tiled_offset+2; - tiled_offset = tiled_offset<<11; - tiled_offset1 = tiled_offset+2048*1; - tiled_offset2 = tiled_offset+2048*2; - tiled_offset3 = tiled_offset+2048*3; - temp2 = 8; - } else { - temp2 = ((yuv420_uv_height+31)>>5)<<5; - /* even fomula: x_block_num*y */ - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_y_index*(temp1>>6); - tiled_offset = tiled_offset<<11; - if ((i+32)= 512) { - for (i=0; i>5; - if (tiled_y_index & 0x1) { - /* odd fomula: 2+x_block_num*(y-1) */ - tiled_offset = tiled_y_index-1; - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_offset*(temp1>>6); - tiled_offset = tiled_offset+2; - temp1 = aligned_x_size>>5; - tiled_offset = tiled_offset+temp1; - tiled_offset = tiled_offset<<11; - tiled_offset1 = tiled_offset+2048*1; - tiled_offset2 = tiled_offset+2048*2; - tiled_offset3 = tiled_offset+2048*3; - temp2 = 8; - } else { - temp2 = ((yuv420_uv_height+31)>>5)<<5; - /* even fomula: x_block_num*y */ - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_y_index*(temp1>>6); - tiled_offset = tiled_offset<<11; - if ((i+32)>5; - tiled_offset = tiled_offset+(temp1<<11); - tiled_offset1 = tiled_offset+2048*1; - tiled_offset2 = tiled_offset+2048*6; - tiled_offset3 = tiled_offset+2048*7; - temp2 = 8; - } else { - temp1 = aligned_x_size>>6; - tiled_offset = tiled_offset+(temp1<<11); - tiled_offset1 = tiled_offset+2048*1; - tiled_offset2 = tiled_offset+2048*2; - tiled_offset3 = tiled_offset+2048*3; - temp2 = 4; - } - } - temp1 = i&0x1F; - csc_deinterleave_memcpy(yuv420_u_dest+aligned_x_size/2+yuv420_width/2*(i), yuv420_v_dest+aligned_x_size/2+yuv420_width/2*(i), nv12t_uv_src+tiled_offset+64*(temp1), 64); - csc_deinterleave_memcpy(yuv420_u_dest+aligned_x_size/2+yuv420_width/2*(i)+32*1, yuv420_v_dest+aligned_x_size/2+yuv420_width/2*(i)+32*1, nv12t_uv_src+tiled_offset1+64*(temp1), 64); - csc_deinterleave_memcpy(yuv420_u_dest+aligned_x_size/2+yuv420_width/2*(i)+32*2, yuv420_v_dest+aligned_x_size/2+yuv420_width/2*(i)+32*2, nv12t_uv_src+tiled_offset2+64*(temp1), 64); - csc_deinterleave_memcpy(yuv420_u_dest+aligned_x_size/2+yuv420_width/2*(i)+32*3, yuv420_v_dest+aligned_x_size/2+yuv420_width/2*(i)+32*3, nv12t_uv_src+tiled_offset3+64*(temp1), 64); - - tiled_offset = tiled_offset+temp2*2048; - tiled_offset1 = tiled_offset1+temp2*2048; - tiled_offset2 = tiled_offset2+temp2*2048; - tiled_offset3 = tiled_offset3+temp2*2048; - csc_deinterleave_memcpy(yuv420_u_dest+aligned_x_size/2+yuv420_width/2*(i)+32*4, yuv420_v_dest+aligned_x_size/2+yuv420_width/2*(i)+32*4, nv12t_uv_src+tiled_offset+64*(temp1), 64); - csc_deinterleave_memcpy(yuv420_u_dest+aligned_x_size/2+yuv420_width/2*(i)+32*5, yuv420_v_dest+aligned_x_size/2+yuv420_width/2*(i)+32*5, nv12t_uv_src+tiled_offset1+64*(temp1), 64); - csc_deinterleave_memcpy(yuv420_u_dest+aligned_x_size/2+yuv420_width/2*(i)+32*6, yuv420_v_dest+aligned_x_size/2+yuv420_width/2*(i)+32*6, nv12t_uv_src+tiled_offset2+64*(temp1), 64); - csc_deinterleave_memcpy(yuv420_u_dest+aligned_x_size/2+yuv420_width/2*(i)+32*7, yuv420_v_dest+aligned_x_size/2+yuv420_width/2*(i)+32*7, nv12t_uv_src+tiled_offset3+64*(temp1), 64); - } - aligned_x_size = aligned_x_size+512; - } - - if ((yuv420_width-aligned_x_size) >= 256) { - for (i=0; i>5; - if (tiled_y_index & 0x1) { - /* odd fomula: 2+x_block_num*(y-1) */ - tiled_offset = tiled_y_index-1; - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_offset*(temp1>>6); - tiled_offset = tiled_offset+2; - temp1 = aligned_x_size>>5; - tiled_offset = tiled_offset+temp1; - tiled_offset = tiled_offset<<11; - tiled_offset1 = tiled_offset+2048*1; - tiled_offset2 = tiled_offset+2048*2; - tiled_offset3 = tiled_offset+2048*3; - } else { - temp2 = ((yuv420_uv_height+31)>>5)<<5; - /* even fomula: x_block_num*y */ - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_y_index*(temp1>>6); - tiled_offset = tiled_offset<<11; - if ((i+32)>5; - tiled_offset = tiled_offset+(temp1<<11); - tiled_offset1 = tiled_offset+2048*1; - tiled_offset2 = tiled_offset+2048*6; - tiled_offset3 = tiled_offset+2048*7; - } else { - temp1 = aligned_x_size>>6; - tiled_offset = tiled_offset+(temp1<<11); - tiled_offset1 = tiled_offset+2048*1; - tiled_offset2 = tiled_offset+2048*2; - tiled_offset3 = tiled_offset+2048*3; - } - } - temp1 = i&0x1F; - csc_deinterleave_memcpy(yuv420_u_dest+aligned_x_size/2+yuv420_width/2*(i), yuv420_v_dest+aligned_x_size/2+yuv420_width/2*(i), nv12t_uv_src+tiled_offset+64*(temp1), 64); - csc_deinterleave_memcpy(yuv420_u_dest+aligned_x_size/2+yuv420_width/2*(i)+32*1, yuv420_v_dest+aligned_x_size/2+yuv420_width/2*(i)+32*1, nv12t_uv_src+tiled_offset1+64*(temp1), 64); - csc_deinterleave_memcpy(yuv420_u_dest+aligned_x_size/2+yuv420_width/2*(i)+32*2, yuv420_v_dest+aligned_x_size/2+yuv420_width/2*(i)+32*2, nv12t_uv_src+tiled_offset2+64*(temp1), 64); - csc_deinterleave_memcpy(yuv420_u_dest+aligned_x_size/2+yuv420_width/2*(i)+32*3, yuv420_v_dest+aligned_x_size/2+yuv420_width/2*(i)+32*3, nv12t_uv_src+tiled_offset3+64*(temp1), 64); - } - aligned_x_size = aligned_x_size+256; - } - - if ((yuv420_width-aligned_x_size) >= 128) { - for (i=0; i>5; - if (tiled_y_index & 0x1) { - /* odd fomula: 2+x_block_num*(y-1) */ - tiled_offset = tiled_y_index-1; - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_offset*(temp1>>6); - tiled_offset = tiled_offset+2; - temp1 = aligned_x_size>>5; - tiled_offset = tiled_offset+temp1; - tiled_offset = tiled_offset<<11; - tiled_offset1 = tiled_offset+2048*1; - } else { - temp2 = ((yuv420_uv_height+31)>>5)<<5; - /* even fomula: x_block_num*y */ - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_y_index*(temp1>>6); - tiled_offset = tiled_offset<<11; - if ((i+32)>5; - tiled_offset = tiled_offset+(temp1<<11); - tiled_offset1 = tiled_offset+2048*1; - } else { - temp1 = aligned_x_size>>6; - tiled_offset = tiled_offset+(temp1<<11); - tiled_offset1 = tiled_offset+2048*1; - } - } - temp1 = i&0x1F; - csc_deinterleave_memcpy(yuv420_u_dest+aligned_x_size/2+yuv420_width/2*(i), yuv420_v_dest+aligned_x_size/2+yuv420_width/2*(i), nv12t_uv_src+tiled_offset+64*(temp1), 64); - csc_deinterleave_memcpy(yuv420_u_dest+aligned_x_size/2+yuv420_width/2*(i)+32*1, yuv420_v_dest+aligned_x_size/2+yuv420_width/2*(i)+32*1, nv12t_uv_src+tiled_offset1+64*(temp1), 64); - csc_deinterleave_memcpy(yuv420_u_dest+aligned_x_size/2+yuv420_width/2*(i+1), yuv420_v_dest+aligned_x_size/2+yuv420_width/2*(i+1), nv12t_uv_src+tiled_offset+64*(temp1+1), 64); - csc_deinterleave_memcpy(yuv420_u_dest+aligned_x_size/2+yuv420_width/2*(i+1)+32*1, yuv420_v_dest+aligned_x_size/2+yuv420_width/2*(i+1)+32*1, nv12t_uv_src+tiled_offset1+64*(temp1+1), 64); - } - aligned_x_size = aligned_x_size+128; - } - - if ((yuv420_width-aligned_x_size) >= 64) { - for (i=0; i>6; - tiled_y_index = i>>5; - if (tiled_y_index & 0x1) { - /* odd fomula: 2+x+(x>>2)<<2+x_block_num*(y-1) */ - tiled_offset = tiled_y_index-1; - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_offset*(temp1>>6); - tiled_offset = tiled_offset+tiled_x_index; - tiled_offset = tiled_offset+2; - temp1 = (tiled_x_index>>2)<<2; - tiled_offset = tiled_offset+temp1; - tiled_offset = tiled_offset<<11; - } else { - temp2 = ((yuv420_uv_height+31)>>5)<<5; - if ((i+32)>2)<<2+x_block_num*y */ - temp1 = tiled_x_index+2; - temp1 = (temp1>>2)<<2; - tiled_offset = tiled_x_index+temp1; - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_offset+tiled_y_index*(temp1>>6); - tiled_offset = tiled_offset<<11; - } else { - /* even2 fomula: x+x_block_num*y */ - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_y_index*(temp1>>6); - tiled_offset = tiled_offset+tiled_x_index; - tiled_offset = tiled_offset<<11; - } - } - temp1 = i&0x1F; - temp2 = aligned_x_size&0x3F; - csc_deinterleave_memcpy(yuv420_u_dest+aligned_x_size/2+yuv420_width/2*(i), yuv420_v_dest+aligned_x_size/2+yuv420_width/2*(i), nv12t_uv_src+tiled_offset+64*(temp1), 64); - csc_deinterleave_memcpy(yuv420_u_dest+aligned_x_size/2+yuv420_width/2*(i+1), yuv420_v_dest+aligned_x_size/2+yuv420_width/2*(i+1), nv12t_uv_src+tiled_offset+64*(temp1+1), 64); - } - aligned_x_size = aligned_x_size+64; - } - - if (yuv420_width != aligned_x_size) { - for (i=0; i>6; - tiled_y_index = i>>5; - if (tiled_y_index & 0x1) { - /* odd fomula: 2+x+(x>>2)<<2+x_block_num*(y-1) */ - tiled_offset = tiled_y_index-1; - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_offset*(temp1>>6); - tiled_offset = tiled_offset+tiled_x_index; - tiled_offset = tiled_offset+2; - temp1 = (tiled_x_index>>2)<<2; - tiled_offset = tiled_offset+temp1; - tiled_offset = tiled_offset<<11; - } else { - temp2 = ((yuv420_uv_height+31)>>5)<<5; - if ((i+32)>2)<<2+x_block_num*y */ - temp1 = tiled_x_index+2; - temp1 = (temp1>>2)<<2; - tiled_offset = tiled_x_index+temp1; - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_offset+tiled_y_index*(temp1>>6); - tiled_offset = tiled_offset<<11; - } else { - /* even2 fomula: x+x_block_num*y */ - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_y_index*(temp1>>6); - tiled_offset = tiled_offset+tiled_x_index; - tiled_offset = tiled_offset<<11; - } - } - temp1 = i&0x1F; - temp2 = j&0x3F; - csc_deinterleave_memcpy(yuv420_u_dest+j/2+yuv420_width/2*(i), yuv420_v_dest+j/2+yuv420_width/2*(i), nv12t_uv_src+tiled_offset+temp2+64*(temp1), 4); - csc_deinterleave_memcpy(yuv420_u_dest+j/2+yuv420_width/2*(i+1), yuv420_v_dest+j/2+yuv420_width/2*(i+1), nv12t_uv_src+tiled_offset+temp2+64*(temp1+1), 4); - } - } - } -} - -/* - * Converts linear data to tiled. - * 1. Y of YUV420P to Y of NV12T - * 2. Y of YUV420S to Y of NV12T - * 3. UV of YUV420S to UV of NV12T - * - * @param nv12t_dest - * Y or UV plane address of NV12T[out] - * - * @param yuv420_src - * Y or UV plane address of YUV420P(S)[in] - * - * @param yuv420_width - * Width of YUV420[in] - * - * @param yuv420_height - * Y: Height of YUV420, UV: Height/2 of YUV420[in] - */ -void csc_linear_to_tiled(char *nv12t_dest, char *yuv420_src, int yuv420_width, int yuv420_height) -{ - unsigned int i, j; - unsigned int tiled_x_index = 0, tiled_y_index = 0; - unsigned int aligned_x_size = 0, aligned_y_size = 0; - unsigned int tiled_offset = 0; - unsigned int temp1 = 0, temp2 = 0; - - aligned_y_size = (yuv420_height>>5)<<5; - aligned_x_size = (yuv420_width>>6)<<6; - - for (i=0; i>6; - tiled_y_index = i>>5; - if (tiled_y_index & 0x1) { - /* odd fomula: 2+x+(x>>2)<<2+x_block_num*(y-1) */ - tiled_offset = tiled_y_index-1; - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_offset*(temp1>>6); - tiled_offset = tiled_offset+tiled_x_index; - tiled_offset = tiled_offset+2; - temp1 = (tiled_x_index>>2)<<2; - tiled_offset = tiled_offset+temp1; - tiled_offset = tiled_offset<<11; - } else { - temp2 = ((yuv420_height+31)>>5)<<5; - if ((i+32)>2)<<2+x_block_num*y */ - temp1 = tiled_x_index+2; - temp1 = (temp1>>2)<<2; - tiled_offset = tiled_x_index+temp1; - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_offset+tiled_y_index*(temp1>>6); - tiled_offset = tiled_offset<<11; - } else { - /* even2 fomula: x+x_block_num*y */ - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_y_index*(temp1>>6); - tiled_offset = tiled_offset+tiled_x_index; - tiled_offset = tiled_offset<<11; - } - } - - memcpy(nv12t_dest+tiled_offset, yuv420_src+j+yuv420_width*(i), 64); - memcpy(nv12t_dest+tiled_offset+64*1, yuv420_src+j+yuv420_width*(i+1), 64); - memcpy(nv12t_dest+tiled_offset+64*2, yuv420_src+j+yuv420_width*(i+2), 64); - memcpy(nv12t_dest+tiled_offset+64*3, yuv420_src+j+yuv420_width*(i+3), 64); - memcpy(nv12t_dest+tiled_offset+64*4, yuv420_src+j+yuv420_width*(i+4), 64); - memcpy(nv12t_dest+tiled_offset+64*5, yuv420_src+j+yuv420_width*(i+5), 64); - memcpy(nv12t_dest+tiled_offset+64*6, yuv420_src+j+yuv420_width*(i+6), 64); - memcpy(nv12t_dest+tiled_offset+64*7, yuv420_src+j+yuv420_width*(i+7), 64); - memcpy(nv12t_dest+tiled_offset+64*8, yuv420_src+j+yuv420_width*(i+8), 64); - memcpy(nv12t_dest+tiled_offset+64*9, yuv420_src+j+yuv420_width*(i+9), 64); - memcpy(nv12t_dest+tiled_offset+64*10, yuv420_src+j+yuv420_width*(i+10), 64); - memcpy(nv12t_dest+tiled_offset+64*11, yuv420_src+j+yuv420_width*(i+11), 64); - memcpy(nv12t_dest+tiled_offset+64*12, yuv420_src+j+yuv420_width*(i+12), 64); - memcpy(nv12t_dest+tiled_offset+64*13, yuv420_src+j+yuv420_width*(i+13), 64); - memcpy(nv12t_dest+tiled_offset+64*14, yuv420_src+j+yuv420_width*(i+14), 64); - memcpy(nv12t_dest+tiled_offset+64*15, yuv420_src+j+yuv420_width*(i+15), 64); - memcpy(nv12t_dest+tiled_offset+64*16, yuv420_src+j+yuv420_width*(i+16), 64); - memcpy(nv12t_dest+tiled_offset+64*17, yuv420_src+j+yuv420_width*(i+17), 64); - memcpy(nv12t_dest+tiled_offset+64*18, yuv420_src+j+yuv420_width*(i+18), 64); - memcpy(nv12t_dest+tiled_offset+64*19, yuv420_src+j+yuv420_width*(i+19), 64); - memcpy(nv12t_dest+tiled_offset+64*20, yuv420_src+j+yuv420_width*(i+20), 64); - memcpy(nv12t_dest+tiled_offset+64*21, yuv420_src+j+yuv420_width*(i+21), 64); - memcpy(nv12t_dest+tiled_offset+64*22, yuv420_src+j+yuv420_width*(i+22), 64); - memcpy(nv12t_dest+tiled_offset+64*23, yuv420_src+j+yuv420_width*(i+23), 64); - memcpy(nv12t_dest+tiled_offset+64*24, yuv420_src+j+yuv420_width*(i+24), 64); - memcpy(nv12t_dest+tiled_offset+64*25, yuv420_src+j+yuv420_width*(i+25), 64); - memcpy(nv12t_dest+tiled_offset+64*26, yuv420_src+j+yuv420_width*(i+26), 64); - memcpy(nv12t_dest+tiled_offset+64*27, yuv420_src+j+yuv420_width*(i+27), 64); - memcpy(nv12t_dest+tiled_offset+64*28, yuv420_src+j+yuv420_width*(i+28), 64); - memcpy(nv12t_dest+tiled_offset+64*29, yuv420_src+j+yuv420_width*(i+29), 64); - memcpy(nv12t_dest+tiled_offset+64*30, yuv420_src+j+yuv420_width*(i+30), 64); - memcpy(nv12t_dest+tiled_offset+64*31, yuv420_src+j+yuv420_width*(i+31), 64); - } - } - - for (i=aligned_y_size; i>6; - tiled_y_index = i>>5; - if (tiled_y_index & 0x1) { - /* odd fomula: 2+x+(x>>2)<<2+x_block_num*(y-1) */ - tiled_offset = tiled_y_index-1; - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_offset*(temp1>>6); - tiled_offset = tiled_offset+tiled_x_index; - tiled_offset = tiled_offset+2; - temp1 = (tiled_x_index>>2)<<2; - tiled_offset = tiled_offset+temp1; - tiled_offset = tiled_offset<<11; - } else { - temp2 = ((yuv420_height+31)>>5)<<5; - if ((i+32)>2)<<2+x_block_num*y */ - temp1 = tiled_x_index+2; - temp1 = (temp1>>2)<<2; - tiled_offset = tiled_x_index+temp1; - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_offset+tiled_y_index*(temp1>>6); - tiled_offset = tiled_offset<<11; - } else { - /* even2 fomula: x+x_block_num*y */ - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_y_index*(temp1>>6); - tiled_offset = tiled_offset+tiled_x_index; - tiled_offset = tiled_offset<<11; - } - } - - temp1 = i&0x1F; - memcpy(nv12t_dest+tiled_offset+64*(temp1), yuv420_src+j+yuv420_width*(i), 64); - memcpy(nv12t_dest+tiled_offset+64*(temp1+1), yuv420_src+j+yuv420_width*(i+1), 64); - memcpy(nv12t_dest+tiled_offset+64*(temp1+2), yuv420_src+j+yuv420_width*(i+2), 64); - memcpy(nv12t_dest+tiled_offset+64*(temp1+3), yuv420_src+j+yuv420_width*(i+3), 64); - } - } - - for (i=0; i>6; - tiled_y_index = i>>5; - if (tiled_y_index & 0x1) { - /* odd fomula: 2+x+(x>>2)<<2+x_block_num*(y-1) */ - tiled_offset = tiled_y_index-1; - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_offset*(temp1>>6); - tiled_offset = tiled_offset+tiled_x_index; - tiled_offset = tiled_offset+2; - temp1 = (tiled_x_index>>2)<<2; - tiled_offset = tiled_offset+temp1; - tiled_offset = tiled_offset<<11; - } else { - temp2 = ((yuv420_height+31)>>5)<<5; - if ((i+32)>2)<<2+x_block_num*y */ - temp1 = tiled_x_index+2; - temp1 = (temp1>>2)<<2; - tiled_offset = tiled_x_index+temp1; - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_offset+tiled_y_index*(temp1>>6); - tiled_offset = tiled_offset<<11; - } else { - /* even2 fomula: x+x_block_num*y */ - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_y_index*(temp1>>6); - tiled_offset = tiled_offset+tiled_x_index; - tiled_offset = tiled_offset<<11; - } - } - - temp1 = i&0x1F; - temp2 = j&0x3F; - memcpy(nv12t_dest+tiled_offset+temp2+64*(temp1), yuv420_src+j+yuv420_width*(i), 4); - memcpy(nv12t_dest+tiled_offset+temp2+64*(temp1+1), yuv420_src+j+yuv420_width*(i+1), 4); - memcpy(nv12t_dest+tiled_offset+temp2+64*(temp1+2), yuv420_src+j+yuv420_width*(i+2), 4); - memcpy(nv12t_dest+tiled_offset+temp2+64*(temp1+3), yuv420_src+j+yuv420_width*(i+3), 4); - } - } -} - -/* - * Converts and Interleaves linear to tiled - * 1. UV of YUV420P to UV of NV12T - * - * @param nv12t_uv_dest - * UV plane address of NV12T[out] - * - * @param yuv420p_u_src - * U plane address of YUV420P[in] - * - * @param yuv420p_v_src - * V plane address of YUV420P[in] - * - * @param yuv420_width - * Width of YUV420[in] - * - * @param yuv420_uv_height - * Height/2 of YUV420[in] - */ -void csc_linear_to_tiled_interleave(char *nv12t_uv_dest, char *yuv420p_u_src, char *yuv420p_v_src, int yuv420_width, int yuv420_uv_height) -{ - unsigned int i, j; - unsigned int tiled_x_index = 0, tiled_y_index = 0; - unsigned int aligned_x_size = 0, aligned_y_size = 0; - unsigned int tiled_offset = 0; - unsigned int temp1 = 0, temp2 = 0; - - aligned_y_size = (yuv420_uv_height>>5)<<5; - aligned_x_size = ((yuv420_width)>>6)<<6; - - for (i=0; i>6; - tiled_y_index = i>>5; - if (tiled_y_index & 0x1) { - /* odd fomula: 2+x+(x>>2)<<2+x_block_num*(y-1) */ - tiled_offset = tiled_y_index-1; - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_offset*(temp1>>6); - tiled_offset = tiled_offset+tiled_x_index; - tiled_offset = tiled_offset+2; - temp1 = (tiled_x_index>>2)<<2; - tiled_offset = tiled_offset+temp1; - tiled_offset = tiled_offset<<11; - } else { - temp2 = ((yuv420_uv_height+31)>>5)<<5; - if ((i+32)>2)<<2+x_block_num*y */ - temp1 = tiled_x_index+2; - temp1 = (temp1>>2)<<2; - tiled_offset = tiled_x_index+temp1; - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_offset+tiled_y_index*(temp1>>6); - tiled_offset = tiled_offset<<11; - } else { - /* even2 fomula: x+x_block_num*y */ - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_y_index*(temp1>>6); - tiled_offset = tiled_offset+tiled_x_index; - tiled_offset = tiled_offset<<11; - } - } - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset, yuv420p_u_src+j/2+yuv420_width/2*(i), yuv420p_v_src+j/2+yuv420_width/2*(i), 32); - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+64*1, yuv420p_u_src+j/2+yuv420_width/2*(i+1), yuv420p_v_src+j/2+yuv420_width/2*(i+1), 32); - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+64*2, yuv420p_u_src+j/2+yuv420_width/2*(i+2), yuv420p_v_src+j/2+yuv420_width/2*(i+2), 32); - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+64*3, yuv420p_u_src+j/2+yuv420_width/2*(i+3), yuv420p_v_src+j/2+yuv420_width/2*(i+3), 32); - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+64*4, yuv420p_u_src+j/2+yuv420_width/2*(i+4), yuv420p_v_src+j/2+yuv420_width/2*(i+4), 32); - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+64*5, yuv420p_u_src+j/2+yuv420_width/2*(i+5), yuv420p_v_src+j/2+yuv420_width/2*(i+5), 32); - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+64*6, yuv420p_u_src+j/2+yuv420_width/2*(i+6), yuv420p_v_src+j/2+yuv420_width/2*(i+6), 32); - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+64*7, yuv420p_u_src+j/2+yuv420_width/2*(i+7), yuv420p_v_src+j/2+yuv420_width/2*(i+7), 32); - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+64*8, yuv420p_u_src+j/2+yuv420_width/2*(i+8), yuv420p_v_src+j/2+yuv420_width/2*(i+8), 32); - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+64*9, yuv420p_u_src+j/2+yuv420_width/2*(i+9), yuv420p_v_src+j/2+yuv420_width/2*(i+9), 32); - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+64*10, yuv420p_u_src+j/2+yuv420_width/2*(i+10), yuv420p_v_src+j/2+yuv420_width/2*(i+10), 32); - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+64*11, yuv420p_u_src+j/2+yuv420_width/2*(i+11), yuv420p_v_src+j/2+yuv420_width/2*(i+11), 32); - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+64*12, yuv420p_u_src+j/2+yuv420_width/2*(i+12), yuv420p_v_src+j/2+yuv420_width/2*(i+12), 32); - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+64*13, yuv420p_u_src+j/2+yuv420_width/2*(i+13), yuv420p_v_src+j/2+yuv420_width/2*(i+13), 32); - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+64*14, yuv420p_u_src+j/2+yuv420_width/2*(i+14), yuv420p_v_src+j/2+yuv420_width/2*(i+14), 32); - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+64*15, yuv420p_u_src+j/2+yuv420_width/2*(i+15), yuv420p_v_src+j/2+yuv420_width/2*(i+15), 32); - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+64*16, yuv420p_u_src+j/2+yuv420_width/2*(i+16), yuv420p_v_src+j/2+yuv420_width/2*(i+16), 32); - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+64*17, yuv420p_u_src+j/2+yuv420_width/2*(i+17), yuv420p_v_src+j/2+yuv420_width/2*(i+17), 32); - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+64*18, yuv420p_u_src+j/2+yuv420_width/2*(i+18), yuv420p_v_src+j/2+yuv420_width/2*(i+18), 32); - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+64*19, yuv420p_u_src+j/2+yuv420_width/2*(i+19), yuv420p_v_src+j/2+yuv420_width/2*(i+19), 32); - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+64*20, yuv420p_u_src+j/2+yuv420_width/2*(i+20), yuv420p_v_src+j/2+yuv420_width/2*(i+20), 32); - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+64*21, yuv420p_u_src+j/2+yuv420_width/2*(i+21), yuv420p_v_src+j/2+yuv420_width/2*(i+21), 32); - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+64*22, yuv420p_u_src+j/2+yuv420_width/2*(i+22), yuv420p_v_src+j/2+yuv420_width/2*(i+22), 32); - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+64*23, yuv420p_u_src+j/2+yuv420_width/2*(i+23), yuv420p_v_src+j/2+yuv420_width/2*(i+23), 32); - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+64*24, yuv420p_u_src+j/2+yuv420_width/2*(i+24), yuv420p_v_src+j/2+yuv420_width/2*(i+24), 32); - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+64*25, yuv420p_u_src+j/2+yuv420_width/2*(i+25), yuv420p_v_src+j/2+yuv420_width/2*(i+25), 32); - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+64*26, yuv420p_u_src+j/2+yuv420_width/2*(i+26), yuv420p_v_src+j/2+yuv420_width/2*(i+26), 32); - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+64*27, yuv420p_u_src+j/2+yuv420_width/2*(i+27), yuv420p_v_src+j/2+yuv420_width/2*(i+27), 32); - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+64*28, yuv420p_u_src+j/2+yuv420_width/2*(i+28), yuv420p_v_src+j/2+yuv420_width/2*(i+28), 32); - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+64*29, yuv420p_u_src+j/2+yuv420_width/2*(i+29), yuv420p_v_src+j/2+yuv420_width/2*(i+29), 32); - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+64*30, yuv420p_u_src+j/2+yuv420_width/2*(i+30), yuv420p_v_src+j/2+yuv420_width/2*(i+30), 32); - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+64*31, yuv420p_u_src+j/2+yuv420_width/2*(i+31), yuv420p_v_src+j/2+yuv420_width/2*(i+31), 32); - } - } - - for (i=aligned_y_size; i>6; - tiled_y_index = i>>5; - if (tiled_y_index & 0x1) { - /* odd fomula: 2+x+(x>>2)<<2+x_block_num*(y-1) */ - tiled_offset = tiled_y_index-1; - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_offset*(temp1>>6); - tiled_offset = tiled_offset+tiled_x_index; - tiled_offset = tiled_offset+2; - temp1 = (tiled_x_index>>2)<<2; - tiled_offset = tiled_offset+temp1; - tiled_offset = tiled_offset<<11; - } else { - temp2 = ((yuv420_uv_height+31)>>5)<<5; - if ((i+32)>2)<<2+x_block_num*y */ - temp1 = tiled_x_index+2; - temp1 = (temp1>>2)<<2; - tiled_offset = tiled_x_index+temp1; - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_offset+tiled_y_index*(temp1>>6); - tiled_offset = tiled_offset<<11; - } else { - /* even2 fomula: x+x_block_num*y */ - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_y_index*(temp1>>6); - tiled_offset = tiled_offset+tiled_x_index; - tiled_offset = tiled_offset<<11; - } - } - temp1 = i&0x1F; - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+64*(temp1), yuv420p_u_src+j/2+yuv420_width/2*(i), yuv420p_v_src+j/2+yuv420_width/2*(i), 32); - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+64*(temp1+1), yuv420p_u_src+j/2+yuv420_width/2*(i+1), yuv420p_v_src+j/2+yuv420_width/2*(i+1), 32); - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+64*(temp1+2), yuv420p_u_src+j/2+yuv420_width/2*(i+2), yuv420p_v_src+j/2+yuv420_width/2*(i+2), 32); - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+64*(temp1+3), yuv420p_u_src+j/2+yuv420_width/2*(i+3), yuv420p_v_src+j/2+yuv420_width/2*(i+3), 32); - } - } - - for (i=0; i>6; - tiled_y_index = i>>5; - if (tiled_y_index & 0x1) { - /* odd fomula: 2+x+(x>>2)<<2+x_block_num*(y-1) */ - tiled_offset = tiled_y_index-1; - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_offset*(temp1>>6); - tiled_offset = tiled_offset+tiled_x_index; - tiled_offset = tiled_offset+2; - temp1 = (tiled_x_index>>2)<<2; - tiled_offset = tiled_offset+temp1; - tiled_offset = tiled_offset<<11; - } else { - temp2 = ((yuv420_uv_height+31)>>5)<<5; - if ((i+32)>2)<<2+x_block_num*y */ - temp1 = tiled_x_index+2; - temp1 = (temp1>>2)<<2; - tiled_offset = tiled_x_index+temp1; - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_offset+tiled_y_index*(temp1>>6); - tiled_offset = tiled_offset<<11; - } else { - /* even2 fomula: x+x_block_num*y */ - temp1 = ((yuv420_width+127)>>7)<<7; - tiled_offset = tiled_y_index*(temp1>>6); - tiled_offset = tiled_offset+tiled_x_index; - tiled_offset = tiled_offset<<11; - } - } - temp1 = i&0x1F; - temp2 = j&0x3F; - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+temp2+64*(temp1), yuv420p_u_src+j/2+yuv420_width/2*(i), yuv420p_v_src+j/2+yuv420_width/2*(i), 2); - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+temp2+64*(temp1+1), yuv420p_u_src+j/2+yuv420_width/2*(i+1), yuv420p_v_src+j/2+yuv420_width/2*(i+1), 2); - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+temp2+64*(temp1+2), yuv420p_u_src+j/2+yuv420_width/2*(i+2), yuv420p_v_src+j/2+yuv420_width/2*(i+2), 2); - csc_interleave_memcpy(nv12t_uv_dest+tiled_offset+temp2+64*(temp1+3), yuv420p_u_src+j/2+yuv420_width/2*(i+3), yuv420p_v_src+j/2+yuv420_width/2*(i+3), 2); - } - } -} - diff --git a/sec_mm/sec_omx/sec_codecs/video/mfc_c110/csc/csc_deinterleave_memcpy.s b/sec_mm/sec_omx/sec_codecs/video/mfc_c110/csc/csc_deinterleave_memcpy.s deleted file mode 100644 index 5b55080..0000000 --- a/sec_mm/sec_omx/sec_codecs/video/mfc_c110/csc/csc_deinterleave_memcpy.s +++ /dev/null @@ -1,128 +0,0 @@ -/* - * - * Copyright 2011 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file csc_deinterleave_memcpy.s - * @brief SEC_OMX specific define - * @author ShinWon Lee (shinwon.lee@samsung.com) - * @version 1.0 - * @history - * 2011.7.01 : Create - */ - .arch armv7-a - .text - .global csc_deinterleave_memcpy - .type csc_deinterleave_memcpy, %function -csc_deinterleave_memcpy: - .fnstart - - @r0 dest1 - @r1 dest2 - @r2 src - @r3 src_size - @r4 i - @r5 temp1 - @r6 temp2 - @r7 temp3 - - stmfd sp!, {r4-r12,r14} @ backup registers - - mov r4, #0 - cmp r3, #256 - blt LINEAR_SIZE_128 - - bic r5, r3, #0xFF -LINEAR_SIZE_256_LOOP: - pld [r2, #64] - vld2.8 {q0, q1}, [r2]! - pld [r2, #64] - vld2.8 {q2, q3}, [r2]! - pld [r2, #64] - vld2.8 {q4, q5}, [r2]! - pld [r2, #64] - vld2.8 {q6, q7}, [r2]! - pld [r2, #64] - vld2.8 {q8, q9}, [r2]! - pld [r2, #64] - vld2.8 {q10, q11}, [r2]! - vld2.8 {q12, q13}, [r2]! - vld2.8 {q14, q15}, [r2]! - - vst1.8 {q0}, [r0]! - vst1.8 {q2}, [r0]! - vst1.8 {q4}, [r0]! - vst1.8 {q6}, [r0]! - vst1.8 {q8}, [r0]! - vst1.8 {q10}, [r0]! - vst1.8 {q12}, [r0]! - vst1.8 {q14}, [r0]! - - vst1.8 {q1}, [r1]! - vst1.8 {q3}, [r1]! - vst1.8 {q5}, [r1]! - vst1.8 {q7}, [r1]! - vst1.8 {q9}, [r1]! - vst1.8 {q11}, [r1]! - vst1.8 {q13}, [r1]! - vst1.8 {q15}, [r1]! - - add r4, #256 - cmp r4, r5 - blt LINEAR_SIZE_256_LOOP - -LINEAR_SIZE_128: - sub r5, r3, r4 - cmp r5, #64 - blt LINEAR_SIZE_4 - pld [r2, #64] - vld2.8 {q0, q1}, [r2]! - pld [r2, #64] - vld2.8 {q2, q3}, [r2]! - vld2.8 {q4, q5}, [r2]! - vld2.8 {q6, q7}, [r2]! - - vst1.8 {q0}, [r0]! - vst1.8 {q4}, [r0]! - vst1.8 {q2}, [r0]! - vst1.8 {q6}, [r0]! - - vst1.8 {q1}, [r1]! - vst1.8 {q3}, [r1]! - vst1.8 {q5}, [r1]! - vst1.8 {q7}, [r1]! - - add r4, #128 - -LINEAR_SIZE_4: - ldrb r6, [r2], #1 - ldrb r7, [r2], #1 - ldrb r8, [r2], #1 - ldrb r9, [r2], #1 - - strb r6, [r0], #1 - strb r8, [r0], #1 - strb r7, [r1], #1 - strb r9, [r1], #1 - - add r4, #4 - cmp r4, r3 - blt LINEAR_SIZE_4 - -RESTORE_REG: - ldmfd sp!, {r4-r12,r15} @ restore registers - .fnend - diff --git a/sec_mm/sec_omx/sec_codecs/video/mfc_c110/csc/csc_interleave_memcpy.s b/sec_mm/sec_omx/sec_codecs/video/mfc_c110/csc/csc_interleave_memcpy.s deleted file mode 100644 index 54f4436..0000000 --- a/sec_mm/sec_omx/sec_codecs/video/mfc_c110/csc/csc_interleave_memcpy.s +++ /dev/null @@ -1,133 +0,0 @@ -/* - * - * Copyright 2011 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file csc_interleave_memcpy.s - * @brief SEC_OMX specific define - * @author ShinWon Lee (shinwon.lee@samsung.com) - * @version 1.0 - * @history - * 2011.7.01 : Create - */ - .arch armv7-a - .text - .global csc_interleave_memcpy - .type csc_interleave_memcpy, %function -csc_interleave_memcpy: - .fnstart - - @r0 dest - @r1 src1 - @r2 src2 - @r3 src_size - @r4 i - @r5 temp1 - @r6 temp2 - @r7 temp3 - @r8 temp2 - @r9 temp3 - - stmfd sp!, {r4-r12,r14} @ backup registers - - mov r4, #0 - cmp r3, #128 - blt LINEAR_SIZE_64 - - bic r5, r3, #0x2F -LINEAR_SIZE_128_LOOP: - pld [r1, #64] - vld1.8 {q0}, [r1]! - vld1.8 {q2}, [r1]! - vld1.8 {q4}, [r1]! - vld1.8 {q6}, [r1]! - pld [r2] - vld1.8 {q8}, [r1]! - vld1.8 {q10}, [r1]! - vld1.8 {q12}, [r1]! - vld1.8 {q14}, [r1]! - pld [r2, #64] - vld1.8 {q1}, [r2]! - vld1.8 {q3}, [r2]! - vld1.8 {q5}, [r2]! - vld1.8 {q7}, [r2]! - vld1.8 {q9}, [r2]! - vld1.8 {q11}, [r2]! - vld1.8 {q13}, [r2]! - vld1.8 {q15}, [r2]! - - vst2.8 {q0, q1}, [r0]! - vst2.8 {q2, q3}, [r0]! - vst2.8 {q4, q5}, [r0]! - vst2.8 {q6, q7}, [r0]! - vst2.8 {q8, q9}, [r0]! - vst2.8 {q10, q11}, [r0]! - pld [r1] - vst2.8 {q12, q13}, [r0]! - vst2.8 {q14, q15}, [r0]! - - add r4, #128 - cmp r4, r5 - blt LINEAR_SIZE_128_LOOP - -LINEAR_SIZE_64: - sub r5, r3, r4 - cmp r5, #64 - blt LINEAR_SIZE_2 -LINEAR_SIZE_64_LOOP: - pld [r2] - vld1.8 {q0}, [r1]! - vld1.8 {q2}, [r1]! - vld1.8 {q4}, [r1]! - vld1.8 {q6}, [r1]! - vld1.8 {q1}, [r2]! - vld1.8 {q3}, [r2]! - vld1.8 {q5}, [r2]! - vld1.8 {q7}, [r2]! - - vst2.8 {q0, q1}, [r0]! - vst2.8 {q2, q3}, [r0]! - pld [r1] - vst2.8 {q4, q5}, [r0]! - vst2.8 {q6, q7}, [r0]! - - add r4, #64 - cmp r4, r3 - blt LINEAR_SIZE_64_LOOP - -LINEAR_SIZE_2: - sub r5, r3, r4 - cmp r5, #2 - blt RESTORE_REG -LINEAR_SIZE_2_LOOP: - ldrb r6, [r1], #1 - ldrb r7, [r2], #1 - ldrb r8, [r1], #1 - ldrb r9, [r2], #1 - - strb r6, [r0], #1 - strb r7, [r0], #1 - strb r8, [r0], #1 - strb r9, [r0], #1 - - add r4, #2 - cmp r4, r3 - blt LINEAR_SIZE_2_LOOP - -RESTORE_REG: - ldmfd sp!, {r4-r12,r15} @ restore registers - .fnend - diff --git a/sec_mm/sec_omx/sec_codecs/video/mfc_c110/csc/csc_nv12t_yuv420_uv_neon.s b/sec_mm/sec_omx/sec_codecs/video/mfc_c110/csc/csc_nv12t_yuv420_uv_neon.s deleted file mode 100644 index 08e359c..0000000 --- a/sec_mm/sec_omx/sec_codecs/video/mfc_c110/csc/csc_nv12t_yuv420_uv_neon.s +++ /dev/null @@ -1,768 +0,0 @@ -/* - * - * Copyright 2011 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file csc_nv12t_yuv420_uv_neon.s - * @brief SEC_OMX specific define - * @author ShinWon Lee (shinwon.lee@samsung.com) - * @version 1.0 - * @history - * 2011.7.01 : Create - */ - -/* - * Converts and Deinterleaves tiled data to linear - * 1. UV of NV12T to UV of YUV420P - * - * @param yuv420_u_dest - * U plane address of YUV420P[out] - * - * @param yuv420_v_dest - * V plane address of YUV420P[out] - * - * @param nv12t_src - * UV plane address of NV12T[in] - * - * @param yuv420_width - * Width of YUV420[in] - * - * @param yuv420_uv_height - * Height/2 of YUV420[in] - */ - - .arch armv7-a - .text - .global csc_tiled_to_linear_deinterleave - .type csc_tiled_to_linear_deinterleave, %function -csc_tiled_to_linear_deinterleave: - .fnstart - - @r0 linear_u_dest - @r1 linear_v_dest - @r2 tiled_uv_src - @r3 linear_x_size - @r4 linear_y_size - @r5 j - @r6 i - @r7 tiled_addr - @r8 linear_addr - @r9 aligned_x_size - @r10 temp1 - @r11 temp2 - @r12 temp3 - @r14 temp4 - - stmfd sp!, {r4-r12,r14} @ backup registers - - ldr r4, [sp, #40] @ load linear_y_size to r4 - - mov r9, #0 - -LINEAR_X_SIZE_1024: - cmp r3, #1024 - blt LINEAR_X_SIZE_512 - - mov r6, #0 -LINEAR_X_SIZE_1024_LOOP: - mov r7, #0 @ tiled_offset = 0@ - mov r5, r6, asr #5 @ tiled_y_index = i>>5@ - and r10, r5, #0x1 - cmp r10, #0x1 - bne LINEAR_X_SIZE_1024_LOOP_EVEN -LINEAR_X_SIZE_1024_LOOP_ODD: - sub r7, r5, #1 @ tiled_offset = tiled_y_index-1@ - add r10, r3, #127 @ temp1 = ((linear_x_size+127)>>7)<<7@ - bic r10, #0x7F - mov r10, r10, asr #6 @ tiled_offset = tiled_offset*(temp1>>6)@ - mul r7, r7, r10 - mov r5, #8 - mov r5, r5, lsl #11 - sub r5, r5, #32 - add r7, r7, #2 @ tiled_offset = tiled_offset+2@ - mov r7, r7, lsl #11 @ tiled_offset = tiled_offset<<11@ - add r11, r7, #2048 - add r12, r7, #4096 - add r14, r7, #6144 - b LINEAR_X_SIZE_1024_LOOP_MEMCPY - -LINEAR_X_SIZE_1024_LOOP_EVEN: - add r11, r4, #31 @ temp2 = ((linear_y_size+31)>>5)<<5@ - bic r11, r11, #0x1F - add r10, r3, #127 @ temp1 = ((linear_x_size+127)>>7)<<7@ - bic r10, #0x7F - mov r10, r10, asr #6 @ tiled_offset = tiled_y_index*(temp1>>6)@ - mul r7, r5, r10 - add r12, r6, #32 - cmp r12, r11 - mov r7, r7, lsl #11 @ tiled_offset = tiled_offset<<11@ - add r11, r7, #2048 - movlt r5, #8 - addlt r12, r7, #12288 - addlt r14, r7, #14336 - movge r5, #4 - addge r12, r7, #2048 - addge r14, r7, #2048 - mov r5, r5, lsl #11 - sub r5, r5, #32 - -LINEAR_X_SIZE_1024_LOOP_MEMCPY: - and r10, r6, #0x1F - mov r10, r10, lsl #6 - add r10, r2, r10 - - add r7, r7, r10 @ tiled_addr = tiled_src+64*(temp1) - add r11, r11, r10 @ tiled_addr1 = tiled_src+64*(temp1) - pld [r11] - vld2.8 {q0, q1}, [r7]! - pld [r11, #32] - add r12, r12, r10 @ tiled_addr2 = tiled_src+64*(temp1) - vld2.8 {q2, q3}, [r7], r5 - pld [r12] - vld2.8 {q4, q5}, [r11]! - pld [r12, #32] - add r14, r14, r10 @ tiled_addr3 = tiled_src+64*(temp1) - vld2.8 {q6, q7}, [r11], r5 - pld [r14] - vld2.8 {q8, q9}, [r12]! - pld [r14, #32] - mov r10, r3, asr #1 - vld2.8 {q10, q11}, [r12], r5 - mul r10, r10, r6 - vld2.8 {q12, q13}, [r14]! - vld2.8 {q14, q15}, [r14], r5 - - add r8, r0, r10 - vst1.8 {q0}, [r8]! - vst1.8 {q2}, [r8]! - vst1.8 {q4}, [r8]! - vst1.8 {q6}, [r8]! - vst1.8 {q8}, [r8]! - vst1.8 {q10}, [r8]! - vst1.8 {q12}, [r8]! - vst1.8 {q14}, [r8]! - - add r10, r1, r10 - vst1.8 {q1}, [r10]! - vst1.8 {q3}, [r10]! - vst1.8 {q5}, [r10]! - vst1.8 {q7}, [r10]! - vst1.8 {q9}, [r10]! - vst1.8 {q11}, [r10]! - pld [r7] - vst1.8 {q13}, [r10]! - pld [r7, #32] - vst1.8 {q15}, [r10]! - - pld [r11] - vld2.8 {q0, q1}, [r7]! - pld [r11, #32] - vld2.8 {q2, q3}, [r7], r5 - pld [r12] - vld2.8 {q4, q5}, [r11]! - pld [r12, #32] - vld2.8 {q6, q7}, [r11], r5 - pld [r14] - vld2.8 {q8, q9}, [r12]! - pld [r14, #32] - vld2.8 {q10, q11}, [r12], r5 - vld2.8 {q12, q13}, [r14]! - vld2.8 {q14, q15}, [r14], r5 - - vst1.8 {q0}, [r8]! - vst1.8 {q2}, [r8]! - vst1.8 {q4}, [r8]! - vst1.8 {q6}, [r8]! - vst1.8 {q8}, [r8]! - vst1.8 {q10}, [r8]! - vst1.8 {q12}, [r8]! - vst1.8 {q14}, [r8]! - - vst1.8 {q1}, [r10]! - vst1.8 {q3}, [r10]! - vst1.8 {q5}, [r10]! - vst1.8 {q7}, [r10]! - vst1.8 {q9}, [r10]! - vst1.8 {q11}, [r10]! - pld [r7] - vst1.8 {q13}, [r10]! - pld [r7, #32] - vst1.8 {q15}, [r10]! - - pld [r11] - vld2.8 {q0, q1}, [r7]! - pld [r11, #32] - vld2.8 {q2, q3}, [r7], r5 - pld [r12] - vld2.8 {q4, q5}, [r11]! - pld [r12, #32] - vld2.8 {q6, q7}, [r11], r5 - pld [r14] - vld2.8 {q8, q9}, [r12]! - pld [r14, #32] - vld2.8 {q10, q11}, [r12], r5 - vld2.8 {q12, q13}, [r14]! - vld2.8 {q14, q15}, [r14], r5 - - vst1.8 {q0}, [r8]! - vst1.8 {q2}, [r8]! - vst1.8 {q4}, [r8]! - vst1.8 {q6}, [r8]! - vst1.8 {q8}, [r8]! - vst1.8 {q10}, [r8]! - vst1.8 {q12}, [r8]! - vst1.8 {q14}, [r8]! - - vst1.8 {q1}, [r10]! - vst1.8 {q3}, [r10]! - vst1.8 {q5}, [r10]! - vst1.8 {q7}, [r10]! - vst1.8 {q9}, [r10]! - vst1.8 {q11}, [r10]! - pld [r7] - vst1.8 {q13}, [r10]! - pld [r7, #32] - vst1.8 {q15}, [r10]! - - pld [r11] - vld2.8 {q0, q1}, [r7]! - pld [r11, #32] - vld2.8 {q2, q3}, [r7] - pld [r12] - vld2.8 {q4, q5}, [r11]! - pld [r12, #32] - vld2.8 {q6, q7}, [r11] - pld [r14] - vld2.8 {q8, q9}, [r12]! - pld [r14, #32] - vld2.8 {q10, q11}, [r12] - vld2.8 {q12, q13}, [r14]! - vld2.8 {q14, q15}, [r14] - - vst1.8 {q0}, [r8]! - vst1.8 {q2}, [r8]! - vst1.8 {q4}, [r8]! - vst1.8 {q6}, [r8]! - vst1.8 {q8}, [r8]! - vst1.8 {q10}, [r8]! - vst1.8 {q12}, [r8]! - vst1.8 {q14}, [r8]! - - vst1.8 {q1}, [r10]! - vst1.8 {q3}, [r10]! - vst1.8 {q5}, [r10]! - vst1.8 {q7}, [r10]! - vst1.8 {q9}, [r10]! - vst1.8 {q11}, [r10]! - add r6, #1 - vst1.8 {q13}, [r10]! - cmp r6, r4 - vst1.8 {q15}, [r10]! - - blt LINEAR_X_SIZE_1024_LOOP - - mov r9, #1024 - -LINEAR_X_SIZE_512: - sub r10, r3, r9 - cmp r10, #512 - blt LINEAR_X_SIZE_256 - - mov r6, #0 -LINEAR_X_SIZE_512_LOOP: - mov r7, #0 @ tiled_offset = 0@ - mov r5, r6, asr #5 @ tiled_y_index = i>>5@ - and r10, r5, #0x1 - cmp r10, #0x1 - bne LINEAR_X_SIZE_512_LOOP_EVEN -LINEAR_X_SIZE_512_LOOP_ODD: - sub r7, r5, #1 @ tiled_offset = tiled_y_index-1@ - add r10, r3, #127 @ temp1 = ((linear_x_size+127)>>7)<<7@ - bic r10, #0x7F - mov r10, r10, asr #6 @ tiled_offset = tiled_offset*(temp1>>6)@ - mul r7, r7, r10 - mov r5, #8 - mov r5, r5, lsl #11 - add r7, r7, #2 @ tiled_offset = tiled_offset+2@ - mov r10, r9, asr #5 - add r7, r7, r10 - mov r7, r7, lsl #11 @ tiled_offset = tiled_offset<<11@ - add r11, r7, #2048 - add r12, r7, #4096 - add r14, r7, #6144 - sub r5, r5, #32 - b LINEAR_X_SIZE_512_LOOP_MEMCPY - -LINEAR_X_SIZE_512_LOOP_EVEN: - add r11, r4, #31 @ temp2 = ((linear_y_size+31)>>5)<<5@ - bic r11, r11, #0x1F - add r10, r3, #127 @ temp1 = ((linear_x_size+127)>>7)<<7@ - bic r10, #0x7F - mov r10, r10, asr #6 @ tiled_offset = tiled_y_index*(temp1>>6)@ - mul r7, r5, r10 - add r12, r6, #32 - cmp r12, r11 - mov r7, r7, lsl #11 @ tiled_offset = tiled_offset<<11@ - movlt r5, #8 - movlt r10, r9, asr #5 - movge r10, r9, asr #6 - add r7, r7, r10, lsl #11 - add r11, r7, #2048 - addlt r12, r7, #12288 - addlt r14, r7, #14336 - movge r5, #4 - addge r12, r7, #4096 - addge r14, r7, #6144 - mov r5, r5, lsl #11 - sub r5, r5, #32 - -LINEAR_X_SIZE_512_LOOP_MEMCPY: - and r10, r6, #0x1F - mov r10, r10, lsl #6 - add r10, r2, r10 - - add r7, r7, r10 @ tiled_addr = tiled_src+64*(temp1) - add r11, r11, r10 @ tiled_addr1 = tiled_src+64*(temp1) - pld [r11] - vld2.8 {q0, q1}, [r7]! - pld [r11, #32] - add r12, r12, r10 @ tiled_addr2 = tiled_src+64*(temp1) - vld2.8 {q2, q3}, [r7], r5 - pld [r12] - vld2.8 {q4, q5}, [r11]! - pld [r12, #32] - add r14, r14, r10 @ tiled_addr3 = tiled_src+64*(temp1) - vld2.8 {q6, q7}, [r11], r5 - pld [r14] - mov r10, r3, asr #1 - vld2.8 {q8, q9}, [r12]! - pld [r14, #32] - mul r10, r10, r6 - vld2.8 {q10, q11}, [r12], r5 - add r8, r0, r10 - vld2.8 {q12, q13}, [r14]! - add r8, r8, r9, asr #1 - vld2.8 {q14, q15}, [r14], r5 - - vst1.8 {q0}, [r8]! - vst1.8 {q2}, [r8]! - vst1.8 {q4}, [r8]! - vst1.8 {q6}, [r8]! - vst1.8 {q8}, [r8]! - vst1.8 {q10}, [r8]! - vst1.8 {q12}, [r8]! - add r10, r1, r10 - vst1.8 {q14}, [r8]! - - add r10, r10, r9, asr #1 - vst1.8 {q1}, [r10]! - vst1.8 {q3}, [r10]! - vst1.8 {q5}, [r10]! - vst1.8 {q7}, [r10]! - vst1.8 {q9}, [r10]! - vst1.8 {q11}, [r10]! - pld [r7] - vst1.8 {q13}, [r10]! - pld [r7, #32] - vst1.8 {q15}, [r10]! - - pld [r11] - vld2.8 {q0, q1}, [r7]! - pld [r11, #32] - vld2.8 {q2, q3}, [r7] - pld [r12] - vld2.8 {q4, q5}, [r11]! - pld [r12, #32] - vld2.8 {q6, q7}, [r11] - pld [r14] - vld2.8 {q8, q9}, [r12]! - pld [r14, #32] - vld2.8 {q10, q11}, [r12] - vld2.8 {q12, q13}, [r14]! - vld2.8 {q14, q15}, [r14] - - vst1.8 {q0}, [r8]! - vst1.8 {q2}, [r8]! - vst1.8 {q4}, [r8]! - vst1.8 {q6}, [r8]! - vst1.8 {q8}, [r8]! - vst1.8 {q10}, [r8]! - vst1.8 {q12}, [r8]! - vst1.8 {q14}, [r8]! - - vst1.8 {q1}, [r10]! - vst1.8 {q3}, [r10]! - vst1.8 {q5}, [r10]! - vst1.8 {q7}, [r10]! - vst1.8 {q9}, [r10]! - vst1.8 {q11}, [r10]! - add r6, #1 - vst1.8 {q13}, [r10]! - cmp r6, r4 - vst1.8 {q15}, [r10]! - - blt LINEAR_X_SIZE_512_LOOP - - add r9, r9, #512 - -LINEAR_X_SIZE_256: - sub r10, r3, r9 - cmp r10, #256 - blt LINEAR_X_SIZE_128 - - mov r6, #0 -LINEAR_X_SIZE_256_LOOP: - mov r7, #0 @ tiled_offset = 0@ - mov r5, r6, asr #5 @ tiled_y_index = i>>5@ - and r10, r5, #0x1 - cmp r10, #0x1 - bne LINEAR_X_SIZE_256_LOOP_EVEN -LINEAR_X_SIZE_256_LOOP_ODD: - sub r7, r5, #1 @ tiled_offset = tiled_y_index-1@ - add r10, r3, #127 @ temp1 = ((linear_x_size+127)>>7)<<7@ - bic r10, #0x7F - mov r10, r10, asr #6 @ tiled_offset = tiled_offset*(temp1>>6)@ - mul r7, r7, r10 - add r7, r7, #2 @ tiled_offset = tiled_offset+2@ - mov r10, r9, asr #5 - add r7, r7, r10 - mov r7, r7, lsl #11 @ tiled_offset = tiled_offset<<11@ - add r11, r7, #2048 - add r12, r7, #4096 - add r14, r7, #6144 - b LINEAR_X_SIZE_256_LOOP_MEMCPY - -LINEAR_X_SIZE_256_LOOP_EVEN: - add r11, r4, #31 @ temp2 = ((linear_y_size+31)>>5)<<5@ - bic r11, r11, #0x1F - add r10, r3, #127 @ temp1 = ((linear_x_size+127)>>7)<<7@ - bic r10, #0x7F - mov r10, r10, asr #6 @ tiled_offset = tiled_y_index*(temp1>>6)@ - mul r7, r5, r10 - mov r7, r7, lsl #11 @ tiled_offset = tiled_offset<<11@ - add r12, r6, #32 - cmp r12, r11 - movlt r10, r9, asr #5 - addlt r7, r7, r10, lsl #11 - addlt r11, r7, #2048 - addlt r12, r7, #12288 - addlt r14, r7, #14336 - movge r10, r9, asr #6 - addge r7, r7, r10, lsl #11 - addge r11, r7, #2048 - addge r12, r7, #4096 - addge r14, r7, #6144 - -LINEAR_X_SIZE_256_LOOP_MEMCPY: - and r10, r6, #0x1F - mov r10, r10, lsl #6 - add r10, r2, r10 - - add r7, r7, r10 @ tiled_addr = tiled_src+64*(temp1) - add r11, r11, r10 @ tiled_addr1 = tiled_src+64*(temp1) - pld [r11] - vld2.8 {q0, q1}, [r7]! - pld [r11, #32] - add r12, r12, r10 @ tiled_addr2 = tiled_src+64*(temp1) - vld2.8 {q2, q3}, [r7] - pld [r12] - vld2.8 {q4, q5}, [r11]! - pld [r12, #32] - add r14, r14, r10 @ tiled_addr3 = tiled_src+64*(temp1) - vld2.8 {q6, q7}, [r11] - pld [r14] - vld2.8 {q8, q9}, [r12]! - pld [r14, #32] - mov r10, r3, asr #1 - vld2.8 {q10, q11}, [r12] - mul r10, r10, r6 - vld2.8 {q12, q13}, [r14]! - add r8, r0, r10 - vld2.8 {q14, q15}, [r14] - - add r8, r8, r9, asr #1 - vst1.8 {q0}, [r8]! - vst1.8 {q2}, [r8]! - vst1.8 {q4}, [r8]! - vst1.8 {q6}, [r8]! - vst1.8 {q8}, [r8]! - vst1.8 {q10}, [r8]! - vst1.8 {q12}, [r8]! - add r10, r1, r10 - vst1.8 {q14}, [r8]! - - add r10, r10, r9, asr #1 - vst1.8 {q1}, [r10]! - vst1.8 {q3}, [r10]! - vst1.8 {q5}, [r10]! - vst1.8 {q7}, [r10]! - vst1.8 {q9}, [r10]! - vst1.8 {q11}, [r10]! - add r6, #1 - vst1.8 {q13}, [r10]! - cmp r6, r4 - vst1.8 {q15}, [r10]! - blt LINEAR_X_SIZE_256_LOOP - - add r9, r9, #256 - -LINEAR_X_SIZE_128: - sub r10, r3, r9 - cmp r10, #128 - blt LINEAR_X_SIZE_64 - - mov r6, #0 -LINEAR_X_SIZE_128_LOOP: - mov r7, #0 @ tiled_offset = 0@ - mov r5, r6, asr #5 @ tiled_y_index = i>>5@ - and r10, r5, #0x1 - cmp r10, #0x1 - bne LINEAR_X_SIZE_128_LOOP_EVEN -LINEAR_X_SIZE_128_LOOP_ODD: - sub r7, r5, #1 @ tiled_offset = tiled_y_index-1@ - add r10, r3, #127 @ temp1 = ((linear_x_size+127)>>7)<<7@ - bic r10, #0x7F - mov r10, r10, asr #6 @ tiled_offset = tiled_offset*(temp1>>6)@ - mul r7, r7, r10 - add r7, r7, #2 @ tiled_offset = tiled_offset+2@ - mov r10, r9, asr #5 - add r7, r7, r10 - mov r7, r7, lsl #11 @ tiled_offset = tiled_offset<<11@ - add r11, r7, #2048 - b LINEAR_X_SIZE_128_LOOP_MEMCPY - -LINEAR_X_SIZE_128_LOOP_EVEN: - add r11, r4, #31 @ temp2 = ((linear_y_size+31)>>5)<<5@ - bic r11, r11, #0x1F - add r10, r3, #127 @ temp1 = ((linear_x_size+127)>>7)<<7@ - bic r10, #0x7F - mov r10, r10, asr #6 @ tiled_offset = tiled_y_index*(temp1>>6)@ - mul r7, r5, r10 - mov r7, r7, lsl #11 @ tiled_offset = tiled_offset<<11@ - add r12, r6, #32 - cmp r12, r11 - movlt r10, r9, asr #5 - movge r10, r9, asr #6 - add r7, r7, r10, lsl #11 - add r11, r7, #2048 - -LINEAR_X_SIZE_128_LOOP_MEMCPY: - and r10, r6, #0x1F - mov r10, r10, lsl #6 - add r10, r2, r10 - - add r7, r7, r10 @ tiled_addr = tiled_src+64*(temp1) - add r11, r11, r10 @ tiled_addr1 = tiled_src+64*(temp1) - pld [r11] - vld2.8 {q0, q1}, [r7]! - pld [r11, #32] - vld2.8 {q2, q3}, [r7]! - pld [r7] - vld2.8 {q4, q5}, [r11]! - mov r10, r3, asr #1 - pld [r7, #32] - vld2.8 {q6, q7}, [r11]! - mul r10, r10, r6 - pld [r11] - vld2.8 {q8, q9}, [r7]! - add r10, r10, r9, asr #1 - pld [r11, #32] - vld2.8 {q10, q11}, [r7]! - add r8, r0, r10 - vld2.8 {q12, q13}, [r11]! - mov r14, r3, asr #1 - vld2.8 {q14, q15}, [r11]! - - sub r14, r14, #48 - vst1.8 {q0}, [r8]! - vst1.8 {q2}, [r8]! - vst1.8 {q4}, [r8]! - vst1.8 {q6}, [r8], r14 - vst1.8 {q8}, [r8]! - vst1.8 {q10}, [r8]! - vst1.8 {q12}, [r8]! - vst1.8 {q14}, [r8]! - - add r10, r1, r10 - vst1.8 {q1}, [r10]! - vst1.8 {q3}, [r10]! - vst1.8 {q5}, [r10]! - vst1.8 {q7}, [r10], r14 - vst1.8 {q9}, [r10]! - vst1.8 {q11}, [r10]! - add r6, #2 - vst1.8 {q13}, [r10]! - cmp r6, r4 - vst1.8 {q15}, [r10]! - - blt LINEAR_X_SIZE_128_LOOP - - add r9, r9, #128 - -LINEAR_X_SIZE_64: - sub r10, r3, r9 - cmp r10, #64 - blt LINEAR_X_SIZE_4 - - mov r5, r9 - mov r6, #0 - -LINEAR_X_SIZE_64_LOOP: - bl GET_TILED_OFFSET - -LINEAR_X_SIZE_64_LOOP_MEMCPY: - and r10, r6, #0x1F - mov r14, r3, asr #1 - mov r10, r10, lsl #6 - sub r14, r14, #16 - add r10, r2, r10 - - add r7, r7, r10 @ tiled_addr = tiled_src+64*(temp1) - pld [r7, #64] - vld2.8 {q0, q1}, [r7]! - mov r10, r3, asr #1 - pld [r7, #64] - vld2.8 {q2, q3}, [r7]! - mul r10, r10, r6 - vld2.8 {q4, q5}, [r7]! - add r10, r10, r9, asr #1 - vld2.8 {q6, q7}, [r7]! - add r8, r0, r10 - - vst1.8 {q0}, [r8]! - vst1.8 {q2}, [r8], r14 - vst1.8 {q4}, [r8]! - vst1.8 {q6}, [r8], r14 - - add r10, r1, r10 - vst1.8 {q1}, [r10]! - vst1.8 {q3}, [r10], r14 - add r6, #2 - vst1.8 {q5}, [r10]! - cmp r6, r4 - vst1.8 {q7}, [r10], r14 - - blt LINEAR_X_SIZE_64_LOOP - - add r9, r9, #64 - -LINEAR_X_SIZE_4: - cmp r9, r3 - beq RESTORE_REG - - mov r6, #0 @ i = 0 -LINEAR_Y_SIZE_4_LOOP: - - mov r5, r9 @ j = aligned_x_size -LINEAR_X_SIZE_4_LOOP: - - bl GET_TILED_OFFSET - - mov r11, r3, asr #1 @ temp1 = linear_x_size/2 - mul r11, r11, r6 @ temp1 = temp1*(i) - add r11, r11, r5, asr #1 @ temp1 = temp1+j/2 - mov r12, r3, asr #1 @ temp2 = linear_x_size/2 - sub r12, r12, #1 @ temp2 = linear_x_size-1 - - add r8, r0, r11 @ linear_addr = linear_dest_u+temp1 - add r11, r1, r11 @ temp1 = linear_dest_v+temp1 - add r7, r2, r7 @ tiled_addr = tiled_src+tiled_addr - and r14, r6, #0x1F @ temp3 = i&0x1F@ - mov r14, r14, lsl #6 @ temp3 = temp3*64 - add r7, r7, r14 @ tiled_addr = tiled_addr+temp3 - and r14, r5, #0x3F @ temp3 = j&0x3F - add r7, r7, r14 @ tiled_addr = tiled_addr+temp3 - - ldrh r10, [r7], #2 - ldrh r14, [r7], #62 - strb r10, [r8], #1 - mov r10, r10, asr #8 - strb r10, [r11], #1 - strb r14, [r8], r12 - mov r14, r14, asr #8 - strb r14, [r11], r12 - - ldrh r10, [r7], #2 - ldrh r14, [r7], #62 - strb r10, [r8], #1 - mov r10, r10, asr #8 - strb r10, [r11], #1 - strb r14, [r8], r12 - mov r14, r14, asr #8 - strb r14, [r11], r12 - - add r5, r5, #4 @ j = j+4 - cmp r5, r3 @ j>5 - mov r11, r5, asr #6 @ temp1 = j>>6 - - and r14, r12, #0x1 @ if (temp2 & 0x1) - cmp r14, #0x1 - bne GET_TILED_OFFSET_EVEN_FORMULA_1 - -GET_TILED_OFFSET_ODD_FORMULA: - sub r7, r12, #1 @ tiled_addr = temp2-1 - add r14, r3, #127 @ temp3 = linear_x_size+127 - bic r14, r14, #0x7F @ temp3 = (temp3 >>7)<<7 - mov r14, r14, asr #6 @ temp3 = temp3>>6 - mul r7, r7, r14 @ tiled_addr = tiled_addr*temp3 - add r7, r7, r11 @ tiled_addr = tiled_addr+temp1 - add r7, r7, #2 @ tiled_addr = tiled_addr+2 - bic r14, r11, #0x3 @ temp3 = (temp1>>2)<<2 - add r7, r7, r14 @ tiled_addr = tiled_addr+temp3 - mov r7, r7, lsl #11 @ tiled_addr = tiled_addr<<11 - b GET_TILED_OFFSET_RETURN - -GET_TILED_OFFSET_EVEN_FORMULA_1: - add r14, r4, #31 @ temp3 = linear_y_size+31 - bic r14, r14, #0x1F @ temp3 = (temp3>>5)<<5 - sub r14, r14, #32 @ temp3 = temp3 - 32 - cmp r6, r14 @ if (i<(temp3-32)) { - bge GET_TILED_OFFSET_EVEN_FORMULA_2 - add r14, r11, #2 @ temp3 = temp1+2 - bic r14, r14, #3 @ temp3 = (temp3>>2)<<2 - add r7, r11, r14 @ tiled_addr = temp1+temp3 - add r14, r3, #127 @ temp3 = linear_x_size+127 - bic r14, r14, #0x7F @ temp3 = (temp3>>7)<<7 - mov r14, r14, asr #6 @ temp3 = temp3>>6 - mul r12, r12, r14 @ tiled_y_index = tiled_y_index*temp3 - add r7, r7, r12 @ tiled_addr = tiled_addr+tiled_y_index - mov r7, r7, lsl #11 @ - b GET_TILED_OFFSET_RETURN - -GET_TILED_OFFSET_EVEN_FORMULA_2: - add r14, r3, #127 @ temp3 = linear_x_size+127 - bic r14, r14, #0x7F @ temp3 = (temp3>>7)<<7 - mov r14, r14, asr #6 @ temp3 = temp3>>6 - mul r7, r12, r14 @ tiled_addr = temp2*temp3 - add r7, r7, r11 @ tiled_addr = tiled_addr+temp3 - mov r7, r7, lsl #11 @ tiled_addr = tiled_addr<<11@ - -GET_TILED_OFFSET_RETURN: - ldmfd sp!, {r15} @ restore registers - .fnend diff --git a/sec_mm/sec_omx/sec_codecs/video/mfc_c110/csc/csc_nv12t_yuv420_y_neon.s b/sec_mm/sec_omx/sec_codecs/video/mfc_c110/csc/csc_nv12t_yuv420_y_neon.s deleted file mode 100644 index d71ee17..0000000 --- a/sec_mm/sec_omx/sec_codecs/video/mfc_c110/csc/csc_nv12t_yuv420_y_neon.s +++ /dev/null @@ -1,680 +0,0 @@ -/* - * - * Copyright 2011 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file csc_nv12t_yuv420_y_neon.s - * @brief SEC_OMX specific define - * @author ShinWon Lee (shinwon.lee@samsung.com) - * @version 1.0 - * @history - * 2011.7.01 : Create - */ - -/* - * Converts tiled data to linear. - * 1. Y of NV12T to Y of YUV420P - * 2. Y of NV12T to Y of YUV420S - * 3. UV of NV12T to UV of YUV420S - * - * @param yuv420_dest - * Y or UV plane address of YUV420[out] - * - * @param nv12t_src - * Y or UV plane address of NV12T[in] - * - * @param yuv420_width - * Width of YUV420[in] - * - * @param yuv420_height - * Y: Height of YUV420, UV: Height/2 of YUV420[in] - */ - - .arch armv7-a - .text - .global csc_tiled_to_linear - .type csc_tiled_to_linear, %function -csc_tiled_to_linear: - .fnstart - - @r0 linear_dest - @r1 tiled_src - @r2 linear_x_size - @r3 linear_y_size - @r4 j - @r5 i - @r6 tiled_addr - @r7 linear_addr - @r8 aligned_x_size - @r9 aligned_y_size - @r10 temp1 - @r11 temp2 - @r12 temp3 - @r14 temp4 - - stmfd sp!, {r4-r12,r14} @ backup registers - - mov r8, #0 - cmp r2, #1024 - blt LINEAR_X_SIZE_512 - -LINEAR_X_SIZE_1024: - - mov r5, #0 -LINEAR_X_SIZE_1024_LOOP: - mov r6, #0 @ tiled_offset = 0@ - mov r4, r5, asr #5 @ tiled_y_index = i>>5@ - and r10, r4, #0x1 - cmp r10, #0x1 - bne LINEAR_X_SIZE_1024_LOOP_EVEN -LINEAR_X_SIZE_1024_LOOP_ODD: - sub r6, r4, #1 @ tiled_offset = tiled_y_index-1@ - add r10, r2, #127 @ temp1 = ((linear_x_size+127)>>7)<<7@ - bic r10, #0x7F - mov r10, r10, asr #6 @ tiled_offset = tiled_offset*(temp1>>6)@ - mul r6, r6, r10 - mov r4, #8 - mov r4, r4, lsl #11 - sub r4, r4, #32 - add r6, r6, #2 @ tiled_offset = tiled_offset+2@ - mov r6, r6, lsl #11 @ tiled_offset = tiled_offset<<11@ - add r11, r6, #2048 - add r12, r6, #4096 - add r14, r6, #6144 - b LINEAR_X_SIZE_1024_LOOP_MEMCPY - -LINEAR_X_SIZE_1024_LOOP_EVEN: - add r11, r3, #31 @ temp2 = ((linear_y_size+31)>>5)<<5@ - bic r11, r11, #0x1F - add r10, r2, #127 @ temp1 = ((linear_x_size+127)>>7)<<7@ - bic r10, #0x7F - mov r10, r10, asr #6 @ tiled_offset = tiled_y_index*(temp1>>6)@ - mul r6, r4, r10 - add r12, r5, #32 - cmp r12, r11 - mov r6, r6, lsl #11 @ tiled_offset = tiled_offset<<11@ - add r11, r6, #2048 - movlt r4, #8 - addlt r12, r6, #12288 - addlt r14, r6, #14336 - movge r4, #4 - addge r12, r6, #4096 - addge r14, r6, #6144 - mov r4, r4, lsl #11 - sub r4, r4, #32 - -LINEAR_X_SIZE_1024_LOOP_MEMCPY: - and r10, r5, #0x1F - mov r10, r10, lsl #6 - add r10, r1, r10 - - add r6, r6, r10 @ tiled_addr = tiled_src+64*(temp1) - add r11, r11, r10 @ tiled_addr1 = tiled_src+64*(temp1) - pld [r11] - vld1.8 {q0, q1}, [r6]! - pld [r11, #32] - add r12, r12, r10 @ tiled_addr2 = tiled_src+64*(temp1) - vld1.8 {q2, q3}, [r6], r4 - pld [r12] - vld1.8 {q4, q5}, [r11]! - pld [r12, #32] - add r14, r14, r10 @ tiled_addr3 = tiled_src+64*(temp1) - vld1.8 {q6, q7}, [r11], r4 - pld [r14] - vld1.8 {q8, q9}, [r12]! - pld [r14, #32] - mul r7, r2, r5 - vld1.8 {q10, q11}, [r12], r4 - add r7, r7, r0 - vld1.8 {q12, q13}, [r14]! - vld1.8 {q14, q15}, [r14], r4 - - vst1.8 {q0, q1}, [r7]! - vst1.8 {q2, q3}, [r7]! - vst1.8 {q4, q5}, [r7]! - vst1.8 {q6, q7}, [r7]! - vst1.8 {q8, q9}, [r7]! - vst1.8 {q10, q11}, [r7]! - pld [r6] - vst1.8 {q12, q13}, [r7]! - pld [r6, #32] - vst1.8 {q14, q15}, [r7]! - - pld [r11] - vld1.8 {q0, q1}, [r6]! - pld [r11, #32] - vld1.8 {q2, q3}, [r6], r4 - - pld [r12] - vld1.8 {q4, q5}, [r11]! - pld [r12, #32] - vld1.8 {q6, q7}, [r11], r4 - pld [r14] - vld1.8 {q8, q9}, [r12]! - pld [r14, #32] - vld1.8 {q10, q11}, [r12], r4 - vld1.8 {q12, q13}, [r14]! - vld1.8 {q14, q15}, [r14], r4 - - vst1.8 {q0, q1}, [r7]! - vst1.8 {q2, q3}, [r7]! - vst1.8 {q4, q5}, [r7]! - vst1.8 {q6, q7}, [r7]! - vst1.8 {q8, q9}, [r7]! - vst1.8 {q10, q11}, [r7]! - pld [r6] - vst1.8 {q12, q13}, [r7]! - pld [r6, #32] - vst1.8 {q14, q15}, [r7]! - - pld [r11] - vld1.8 {q0, q1}, [r6]! - pld [r11, #32] - vld1.8 {q2, q3}, [r6], r4 - pld [r12] - vld1.8 {q4, q5}, [r11]! - pld [r12, #32] - vld1.8 {q6, q7}, [r11], r4 - pld [r14] - vld1.8 {q8, q9}, [r12]! - pld [r14, #32] - vld1.8 {q10, q11}, [r12], r4 - vld1.8 {q12, q13}, [r14]! - vld1.8 {q14, q15}, [r14], r4 - - vst1.8 {q0, q1}, [r7]! - vst1.8 {q2, q3}, [r7]! - vst1.8 {q4, q5}, [r7]! - vst1.8 {q6, q7}, [r7]! - vst1.8 {q8, q9}, [r7]! - vst1.8 {q10, q11}, [r7]! - pld [r6] - vst1.8 {q12, q13}, [r7]! - pld [r6, #32] - vst1.8 {q14, q15}, [r7]! - - pld [r11] - vld1.8 {q0, q1}, [r6]! - pld [r11, #32] - vld1.8 {q2, q3}, [r6] - pld [r12] - vld1.8 {q4, q5}, [r11]! - pld [r12, #32] - vld1.8 {q6, q7}, [r11] - pld [r14] - vld1.8 {q8, q9}, [r12]! - pld [r14, #32] - vld1.8 {q10, q11}, [r12] - vld1.8 {q12, q13}, [r14]! - vld1.8 {q14, q15}, [r14] - - vst1.8 {q0, q1}, [r7]! - vst1.8 {q2, q3}, [r7]! - vst1.8 {q4, q5}, [r7]! - vst1.8 {q6, q7}, [r7]! - vst1.8 {q8, q9}, [r7]! - vst1.8 {q10, q11}, [r7]! - add r5, #1 - vst1.8 {q12, q13}, [r7]! - cmp r5, r3 - vst1.8 {q14, q15}, [r7]! - - blt LINEAR_X_SIZE_1024_LOOP - - mov r8, #1024 - -LINEAR_X_SIZE_512: - - sub r14, r2, r8 - cmp r14, #512 - blt LINEAR_X_SIZE_256 - - mov r5, #0 -LINEAR_X_SIZE_512_LOOP: - mov r6, #0 - mov r4, r5, asr #5 @ tiled_y_index = i>>5 - and r10, r4, #0x1 - cmp r10, #0x1 - bne LINEAR_X_SIZE_512_LOOP_EVEN - -LINEAR_X_SIZE_512_LOOP_ODD: - sub r6, r4, #1 - add r10, r2, #127 @ temp1 = ((linear_x_size+127)>>7)<<7@ - bic r10, #0x7F - mov r10, r10, asr #6 @ tiled_offset = tiled_offset*(temp1>>6)@ - mul r6, r6, r10 - mov r4, #8 - mov r4, r4, lsl #11 - sub r4, r4, #32 - add r6, r6, #2 @ tiled_offset = tiled_offset+2@ - mov r10, r8, asr #5 @ temp1 = aligned_x_size>>5@ - add r6, r6, r10 @ tiled_offset = tiled_offset+temp1@ - mov r6, r6, lsl #11 - add r11, r6, #2048 - add r12, r6, #4096 - add r14, r6, #6144 - b LINEAR_X_SIZE_512_LOOP_MEMCPY - -LINEAR_X_SIZE_512_LOOP_EVEN: - add r11, r3, #31 @ temp2 = ((linear_y_size+31)>>5)<<5@ - bic r11, r11, #0x1F - add r10, r2, #127 @ temp1 = ((linear_x_size+127)>>7)<<7@ - bic r10, #0x7F - mov r10, r10, asr #6 @ tiled_offset = tiled_y_index*(temp1>>6)@ - mul r6, r4, r10 - add r12, r5, #32 - cmp r12, r11 - mov r6, r6, lsl #11 @ tiled_offset = tiled_offset<<11@ - movlt r4, #8 - movlt r10, r8, asr #5 @ temp1 = aligned_x_size>>5@ - movge r10, r8, asr #6 @ temp1 = aligned_x_size>>6@ - add r6, r6, r10, lsl #11 @ tiled_offset = tiled_offset+(temp1<<11)@ - add r11, r6, #2048 - addlt r12, r6, #12288 - addlt r14, r6, #14336 - movge r4, #4 - addge r12, r6, #4096 - addge r14, r6, #6144 - mov r4, r4, lsl #11 - sub r4, r4, #32 - -LINEAR_X_SIZE_512_LOOP_MEMCPY: - and r10, r5, #0x1F - mov r10, r10, lsl #6 - add r10, r1, r10 - - add r6, r6, r10 @ tiled_addr = tiled_src+64*(temp1) - add r11, r11, r10 @ tiled_addr1 = tiled_src+64*(temp1) - pld [r11] - vld1.8 {q0, q1}, [r6]! - pld [r11, #32] - add r12, r12, r10 @ tiled_addr2 = tiled_src+64*(temp1) - vld1.8 {q2, q3}, [r6], r4 - pld [r12] - vld1.8 {q4, q5}, [r11]! - pld [r12, #32] - add r14, r14, r10 @ tiled_addr3 = tiled_src+64*(temp1) - vld1.8 {q6, q7}, [r11], r4 - pld [r14] - vld1.8 {q8, q9}, [r12]! - pld [r14, #32] - mul r7, r2, r5 - vld1.8 {q10, q11}, [r12], r4 - add r7, r7, r8 - vld1.8 {q12, q13}, [r14]! - vld1.8 {q14, q15}, [r14], r4 - - add r7, r7, r0 - vst1.8 {q0, q1}, [r7]! - vst1.8 {q2, q3}, [r7]! - vst1.8 {q4, q5}, [r7]! - vst1.8 {q6, q7}, [r7]! - vst1.8 {q8, q9}, [r7]! - vst1.8 {q10, q11}, [r7]! - pld [r6] - vst1.8 {q12, q13}, [r7]! - pld [r6, #32] - vst1.8 {q14, q15}, [r7]! - - pld [r11] - vld1.8 {q0, q1}, [r6]! - pld [r11, #32] - vld1.8 {q2, q3}, [r6], r4 - pld [r12] - vld1.8 {q4, q5}, [r11]! - pld [r12, #32] - vld1.8 {q6, q7}, [r11], r4 - pld [r14] - vld1.8 {q8, q9}, [r12]! - pld [r14, #32] - vld1.8 {q10, q11}, [r12], r4 - vld1.8 {q12, q13}, [r14]! - vld1.8 {q14, q15}, [r14], r4 - - vst1.8 {q0, q1}, [r7]! - vst1.8 {q2, q3}, [r7]! - vst1.8 {q4, q5}, [r7]! - vst1.8 {q6, q7}, [r7]! - vst1.8 {q8, q9}, [r7]! - vst1.8 {q10, q11}, [r7]! - add r5, #1 - vst1.8 {q12, q13}, [r7]! - cmp r5, r3 - vst1.8 {q14, q15}, [r7]! - - blt LINEAR_X_SIZE_512_LOOP - - add r8, r8, #512 - -LINEAR_X_SIZE_256: - - sub r14, r2, r8 - cmp r14, #256 - blt LINEAR_X_SIZE_128 - - mov r5, #0 -LINEAR_X_SIZE_256_LOOP: - mov r6, #0 - mov r4, r5, asr #5 @ tiled_y_index = i>>5 - and r10, r4, #0x1 - cmp r10, #0x1 - bne LINEAR_X_SIZE_256_LOOP_EVEN - -LINEAR_X_SIZE_256_LOOP_ODD: - sub r6, r4, #1 - add r10, r2, #127 @ temp1 = ((linear_x_size+127)>>7)<<7@ - bic r10, #0x7F - mov r10, r10, asr #6 @ tiled_offset = tiled_offset*(temp1>>6)@ - mul r6, r6, r10 - add r6, r6, #2 @ tiled_offset = tiled_offset+2@ - mov r10, r8, asr #5 @ temp1 = aligned_x_size>>5@ - add r6, r6, r10 @ tiled_offset = tiled_offset+temp1@ - mov r6, r6, lsl #11 - add r11, r6, #2048 - add r12, r6, #4096 - add r14, r6, #6144 - b LINEAR_X_SIZE_256_LOOP_MEMCPY - -LINEAR_X_SIZE_256_LOOP_EVEN: - add r11, r3, #31 @ temp2 = ((linear_y_size+31)>>5)<<5@ - bic r11, r11, #0x1F - add r10, r2, #127 @ temp1 = ((linear_x_size+127)>>7)<<7@ - bic r10, #0x7F - mov r10, r10, asr #6 @ tiled_offset = tiled_y_index*(temp1>>6)@ - mul r6, r4, r10 - mov r6, r6, lsl #11 @ tiled_offset = tiled_offset<<11@ - add r12, r5, #32 - cmp r12, r11 - movlt r10, r8, asr #5 @ temp1 = aligned_x_size>>5@ - movge r10, r8, asr #6 @ temp1 = aligned_x_size>>6@ - add r6, r6, r10, lsl #11 @ tiled_offset = tiled_offset+(temp1<<11)@ - add r11, r6, #2048 - addlt r12, r6, #12288 - addlt r14, r6, #14336 - addge r12, r6, #4096 - addge r14, r6, #6144 - -LINEAR_X_SIZE_256_LOOP_MEMCPY: - and r10, r5, #0x1F - mov r10, r10, lsl #6 - add r10, r1, r10 - - add r6, r6, r10 @ tiled_addr = tiled_src+64*(temp1) - add r11, r11, r10 @ tiled_addr1 = tiled_src+64*(temp1) - pld [r11] - vld1.8 {q0, q1}, [r6]! - pld [r11, #32] - add r12, r12, r10 @ tiled_addr2 = tiled_src+64*(temp1) - vld1.8 {q2, q3}, [r6] - pld [r12] - vld1.8 {q4, q5}, [r11]! - pld [r12, #32] - add r14, r14, r10 @ tiled_addr3 = tiled_src+64*(temp1) - vld1.8 {q6, q7}, [r11] - pld [r14] - mul r7, r2, r5 - vld1.8 {q8, q9}, [r12]! - pld [r14, #32] - add r7, r7, r8 - vld1.8 {q10, q11}, [r12] - add r7, r7, r0 - vld1.8 {q12, q13}, [r14]! - vld1.8 {q14, q15}, [r14] - - vst1.8 {q0, q1}, [r7]! - vst1.8 {q2, q3}, [r7]! - vst1.8 {q4, q5}, [r7]! - vst1.8 {q6, q7}, [r7]! - vst1.8 {q8, q9}, [r7]! - vst1.8 {q10, q11}, [r7]! - add r5, #1 - vst1.8 {q12, q13}, [r7]! - cmp r5, r3 - vst1.8 {q14, q15}, [r7]! - - blt LINEAR_X_SIZE_256_LOOP - - add r8, r8, #256 - -LINEAR_X_SIZE_128: - - sub r14, r2, r8 - cmp r14, #128 - blt LINEAR_X_SIZE_64 - - mov r5, #0 -LINEAR_X_SIZE_128_LOOP: - mov r6, #0 - mov r4, r5, asr #5 @ tiled_y_index = i>>5 - and r10, r4, #0x1 - cmp r10, #0x1 - bne LINEAR_X_SIZE_128_LOOP_EVEN - -LINEAR_X_SIZE_128_LOOP_ODD: - sub r6, r4, #1 - add r10, r2, #127 @ temp1 = ((linear_x_size+127)>>7)<<7@ - bic r10, #0x7F - mov r10, r10, asr #6 @ tiled_offset = tiled_offset*(temp1>>6)@ - mul r6, r6, r10 - add r6, r6, #2 @ tiled_offset = tiled_offset+2@ - mov r10, r8, asr #5 @ temp1 = aligned_x_size>>5@ - add r6, r6, r10 @ tiled_offset = tiled_offset+temp1@ - mov r6, r6, lsl #11 - add r11, r6, #2048 - b LINEAR_X_SIZE_128_LOOP_MEMCPY - -LINEAR_X_SIZE_128_LOOP_EVEN: - add r11, r3, #31 @ temp2 = ((linear_y_size+31)>>5)<<5@ - bic r11, r11, #0x1F - add r10, r2, #127 @ temp1 = ((linear_x_size+127)>>7)<<7@ - bic r10, #0x7F - mov r10, r10, asr #6 @ tiled_offset = tiled_y_index*(temp1>>6)@ - mul r6, r4, r10 - mov r6, r6, lsl #11 @ tiled_offset = tiled_offset<<11@ - add r12, r5, #32 - cmp r12, r11 - movlt r10, r8, asr #5 @ temp1 = aligned_x_size>>5@ - movge r10, r8, asr #6 @ temp1 = aligned_x_size>>6@ - add r6, r6, r10, lsl #11 @ tiled_offset = tiled_offset+(temp1<<11)@ - add r11, r6, #2048 - -LINEAR_X_SIZE_128_LOOP_MEMCPY: - and r10, r5, #0x1F - mov r10, r10, lsl #6 - add r10, r1, r10 - - add r6, r6, r10 @ tiled_addr = tiled_src+64*(temp1) - add r11, r11, r10 @ tiled_addr1 = tiled_src+64*(temp1) - pld [r6, #64] - vld1.8 {q0, q1}, [r6]! - pld [r6, #64] - vld1.8 {q2, q3}, [r6]! - mul r7, r2, r5 - pld [r11] - vld1.8 {q4, q5}, [r6]! - add r7, r7, r8 - pld [r11, #32] - vld1.8 {q6, q7}, [r6] - add r7, r7, r0 - pld [r11, #64] - vld1.8 {q8, q9}, [r11]! - pld [r11, #64] - vld1.8 {q10, q11}, [r11]! - vld1.8 {q12, q13}, [r11]! - vld1.8 {q14, q15}, [r11] - - sub r9, r2, #96 - vst1.8 {q0, q1}, [r7]! - vst1.8 {q2, q3}, [r7]! - vst1.8 {q8, q9}, [r7]! - vst1.8 {q10, q11}, [r7], r9 - vst1.8 {q4, q5}, [r7]! - vst1.8 {q6, q7}, [r7]! - add r5, #2 - vst1.8 {q12, q13}, [r7]! - cmp r5, r3 - vst1.8 {q14, q15}, [r7] - - blt LINEAR_X_SIZE_128_LOOP - - add r8, r8, #128 - -LINEAR_X_SIZE_64: - - sub r14, r2, r8 - cmp r14, #64 - blt LINEAR_X_SIZE_4 - - mov r5, #0 - mov r4, r8 - -LINEAR_X_SIZE_64_LOOP: - - bl GET_TILED_OFFSET - - add r6, r1, r6 @ tiled_addr = tiled_src+tiled_addr - and r11, r5, #0x1F @ temp2 = i&0x1F - mov r11, r11, lsl #6 @ temp2 = 64*temp2 - add r6, r6, r11 @ tiled_addr = tiled_addr+temp2 - - pld [r6, #64] - vld1.8 {q0, q1}, [r6]! @ store {tiled_addr} - mul r10, r2, r5 @ temp1 = linear_x_size*(i) - pld [r6, #64] - vld1.8 {q2, q3}, [r6]! - pld [r6, #64] - vld1.8 {q4, q5}, [r6]! @ store {tiled_addr+64*1} - pld [r6, #64] - vld1.8 {q6, q7}, [r6]! - pld [r6, #64] - vld1.8 {q8, q9}, [r6]! @ store {tiled_addr+64*2} - pld [r6, #64] - vld1.8 {q10, q11}, [r6]! - add r7, r0, r4 @ linear_addr = linear_dest+j - vld1.8 {q12, q13}, [r6]! @ store {tiled_addr+64*3} - add r7, r7, r10 @ linear_addr = linear_addr+temp1 - vld1.8 {q14, q15}, [r6]! - sub r10, r2, #32 @ temp1 = linear_x_size-32 - - vst1.8 {q0, q1}, [r7]! @ load {linear_src, 64} - vst1.8 {q2, q3}, [r7], r10 - vst1.8 {q4, q5}, [r7]! @ load {linear_src+linear_x_size*1, 64} - vst1.8 {q6, q7}, [r7], r10 - vst1.8 {q8, q9}, [r7]! @ load {linear_src+linear_x_size*2, 64} - vst1.8 {q10, q11}, [r7], r10 - add r5, #4 - vst1.8 {q12, q13}, [r7]! @ load {linear_src+linear_x_size*3, 64} - cmp r5, r3 - vst1.8 {q14, q15}, [r7], r10 - - blt LINEAR_X_SIZE_64_LOOP - - add r8, r8, #64 - -LINEAR_X_SIZE_4: - cmp r8, r2 - beq RESTORE_REG - - mov r5, #0 @ i = 0 -LINEAR_Y_SIZE_4_LOOP: - - mov r4, r8 @ j = aligned_x_size -LINEAR_X_SIZE_4_LOOP: - - bl GET_TILED_OFFSET - - and r10, r5, #0x1F @ temp1 = i&0x1F - and r11, r4, #0x3F @ temp2 = j&0x3F - - add r6, r6, r1 - add r6, r6, r11 - add r6, r6, r10, lsl #6 - - ldr r10, [r6], #64 - add r7, r0, r4 - ldr r11, [r6], #64 - mul r9, r2, r5 - ldr r12, [r6], #64 - add r7, r7, r9 - ldr r14, [r6], #64 - - str r10, [r7], r2 - str r11, [r7], r2 - str r12, [r7], r2 - str r14, [r7], r2 - - add r4, r4, #4 @ j = j+4 - cmp r4, r2 @ j>5 - mov r10, r4, asr #6 @ temp1 = j>>6 - - and r12, r11, #0x1 @ if (temp2 & 0x1) - cmp r12, #0x1 - bne GET_TILED_OFFSET_EVEN_FORMULA_1 - -GET_TILED_OFFSET_ODD_FORMULA: - sub r6, r11, #1 @ tiled_addr = temp2-1 - add r12, r2, #127 @ temp3 = linear_x_size+127 - bic r12, r12, #0x7F @ temp3 = (temp3 >>7)<<7 - mov r12, r12, asr #6 @ temp3 = temp3>>6 - mul r6, r6, r12 @ tiled_addr = tiled_addr*temp3 - add r6, r6, r10 @ tiled_addr = tiled_addr+temp1 - add r6, r6, #2 @ tiled_addr = tiled_addr+2 - bic r12, r10, #0x3 @ temp3 = (temp1>>2)<<2 - add r6, r6, r12 @ tiled_addr = tiled_addr+temp3 - mov r6, r6, lsl #11 @ tiled_addr = tiled_addr<<11 - b GET_TILED_OFFSET_RETURN - -GET_TILED_OFFSET_EVEN_FORMULA_1: - add r12, r3, #31 @ temp3 = linear_y_size+31 - bic r12, r12, #0x1F @ temp3 = (temp3>>5)<<5 - sub r12, r12, #32 @ temp3 = temp3 - 32 - cmp r5, r12 @ if (i<(temp3-32)) { - bge GET_TILED_OFFSET_EVEN_FORMULA_2 - add r12, r10, #2 @ temp3 = temp1+2 - bic r12, r12, #3 @ temp3 = (temp3>>2)<<2 - add r6, r10, r12 @ tiled_addr = temp1+temp3 - add r12, r2, #127 @ temp3 = linear_x_size+127 - bic r12, r12, #0x7F @ temp3 = (temp3>>7)<<7 - mov r12, r12, asr #6 @ temp3 = temp3>>6 - mul r11, r11, r12 @ tiled_y_index = tiled_y_index*temp3 - add r6, r6, r11 @ tiled_addr = tiled_addr+tiled_y_index - mov r6, r6, lsl #11 @ - b GET_TILED_OFFSET_RETURN - -GET_TILED_OFFSET_EVEN_FORMULA_2: - add r12, r2, #127 @ temp3 = linear_x_size+127 - bic r12, r12, #0x7F @ temp3 = (temp3>>7)<<7 - mov r12, r12, asr #6 @ temp3 = temp3>>6 - mul r6, r11, r12 @ tiled_addr = temp2*temp3 - add r6, r6, r10 @ tiled_addr = tiled_addr+temp3 - mov r6, r6, lsl #11 @ tiled_addr = tiled_addr<<11@ - -GET_TILED_OFFSET_RETURN: - mov pc, lr - .fnend - diff --git a/sec_mm/sec_omx/sec_codecs/video/mfc_c110/csc/csc_yuv420_nv12t_uv_neon.s b/sec_mm/sec_omx/sec_codecs/video/mfc_c110/csc/csc_yuv420_nv12t_uv_neon.s deleted file mode 100644 index dd2c879..0000000 --- a/sec_mm/sec_omx/sec_codecs/video/mfc_c110/csc/csc_yuv420_nv12t_uv_neon.s +++ /dev/null @@ -1,573 +0,0 @@ -/* - * - * Copyright 2011 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file csc_yuv420_nv12t_uv_neon.s - * @brief SEC_OMX specific define - * @author ShinWon Lee (shinwon.lee@samsung.com) - * @version 1.0 - * @history - * 2011.7.01 : Create - */ - -/* - * Converts and Interleaves linear to tiled - * 1. UV of YUV420P to UV of NV12T - * - * @param nv12t_uv_dest - * UV plane address of NV12T[out] - * - * @param yuv420p_u_src - * U plane address of YUV420P[in] - * - * @param yuv420p_v_src - * V plane address of YUV420P[in] - * - * @param yuv420_width - * Width of YUV420[in] - * - * @param yuv420_uv_height - * Height/2 of YUV420[in] - */ - - .arch armv7-a - .text - .global csc_linear_to_tiled_interleave - .type csc_linear_to_tiled_interleave, %function -csc_linear_to_tiled_interleave: - .fnstart - - @r0 tiled_dest - @r1 linear_src_u - @r2 linear_src_v - @r3 linear_x_size - @r4 linear_y_size - @r5 j - @r6 i - @r7 tiled_addr - @r8 linear_addr - @r9 aligned_x_size - @r10 aligned_y_size - @r11 temp1 - @r12 temp2 - @r14 temp3 - - stmfd sp!, {r4-r12,r14} @ backup registers - - ldr r4, [sp, #40] @ load linear_y_size to r4 - - bic r10, r4, #0x1F @ aligned_y_size = (linear_y_size>>5)<<5 - bic r9, r3, #0x3F @ aligned_x_size = (linear_x_size>>6)<<6 - - mov r6, #0 @ i = 0 -LOOP_ALIGNED_Y_SIZE: - - mov r5, #0 @ j = 0 -LOOP_ALIGNED_X_SIZE: - - bl GET_TILED_OFFSET - - mov r11, r3, asr #1 @ temp1 = linear_x_size/2 - mul r11, r11, r6 @ temp1 = temp1*(i) - add r11, r11, r5, asr #1 @ temp1 = temp1+j/2 - mov r12, r3, asr #1 @ temp2 = linear_x_size/2 - sub r12, r12, #16 @ temp2 = linear_x_size-16 - - add r8, r1, r11 @ linear_addr = linear_src_u+temp1 - add r11, r2, r11 @ temp1 = linear_src_v+temp1 - add r7, r0, r7 @ tiled_addr = tiled_dest+tiled_addr - - pld [r8, r3] - vld1.8 {q0}, [r8]! - vld1.8 {q2}, [r8], r12 - pld [r11, r3] - vld1.8 {q1}, [r11]! - vld1.8 {q3}, [r11], r12 - pld [r8, r3] - vld1.8 {q4}, [r8]! - vld1.8 {q6}, [r8], r12 - pld [r11, r3] - vld1.8 {q5}, [r11]! - vld1.8 {q7}, [r11], r12 - pld [r8, r3] - vld1.8 {q8}, [r8]! - vld1.8 {q10}, [r8], r12 - pld [r11, r3] - vld1.8 {q9}, [r11]! - vld1.8 {q11}, [r11], r12 - pld [r8, r3] - vld1.8 {q12}, [r8]! - vld1.8 {q14}, [r8], r12 - pld [r11, r3] - vld1.8 {q13}, [r11]! - vld1.8 {q15}, [r11], r12 - - vst2.8 {q0, q1}, [r7]! - vst2.8 {q2, q3}, [r7]! - vst2.8 {q4, q5}, [r7]! - vst2.8 {q6, q7}, [r7]! - vst2.8 {q8, q9}, [r7]! - vst2.8 {q10, q11}, [r7]! - vst2.8 {q12, q13}, [r7]! - vst2.8 {q14, q15}, [r7]! - - pld [r8, r3] - vld1.8 {q0}, [r8]! - vld1.8 {q2}, [r8], r12 - pld [r11, r3] - vld1.8 {q1}, [r11]! - vld1.8 {q3}, [r11], r12 - pld [r8, r3] - vld1.8 {q4}, [r8]! - vld1.8 {q6}, [r8], r12 - pld [r11, r3] - vld1.8 {q5}, [r11]! - vld1.8 {q7}, [r11], r12 - pld [r8, r3] - vld1.8 {q8}, [r8]! - vld1.8 {q10}, [r8], r12 - pld [r11, r3] - vld1.8 {q9}, [r11]! - vld1.8 {q11}, [r11], r12 - pld [r8, r3] - vld1.8 {q12}, [r8]! - vld1.8 {q14}, [r8], r12 - pld [r11, r3] - vld1.8 {q13}, [r11]! - vld1.8 {q15}, [r11], r12 - - vst2.8 {q0, q1}, [r7]! - vst2.8 {q2, q3}, [r7]! - vst2.8 {q4, q5}, [r7]! - vst2.8 {q6, q7}, [r7]! - vst2.8 {q8, q9}, [r7]! - vst2.8 {q10, q11}, [r7]! - vst2.8 {q12, q13}, [r7]! - vst2.8 {q14, q15}, [r7]! - - pld [r8, r3] - vld1.8 {q0}, [r8]! - vld1.8 {q2}, [r8], r12 - pld [r11, r3] - vld1.8 {q1}, [r11]! - vld1.8 {q3}, [r11], r12 - pld [r8, r3] - vld1.8 {q4}, [r8]! - vld1.8 {q6}, [r8], r12 - pld [r11, r3] - vld1.8 {q5}, [r11]! - vld1.8 {q7}, [r11], r12 - pld [r8, r3] - vld1.8 {q8}, [r8]! - vld1.8 {q10}, [r8], r12 - pld [r11, r3] - vld1.8 {q9}, [r11]! - vld1.8 {q11}, [r11], r12 - pld [r8, r3] - vld1.8 {q12}, [r8]! - vld1.8 {q14}, [r8], r12 - pld [r11, r3] - vld1.8 {q13}, [r11]! - vld1.8 {q15}, [r11], r12 - - vst2.8 {q0, q1}, [r7]! - vst2.8 {q2, q3}, [r7]! - vst2.8 {q4, q5}, [r7]! - vst2.8 {q6, q7}, [r7]! - vst2.8 {q8, q9}, [r7]! - vst2.8 {q10, q11}, [r7]! - vst2.8 {q12, q13}, [r7]! - vst2.8 {q14, q15}, [r7]! - - pld [r8, r3] - vld1.8 {q0}, [r8]! - vld1.8 {q2}, [r8], r12 - pld [r11, r3] - vld1.8 {q1}, [r11]! - vld1.8 {q3}, [r11], r12 - pld [r8, r3] - vld1.8 {q4}, [r8]! - vld1.8 {q6}, [r8], r12 - pld [r11, r3] - vld1.8 {q5}, [r11]! - vld1.8 {q7}, [r11], r12 - pld [r8, r3] - vld1.8 {q8}, [r8]! - vld1.8 {q10}, [r8], r12 - pld [r11, r3] - vld1.8 {q9}, [r11]! - vld1.8 {q11}, [r11], r12 - pld [r8, r3] - vld1.8 {q12}, [r8]! - vld1.8 {q14}, [r8], r12 - pld [r11, r3] - vld1.8 {q13}, [r11]! - vld1.8 {q15}, [r11], r12 - - vst2.8 {q0, q1}, [r7]! - vst2.8 {q2, q3}, [r7]! - vst2.8 {q4, q5}, [r7]! - vst2.8 {q6, q7}, [r7]! - vst2.8 {q8, q9}, [r7]! - vst2.8 {q10, q11}, [r7]! - vst2.8 {q12, q13}, [r7]! - vst2.8 {q14, q15}, [r7]! - - pld [r8, r3] - vld1.8 {q0}, [r8]! - vld1.8 {q2}, [r8], r12 - pld [r11, r3] - vld1.8 {q1}, [r11]! - vld1.8 {q3}, [r11], r12 - pld [r8, r3] - vld1.8 {q4}, [r8]! - vld1.8 {q6}, [r8], r12 - pld [r11, r3] - vld1.8 {q5}, [r11]! - vld1.8 {q7}, [r11], r12 - pld [r8, r3] - vld1.8 {q8}, [r8]! - vld1.8 {q10}, [r8], r12 - pld [r11, r3] - vld1.8 {q9}, [r11]! - vld1.8 {q11}, [r11], r12 - pld [r8, r3] - vld1.8 {q12}, [r8]! - vld1.8 {q14}, [r8], r12 - pld [r11, r3] - vld1.8 {q13}, [r11]! - vld1.8 {q15}, [r11], r12 - - vst2.8 {q0, q1}, [r7]! - vst2.8 {q2, q3}, [r7]! - vst2.8 {q4, q5}, [r7]! - vst2.8 {q6, q7}, [r7]! - vst2.8 {q8, q9}, [r7]! - vst2.8 {q10, q11}, [r7]! - vst2.8 {q12, q13}, [r7]! - vst2.8 {q14, q15}, [r7]! - - pld [r8, r3] - vld1.8 {q0}, [r8]! - vld1.8 {q2}, [r8], r12 - pld [r11, r3] - vld1.8 {q1}, [r11]! - vld1.8 {q3}, [r11], r12 - pld [r8, r3] - vld1.8 {q4}, [r8]! - vld1.8 {q6}, [r8], r12 - pld [r11, r3] - vld1.8 {q5}, [r11]! - vld1.8 {q7}, [r11], r12 - pld [r8, r3] - vld1.8 {q8}, [r8]! - vld1.8 {q10}, [r8], r12 - pld [r11, r3] - vld1.8 {q9}, [r11]! - vld1.8 {q11}, [r11], r12 - pld [r8, r3] - vld1.8 {q12}, [r8]! - vld1.8 {q14}, [r8], r12 - pld [r11, r3] - vld1.8 {q13}, [r11]! - vld1.8 {q15}, [r11], r12 - - vst2.8 {q0, q1}, [r7]! - vst2.8 {q2, q3}, [r7]! - vst2.8 {q4, q5}, [r7]! - vst2.8 {q6, q7}, [r7]! - vst2.8 {q8, q9}, [r7]! - vst2.8 {q10, q11}, [r7]! - vst2.8 {q12, q13}, [r7]! - vst2.8 {q14, q15}, [r7]! - - pld [r8, r3] - vld1.8 {q0}, [r8]! - vld1.8 {q2}, [r8], r12 - pld [r11, r3] - vld1.8 {q1}, [r11]! - vld1.8 {q3}, [r11], r12 - pld [r8, r3] - vld1.8 {q4}, [r8]! - vld1.8 {q6}, [r8], r12 - pld [r11, r3] - vld1.8 {q5}, [r11]! - vld1.8 {q7}, [r11], r12 - pld [r8, r3] - vld1.8 {q8}, [r8]! - vld1.8 {q10}, [r8], r12 - pld [r11, r3] - vld1.8 {q9}, [r11]! - vld1.8 {q11}, [r11], r12 - pld [r8, r3] - vld1.8 {q12}, [r8]! - vld1.8 {q14}, [r8], r12 - pld [r11, r3] - vld1.8 {q13}, [r11]! - vld1.8 {q15}, [r11], r12 - - vst2.8 {q0, q1}, [r7]! - vst2.8 {q2, q3}, [r7]! - vst2.8 {q4, q5}, [r7]! - vst2.8 {q6, q7}, [r7]! - vst2.8 {q8, q9}, [r7]! - vst2.8 {q10, q11}, [r7]! - vst2.8 {q12, q13}, [r7]! - vst2.8 {q14, q15}, [r7]! - - pld [r8, r3] - vld1.8 {q0}, [r8]! - vld1.8 {q2}, [r8], r12 - pld [r11, r3] - vld1.8 {q1}, [r11]! - vld1.8 {q3}, [r11], r12 - pld [r8, r3] - vld1.8 {q4}, [r8]! - vld1.8 {q6}, [r8], r12 - pld [r11, r3] - vld1.8 {q5}, [r11]! - vld1.8 {q7}, [r11], r12 - pld [r8, r3] - vld1.8 {q8}, [r8]! - vld1.8 {q10}, [r8], r12 - pld [r11, r3] - vld1.8 {q9}, [r11]! - vld1.8 {q11}, [r11], r12 - pld [r8, r3] - vld1.8 {q12}, [r8]! - vld1.8 {q14}, [r8], r12 - pld [r11, r3] - vld1.8 {q13}, [r11]! - vld1.8 {q15}, [r11], r12 - - vst2.8 {q0, q1}, [r7]! - vst2.8 {q2, q3}, [r7]! - vst2.8 {q4, q5}, [r7]! - vst2.8 {q6, q7}, [r7]! - vst2.8 {q8, q9}, [r7]! - vst2.8 {q10, q11}, [r7]! - vst2.8 {q12, q13}, [r7]! - vst2.8 {q14, q15}, [r7]! - - add r5, r5, #64 @ j = j+64 - cmp r5, r9 @ j>5 - mov r11, r5, asr #6 @ temp1 = j>>6 - - and r14, r12, #0x1 @ if (temp2 & 0x1) - cmp r14, #0x1 - bne GET_TILED_OFFSET_EVEN_FORMULA_1 - -GET_TILED_OFFSET_ODD_FORMULA: - sub r7, r12, #1 @ tiled_addr = temp2-1 - add r14, r3, #127 @ temp3 = linear_x_size+127 - bic r14, r14, #0x7F @ temp3 = (temp3 >>7)<<7 - mov r14, r14, asr #6 @ temp3 = temp3>>6 - mul r7, r7, r14 @ tiled_addr = tiled_addr*temp3 - add r7, r7, r11 @ tiled_addr = tiled_addr+temp1 - add r7, r7, #2 @ tiled_addr = tiled_addr+2 - bic r14, r11, #0x3 @ temp3 = (temp1>>2)<<2 - add r7, r7, r14 @ tiled_addr = tiled_addr+temp3 - mov r7, r7, lsl #11 @ tiled_addr = tiled_addr<<11 - b GET_TILED_OFFSET_RETURN - -GET_TILED_OFFSET_EVEN_FORMULA_1: - add r14, r4, #31 @ temp3 = linear_y_size+31 - bic r14, r14, #0x1F @ temp3 = (temp3>>5)<<5 - sub r14, r14, #32 @ temp3 = temp3 - 32 - cmp r6, r14 @ if (i<(temp3-32)) { - bge GET_TILED_OFFSET_EVEN_FORMULA_2 - add r14, r11, #2 @ temp3 = temp1+2 - bic r14, r14, #3 @ temp3 = (temp3>>2)<<2 - add r7, r11, r14 @ tiled_addr = temp1+temp3 - add r14, r3, #127 @ temp3 = linear_x_size+127 - bic r14, r14, #0x7F @ temp3 = (temp3>>7)<<7 - mov r14, r14, asr #6 @ temp3 = temp3>>6 - mul r12, r12, r14 @ tiled_y_index = tiled_y_index*temp3 - add r7, r7, r12 @ tiled_addr = tiled_addr+tiled_y_index - mov r7, r7, lsl #11 @ - b GET_TILED_OFFSET_RETURN - -GET_TILED_OFFSET_EVEN_FORMULA_2: - add r14, r3, #127 @ temp3 = linear_x_size+127 - bic r14, r14, #0x7F @ temp3 = (temp3>>7)<<7 - mov r14, r14, asr #6 @ temp3 = temp3>>6 - mul r7, r12, r14 @ tiled_addr = temp2*temp3 - add r7, r7, r11 @ tiled_addr = tiled_addr+temp3 - mov r7, r7, lsl #11 @ tiled_addr = tiled_addr<<11@ - -GET_TILED_OFFSET_RETURN: - ldmfd sp!, {r15} @ restore registers - .fnend - diff --git a/sec_mm/sec_omx/sec_codecs/video/mfc_c110/csc/csc_yuv420_nv12t_y_neon.s b/sec_mm/sec_omx/sec_codecs/video/mfc_c110/csc/csc_yuv420_nv12t_y_neon.s deleted file mode 100644 index 3f8932a..0000000 --- a/sec_mm/sec_omx/sec_codecs/video/mfc_c110/csc/csc_yuv420_nv12t_y_neon.s +++ /dev/null @@ -1,451 +0,0 @@ -/* - * - * Copyright 2011 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file csc_yuv420_nv12t_y_neon.s - * @brief SEC_OMX specific define - * @author ShinWon Lee (shinwon.lee@samsung.com) - * @version 1.0 - * @history - * 2011.7.01 : Create - */ - -/* - * Converts linear data to tiled. - * 1. Y of YUV420P to Y of NV12T - * 2. Y of YUV420S to Y of NV12T - * 3. UV of YUV420S to UV of NV12T - * - * @param nv12t_dest - * Y or UV plane address of NV12T[out] - * - * @param yuv420_src - * Y or UV plane address of YUV420P(S)[in] - * - * @param yuv420_width - * Width of YUV420[in] - * - * @param yuv420_height - * Y: Height of YUV420, UV: Height/2 of YUV420[in] - */ - - .arch armv7-a - .text - .global csc_linear_to_tiled - .type csc_linear_to_tiled, %function -csc_linear_to_tiled: - .fnstart - - @r0 tiled_dest - @r1 linear_src - @r2 linear_x_size - @r3 linear_y_size - @r4 j - @r5 i - @r6 nn(tiled_addr) - @r7 mm(linear_addr) - @r8 aligned_x_size - @r9 aligned_y_size - @r10 temp1 - @r11 temp2 - @r12 temp3 - @r14 temp4 - - stmfd sp!, {r4-r12,r14} @ backup registers - - bic r9, r3, #0x1F @ aligned_y_size = (linear_y_size>>5)<<5 - bic r8, r2, #0x3F @ aligned_x_size = (linear_x_size>>6)<<6 - - mov r5, #0 @ i = 0 -LOOP_ALIGNED_Y_SIZE: - - mov r4, #0 @ j = 0 -LOOP_ALIGNED_X_SIZE: - - bl GET_TILED_OFFSET - - mul r10, r2, r5 @ temp1 = linear_x_size*(i) - add r7, r1, r4 @ linear_addr = linear_src+j - add r7, r7, r10 @ linear_addr = linear_addr+temp1 - sub r10, r2, #32 - - pld [r7, r2, lsl #1] - vld1.8 {q0, q1}, [r7]! - pld [r7, r2, lsl #1] - vld1.8 {q2, q3}, [r7], r10 - pld [r7, r2, lsl #1] - vld1.8 {q4, q5}, [r7]! - pld [r7, r2, lsl #1] - vld1.8 {q6, q7}, [r7], r10 - pld [r7, r2, lsl #1] - vld1.8 {q8, q9}, [r7]! - pld [r7, r2, lsl #1] - vld1.8 {q10, q11}, [r7], r10 - pld [r7, r2, lsl #1] - vld1.8 {q12, q13}, [r7]! - pld [r7, r2, lsl #1] - vld1.8 {q14, q15}, [r7], r10 - - add r6, r0, r6 @ tiled_addr = tiled_dest+tiled_addr - - vst1.8 {q0, q1}, [r6]! - vst1.8 {q2, q3}, [r6]! - vst1.8 {q4, q5}, [r6]! - vst1.8 {q6, q7}, [r6]! - vst1.8 {q8, q9}, [r6]! - vst1.8 {q10, q11}, [r6]! - vst1.8 {q12, q13}, [r6]! - vst1.8 {q14, q15}, [r6]! - - pld [r7, r2, lsl #1] - vld1.8 {q0, q1}, [r7]! - pld [r7, r2, lsl #1] - vld1.8 {q2, q3}, [r7], r10 - pld [r7, r2, lsl #1] - vld1.8 {q4, q5}, [r7]! - pld [r7, r2, lsl #1] - vld1.8 {q6, q7}, [r7], r10 - pld [r7, r2, lsl #1] - vld1.8 {q8, q9}, [r7]! - pld [r7, r2, lsl #1] - vld1.8 {q10, q11}, [r7], r10 - pld [r7, r2, lsl #1] - vld1.8 {q12, q13}, [r7]! - pld [r7, r2, lsl #1] - vld1.8 {q14, q15}, [r7], r10 - - vst1.8 {q0, q1}, [r6]! - vst1.8 {q2, q3}, [r6]! - vst1.8 {q4, q5}, [r6]! - vst1.8 {q6, q7}, [r6]! - vst1.8 {q8, q9}, [r6]! - vst1.8 {q10, q11}, [r6]! - vst1.8 {q12, q13}, [r6]! - vst1.8 {q14, q15}, [r6]! - - pld [r7, r2, lsl #1] - vld1.8 {q0, q1}, [r7]! - pld [r7, r2, lsl #1] - vld1.8 {q2, q3}, [r7], r10 - pld [r7, r2, lsl #1] - vld1.8 {q4, q5}, [r7]! - pld [r7, r2, lsl #1] - vld1.8 {q6, q7}, [r7], r10 - pld [r7, r2, lsl #1] - vld1.8 {q8, q9}, [r7]! - pld [r7, r2, lsl #1] - vld1.8 {q10, q11}, [r7], r10 - pld [r7, r2, lsl #1] - vld1.8 {q12, q13}, [r7]! - pld [r7, r2, lsl #1] - vld1.8 {q14, q15}, [r7], r10 - - vst1.8 {q0, q1}, [r6]! - vst1.8 {q2, q3}, [r6]! - vst1.8 {q4, q5}, [r6]! - vst1.8 {q6, q7}, [r6]! - vst1.8 {q8, q9}, [r6]! - vst1.8 {q10, q11}, [r6]! - vst1.8 {q12, q13}, [r6]! - vst1.8 {q14, q15}, [r6]! - - pld [r7, r2, lsl #1] - vld1.8 {q0, q1}, [r7]! - pld [r7, r2, lsl #1] - vld1.8 {q2, q3}, [r7], r10 - pld [r7, r2, lsl #1] - vld1.8 {q4, q5}, [r7]! - pld [r7, r2, lsl #1] - vld1.8 {q6, q7}, [r7], r10 - pld [r7, r2, lsl #1] - vld1.8 {q8, q9}, [r7]! - pld [r7, r2, lsl #1] - vld1.8 {q10, q11}, [r7], r10 - pld [r7, r2, lsl #1] - vld1.8 {q12, q13}, [r7]! - pld [r7, r2, lsl #1] - vld1.8 {q14, q15}, [r7], r10 - - vst1.8 {q0, q1}, [r6]! - vst1.8 {q2, q3}, [r6]! - vst1.8 {q4, q5}, [r6]! - vst1.8 {q6, q7}, [r6]! - vst1.8 {q8, q9}, [r6]! - vst1.8 {q10, q11}, [r6]! - vst1.8 {q12, q13}, [r6]! - vst1.8 {q14, q15}, [r6]! - - pld [r7, r2, lsl #1] - vld1.8 {q0, q1}, [r7]! - pld [r7, r2, lsl #1] - vld1.8 {q2, q3}, [r7], r10 - pld [r7, r2, lsl #1] - vld1.8 {q4, q5}, [r7]! - pld [r7, r2, lsl #1] - vld1.8 {q6, q7}, [r7], r10 - pld [r7, r2, lsl #1] - vld1.8 {q8, q9}, [r7]! - pld [r7, r2, lsl #1] - vld1.8 {q10, q11}, [r7], r10 - pld [r7, r2, lsl #1] - vld1.8 {q12, q13}, [r7]! - pld [r7, r2, lsl #1] - vld1.8 {q14, q15}, [r7], r10 - - vst1.8 {q0, q1}, [r6]! - vst1.8 {q2, q3}, [r6]! - vst1.8 {q4, q5}, [r6]! - vst1.8 {q6, q7}, [r6]! - vst1.8 {q8, q9}, [r6]! - vst1.8 {q10, q11}, [r6]! - vst1.8 {q12, q13}, [r6]! - vst1.8 {q14, q15}, [r6]! - - pld [r7, r2, lsl #1] - vld1.8 {q0, q1}, [r7]! - pld [r7, r2, lsl #1] - vld1.8 {q2, q3}, [r7], r10 - pld [r7, r2, lsl #1] - vld1.8 {q4, q5}, [r7]! - pld [r7, r2, lsl #1] - vld1.8 {q6, q7}, [r7], r10 - pld [r7, r2, lsl #1] - vld1.8 {q8, q9}, [r7]! - pld [r7, r2, lsl #1] - vld1.8 {q10, q11}, [r7], r10 - pld [r7, r2, lsl #1] - vld1.8 {q12, q13}, [r7]! - pld [r7, r2, lsl #1] - vld1.8 {q14, q15}, [r7], r10 - - vst1.8 {q0, q1}, [r6]! - vst1.8 {q2, q3}, [r6]! - vst1.8 {q4, q5}, [r6]! - vst1.8 {q6, q7}, [r6]! - vst1.8 {q8, q9}, [r6]! - vst1.8 {q10, q11}, [r6]! - vst1.8 {q12, q13}, [r6]! - vst1.8 {q14, q15}, [r6]! - - pld [r7, r2, lsl #1] - vld1.8 {q0, q1}, [r7]! - pld [r7, r2, lsl #1] - vld1.8 {q2, q3}, [r7], r10 - pld [r7, r2, lsl #1] - vld1.8 {q4, q5}, [r7]! - pld [r7, r2, lsl #1] - vld1.8 {q6, q7}, [r7], r10 - pld [r7, r2, lsl #1] - vld1.8 {q8, q9}, [r7]! - pld [r7, r2, lsl #1] - vld1.8 {q10, q11}, [r7], r10 - pld [r7, r2, lsl #1] - vld1.8 {q12, q13}, [r7]! - pld [r7, r2, lsl #1] - vld1.8 {q14, q15}, [r7], r10 - - vst1.8 {q0, q1}, [r6]! - vst1.8 {q2, q3}, [r6]! - vst1.8 {q4, q5}, [r6]! - vst1.8 {q6, q7}, [r6]! - vst1.8 {q8, q9}, [r6]! - vst1.8 {q10, q11}, [r6]! - vst1.8 {q12, q13}, [r6]! - vst1.8 {q14, q15}, [r6]! - - pld [r7, r2, lsl #1] - vld1.8 {q0, q1}, [r7]! - pld [r7, r2, lsl #1] - vld1.8 {q2, q3}, [r7], r10 - pld [r7, r2, lsl #1] - vld1.8 {q4, q5}, [r7]! - pld [r7, r2, lsl #1] - vld1.8 {q6, q7}, [r7], r10 - pld [r7, r2, lsl #1] - vld1.8 {q8, q9}, [r7]! - pld [r7, r2, lsl #1] - vld1.8 {q10, q11}, [r7], r10 - pld [r7, r2, lsl #1] - vld1.8 {q12, q13}, [r7]! - pld [r7, r2, lsl #1] - vld1.8 {q14, q15}, [r7], r10 - - vst1.8 {q0, q1}, [r6]! - vst1.8 {q2, q3}, [r6]! - vst1.8 {q4, q5}, [r6]! - vst1.8 {q6, q7}, [r6]! - vst1.8 {q8, q9}, [r6]! - vst1.8 {q10, q11}, [r6]! - vst1.8 {q12, q13}, [r6]! - vst1.8 {q14, q15}, [r6]! - - add r4, r4, #64 @ j = j+64 - cmp r4, r8 @ j>5 - mov r10, r4, asr #6 @ temp1 = j>>6 - - and r12, r11, #0x1 @ if (temp2 & 0x1) - cmp r12, #0x1 - bne GET_TILED_OFFSET_EVEN_FORMULA_1 - -GET_TILED_OFFSET_ODD_FORMULA: - sub r6, r11, #1 @ tiled_addr = temp2-1 - add r12, r2, #127 @ temp3 = linear_x_size+127 - bic r12, r12, #0x7F @ temp3 = (temp3 >>7)<<7 - mov r12, r12, asr #6 @ temp3 = temp3>>6 - mul r6, r6, r12 @ tiled_addr = tiled_addr*temp3 - add r6, r6, r10 @ tiled_addr = tiled_addr+temp1 - add r6, r6, #2 @ tiled_addr = tiled_addr+2 - bic r12, r10, #0x3 @ temp3 = (temp1>>2)<<2 - add r6, r6, r12 @ tiled_addr = tiled_addr+temp3 - mov r6, r6, lsl #11 @ tiled_addr = tiled_addr<<11 - b GET_TILED_OFFSET_RETURN - -GET_TILED_OFFSET_EVEN_FORMULA_1: - add r12, r3, #31 @ temp3 = linear_y_size+31 - bic r12, r12, #0x1F @ temp3 = (temp3>>5)<<5 - sub r12, r12, #32 @ temp3 = temp3 - 32 - cmp r5, r12 @ if (i<(temp3-32)) { - bge GET_TILED_OFFSET_EVEN_FORMULA_2 - add r12, r10, #2 @ temp3 = temp1+2 - bic r12, r12, #3 @ temp3 = (temp3>>2)<<2 - add r6, r10, r12 @ tiled_addr = temp1+temp3 - add r12, r2, #127 @ temp3 = linear_x_size+127 - bic r12, r12, #0x7F @ temp3 = (temp3>>7)<<7 - mov r12, r12, asr #6 @ temp3 = temp3>>6 - mul r11, r11, r12 @ tiled_y_index = tiled_y_index*temp3 - add r6, r6, r11 @ tiled_addr = tiled_addr+tiled_y_index - mov r6, r6, lsl #11 @ - b GET_TILED_OFFSET_RETURN - -GET_TILED_OFFSET_EVEN_FORMULA_2: - add r12, r2, #127 @ temp3 = linear_x_size+127 - bic r12, r12, #0x7F @ temp3 = (temp3>>7)<<7 - mov r12, r12, asr #6 @ temp3 = temp3>>6 - mul r6, r11, r12 @ tiled_addr = temp2*temp3 - add r6, r6, r10 @ tiled_addr = tiled_addr+temp3 - mov r6, r6, lsl #11 @ tiled_addr = tiled_addr<<11@ - -GET_TILED_OFFSET_RETURN: - mov pc, lr - .fnend - diff --git a/sec_mm/sec_omx/sec_codecs/video/mfc_c110/dec/Android.mk b/sec_mm/sec_omx/sec_codecs/video/mfc_c110/dec/Android.mk deleted file mode 100644 index bafc854..0000000 --- a/sec_mm/sec_omx/sec_codecs/video/mfc_c110/dec/Android.mk +++ /dev/null @@ -1,26 +0,0 @@ - -LOCAL_PATH := $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := optional - -LOCAL_SRC_FILES := \ - src/SsbSipMfcDecAPI.c - -LOCAL_MODULE := libsecmfcdecapi.aries - - - -LOCAL_CFLAGS := - -LOCAL_ARM_MODE := arm - -LOCAL_STATIC_LIBRARIES := - -LOCAL_SHARED_LIBRARIES := liblog - -LOCAL_C_INCLUDES := \ - $(SEC_CODECS)/video/mfc_c110/include - -include $(BUILD_STATIC_LIBRARY) - diff --git a/sec_mm/sec_omx/sec_codecs/video/mfc_c110/dec/src/SsbSipMfcDecAPI.c b/sec_mm/sec_omx/sec_codecs/video/mfc_c110/dec/src/SsbSipMfcDecAPI.c deleted file mode 100644 index 6c64ef8..0000000 --- a/sec_mm/sec_omx/sec_codecs/video/mfc_c110/dec/src/SsbSipMfcDecAPI.c +++ /dev/null @@ -1,518 +0,0 @@ -/* - * Copyright 2010 Samsung Electronics Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include "mfc_interface.h" -#include "SsbSipMfcApi.h" - -#define _MFCLIB_MAGIC_NUMBER 0x92241000 - -#define USR_DATA_START_CODE (0x000001B2) -#define VOP_START_CODE (0x000001B6) -#define MP4_START_CODE (0x000001) - -static void getAByte(char *buff, int *code) -{ - int byte; - - *code = (*code << 8); - byte = (int)*buff; - byte &= 0xFF; - *code |= byte; -} - -static mfc_packed_mode isPBPacked(_MFCLIB *pCtx, int length) -{ - char *strmBuffer = NULL; - char *strmBufferEnd = NULL; - int startCode = 0xFFFFFFFF; - - strmBuffer = (char *)pCtx->virStrmBuf; - strmBufferEnd = (char *)pCtx->virStrmBuf + length; - - while (1) { - while (startCode != USR_DATA_START_CODE) { - if (startCode == VOP_START_CODE) { - ALOGV("isPBPacked: VOP START Found !!.....return\n"); - ALOGV("isPBPacked: Non Packed PB\n"); - return MFC_UNPACKED_PB; - } - getAByte(strmBuffer, &startCode); - strmBuffer++; - if (strmBuffer >= strmBufferEnd) - goto out; - } - ALOGV("isPBPacked: User Data Found !!\n"); - - do { - if (*strmBuffer == 'p') { - ALOGI("isPBPacked: Packed PB\n"); - return MFC_PACKED_PB; - } - getAByte(strmBuffer, &startCode); - strmBuffer++; - if (strmBuffer >= strmBufferEnd) - goto out; - } while ((startCode >> 8) != MP4_START_CODE); - } - -out: - ALOGV("isPBPacked: Non Packed PB\n"); - return MFC_UNPACKED_PB; -} - -void *SsbSipMfcDecOpen(void *value) -{ - int hMFCOpen; - unsigned int mapped_addr; - _MFCLIB *pCTX; - mfc_common_args DecArg; - int ret_code; - - pCTX = (_MFCLIB *)malloc(sizeof(_MFCLIB)); - if (pCTX == NULL) { - ALOGE("SsbSipMfcDecOpen: malloc failed.\n"); - return NULL; - } - memset(pCTX, 0, sizeof(_MFCLIB)); - - hMFCOpen = open(S5PC110_MFC_DEV_NAME, O_RDWR | O_NDELAY); - if (hMFCOpen < 0) { - ALOGE("SsbSipMfcDecOpen: MFC Open failure\n"); - return NULL; - } - - if (*(unsigned int *)value == NO_CACHE || - *(unsigned int *)value == CACHE) { - DecArg.args.buf_type = *(unsigned int *)value; - ret_code = ioctl(hMFCOpen, IOCTL_MFC_BUF_CACHE, &DecArg); - if (DecArg.ret_code != MFC_RET_OK) { - ALOGE("SsbSipMfcDecOpenExt: IOCTL_MFC_BUF_CACHE (%d) failed\n", DecArg.ret_code); - } - } else { - ALOGE("SsbSipMfcDecOpenExt: value is invalid, value: %d\n", *(int *)value); - } - - mapped_addr = (unsigned int)mmap(0, MMAP_BUFFER_SIZE_MMAP, PROT_READ | PROT_WRITE, MAP_SHARED, hMFCOpen, 0); - if (!mapped_addr) { - ALOGE("SsbSipMfcDecOpen: FIMV5.0 driver address mapping failed\n"); - return NULL; - } - - pCTX->magic = _MFCLIB_MAGIC_NUMBER; - pCTX->hMFC = hMFCOpen; - pCTX->mapped_addr = mapped_addr; - pCTX->inter_buff_status = MFC_USE_NONE; - - return (void *)pCTX; -} - -SSBSIP_MFC_ERROR_CODE SsbSipMfcDecInit(void *openHandle, SSBSIP_MFC_CODEC_TYPE codec_type, int Frameleng) -{ - int ret_code; - int packedPB = MFC_UNPACKED_PB; - mfc_common_args DecArg; - _MFCLIB *pCTX; - - if (openHandle == NULL) { - ALOGE("SsbSipMfcDecSetConfig: openHandle is NULL\n"); - return MFC_RET_INVALID_PARAM; - } - - pCTX = (_MFCLIB *)openHandle; - memset(&DecArg, 0x00, sizeof(DecArg)); - - if ((codec_type != MPEG4_DEC) && - (codec_type != H264_DEC) && - (codec_type != H263_DEC) && - (codec_type != MPEG1_DEC) && - (codec_type != MPEG2_DEC) && - (codec_type != FIMV1_DEC) && - (codec_type != FIMV2_DEC) && - (codec_type != FIMV3_DEC) && - (codec_type != FIMV4_DEC) && - (codec_type != XVID_DEC) && - (codec_type != VC1RCV_DEC) && - (codec_type != VC1_DEC)) { - ALOGE("SsbSipMfcDecOpen: Undefined codec type.\n"); - return MFC_RET_INVALID_PARAM; - } - - pCTX->codec_type = codec_type; - - if ((pCTX->codec_type == MPEG4_DEC) || - (pCTX->codec_type == FIMV1_DEC) || - (pCTX->codec_type == FIMV2_DEC) || - (pCTX->codec_type == FIMV3_DEC) || - (pCTX->codec_type == FIMV4_DEC) || - (pCTX->codec_type == XVID_DEC)) - packedPB = isPBPacked(pCTX, Frameleng); - - /* init args */ - DecArg.args.dec_init.in_codec_type = pCTX->codec_type; - DecArg.args.dec_init.in_strm_size = Frameleng; - DecArg.args.dec_init.in_strm_buf = pCTX->phyStrmBuf; - DecArg.args.dec_init.in_packed_PB = packedPB; - - /* mem alloc args */ - DecArg.args.dec_init.in_mapped_addr = pCTX->mapped_addr; - - ret_code = ioctl(pCTX->hMFC, IOCTL_MFC_DEC_INIT, &DecArg); - if (DecArg.ret_code != MFC_RET_OK) { - ALOGE("SsbSipMfcDecInit: IOCTL_MFC_DEC_INIT (%d) failed\n", DecArg.ret_code); - return MFC_RET_DEC_INIT_FAIL; - } - - pCTX->decOutInfo.img_width = DecArg.args.dec_init.out_img_width; - pCTX->decOutInfo.img_height = DecArg.args.dec_init.out_img_height; - pCTX->decOutInfo.buf_width = DecArg.args.dec_init.out_buf_width; - pCTX->decOutInfo.buf_height = DecArg.args.dec_init.out_buf_height; - - /* by RainAde : crop information */ - pCTX->decOutInfo.crop_top_offset = DecArg.args.dec_init.out_crop_top_offset; - pCTX->decOutInfo.crop_bottom_offset = DecArg.args.dec_init.out_crop_bottom_offset; - pCTX->decOutInfo.crop_left_offset = DecArg.args.dec_init.out_crop_left_offset; - pCTX->decOutInfo.crop_right_offset = DecArg.args.dec_init.out_crop_right_offset; - - pCTX->virFrmBuf.luma = DecArg.args.dec_init.out_u_addr.luma; - pCTX->virFrmBuf.chroma = DecArg.args.dec_init.out_u_addr.chroma; - - pCTX->phyFrmBuf.luma = DecArg.args.dec_init.out_p_addr.luma; - pCTX->phyFrmBuf.chroma = DecArg.args.dec_init.out_p_addr.chroma; - pCTX->sizeFrmBuf.luma = DecArg.args.dec_init.out_frame_buf_size.luma; - pCTX->sizeFrmBuf.chroma = DecArg.args.dec_init.out_frame_buf_size.chroma; - pCTX->inter_buff_status |= MFC_USE_YUV_BUFF; - - return MFC_RET_OK; -} - -SSBSIP_MFC_ERROR_CODE SsbSipMfcDecExe(void *openHandle, int lengthBufFill) -{ - int ret_code; - int Yoffset; - int Coffset; - _MFCLIB *pCTX; - mfc_common_args DecArg; - - if (openHandle == NULL) { - ALOGE("SsbSipMfcDecExe: openHandle is NULL\n"); - return MFC_RET_INVALID_PARAM; - } - - if ((lengthBufFill < 0) || (lengthBufFill > MAX_DECODER_INPUT_BUFFER_SIZE)) { - ALOGE("SsbSipMfcDecExe: lengthBufFill is invalid. (lengthBufFill=%d)\n", lengthBufFill); - return MFC_RET_INVALID_PARAM; - } - - pCTX = (_MFCLIB *)openHandle; - memset(&DecArg, 0x00, sizeof(DecArg)); - - DecArg.args.dec_exe.in_codec_type = pCTX->codec_type; - DecArg.args.dec_exe.in_strm_buf = pCTX->phyStrmBuf; - DecArg.args.dec_exe.in_strm_size = lengthBufFill; - DecArg.args.dec_exe.in_frm_buf.luma = pCTX->phyFrmBuf.luma; - DecArg.args.dec_exe.in_frm_buf.chroma = pCTX->phyFrmBuf.chroma; - DecArg.args.dec_exe.in_frm_size.luma = pCTX->sizeFrmBuf.luma; - DecArg.args.dec_exe.in_frm_size.chroma = pCTX->sizeFrmBuf.chroma; - DecArg.args.dec_exe.in_frametag = pCTX->in_frametag; - - ret_code = ioctl(pCTX->hMFC, IOCTL_MFC_DEC_EXE, &DecArg); - if (DecArg.ret_code != MFC_RET_OK) { - ALOGE("SsbSipMfcDecExe: IOCTL_MFC_DEC_EXE failed(ret : %d)\n", DecArg.ret_code); - return MFC_RET_DEC_EXE_ERR; - } - - Yoffset = DecArg.args.dec_exe.out_display_Y_addr - DecArg.args.dec_exe.in_frm_buf.luma; - Coffset = DecArg.args.dec_exe.out_display_C_addr - DecArg.args.dec_exe.in_frm_buf.chroma; - - pCTX->decOutInfo.YPhyAddr = (void *)(DecArg.args.dec_exe.out_display_Y_addr); - pCTX->decOutInfo.CPhyAddr = (void *)(DecArg.args.dec_exe.out_display_C_addr); - pCTX->decOutInfo.YVirAddr = (void *)(pCTX->virFrmBuf.luma + Yoffset); - pCTX->decOutInfo.CVirAddr = (void *)(pCTX->virFrmBuf.chroma + Coffset); - pCTX->decOutInfo.timestamp_top = DecArg.args.dec_exe.out_timestamp_top; - pCTX->decOutInfo.timestamp_bottom = DecArg.args.dec_exe.out_timestamp_bottom; - pCTX->decOutInfo.consumedByte = DecArg.args.dec_exe.out_consume_bytes; - pCTX->decOutInfo.res_change = DecArg.args.dec_exe.out_res_change; - pCTX->decOutInfo.crop_top_offset = DecArg.args.dec_exe.out_crop_top_offset; - pCTX->decOutInfo.crop_bottom_offset = DecArg.args.dec_exe.out_crop_bottom_offset; - pCTX->decOutInfo.crop_left_offset = DecArg.args.dec_exe.out_crop_left_offset; - pCTX->decOutInfo.crop_right_offset = DecArg.args.dec_exe.out_crop_right_offset; - pCTX->out_frametag_top = DecArg.args.dec_exe.out_frametag_top; - pCTX->out_frametag_bottom = DecArg.args.dec_exe.out_frametag_bottom; - pCTX->displayStatus = DecArg.args.dec_exe.out_display_status; - - return MFC_RET_OK; -} - -SSBSIP_MFC_ERROR_CODE SsbSipMfcDecClose(void *openHandle) -{ - int ret_code; - _MFCLIB *pCTX; - mfc_common_args free_arg; - - if (openHandle == NULL) { - ALOGE("SsbSipMfcDecClose: openHandle is NULL\n"); - return MFC_RET_INVALID_PARAM; - } - - pCTX = (_MFCLIB *)openHandle; - - if (pCTX->inter_buff_status & MFC_USE_YUV_BUFF) { - free_arg.args.mem_free.u_addr = pCTX->virFrmBuf.luma; - ret_code = ioctl(pCTX->hMFC, IOCTL_MFC_FREE_BUF, &free_arg); - free_arg.args.mem_free.u_addr = pCTX->virFrmBuf.chroma; - ret_code = ioctl(pCTX->hMFC, IOCTL_MFC_FREE_BUF, &free_arg); - } - - if (pCTX->inter_buff_status & MFC_USE_STRM_BUFF) { - free_arg.args.mem_free.u_addr = pCTX->virStrmBuf; - ret_code = ioctl(pCTX->hMFC, IOCTL_MFC_FREE_BUF, &free_arg); - } - - pCTX->inter_buff_status = MFC_USE_NONE; - - munmap((void *)pCTX->mapped_addr, MMAP_BUFFER_SIZE_MMAP); - close(pCTX->hMFC); - free(pCTX); - - return MFC_RET_OK; -} - -void *SsbSipMfcDecGetInBuf(void *openHandle, void **phyInBuf, int inputBufferSize) -{ - int ret_code; - _MFCLIB *pCTX; - mfc_common_args user_addr_arg, phys_addr_arg; - - if (inputBufferSize < 0) { - ALOGE("SsbSipMfcDecGetInBuf: inputBufferSize = %d is invalid\n", inputBufferSize); - return NULL; - } - - if (openHandle == NULL) { - ALOGE("SsbSipMfcDecGetInBuf: openHandle is NULL\n"); - return NULL; - } - - pCTX = (_MFCLIB *)openHandle; - - user_addr_arg.args.mem_alloc.codec_type = pCTX->codec_type; - user_addr_arg.args.mem_alloc.buff_size = inputBufferSize; - user_addr_arg.args.mem_alloc.mapped_addr = pCTX->mapped_addr; - ret_code = ioctl(pCTX->hMFC, IOCTL_MFC_GET_IN_BUF, &user_addr_arg); - if (ret_code < 0) { - ALOGE("SsbSipMfcDecGetInBuf: IOCTL_MFC_GET_IN_BUF failed\n"); - return NULL; - } - pCTX->virStrmBuf = user_addr_arg.args.mem_alloc.out_uaddr; - pCTX->phyStrmBuf = user_addr_arg.args.mem_alloc.out_paddr; - pCTX->sizeStrmBuf = inputBufferSize; - pCTX->inter_buff_status |= MFC_USE_STRM_BUFF; - - *phyInBuf = (void *)pCTX->phyStrmBuf; - - return (void *)pCTX->virStrmBuf; -} - -SSBSIP_MFC_ERROR_CODE SsbSipMfcDecSetInBuf(void *openHandle, void *phyInBuf, void *virInBuf, int inputBufferSize) -{ - _MFCLIB *pCTX; - - if (openHandle == NULL) { - ALOGE("SsbSipMfcDecSetInBuf: openHandle is NULL\n"); - return MFC_RET_INVALID_PARAM; - } - - pCTX = (_MFCLIB *)openHandle; - - pCTX->phyStrmBuf = (int)phyInBuf; - pCTX->virStrmBuf = (int)virInBuf; - pCTX->sizeStrmBuf = inputBufferSize; - return MFC_RET_OK; -} - -SSBSIP_MFC_DEC_OUTBUF_STATUS SsbSipMfcDecGetOutBuf(void *openHandle, SSBSIP_MFC_DEC_OUTPUT_INFO *output_info) -{ - _MFCLIB *pCTX; - - if (openHandle == NULL) { - ALOGE("SsbSipMfcDecGetOutBuf: openHandle is NULL\n"); - return MFC_GETOUTBUF_DISPLAY_END; - } - - pCTX = (_MFCLIB *)openHandle; - - output_info->YPhyAddr = pCTX->decOutInfo.YPhyAddr; - output_info->CPhyAddr = pCTX->decOutInfo.CPhyAddr; - - output_info->YVirAddr = pCTX->decOutInfo.YVirAddr; - output_info->CVirAddr = pCTX->decOutInfo.CVirAddr; - - output_info->img_width = pCTX->decOutInfo.img_width; - output_info->img_height= pCTX->decOutInfo.img_height; - - output_info->buf_width = pCTX->decOutInfo.buf_width; - output_info->buf_height= pCTX->decOutInfo.buf_height; - - /* by RainAde : for crop information */ - output_info->crop_top_offset = pCTX->decOutInfo.crop_top_offset; - output_info->crop_bottom_offset= pCTX->decOutInfo.crop_bottom_offset; - output_info->crop_left_offset = pCTX->decOutInfo.crop_left_offset; - output_info->crop_right_offset= pCTX->decOutInfo.crop_right_offset; - - if (pCTX->displayStatus == 0) - return MFC_GETOUTBUF_DISPLAY_END; - else if (pCTX->displayStatus == 1) - return MFC_GETOUTBUF_DISPLAY_DECODING; - else if (pCTX->displayStatus == 2) - return MFC_GETOUTBUF_DISPLAY_ONLY; - else - return MFC_GETOUTBUF_DECODING_ONLY; -} - -SSBSIP_MFC_ERROR_CODE SsbSipMfcDecSetConfig(void *openHandle, SSBSIP_MFC_DEC_CONF conf_type, void *value) -{ - int ret_code; - _MFCLIB *pCTX; - mfc_common_args DecArg; - SSBSIP_MFC_IMG_RESOLUTION *img_resolution; - - if (openHandle == NULL) { - ALOGE("SsbSipMfcDecSetConfig: openHandle is NULL\n"); - return MFC_RET_INVALID_PARAM; - } - - if (value == NULL) { - ALOGE("SsbSipMfcDecSetConfig: value is NULL\n"); - return MFC_RET_INVALID_PARAM; - } - - pCTX = (_MFCLIB *)openHandle; - memset(&DecArg, 0x00, sizeof(DecArg)); - - switch (conf_type) { - case MFC_DEC_SETCONF_POST_ENABLE: - case MFC_DEC_SETCONF_EXTRA_BUFFER_NUM: - case MFC_DEC_SETCONF_DISPLAY_DELAY: - case MFC_DEC_SETCONF_IS_LAST_FRAME: - case MFC_DEC_SETCONF_SLICE_ENABLE: - case MFC_DEC_SETCONF_CRC_ENABLE: - DecArg.args.set_config.in_config_param = conf_type; - DecArg.args.set_config.in_config_value[0] = *((unsigned int *)value); - DecArg.args.set_config.in_config_value[1] = 0; - break; - - case MFC_DEC_SETCONF_FIMV1_WIDTH_HEIGHT: - img_resolution = (SSBSIP_MFC_IMG_RESOLUTION *)value; - DecArg.args.set_config.in_config_param = conf_type; - DecArg.args.set_config.in_config_value[0] = img_resolution->width; - DecArg.args.set_config.in_config_value[1] = img_resolution->height; - break; - - case MFC_DEC_SETCONF_FRAME_TAG: - pCTX->in_frametag = *((int *)value); - return MFC_RET_OK; - - default: - ALOGE("SsbSipMfcDecSetConfig: No such conf_type is supported.\n"); - return MFC_RET_INVALID_PARAM; - } - - ret_code = ioctl(pCTX->hMFC, IOCTL_MFC_SET_CONFIG, &DecArg); - if (DecArg.ret_code != MFC_RET_OK) { - ALOGE("SsbSipMfcDecSetConfig: IOCTL_MFC_SET_CONFIG failed(ret : %d, conf_type: %d)\n", DecArg.ret_code, conf_type); - return MFC_RET_DEC_SET_CONF_FAIL; - } - - return MFC_RET_OK; -} - -SSBSIP_MFC_ERROR_CODE SsbSipMfcDecGetConfig(void *openHandle, SSBSIP_MFC_DEC_CONF conf_type, void *value) -{ - int ret_code; - _MFCLIB *pCTX; - mfc_common_args DecArg; - - SSBSIP_MFC_IMG_RESOLUTION *img_resolution; - SSBSIP_MFC_CROP_INFORMATION *crop_information; - MFC_CRC_DATA *crc_data; - - if (openHandle == NULL) { - ALOGE("SsbSipMfcDecGetConfig: openHandle is NULL\n"); - return MFC_RET_FAIL; - } - - if (value == NULL) { - ALOGE("SsbSipMfcDecGetConfig: value is NULL\n"); - return MFC_RET_FAIL; - } - - pCTX = (_MFCLIB *)openHandle; - memset(&DecArg, 0x00, sizeof(DecArg)); - - switch (conf_type) { - case MFC_DEC_GETCONF_BUF_WIDTH_HEIGHT: - img_resolution = (SSBSIP_MFC_IMG_RESOLUTION *)value; - img_resolution->width = pCTX->decOutInfo.img_width; - img_resolution->height = pCTX->decOutInfo.img_height; - img_resolution->buf_width = pCTX->decOutInfo.buf_width; - img_resolution->buf_height = pCTX->decOutInfo.buf_height; - break; - - /* Added by RainAde */ - case MFC_DEC_GETCONF_CROP_INFO: - crop_information = (SSBSIP_MFC_CROP_INFORMATION*)value; - crop_information->crop_top_offset = pCTX->decOutInfo.crop_top_offset; - crop_information->crop_bottom_offset= pCTX->decOutInfo.crop_bottom_offset; - crop_information->crop_left_offset = pCTX->decOutInfo.crop_left_offset; - crop_information->crop_right_offset= pCTX->decOutInfo.crop_right_offset; - break; - - case MFC_DEC_GETCONF_CRC_DATA: - crc_data = (MFC_CRC_DATA *)value; - - DecArg.args.get_config.in_config_param = conf_type; - - ret_code = ioctl(pCTX->hMFC, IOCTL_MFC_GET_CONFIG, &DecArg); - if (DecArg.ret_code != MFC_RET_OK) { - ALOGE("SsbSipMfcDecGetConfig: IOCTL_MFC_GET_CONFIG failed(ret : %d, conf_type: %d)\n", DecArg.ret_code, conf_type); - return MFC_RET_DEC_GET_CONF_FAIL; - } - crc_data->luma0 = DecArg.args.get_config.out_config_value[0]; - crc_data->chroma0 = DecArg.args.get_config.out_config_value[1]; - break; - - case MFC_DEC_GETCONF_FRAME_TAG: - *((unsigned int *)value) = pCTX->out_frametag_top; - break; - - default: - ALOGE("SsbSipMfcDecGetConfig: No such conf_type is supported.\n"); - return MFC_RET_INVALID_PARAM; - } - - return MFC_RET_OK; -} diff --git a/sec_mm/sec_omx/sec_codecs/video/mfc_c110/enc/Android.mk b/sec_mm/sec_omx/sec_codecs/video/mfc_c110/enc/Android.mk deleted file mode 100644 index d364b1c..0000000 --- a/sec_mm/sec_omx/sec_codecs/video/mfc_c110/enc/Android.mk +++ /dev/null @@ -1,26 +0,0 @@ - -LOCAL_PATH := $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := optional - -LOCAL_SRC_FILES := \ - src/SsbSipMfcEncAPI.c - -LOCAL_MODULE := libsecmfcencapi.aries - - - -LOCAL_CFLAGS := -DUSE_FIMC_FRAME_BUFFER - -LOCAL_ARM_MODE := arm - -LOCAL_STATIC_LIBRARIES := - -LOCAL_SHARED_LIBRARIES := liblog - -LOCAL_C_INCLUDES := \ - $(SEC_CODECS)/video/mfc_c110/include - -include $(BUILD_STATIC_LIBRARY) - diff --git a/sec_mm/sec_omx/sec_codecs/video/mfc_c110/enc/src/SsbSipMfcEncAPI.c b/sec_mm/sec_omx/sec_codecs/video/mfc_c110/enc/src/SsbSipMfcEncAPI.c deleted file mode 100644 index a27fcc0..0000000 --- a/sec_mm/sec_omx/sec_codecs/video/mfc_c110/enc/src/SsbSipMfcEncAPI.c +++ /dev/null @@ -1,686 +0,0 @@ -/* - * Copyright 2010 Samsung Electronics Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include "SsbSipMfcApi.h" -#include "mfc_interface.h" - -#define _MFCLIB_MAGIC_NUMBER 0x92241001 - -void *SsbSipMfcEncOpen(void *value) -{ - int hMFCOpen; - _MFCLIB *pCTX; - unsigned int mapped_addr; - mfc_common_args EncArg; - int ret_code; - - hMFCOpen = open(S5PC110_MFC_DEV_NAME, O_RDWR | O_NDELAY); - if (hMFCOpen < 0) { - ALOGE("SsbSipMfcEncOpen: MFC Open failure\n"); - return NULL; - } - - pCTX = (_MFCLIB *)malloc(sizeof(_MFCLIB)); - if (pCTX == NULL) { - ALOGE("SsbSipMfcEncOpen: malloc failed.\n"); - close(hMFCOpen); - return NULL; - } - - if (*(unsigned int *)value == NO_CACHE || - *(unsigned int *)value == CACHE) { - EncArg.args.buf_type = *(unsigned int *)value; - ret_code = ioctl(hMFCOpen, IOCTL_MFC_BUF_CACHE, &EncArg); - if (EncArg.ret_code != MFC_RET_OK) { - ALOGE("SsbSipMfcDecOpenExt: IOCTL_MFC_BUF_CACHE (%d) failed\n", EncArg.ret_code); - } - } else { - ALOGE("SsbSipMfcDecOpenExt: value is invalid, value: %d\n", *(int *)value); - } - - mapped_addr = (unsigned int)mmap(0, MMAP_BUFFER_SIZE_MMAP, PROT_READ | PROT_WRITE, MAP_SHARED, hMFCOpen, 0); - if (!mapped_addr) { - ALOGE("SsbSipMfcEncOpen: FIMV5.0 driver address mapping failed\n"); - return NULL; - } - - memset(pCTX, 0, sizeof(_MFCLIB)); - - pCTX->magic = _MFCLIB_MAGIC_NUMBER; - pCTX->hMFC = hMFCOpen; - pCTX->mapped_addr = mapped_addr; - pCTX->inter_buff_status = MFC_USE_NONE; - - return (void *)pCTX; -} - -SSBSIP_MFC_ERROR_CODE SsbSipMfcEncInit(void *openHandle, void *param) -{ - int ret_code; - int dpbBufSize; - - _MFCLIB *pCTX; - mfc_common_args EncArg; - mfc_common_args user_addr_arg, phys_addr_arg; - SSBSIP_MFC_ENC_H264_PARAM *h264_arg; - SSBSIP_MFC_ENC_MPEG4_PARAM *mpeg4_arg; - SSBSIP_MFC_ENC_H263_PARAM *h263_arg; - SSBSIP_MFC_CODEC_TYPE codec_type; - - pCTX = (_MFCLIB *)openHandle; - memset(&EncArg, 0, sizeof(mfc_common_args)); - - ALOGV("SsbSipMfcEncInit: Encode Init start\n"); - - mpeg4_arg = (SSBSIP_MFC_ENC_MPEG4_PARAM *)param; - codec_type = mpeg4_arg->codecType; - - if ((codec_type != MPEG4_ENC) && - (codec_type != H264_ENC) && - (codec_type != H263_ENC)) { - ALOGE("SsbSipMfcEncOpen: Undefined codec type.\n"); - return MFC_RET_INVALID_PARAM; - } - - pCTX->codec_type = codec_type; - - switch (pCTX->codec_type) { - case MPEG4_ENC: - ALOGV("SsbSipMfcEncInit: MPEG4 Encode\n"); - mpeg4_arg = (SSBSIP_MFC_ENC_MPEG4_PARAM *)param; - - pCTX->width = mpeg4_arg->SourceWidth; - pCTX->height = mpeg4_arg->SourceHeight; - break; - - case H263_ENC: - ALOGV("SsbSipMfcEncInit: H263 Encode\n"); - h263_arg = (SSBSIP_MFC_ENC_H263_PARAM *)param; - - pCTX->width = h263_arg->SourceWidth; - pCTX->height = h263_arg->SourceHeight; - break; - - case H264_ENC: - ALOGV("SsbSipMfcEncInit: H264 Encode\n"); - h264_arg = (SSBSIP_MFC_ENC_H264_PARAM *)param; - - pCTX->width = h264_arg->SourceWidth; - pCTX->height = h264_arg->SourceHeight; - break; - - default: - break; - } - - switch (pCTX->codec_type) { - case MPEG4_ENC: - mpeg4_arg = (SSBSIP_MFC_ENC_MPEG4_PARAM*)param; - - EncArg.args.enc_init_mpeg4.in_codec_type = pCTX->codec_type; - EncArg.args.enc_init_mpeg4.in_profile_level = ENC_PROFILE_LEVEL(mpeg4_arg->ProfileIDC, mpeg4_arg->LevelIDC); - - EncArg.args.enc_init_mpeg4.in_width = mpeg4_arg->SourceWidth; - EncArg.args.enc_init_mpeg4.in_height = mpeg4_arg->SourceHeight; - EncArg.args.enc_init_mpeg4.in_gop_num = mpeg4_arg->IDRPeriod; - if (mpeg4_arg->DisableQpelME) - EncArg.args.enc_init_mpeg4.in_qpelME_enable = 0; - else - EncArg.args.enc_init_mpeg4.in_qpelME_enable = 1; - - EncArg.args.enc_init_mpeg4.in_MS_mode = mpeg4_arg->SliceMode; - EncArg.args.enc_init_mpeg4.in_MS_size = mpeg4_arg->SliceArgument; - - if (mpeg4_arg->NumberBFrames > 2) { - ALOGE("SsbSipMfcEncInit: No such BframeNum is supported.\n"); - return MFC_RET_INVALID_PARAM; - } - EncArg.args.enc_init_mpeg4.in_BframeNum = mpeg4_arg->NumberBFrames; - EncArg.args.enc_init_mpeg4.in_mb_refresh = mpeg4_arg->RandomIntraMBRefresh; - - /* rate control*/ - EncArg.args.enc_init_mpeg4.in_RC_frm_enable = mpeg4_arg->EnableFRMRateControl; - if ((mpeg4_arg->QSCodeMin > 51) || (mpeg4_arg->QSCodeMax > 51)) { - ALOGE("SsbSipMfcEncInit: No such Min/Max QP is supported.\n"); - return MFC_RET_INVALID_PARAM; - } - EncArg.args.enc_init_mpeg4.in_RC_qbound = ENC_RC_QBOUND(mpeg4_arg->QSCodeMin, mpeg4_arg->QSCodeMax); - EncArg.args.enc_init_mpeg4.in_RC_rpara = mpeg4_arg->CBRPeriodRf; - - /* pad control */ - EncArg.args.enc_init_mpeg4.in_pad_ctrl_on = mpeg4_arg->PadControlOn; - if ((mpeg4_arg->LumaPadVal > 255) || (mpeg4_arg->CbPadVal > 255) || (mpeg4_arg->CrPadVal > 255)) { - ALOGE("SsbSipMfcEncInit: No such Pad value is supported.\n"); - return MFC_RET_INVALID_PARAM; - } - EncArg.args.enc_init_mpeg4.in_luma_pad_val = mpeg4_arg->LumaPadVal; - EncArg.args.enc_init_mpeg4.in_cb_pad_val = mpeg4_arg->CbPadVal; - EncArg.args.enc_init_mpeg4.in_cr_pad_val = mpeg4_arg->CrPadVal; - EncArg.args.enc_init_mpeg4.in_frame_map = mpeg4_arg->FrameMap; - - EncArg.args.enc_init_mpeg4.in_time_increament_res = mpeg4_arg->TimeIncreamentRes; - EncArg.args.enc_init_mpeg4.in_time_vop_time_increament = mpeg4_arg->VopTimeIncreament; - EncArg.args.enc_init_mpeg4.in_RC_framerate = (mpeg4_arg->TimeIncreamentRes / mpeg4_arg->VopTimeIncreament); - EncArg.args.enc_init_mpeg4.in_RC_bitrate = mpeg4_arg->Bitrate; - if ((mpeg4_arg->FrameQp > 51) || (mpeg4_arg->FrameQp_P) > 51 || (mpeg4_arg->FrameQp_B > 51)) { - ALOGE("SsbSipMfcEncInit: No such FrameQp is supported.\n"); - return MFC_RET_INVALID_PARAM; - } - EncArg.args.enc_init_mpeg4.in_frame_qp = mpeg4_arg->FrameQp; - if (mpeg4_arg->FrameQp_P) - EncArg.args.enc_init_mpeg4.in_frame_P_qp = mpeg4_arg->FrameQp_P; - else - EncArg.args.enc_init_mpeg4.in_frame_P_qp = mpeg4_arg->FrameQp; - if (mpeg4_arg->FrameQp_B) - EncArg.args.enc_init_mpeg4.in_frame_B_qp = mpeg4_arg->FrameQp_B; - else - EncArg.args.enc_init_mpeg4.in_frame_B_qp = mpeg4_arg->FrameQp; - - break; - - case H263_ENC: - h263_arg = (SSBSIP_MFC_ENC_H263_PARAM *)param; - - EncArg.args.enc_init_mpeg4.in_codec_type = pCTX->codec_type; - EncArg.args.enc_init_mpeg4.in_profile_level = ENC_PROFILE_LEVEL(66, 40); - EncArg.args.enc_init_mpeg4.in_width = h263_arg->SourceWidth; - EncArg.args.enc_init_mpeg4.in_height = h263_arg->SourceHeight; - EncArg.args.enc_init_mpeg4.in_gop_num = h263_arg->IDRPeriod; - EncArg.args.enc_init_mpeg4.in_mb_refresh = h263_arg->RandomIntraMBRefresh; - EncArg.args.enc_init_mpeg4.in_MS_mode = h263_arg->SliceMode; - EncArg.args.enc_init_mpeg4.in_MS_size = 0; - - /* rate control*/ - EncArg.args.enc_init_mpeg4.in_RC_frm_enable = h263_arg->EnableFRMRateControl; - if ((h263_arg->QSCodeMin > 51) || (h263_arg->QSCodeMax > 51)) { - ALOGE("SsbSipMfcEncInit: No such Min/Max QP is supported.\n"); - return MFC_RET_INVALID_PARAM; - } - EncArg.args.enc_init_mpeg4.in_RC_qbound = ENC_RC_QBOUND(h263_arg->QSCodeMin, h263_arg->QSCodeMax); - EncArg.args.enc_init_mpeg4.in_RC_rpara = h263_arg->CBRPeriodRf; - - /* pad control */ - EncArg.args.enc_init_mpeg4.in_pad_ctrl_on = h263_arg->PadControlOn; - if ((h263_arg->LumaPadVal > 255) || (h263_arg->CbPadVal > 255) || (h263_arg->CrPadVal > 255)) { - ALOGE("SsbSipMfcEncInit: No such Pad value is supported.\n"); - return MFC_RET_INVALID_PARAM; - } - EncArg.args.enc_init_mpeg4.in_luma_pad_val = h263_arg->LumaPadVal; - EncArg.args.enc_init_mpeg4.in_cb_pad_val = h263_arg->CbPadVal; - EncArg.args.enc_init_mpeg4.in_cr_pad_val = h263_arg->CrPadVal; - EncArg.args.enc_init_mpeg4.in_frame_map = mpeg4_arg->FrameMap; - - EncArg.args.enc_init_mpeg4.in_RC_framerate = h263_arg->FrameRate; - EncArg.args.enc_init_mpeg4.in_RC_bitrate = h263_arg->Bitrate; - if (h263_arg->FrameQp > 51) { - ALOGE("SsbSipMfcEncInit: No such FrameQp is supported.\n"); - return MFC_RET_INVALID_PARAM; - } - EncArg.args.enc_init_mpeg4.in_frame_qp = h263_arg->FrameQp; - if (h263_arg->FrameQp_P) - EncArg.args.enc_init_mpeg4.in_frame_P_qp = h263_arg->FrameQp_P; - else - EncArg.args.enc_init_mpeg4.in_frame_P_qp = h263_arg->FrameQp; - - break; - - case H264_ENC: - h264_arg = (SSBSIP_MFC_ENC_H264_PARAM *)param; - - EncArg.args.enc_init_h264.in_codec_type = H264_ENC; - EncArg.args.enc_init_h264.in_profile_level = ENC_PROFILE_LEVEL(h264_arg->ProfileIDC, h264_arg->LevelIDC); - - EncArg.args.enc_init_h264.in_width = h264_arg->SourceWidth; - EncArg.args.enc_init_h264.in_height = h264_arg->SourceHeight; - EncArg.args.enc_init_h264.in_gop_num = h264_arg->IDRPeriod; - - if ((h264_arg->NumberRefForPframes > 2) || (h264_arg->NumberReferenceFrames > 2)) { - ALOGE("SsbSipMfcEncInit: No such ref Num is supported.\n"); - return MFC_RET_INVALID_PARAM; - } - EncArg.args.enc_init_h264.in_reference_num = h264_arg->NumberReferenceFrames; - EncArg.args.enc_init_h264.in_ref_num_p = h264_arg->NumberRefForPframes; - - if ((h264_arg->SliceMode == 0) || (h264_arg->SliceMode == 1) || - (h264_arg->SliceMode == 2) || (h264_arg->SliceMode == 4)) { - EncArg.args.enc_init_h264.in_MS_mode = h264_arg->SliceMode; - } else { - ALOGE("SsbSipMfcEncInit: No such slice mode is supported.\n"); - return MFC_RET_INVALID_PARAM; - } - EncArg.args.enc_init_h264.in_MS_size = h264_arg->SliceArgument; - - if (h264_arg->NumberBFrames > 2) { - ALOGE("SsbSipMfcEncInit: No such BframeNum is supported.\n"); - return MFC_RET_INVALID_PARAM; - } - EncArg.args.enc_init_h264.in_BframeNum = h264_arg->NumberBFrames; - - EncArg.args.enc_init_h264.in_deblock_filt = h264_arg->LoopFilterDisable; - if ((abs(h264_arg->LoopFilterAlphaC0Offset) > 6) || (abs(h264_arg->LoopFilterBetaOffset) > 6)) { - ALOGE("SsbSipMfcEncInit: No such AlphaC0Offset or BetaOffset is supported.\n"); - return MFC_RET_INVALID_PARAM; - } - EncArg.args.enc_init_h264.in_deblock_alpha_C0 = h264_arg->LoopFilterAlphaC0Offset; - EncArg.args.enc_init_h264.in_deblock_beta = h264_arg->LoopFilterBetaOffset; - - EncArg.args.enc_init_h264.in_symbolmode = h264_arg->SymbolMode; - EncArg.args.enc_init_h264.in_interlace_mode = h264_arg->PictureInterlace; - EncArg.args.enc_init_h264.in_transform8x8_mode = h264_arg->Transform8x8Mode; - - EncArg.args.enc_init_h264.in_mb_refresh = h264_arg->RandomIntraMBRefresh; - - /* pad control */ - EncArg.args.enc_init_h264.in_pad_ctrl_on = h264_arg->PadControlOn; - if ((h264_arg->LumaPadVal > 255) || (h264_arg->CbPadVal > 255) || (h264_arg->CrPadVal > 255)) { - ALOGE("SsbSipMfcEncInit: No such Pad value is supported.\n"); - return MFC_RET_INVALID_PARAM; - } - EncArg.args.enc_init_h264.in_luma_pad_val = h264_arg->LumaPadVal; - EncArg.args.enc_init_h264.in_cb_pad_val = h264_arg->CbPadVal; - EncArg.args.enc_init_h264.in_cr_pad_val = h264_arg->CrPadVal; - EncArg.args.enc_init_mpeg4.in_frame_map = mpeg4_arg->FrameMap; - - /* rate control*/ - EncArg.args.enc_init_h264.in_RC_frm_enable = h264_arg->EnableFRMRateControl; - EncArg.args.enc_init_h264.in_RC_mb_enable = h264_arg->EnableMBRateControl; - EncArg.args.enc_init_h264.in_RC_framerate = h264_arg->FrameRate; - EncArg.args.enc_init_h264.in_RC_bitrate = h264_arg->Bitrate; - if (h264_arg->FrameQp > 51) { - ALOGE("SsbSipMfcEncInit: No such FrameQp is supported.\n"); - return MFC_RET_INVALID_PARAM; - } - EncArg.args.enc_init_h264.in_frame_qp = h264_arg->FrameQp; - if (h264_arg->FrameQp_P) - EncArg.args.enc_init_h264.in_frame_P_qp = h264_arg->FrameQp_P; - else - EncArg.args.enc_init_h264.in_frame_P_qp = h264_arg->FrameQp; - if (h264_arg->FrameQp_B) - EncArg.args.enc_init_h264.in_frame_B_qp = h264_arg->FrameQp_B; - else - EncArg.args.enc_init_h264.in_frame_B_qp = h264_arg->FrameQp; - - if ((h264_arg->QSCodeMin > 51) || (h264_arg->QSCodeMax > 51)) { - ALOGE("SsbSipMfcEncInit: No such Min/Max QP is supported.\n"); - return MFC_RET_INVALID_PARAM; - } - EncArg.args.enc_init_h264.in_RC_qbound = ENC_RC_QBOUND(h264_arg->QSCodeMin, h264_arg->QSCodeMax); - EncArg.args.enc_init_h264.in_RC_rpara = h264_arg->CBRPeriodRf; - EncArg.args.enc_init_h264.in_RC_mb_dark_disable = h264_arg->DarkDisable; - EncArg.args.enc_init_h264.in_RC_mb_smooth_disable = h264_arg->SmoothDisable; - EncArg.args.enc_init_h264.in_RC_mb_static_disable = h264_arg->StaticDisable; - EncArg.args.enc_init_h264.in_RC_mb_activity_disable = h264_arg->ActivityDisable; - - /* default setting */ - EncArg.args.enc_init_h264.in_md_interweight_pps = 0; - EncArg.args.enc_init_h264.in_md_intraweight_pps = 0; - break; - - default: - break; - } - - EncArg.args.enc_init_mpeg4.in_mapped_addr = pCTX->mapped_addr; - - ret_code = ioctl(pCTX->hMFC, IOCTL_MFC_ENC_INIT, &EncArg); - if (EncArg.ret_code != MFC_RET_OK) { - ALOGE("SsbSipMfcEncInit: IOCTL_MFC_ENC_INIT (%d) failed\n", EncArg.ret_code); - return MFC_RET_ENC_INIT_FAIL; - } - - pCTX->virStrmBuf = EncArg.args.enc_init_mpeg4.out_u_addr.strm_ref_y; - pCTX->phyStrmBuf = EncArg.args.enc_init_mpeg4.out_p_addr.strm_ref_y; - pCTX->sizeStrmBuf = MAX_ENCODER_OUTPUT_BUFFER_SIZE; - pCTX->encodedHeaderSize = EncArg.args.enc_init_mpeg4.out_header_size; - - pCTX->virMvRefYC = EncArg.args.enc_init_mpeg4.out_u_addr.mv_ref_yc; - - pCTX->inter_buff_status |= MFC_USE_STRM_BUFF; - - return MFC_RET_OK; -} - -SSBSIP_MFC_ERROR_CODE SsbSipMfcEncExe(void *openHandle) -{ - int ret_code; - _MFCLIB *pCTX; - mfc_common_args EncArg; - - if (openHandle == NULL) { - ALOGE("SsbSipMfcEncExe: openHandle is NULL\n"); - return MFC_RET_INVALID_PARAM; - } - - pCTX = (_MFCLIB *)openHandle; - - memset(&EncArg, 0x00, sizeof(mfc_common_args)); - - EncArg.args.enc_exe.in_codec_type = pCTX->codec_type; - EncArg.args.enc_exe.in_Y_addr = (unsigned int)pCTX->phyFrmBuf.luma; - EncArg.args.enc_exe.in_CbCr_addr = (unsigned int)pCTX->phyFrmBuf.chroma; - EncArg.args.enc_exe.in_Y_addr_vir = (unsigned int)pCTX->virFrmBuf.luma; - EncArg.args.enc_exe.in_CbCr_addr_vir = (unsigned int)pCTX->virFrmBuf.chroma; - EncArg.args.enc_exe.in_strm_st = (unsigned int)pCTX->phyStrmBuf; - EncArg.args.enc_exe.in_strm_end = (unsigned int)pCTX->phyStrmBuf + pCTX->sizeStrmBuf; - EncArg.args.enc_exe.in_frametag = pCTX->in_frametag; - if (pCTX->encode_cnt == 0) { - EncArg.args.enc_exe.in_strm_st = (unsigned int)pCTX->phyStrmBuf; - EncArg.args.enc_exe.in_strm_end = (unsigned int)pCTX->phyStrmBuf + pCTX->sizeStrmBuf; - } else { - EncArg.args.enc_exe.in_strm_st = (unsigned int)pCTX->phyStrmBuf + (MAX_ENCODER_OUTPUT_BUFFER_SIZE/2); - EncArg.args.enc_exe.in_strm_end = (unsigned int)pCTX->phyStrmBuf + (MAX_ENCODER_OUTPUT_BUFFER_SIZE/2) + pCTX->sizeStrmBuf; - } - - ret_code = ioctl(pCTX->hMFC, IOCTL_MFC_ENC_EXE, &EncArg); - if (EncArg.ret_code != MFC_RET_OK) { - ALOGE("SsbSipMfcDecExe: IOCTL_MFC_ENC_EXE failed(ret : %d)\n", EncArg.ret_code); - return MFC_RET_ENC_EXE_ERR; - } - - pCTX->encodedDataSize = EncArg.args.enc_exe.out_encoded_size; - pCTX->encodedframeType = EncArg.args.enc_exe.out_frame_type; - pCTX->encoded_Y_paddr = EncArg.args.enc_exe.out_encoded_Y_paddr; - pCTX->encoded_C_paddr = EncArg.args.enc_exe.out_encoded_C_paddr; - pCTX->out_frametag_top = EncArg.args.enc_exe.out_frametag_top; - pCTX->out_frametag_bottom = EncArg.args.enc_exe.out_frametag_bottom; - - return MFC_RET_OK; -} - -SSBSIP_MFC_ERROR_CODE SsbSipMfcEncClose(void *openHandle) -{ - int ret_code; - _MFCLIB *pCTX; - mfc_common_args free_arg; - - if (openHandle == NULL) { - ALOGE("SsbSipMfcEncClose: openHandle is NULL\n"); - return MFC_RET_INVALID_PARAM; - } - - pCTX = (_MFCLIB *)openHandle; - - if (pCTX->inter_buff_status & MFC_USE_YUV_BUFF) { - free_arg.args.mem_free.u_addr = pCTX->virFrmBuf.luma; - ret_code = ioctl(pCTX->hMFC, IOCTL_MFC_FREE_BUF, &free_arg); - } - - if (pCTX->inter_buff_status & MFC_USE_STRM_BUFF) { - free_arg.args.mem_free.u_addr = pCTX->virStrmBuf; - ret_code = ioctl(pCTX->hMFC, IOCTL_MFC_FREE_BUF, &free_arg); - free_arg.args.mem_free.u_addr = pCTX->virMvRefYC; - ret_code = ioctl(pCTX->hMFC, IOCTL_MFC_FREE_BUF, &free_arg); - } - - pCTX->inter_buff_status = MFC_USE_NONE; - - munmap((void *)pCTX->mapped_addr, MMAP_BUFFER_SIZE_MMAP); - close(pCTX->hMFC); - free(pCTX); - - return MFC_RET_OK; -} - -SSBSIP_MFC_ERROR_CODE SsbSipMfcEncSetSize(void *openHandle, SSBSIP_MFC_CODEC_TYPE codecType, int nWidth, int nHeight) -{ - _MFCLIB *pCTX = (_MFCLIB *)openHandle; - - if (pCTX == NULL) - return MFC_RET_INVALID_PARAM; - - if (nWidth <= 0 || nHeight <= 0) - return MFC_RET_INVALID_PARAM; - pCTX->width = nWidth; - pCTX->height = nHeight; - - if ((H264_ENC != codecType) && - (MPEG4_ENC != codecType) && - (H263_ENC != codecType)) - return MFC_RET_INVALID_PARAM; - pCTX->codec_type = codecType; - - return MFC_RET_OK; -} - -SSBSIP_MFC_ERROR_CODE SsbSipMfcEncGetInBuf(void *openHandle, SSBSIP_MFC_ENC_INPUT_INFO *input_info) -{ - int ret_code; - _MFCLIB *pCTX; - mfc_common_args user_addr_arg, phys_addr_arg; - int y_size, c_size; - int aligned_y_size, aligned_c_size; - - if (openHandle == NULL) { - ALOGE("SsbSipMfcEncGetInBuf: openHandle is NULL\n"); - return MFC_RET_INVALID_PARAM; - } - - pCTX = (_MFCLIB *)openHandle; - - user_addr_arg.args.mem_alloc.codec_type = pCTX->codec_type; - - y_size = pCTX->width * pCTX->height; - c_size = (pCTX->width * pCTX->height) >> 1; - - aligned_y_size = ALIGN_TO_8KB(ALIGN_TO_128B(pCTX->width) * ALIGN_TO_32B(pCTX->height)); - aligned_c_size = ALIGN_TO_8KB(ALIGN_TO_128B(pCTX->width) * ALIGN_TO_32B(pCTX->height/2)); - - /* Allocate luma & chroma buf */ - user_addr_arg.args.mem_alloc.buff_size = aligned_y_size + aligned_c_size; - user_addr_arg.args.mem_alloc.mapped_addr = pCTX->mapped_addr; - ret_code = ioctl(pCTX->hMFC, IOCTL_MFC_GET_IN_BUF, &user_addr_arg); - if (ret_code < 0) { - ALOGE("SsbSipMfcEncGetInBuf: IOCTL_MFC_GET_IN_BUF failed\n"); - return MFC_RET_ENC_GET_INBUF_FAIL; - } - pCTX->virFrmBuf.luma = user_addr_arg.args.mem_alloc.out_uaddr; - pCTX->virFrmBuf.chroma = user_addr_arg.args.mem_alloc.out_uaddr + (unsigned int)aligned_y_size; - pCTX->phyFrmBuf.luma = user_addr_arg.args.mem_alloc.out_paddr; - pCTX->phyFrmBuf.chroma = user_addr_arg.args.mem_alloc.out_paddr + (unsigned int)aligned_y_size; - - pCTX->sizeFrmBuf.luma = (unsigned int)y_size; - pCTX->sizeFrmBuf.chroma = (unsigned int)c_size; - pCTX->inter_buff_status |= MFC_USE_YUV_BUFF; - - input_info->YPhyAddr = (void*)pCTX->phyFrmBuf.luma; - input_info->CPhyAddr = (void*)pCTX->phyFrmBuf.chroma; - input_info->YVirAddr = (void*)pCTX->virFrmBuf.luma; - input_info->CVirAddr = (void*)pCTX->virFrmBuf.chroma; - - input_info->YSize = aligned_y_size; - input_info->CSize = aligned_c_size; - - return MFC_RET_OK; -} - -SSBSIP_MFC_ERROR_CODE SsbSipMfcEncSetInBuf(void *openHandle, SSBSIP_MFC_ENC_INPUT_INFO *input_info) -{ - _MFCLIB *pCTX; - - if (openHandle == NULL) { - ALOGE("SsbSipMfcEncSetInBuf: openHandle is NULL\n"); - return MFC_RET_INVALID_PARAM; - } - - ALOGV("SsbSipMfcEncSetInBuf: input_info->YPhyAddr & input_info->CPhyAddr should be 64KB aligned\n"); - - pCTX = (_MFCLIB *)openHandle; - - pCTX->phyFrmBuf.luma = (unsigned int)input_info->YPhyAddr; - pCTX->phyFrmBuf.chroma = (unsigned int)input_info->CPhyAddr; - pCTX->virFrmBuf.luma = (unsigned int)input_info->YVirAddr; - pCTX->virFrmBuf.chroma = (unsigned int)input_info->CVirAddr; - - pCTX->sizeFrmBuf.luma = (unsigned int)input_info->YSize; - pCTX->sizeFrmBuf.chroma = (unsigned int)input_info->CSize; - - return MFC_RET_OK; -} - -SSBSIP_MFC_ERROR_CODE SsbSipMfcEncGetOutBuf(void *openHandle, SSBSIP_MFC_ENC_OUTPUT_INFO *output_info) -{ - _MFCLIB *pCTX; - - if (openHandle == NULL) { - ALOGE("SsbSipMfcEncGetOutBuf: openHandle is NULL\n"); - return MFC_RET_INVALID_PARAM; - } - - pCTX = (_MFCLIB *)openHandle; - - output_info->headerSize = pCTX->encodedHeaderSize; - output_info->dataSize = pCTX->encodedDataSize; - - if (pCTX->encode_cnt == 0) { - output_info->StrmPhyAddr = (void *)pCTX->phyStrmBuf; - output_info->StrmVirAddr = (void *)pCTX->virStrmBuf; - } else { - output_info->StrmPhyAddr = (unsigned char *)pCTX->phyStrmBuf + (MAX_ENCODER_OUTPUT_BUFFER_SIZE/2); - output_info->StrmVirAddr = (unsigned char *)pCTX->virStrmBuf + (MAX_ENCODER_OUTPUT_BUFFER_SIZE/2); - } - - pCTX->encode_cnt ++; - pCTX->encode_cnt %= 2; - - if (pCTX->encodedframeType == 0) - output_info->frameType = MFC_FRAME_TYPE_NOT_CODED; - else if (pCTX->encodedframeType == 1) - output_info->frameType = MFC_FRAME_TYPE_I_FRAME; - else if (pCTX->encodedframeType == 2) - output_info->frameType = MFC_FRAME_TYPE_P_FRAME; - else if (pCTX->encodedframeType == 3) - output_info->frameType = MFC_FRAME_TYPE_B_FRAME; - else if (pCTX->encodedframeType == 4) - output_info->frameType = MFC_FRAME_TYPE_OTHERS; - else { - ALOGE("Strange encoded frame type = %d\n", pCTX->encodedframeType); - return MFC_RET_INVALID_PARAM; - } - - output_info->encodedYPhyAddr = (void *)pCTX->encoded_Y_paddr; - output_info->encodedCPhyAddr = (void *)pCTX->encoded_C_paddr; - - return MFC_RET_OK; -} - -SSBSIP_MFC_ERROR_CODE SsbSipMfcEncSetOutBuf(void *openHandle, void *phyOutbuf, void *virOutbuf, int outputBufferSize) -{ - _MFCLIB *pCTX; - - if (openHandle == NULL) { - ALOGE("SsbSipMfcEncSetOutBuf: openHandle is NULL\n"); - return MFC_RET_INVALID_PARAM; - } - - pCTX = (_MFCLIB *)openHandle; - - pCTX->phyStrmBuf = (int)phyOutbuf; - pCTX->virStrmBuf = (int)virOutbuf; - pCTX->sizeStrmBuf = outputBufferSize; - - return MFC_RET_OK; -} - -SSBSIP_MFC_ERROR_CODE SsbSipMfcEncSetConfig(void *openHandle, SSBSIP_MFC_ENC_CONF conf_type, void *value) -{ - int ret_code; - _MFCLIB *pCTX; - mfc_common_args EncArg; - - if (openHandle == NULL) { - ALOGE("SsbSipMfcEncSetConfig: openHandle is NULL\n"); - return MFC_RET_INVALID_PARAM; - } - - if (value == NULL) { - ALOGE("SsbSipMfcEncSetConfig: value is NULL\n"); - return MFC_RET_INVALID_PARAM; - } - - pCTX = (_MFCLIB *)openHandle; - memset(&EncArg, 0x00, sizeof(mfc_common_args)); - - switch (conf_type) { - case MFC_ENC_SETCONF_FRAME_TYPE: - case MFC_ENC_SETCONF_CHANGE_FRAME_RATE: - case MFC_ENC_SETCONF_CHANGE_BIT_RATE: - case MFC_ENC_SETCONF_ALLOW_FRAME_SKIP: - EncArg.args.set_config.in_config_param = conf_type; - EncArg.args.set_config.in_config_value[0] = *((unsigned int *) value); - EncArg.args.set_config.in_config_value[1] = 0; - break; - - case MFC_ENC_SETCONF_FRAME_TAG: - pCTX->in_frametag = *((int *)value); - return MFC_RET_OK; - - default: - ALOGE("SsbSipMfcEncSetConfig: No such conf_type is supported.\n"); - return MFC_RET_INVALID_PARAM; - } - - ret_code = ioctl(pCTX->hMFC, IOCTL_MFC_SET_CONFIG, &EncArg); - if (EncArg.ret_code != MFC_RET_OK) { - ALOGE("SsbSipMfcEncSetConfig: IOCTL_MFC_SET_CONFIG failed(ret : %d)\n", EncArg.ret_code); - return MFC_RET_ENC_SET_CONF_FAIL; - } - - return MFC_RET_OK; -} - -SSBSIP_MFC_ERROR_CODE SsbSipMfcEncGetConfig(void *openHandle, SSBSIP_MFC_ENC_CONF conf_type, void *value) -{ - int ret_code; - _MFCLIB *pCTX; - mfc_common_args EncArg; - - pCTX = (_MFCLIB *)openHandle; - - if (openHandle == NULL) { - ALOGE("SsbSipMfcEncGetConfig: openHandle is NULL\n"); - return MFC_RET_INVALID_PARAM; - } - if (value == NULL) { - ALOGE("SsbSipMfcEncGetConfig: value is NULL\n"); - return MFC_RET_INVALID_PARAM; - } - - pCTX = (_MFCLIB *)openHandle; - memset(&EncArg, 0x00, sizeof(mfc_common_args)); - - switch (conf_type) { - case MFC_ENC_GETCONF_FRAME_TAG: - *((unsigned int *)value) = pCTX->out_frametag_top; - break; - - default: - ALOGE("SsbSipMfcEncGetConfig: No such conf_type is supported.\n"); - return MFC_RET_INVALID_PARAM; - } - - return MFC_RET_OK; -} diff --git a/sec_mm/sec_omx/sec_codecs/video/mfc_c110/include/SsbSipMfcApi.h b/sec_mm/sec_omx/sec_codecs/video/mfc_c110/include/SsbSipMfcApi.h deleted file mode 100644 index 118e1ba..0000000 --- a/sec_mm/sec_omx/sec_codecs/video/mfc_c110/include/SsbSipMfcApi.h +++ /dev/null @@ -1,332 +0,0 @@ -/* - * Copyright 2010 Samsung Electronics Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _SSBSIP_MFC_API_H_ -#define _SSBSIP_MFC_API_H_ - -/*--------------------------------------------------------------------------------*/ -/* Definition */ -/*--------------------------------------------------------------------------------*/ -#define MAX_DECODER_INPUT_BUFFER_SIZE (1024 * 3072) -#define MAX_ENCODER_OUTPUT_BUFFER_SIZE (1024 * 3072) - -#define MMAP_BUFFER_SIZE_MMAP (35328*1024) // 34.5*1024*1024 - -#define S5PC110_MFC_DEV_NAME "/dev/s3c-mfc" - -/*--------------------------------------------------------------------------------*/ -/* Structure and Type */ -/*--------------------------------------------------------------------------------*/ -typedef enum { - H264_DEC, - VC1_DEC, /* VC1 advaced Profile decoding */ - MPEG4_DEC, - XVID_DEC, - MPEG1_DEC, - MPEG2_DEC, - H263_DEC, - VC1RCV_DEC, /* VC1 simple/main profile decoding */ - FIMV1_DEC, - FIMV2_DEC, - FIMV3_DEC, - FIMV4_DEC, - H264_ENC, - MPEG4_ENC, - H263_ENC, - UNKNOWN_TYPE -} SSBSIP_MFC_CODEC_TYPE; - -typedef enum { - DONT_CARE = 0, - I_FRAME = 1, - NOT_CODED = 2 -} SSBSIP_MFC_FORCE_SET_FRAME_TYPE; - -typedef enum { - NV12_LINEAR = 0, - NV12_TILE -} SSBSIP_MFC_INSTRM_MODE_TYPE; - -typedef enum { - NO_CACHE = 0, - CACHE = 1 -} SSBIP_MFC_BUFFER_TYPE; - -typedef enum { - MFC_DEC_SETCONF_POST_ENABLE = 1, - MFC_DEC_SETCONF_EXTRA_BUFFER_NUM, - MFC_DEC_SETCONF_DISPLAY_DELAY, - MFC_DEC_SETCONF_IS_LAST_FRAME, - MFC_DEC_SETCONF_SLICE_ENABLE, - MFC_DEC_SETCONF_CRC_ENABLE, - MFC_DEC_SETCONF_FIMV1_WIDTH_HEIGHT, - MFC_DEC_SETCONF_FRAME_TAG, - MFC_DEC_GETCONF_CRC_DATA, - MFC_DEC_GETCONF_BUF_WIDTH_HEIGHT, - MFC_DEC_GETCONF_CROP_INFO, - MFC_DEC_GETCONF_FRAME_TAG -} SSBSIP_MFC_DEC_CONF; - -typedef enum { - MFC_ENC_SETCONF_FRAME_TYPE = 100, - MFC_ENC_SETCONF_CHANGE_FRAME_RATE, - MFC_ENC_SETCONF_CHANGE_BIT_RATE, - MFC_ENC_SETCONF_FRAME_TAG, - MFC_ENC_SETCONF_ALLOW_FRAME_SKIP, - MFC_ENC_GETCONF_FRAME_TAG -} SSBSIP_MFC_ENC_CONF; - -typedef enum { - MFC_GETOUTBUF_STATUS_NULL = 0, - MFC_GETOUTBUF_DECODING_ONLY = 1, - MFC_GETOUTBUF_DISPLAY_DECODING, - MFC_GETOUTBUF_DISPLAY_ONLY, - MFC_GETOUTBUF_DISPLAY_END -} SSBSIP_MFC_DEC_OUTBUF_STATUS; - -typedef enum { - MFC_FRAME_TYPE_NOT_CODED, - MFC_FRAME_TYPE_I_FRAME, - MFC_FRAME_TYPE_P_FRAME, - MFC_FRAME_TYPE_B_FRAME, - MFC_FRAME_TYPE_OTHERS -} SSBSIP_MFC_FRAME_TYPE; - -typedef enum { - MFC_RET_OK = 1, - MFC_RET_FAIL = -1000, - MFC_RET_OPEN_FAIL = -1001, - MFC_RET_CLOSE_FAIL = -1002, - - MFC_RET_DEC_INIT_FAIL = -2000, - MFC_RET_DEC_EXE_TIME_OUT = -2001, - MFC_RET_DEC_EXE_ERR = -2002, - MFC_RET_DEC_GET_INBUF_FAIL = -2003, - MFC_RET_DEC_SET_INBUF_FAIL = -2004, - MFC_RET_DEC_GET_OUTBUF_FAIL = -2005, - MFC_RET_DEC_GET_CONF_FAIL = -2006, - MFC_RET_DEC_SET_CONF_FAIL = -2007, - - MFC_RET_ENC_INIT_FAIL = -3000, - MFC_RET_ENC_EXE_TIME_OUT = -3001, - MFC_RET_ENC_EXE_ERR = -3002, - MFC_RET_ENC_GET_INBUF_FAIL = -3003, - MFC_RET_ENC_SET_INBUF_FAIL = -3004, - MFC_RET_ENC_GET_OUTBUF_FAIL = -3005, - MFC_RET_ENC_SET_OUTBUF_FAIL = -3006, - MFC_RET_ENC_GET_CONF_FAIL = -3007, - MFC_RET_ENC_SET_CONF_FAIL = -3008, - - MFC_RET_INVALID_PARAM = -4000 -} SSBSIP_MFC_ERROR_CODE; - -typedef struct { - void *YPhyAddr; // [OUT] physical address of Y - void *CPhyAddr; // [OUT] physical address of CbCr - void *YVirAddr; // [OUT] virtual address of Y - void *CVirAddr; // [OUT] virtual address of CbCr - - int img_width; // [OUT] width of real image - int img_height; // [OUT] height of real image - int buf_width; // [OUT] width aligned to 16 - int buf_height; // [OUT] height alighed to 16 - - int timestamp_top; // [OUT] timestamp of top filed(This is used for interlaced stream) - int timestamp_bottom; // [OUT] timestamp of bottom filed(This is used for interlaced stream) - int consumedByte; // [OUT] the number of byte consumed during decoding - int res_change; // [OUT] whether resolution is changed or not. 0: not change, 1: increased, 2: decreased - int crop_top_offset; // [OUT] crop information, top_offset - int crop_bottom_offset; // [OUT] crop information, bottom_offset - int crop_left_offset; // [OUT] crop information, left_offset - int crop_right_offset; // [OUT] crop information, right_offset -} SSBSIP_MFC_DEC_OUTPUT_INFO; - -typedef struct { - void *YPhyAddr; // [IN/OUT] physical address of Y - void *CPhyAddr; // [IN/OUT] physical address of CbCr - void *YVirAddr; // [IN/OUT] virtual address of Y - void *CVirAddr; // [IN/OUT] virtual address of CbCr - int YSize; // [IN/OUT] input size of Y data - int CSize; // [IN/OUT] input size of CbCr data -} SSBSIP_MFC_ENC_INPUT_INFO; - -typedef struct { - unsigned int dataSize; // [OUT] encoded data size(without header) - unsigned int headerSize; // [OUT] encoded header size - unsigned int frameType; // [OUT] frame type of encoded stream - void *StrmPhyAddr; // [OUT] physical address of Y - void *StrmVirAddr; // [OUT] virtual address of Y - void *encodedYPhyAddr; // [OUT] physical address of Y which is flushed - void *encodedCPhyAddr; // [OUT] physical address of C which is flushed -} SSBSIP_MFC_ENC_OUTPUT_INFO; - -typedef struct { - // common parameters - SSBSIP_MFC_CODEC_TYPE codecType; // [IN] codec type - int SourceWidth; // [IN] width of video to be encoded - int SourceHeight; // [IN] height of video to be encoded - int IDRPeriod; // [IN] GOP number(interval of I-frame) - int SliceMode; // [IN] Multi slice mode - int RandomIntraMBRefresh; // [IN] cyclic intra refresh - int EnableFRMRateControl; // [IN] frame based rate control enable - int Bitrate; // [IN] rate control parameter(bit rate) - int FrameQp; // [IN] The quantization parameter of the frame - int FrameQp_P; // [IN] The quantization parameter of the P frame - int QSCodeMax; // [IN] Maximum Quantization value - int QSCodeMin; // [IN] Minimum Quantization value - int CBRPeriodRf; // [IN] Reaction coefficient parameter for rate control - int PadControlOn; // [IN] Enable padding control - int LumaPadVal; // [IN] Luma pel value used to fill padding area - int CbPadVal; // [IN] CB pel value used to fill padding area - int CrPadVal; // [IN] CR pel value used to fill padding area - int FrameMap; // [IN] Encoding input mode(tile mode or linear mode) - - // H.264 specific parameters - int ProfileIDC; // [IN] profile - int LevelIDC; // [IN] level - int FrameQp_B; // [IN] The quantization parameter of the B frame - int FrameRate; // [IN] rate control parameter(frame rate) - int SliceArgument; // [IN] MB number or byte number - int NumberBFrames; // [IN] The number of consecutive B frame inserted - int NumberReferenceFrames; // [IN] The number of reference pictures used - int NumberRefForPframes; // [IN] The number of reference pictures used for encoding P pictures - int LoopFilterDisable; // [IN] disable the loop filter - int LoopFilterAlphaC0Offset; // [IN] Alpha & C0 offset for H.264 loop filter - int LoopFilterBetaOffset; // [IN] Beta offset for H.264 loop filter - int SymbolMode; // [IN] The mode of entropy coding(CABAC, CAVLC) - int PictureInterlace; // [IN] Enables the interlace mode - int Transform8x8Mode; // [IN] Allow 8x8 transform(This is allowed only for high profile) - int EnableMBRateControl; // [IN] Enable macroblock-level rate control - int DarkDisable; // [IN] Disable adaptive rate control on dark region - int SmoothDisable; // [IN] Disable adaptive rate control on smooth region - int StaticDisable; // [IN] Disable adaptive rate control on static region - int ActivityDisable; // [IN] Disable adaptive rate control on high activity region -} SSBSIP_MFC_ENC_H264_PARAM; - -typedef struct { - // common parameters - SSBSIP_MFC_CODEC_TYPE codecType; // [IN] codec type - int SourceWidth; // [IN] width of video to be encoded - int SourceHeight; // [IN] height of video to be encoded - int IDRPeriod; // [IN] GOP number(interval of I-frame) - int SliceMode; // [IN] Multi slice mode - int RandomIntraMBRefresh; // [IN] cyclic intra refresh - int EnableFRMRateControl; // [IN] frame based rate control enable - int Bitrate; // [IN] rate control parameter(bit rate) - int FrameQp; // [IN] The quantization parameter of the frame - int FrameQp_P; // [IN] The quantization parameter of the P frame - int QSCodeMax; // [IN] Maximum Quantization value - int QSCodeMin; // [IN] Minimum Quantization value - int CBRPeriodRf; // [IN] Reaction coefficient parameter for rate control - int PadControlOn; // [IN] Enable padding control - int LumaPadVal; // [IN] Luma pel value used to fill padding area - int CbPadVal; // [IN] CB pel value used to fill padding area - int CrPadVal; // [IN] CR pel value used to fill padding area - int FrameMap; // [IN] Encoding input mode(tile mode or linear mode) - - // MPEG4 specific parameters - int ProfileIDC; // [IN] profile - int LevelIDC; // [IN] level - int FrameQp_B; // [IN] The quantization parameter of the B frame - int TimeIncreamentRes; // [IN] frame rate - int VopTimeIncreament; // [IN] frame rate - int SliceArgument; // [IN] MB number or byte number - int NumberBFrames; // [IN] The number of consecutive B frame inserted - int DisableQpelME; // [IN] disable quarter-pixel motion estimation -} SSBSIP_MFC_ENC_MPEG4_PARAM; - -typedef struct { - // common parameters - SSBSIP_MFC_CODEC_TYPE codecType; // [IN] codec type - int SourceWidth; // [IN] width of video to be encoded - int SourceHeight; // [IN] height of video to be encoded - int IDRPeriod; // [IN] GOP number(interval of I-frame) - int SliceMode; // [IN] Multi slice mode - int RandomIntraMBRefresh; // [IN] cyclic intra refresh - int EnableFRMRateControl; // [IN] frame based rate control enable - int Bitrate; // [IN] rate control parameter(bit rate) - int FrameQp; // [IN] The quantization parameter of the frame - int FrameQp_P; // [IN] The quantization parameter of the P frame - int QSCodeMax; // [IN] Maximum Quantization value - int QSCodeMin; // [IN] Minimum Quantization value - int CBRPeriodRf; // [IN] Reaction coefficient parameter for rate control - int PadControlOn; // [IN] Enable padding control - int LumaPadVal; // [IN] Luma pel value used to fill padding area - int CbPadVal; // [IN] CB pel value used to fill padding area - int CrPadVal; // [IN] CR pel value used to fill padding area - int FrameMap; // [IN] Encoding input mode(tile mode or linear mode) - - // H.263 specific parameters - int FrameRate; // [IN] rate control parameter(frame rate) -} SSBSIP_MFC_ENC_H263_PARAM; - -typedef struct { - int width; - int height; - int buf_width; - int buf_height; -} SSBSIP_MFC_IMG_RESOLUTION; - -typedef struct { - int crop_top_offset; - int crop_bottom_offset; - int crop_left_offset; - int crop_right_offset; -} SSBSIP_MFC_CROP_INFORMATION; - -#ifdef __cplusplus -extern "C" { -#endif - -/*--------------------------------------------------------------------------------*/ -/* Decoding APIs */ -/*--------------------------------------------------------------------------------*/ -void *SsbSipMfcDecOpen(void *value); -SSBSIP_MFC_ERROR_CODE SsbSipMfcDecInit(void *openHandle, SSBSIP_MFC_CODEC_TYPE codec_type, int Frameleng); -SSBSIP_MFC_ERROR_CODE SsbSipMfcDecExe(void *openHandle, int lengthBufFill); -SSBSIP_MFC_ERROR_CODE SsbSipMfcDecClose(void *openHandle); - -void *SsbSipMfcDecGetInBuf(void *openHandle, void **phyInBuf, int inputBufferSize); -SSBSIP_MFC_ERROR_CODE SsbSipMfcDecSetInBuf(void *openHandle, void *phyInBuf, void *virInBuf, int inputBufferSize); - -SSBSIP_MFC_DEC_OUTBUF_STATUS SsbSipMfcDecGetOutBuf(void *openHandle, SSBSIP_MFC_DEC_OUTPUT_INFO *output_info); - -SSBSIP_MFC_ERROR_CODE SsbSipMfcDecSetConfig(void *openHandle, SSBSIP_MFC_DEC_CONF conf_type, void *value); -SSBSIP_MFC_ERROR_CODE SsbSipMfcDecGetConfig(void *openHandle, SSBSIP_MFC_DEC_CONF conf_type, void *value); - -/*--------------------------------------------------------------------------------*/ -/* Encoding APIs */ -/*--------------------------------------------------------------------------------*/ -void *SsbSipMfcEncOpen(void *value); -SSBSIP_MFC_ERROR_CODE SsbSipMfcEncInit(void *openHandle, void *param); -SSBSIP_MFC_ERROR_CODE SsbSipMfcEncExe(void *openHandle); -SSBSIP_MFC_ERROR_CODE SsbSipMfcEncClose(void *openHandle); - -SSBSIP_MFC_ERROR_CODE SsbSipMfcEncSetSize(void *openHandle, SSBSIP_MFC_CODEC_TYPE codecType, int nWidth, int nHeight); -SSBSIP_MFC_ERROR_CODE SsbSipMfcEncGetInBuf(void *openHandle, SSBSIP_MFC_ENC_INPUT_INFO *input_info); -SSBSIP_MFC_ERROR_CODE SsbSipMfcEncSetInBuf(void *openHandle, SSBSIP_MFC_ENC_INPUT_INFO *input_info); - -SSBSIP_MFC_ERROR_CODE SsbSipMfcEncGetOutBuf(void *openHandle, SSBSIP_MFC_ENC_OUTPUT_INFO *output_info); -SSBSIP_MFC_ERROR_CODE SsbSipMfcEncSetOutBuf (void *openHandle, void *phyOutbuf, void *virOutbuf, int outputBufferSize); - -SSBSIP_MFC_ERROR_CODE SsbSipMfcEncSetConfig(void *openHandle, SSBSIP_MFC_ENC_CONF conf_type, void *value); -SSBSIP_MFC_ERROR_CODE SsbSipMfcEncGetConfig(void *openHandle, SSBSIP_MFC_ENC_CONF conf_type, void *value); - -#ifdef __cplusplus -} -#endif - -#endif /* _SSBSIP_MFC_API_H_ */ diff --git a/sec_mm/sec_omx/sec_codecs/video/mfc_c110/include/color_space_convertor.h b/sec_mm/sec_omx/sec_codecs/video/mfc_c110/include/color_space_convertor.h deleted file mode 100644 index 4ad5bda..0000000 --- a/sec_mm/sec_omx/sec_codecs/video/mfc_c110/include/color_space_convertor.h +++ /dev/null @@ -1,176 +0,0 @@ -/* - * - * Copyright 2011 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file color_space_convertor.h - * @brief SEC_OMX specific define. - * NV12T(tiled) layout: - * Each element is not pixel. It is 64x32 pixel block. - * uv pixel block is interleaved as u v u v u v ... - * y1 y2 y7 y8 y9 y10 y15 y16 - * y3 y4 y5 y6 y11 y12 y13 y14 - * y17 y18 y23 y24 y25 y26 y31 y32 - * y19 y20 y21 y22 y27 y28 y29 y30 - * uv1 uv2 uv7 uv8 uv9 uv10 uv15 uv16 - * uv3 uv4 uv5 uv6 uv11 uv12 uv13 uv14 - * YUV420Planar(linear) layout: - * Each element is not pixel. It is 64x32 pixel block. - * y1 y2 y3 y4 y5 y6 y7 y8 - * y9 y10 y11 y12 y13 y14 y15 y16 - * y17 y18 y19 y20 y21 y22 y23 y24 - * y25 y26 y27 y28 y29 y30 y31 y32 - * u1 u2 u3 u4 u5 u6 u7 u8 - * v1 v2 v3 v4 v5 v6 v7 v8 - * YUV420Semiplanar(linear) layout: - * Each element is not pixel. It is 64x32 pixel block. - * uv pixel block is interleaved as u v u v u v ... - * y1 y2 y3 y4 y5 y6 y7 y8 - * y9 y10 y11 y12 y13 y14 y15 y16 - * y17 y18 y19 y20 y21 y22 y23 y24 - * y25 y26 y27 y28 y29 y30 y31 y32 - * uv1 uv2 uv3 uv4 uv5 uv6 uv7 uv8 - * uv9 uv10 uv11 uv12 uv13 uv14 uv15 uv16 - * @author ShinWon Lee (shinwon.lee@samsung.com) - * @version 1.0 - * @history - * 2011.7.01 : Create - */ - -#ifndef COLOR_SPACE_CONVERTOR_H_ -#define COLOR_SPACE_CONVERTOR_H_ - -/*--------------------------------------------------------------------------------*/ -/* Format Conversion API */ -/*--------------------------------------------------------------------------------*/ -/* C Code */ -/* - * De-interleaves src to dest1, dest2 - * - * @param dest1 - * Address of de-interleaved data[out] - * - * @param dest2 - * Address of de-interleaved data[out] - * - * @param src - * Address of interleaved data[in] - * - * @param src_size - * Size of interleaved data[in] - */ -void csc_deinterleave_memcpy(char *dest1, char *dest2, char *src, int src_size); - -/* - * Interleaves src1, src2 to dest - * - * @param dest - * Address of interleaved data[out] - * - * @param src1 - * Address of de-interleaved data[in] - * - * @param src2 - * Address of de-interleaved data[in] - * - * @param src_size - * Size of de-interleaved data[in] - */ -void csc_interleave_memcpy(char *dest, char *src1, char *src2, int src_size); - -/* - * Converts tiled data to linear. - * 1. Y of NV12T to Y of YUV420P - * 2. Y of NV12T to Y of YUV420S - * 3. UV of NV12T to UV of YUV420S - * - * @param yuv420_dest - * Y or UV plane address of YUV420[out] - * - * @param nv12t_src - * Y or UV plane address of NV12T[in] - * - * @param yuv420_width - * Width of YUV420[in] - * - * @param yuv420_height - * Y: Height of YUV420, UV: Height/2 of YUV420[in] - */ -void csc_tiled_to_linear(char *yuv420p_y_dest, char *nv12t_y_src, int yuv420p_width, int yuv420p_y_height); - -/* - * Converts and Deinterleaves tiled data to linear - * 1. UV of NV12T to UV of YUV420P - * - * @param yuv420_u_dest - * U plane address of YUV420P[out] - * - * @param yuv420_v_dest - * V plane address of YUV420P[out] - * - * @param nv12t_src - * UV plane address of NV12T[in] - * - * @param yuv420_width - * Width of YUV420[in] - * - * @param yuv420_uv_height - * Height/2 of YUV420[in] - */ -void csc_tiled_to_linear_deinterleave(char *yuv420p_u_dest, char *yuv420p_v_dest, char *nv12t_uv_src, int yuv420p_width, int yuv420p_uv_height); - -/* - * Converts linear data to tiled. - * 1. Y of YUV420P to Y of NV12T - * 2. Y of YUV420S to Y of NV12T - * 3. UV of YUV420S to UV of NV12T - * - * @param nv12t_dest - * Y or UV plane address of NV12T[out] - * - * @param yuv420_src - * Y or UV plane address of YUV420P(S)[in] - * - * @param yuv420_width - * Width of YUV420[in] - * - * @param yuv420_height - * Y: Height of YUV420, UV: Height/2 of YUV420[in] - */ -void csc_linear_to_tiled(char *nv12t_dest, char *yuv420p_src, int yuv420p_width, int yuv420p_y_height); - -/* - * Converts and Interleaves linear to tiled - * 1. UV of YUV420P to UV of NV12T - * - * @param nv12t_uv_dest - * UV plane address of NV12T[out] - * - * @param yuv420p_u_src - * U plane address of YUV420P[in] - * - * @param yuv420p_v_src - * V plane address of YUV420P[in] - * - * @param yuv420_width - * Width of YUV420[in] - * - * @param yuv420_uv_height - * Height/2 of YUV420[in] - */ -void csc_linear_to_tiled_interleave(char *nv12t_uv_dest, char *yuv420p_u_src, char *yuv420p_v_src, int yuv420p_width, int yuv420p_uv_height); - -#endif /*COLOR_SPACE_CONVERTOR_H_*/ diff --git a/sec_mm/sec_omx/sec_codecs/video/mfc_c110/include/mfc_interface.h b/sec_mm/sec_omx/sec_codecs/video/mfc_c110/include/mfc_interface.h deleted file mode 100644 index 466860d..0000000 --- a/sec_mm/sec_omx/sec_codecs/video/mfc_c110/include/mfc_interface.h +++ /dev/null @@ -1,347 +0,0 @@ -/* - * Copyright 2010 Samsung Electronics Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _MFC_INTERFACE_H_ -#define _MFC_INTERFACE_H_ - -#include "SsbSipMfcApi.h" - -#define IOCTL_MFC_DEC_INIT 0x00800001 -#define IOCTL_MFC_ENC_INIT 0x00800002 -#define IOCTL_MFC_DEC_EXE 0x00800003 -#define IOCTL_MFC_ENC_EXE 0x00800004 - -#define IOCTL_MFC_GET_IN_BUF 0x00800010 -#define IOCTL_MFC_FREE_BUF 0x00800011 -#define IOCTL_MFC_GET_PHYS_ADDR 0x00800012 - -#define IOCTL_MFC_SET_CONFIG 0x00800101 -#define IOCTL_MFC_GET_CONFIG 0x00800102 - -#define IOCTL_MFC_BUF_CACHE 0x00801000 - -/* MFC H/W support maximum 32 extra DPB */ -#define MFC_MAX_EXTRA_DPB 5 - -#define ENC_PROFILE_LEVEL(profile, level) ((profile) | ((level) << 8)) - -#define ENC_PROFILE_MPEG4_SP 0 -#define ENC_PROFILE_MPEG4_ASP 1 -#define ENC_PROFILE_H264_BP 0 -#define ENC_PROFILE_H264_MAIN 1 -#define ENC_PROFILE_H264_HIGH 2 - -#define ENC_RC_DISABLE 0 -#define ENC_RC_ENABLE_MACROBLOCK 1 -#define ENC_RC_ENABLE_FRAME 2 - -#define ENC_RC_QBOUND(min_qp, max_qp) ((min_qp) | ((max_qp) << 8)) -#define ENC_RC_MB_CTRL_DARK_DISABLE (1 << 3) -#define ENC_RC_MB_CTRL_SMOOTH_DISABLE (1 << 2) -#define ENC_RC_MB_CTRL_STATIC_DISABLE (1 << 1) -#define ENC_RC_MB_CTRL_ACTIVITY_DISABLE (1 << 0) - -#define ALIGN_TO_16B(x) ((((x) + (1 << 4) - 1) >> 4) << 4) -#define ALIGN_TO_32B(x) ((((x) + (1 << 5) - 1) >> 5) << 5) -#define ALIGN_TO_64B(x) ((((x) + (1 << 6) - 1) >> 6) << 6) -#define ALIGN_TO_128B(x) ((((x) + (1 << 7) - 1) >> 7) << 7) -#define ALIGN_TO_2KB(x) ((((x) + (1 << 11) - 1) >> 11) << 11) -#define ALIGN_TO_4KB(x) ((((x) + (1 << 12) - 1) >> 12) << 12) -#define ALIGN_TO_8KB(x) ((((x) + (1 << 13) - 1) >> 13) << 13) -#define ALIGN_TO_64KB(x) ((((x) + (1 << 16) - 1) >> 16) << 16) -#define ALIGN_TO_128KB(x) ((((x) + (1 << 17) - 1) >> 17) << 17) - -typedef struct { - int luma0; // per frame (or top field) - int chroma0; // per frame (or top field) - int luma1; // per frame (or bottom field) - int chroma1; // per frame (or bottom field) -} MFC_CRC_DATA; - -typedef enum { - MFC_USE_NONE = 0x00, - MFC_USE_YUV_BUFF = 0x01, - MFC_USE_STRM_BUFF = 0x10 -} mfc_interbuff_status; - -typedef enum { - MFC_UNPACKED_PB = 0, - MFC_PACKED_PB = 1 -} mfc_packed_mode; - -typedef struct tag_strm_ref_buf_arg { - unsigned int strm_ref_y; - unsigned int mv_ref_yc; -} mfc_strm_ref_buf_arg_t; - -typedef struct tag_frame_buf_arg { - unsigned int luma; - unsigned int chroma; -} mfc_frame_buf_arg_t; - -typedef struct { - SSBSIP_MFC_CODEC_TYPE in_codec_type; /* [IN] codec type */ - int in_width; /* [IN] width of YUV420 frame to be encoded */ - int in_height; /* [IN] height of YUV420 frame to be encoded */ - int in_profile_level; /* [IN] profile & level */ - int in_gop_num; /* [IN] GOP Number (interval of I-frame) */ - int in_frame_qp; /* [IN] the quantization parameter of the frame */ - int in_frame_P_qp; /* [IN] the quantization parameter of the P frame */ - int in_frame_B_qp; /* [IN] the quantization parameter of the B frame */ - - int in_RC_frm_enable; /* [IN] RC enable (0:disable, 1:frame level RC) */ - int in_RC_framerate; /* [IN] RC parameter (framerate) */ - int in_RC_bitrate; /* [IN] RC parameter (bitrate in kbps) */ - int in_RC_qbound; /* [IN] RC parameter (Q bound) */ - int in_RC_rpara; /* [IN] RC parameter (Reaction Coefficient) */ - - int in_MS_mode; /* [IN] Multi-slice mode (0:single, 1:multiple) */ - int in_MS_size; /* [IN] Multi-slice size (in num. of mb or byte) */ - int in_mb_refresh; /* [IN] Macroblock refresh */ - int in_interlace_mode; /* [IN] interlace mode(0:progressive, 1:interlace) */ - int in_BframeNum; /* [IN] B frame number */ - - int in_pad_ctrl_on; /* [IN] Enable (1) / Disable (0) padding */ - int in_luma_pad_val; /* [IN] pad value if pad_ctrl_on is Enable */ - int in_cb_pad_val; - int in_cr_pad_val; - - int in_frame_map; /* [IN] Encoding input NV12 type linear(0) TILE(1) */ - - unsigned int in_mapped_addr; - mfc_strm_ref_buf_arg_t out_u_addr; - mfc_strm_ref_buf_arg_t out_p_addr; - mfc_strm_ref_buf_arg_t out_buf_size; - unsigned int out_header_size; - - /* MPEG4 Only */ - int in_qpelME_enable; /* [IN] Quarter-pel MC enable(1:enable, 0:disable) */ - int in_time_increament_res; /* [IN] time increment resolution */ - int in_time_vop_time_increament; /* [IN] time increment */ -} mfc_enc_init_mpeg4_arg_t; - -typedef mfc_enc_init_mpeg4_arg_t mfc_enc_init_h263_arg_t; - -typedef struct { - SSBSIP_MFC_CODEC_TYPE in_codec_type; /* [IN] codec type */ - int in_width; /* [IN] width of YUV420 frame to be encoded */ - int in_height; /* [IN] height of YUV420 frame to be encoded */ - int in_profile_level; /* [IN] profile & level */ - int in_gop_num; /* [IN] GOP Number (interval of I-frame) */ - int in_frame_qp; /* [IN] the quantization parameter of the frame */ - int in_frame_P_qp; /* [IN] the quantization parameter of the P frame */ - int in_frame_B_qp; /* [IN] the quantization parameter of the B frame */ - - int in_RC_frm_enable; /* [IN] RC enable (0:disable, 1:frame level RC) */ - int in_RC_framerate; /* [IN] RC parameter (framerate) */ - int in_RC_bitrate; /* [IN] RC parameter (bitrate in kbps) */ - int in_RC_qbound; /* [IN] RC parameter (Q bound) */ - int in_RC_rpara; /* [IN] RC parameter (Reaction Coefficient) */ - - int in_MS_mode; /* [IN] Multi-slice mode (0:single, 1:multiple) */ - int in_MS_size; /* [IN] Multi-slice size (in num. of mb or byte) */ - int in_mb_refresh; /* [IN] Macroblock refresh */ - int in_interlace_mode; /* [IN] interlace mode(0:progressive, 1:interlace) */ - int in_BframeNum; - - int in_pad_ctrl_on; /* [IN] Enable padding control */ - int in_luma_pad_val; /* [IN] Luma pel value used to fill padding area */ - int in_cb_pad_val; /* [IN] CB pel value used to fill padding area */ - int in_cr_pad_val; /* [IN] CR pel value used to fill padding area */ - - int in_frame_map; /* [IN] Encoding input NV12 type linear(0) TILE(1) */ - - unsigned int in_mapped_addr; - mfc_strm_ref_buf_arg_t out_u_addr; - mfc_strm_ref_buf_arg_t out_p_addr; - mfc_strm_ref_buf_arg_t out_buf_size; - unsigned int out_header_size; - - /* H264 Only */ - int in_RC_mb_enable; /* [IN] RC enable (0:disable, 1:MB level RC) */ - int in_reference_num; /* [IN] The number of reference pictures used */ - int in_ref_num_p; /* [IN] The number of reference pictures used for P pictures */ - int in_RC_mb_dark_disable; /* [IN] Disable adaptive rate control on dark region */ - int in_RC_mb_smooth_disable; /* [IN] Disable adaptive rate control on smooth region */ - int in_RC_mb_static_disable; /* [IN] Disable adaptive rate control on static region */ - int in_RC_mb_activity_disable; /* [IN] Disable adaptive rate control on static region */ - int in_deblock_filt; /* [IN] disable the loop filter */ - int in_deblock_alpha_C0; /* [IN] Alpha & C0 offset for H.264 loop filter */ - int in_deblock_beta; /* [IN] Beta offset for H.264 loop filter */ - int in_symbolmode; /* [IN] The mode of entropy coding(CABAC, CAVLC) */ - int in_transform8x8_mode; /* [IN] Allow 8x8 transform(only for high profile) */ - int in_md_interweight_pps; /* [IN] Inter weighted parameter for mode decision */ - int in_md_intraweight_pps; /* [IN] Intra weighted parameter for mode decision */ -} mfc_enc_init_h264_arg_t; - -typedef struct { - SSBSIP_MFC_CODEC_TYPE in_codec_type; /* [IN] codec type */ - unsigned int in_Y_addr; /* [IN] In-buffer addr of Y component */ - unsigned int in_CbCr_addr; /* [IN] In-buffer addr of CbCr component */ - unsigned int in_Y_addr_vir; /* [IN] In-buffer addr of Y component */ - unsigned int in_CbCr_addr_vir; /* [IN] In-buffer addr of CbCr component */ - unsigned int in_strm_st; /* [IN] Out-buffer start addr of encoded strm */ - unsigned int in_strm_end; /* [IN] Out-buffer end addr of encoded strm */ - int in_frametag; /* [IN] unique frame ID */ - - unsigned int out_frame_type; /* [OUT] frame type */ - int out_encoded_size; /* [OUT] Length of Encoded video stream */ - unsigned int out_encoded_Y_paddr; /* [OUT] physical Y address which is flushed */ - unsigned int out_encoded_C_paddr; /* [OUT] physical C address which is flushed */ - int out_frametag_top; /* [OUT] unique frame ID of an output frame or top field */ - int out_frametag_bottom; /* [OUT] unique frame ID of bottom field */ -} mfc_enc_exe_arg; - -typedef struct { - SSBSIP_MFC_CODEC_TYPE in_codec_type; /* [IN] codec type */ - unsigned int in_strm_buf; /* [IN] the physical address of STRM_BUF */ - int in_strm_size; /* [IN] size of video stream filled in STRM_BUF */ - int in_packed_PB; /* [IN] Is packed PB frame or not, 1: packedPB 0: unpacked */ - - int out_img_width; /* [OUT] width of YUV420 frame */ - int out_img_height; /* [OUT] height of YUV420 frame */ - int out_buf_width; /* [OUT] width of YUV420 frame */ - int out_buf_height; /* [OUT] height of YUV420 frame */ - int out_dpb_cnt; /* [OUT] the number of buffers which is nessary during decoding */ - - int out_crop_top_offset; /* [OUT] crop information, top offset */ - int out_crop_bottom_offset; /* [OUT] crop information, bottom offset */ - int out_crop_left_offset; /* [OUT] crop information, left offset */ - int out_crop_right_offset; /* [OUT] crop information, right offset */ - - mfc_frame_buf_arg_t in_frm_buf; /* [IN] the address of dpb FRAME_BUF */ - mfc_frame_buf_arg_t in_frm_size; /* [IN] size of dpb FRAME_BUF */ - unsigned int in_mapped_addr; - - mfc_frame_buf_arg_t out_u_addr; - mfc_frame_buf_arg_t out_p_addr; - mfc_frame_buf_arg_t out_frame_buf_size; -} mfc_dec_init_arg_t; - -typedef struct { - SSBSIP_MFC_CODEC_TYPE in_codec_type; /* [IN] codec type */ - unsigned int in_strm_buf; /* [IN] the physical address of STRM_BUF */ - int in_strm_size; /* [IN] Size of video stream filled in STRM_BUF */ - mfc_frame_buf_arg_t in_frm_buf; /* [IN] the address of dpb FRAME_BUF */ - mfc_frame_buf_arg_t in_frm_size; /* [IN] size of dpb FRAME_BUF */ - int in_frametag; /* [IN] unique frame ID */ - - unsigned int out_display_Y_addr; /* [OUT] the physical address of display buf */ - unsigned int out_display_C_addr; /* [OUT] the physical address of display buf */ - int out_display_status; /* [OUT] whether display frame exist or not. */ - int out_timestamp_top; /* [OUT] presentation time of an output frame or top field */ - int out_timestamp_bottom; /* [OUT] presentation time of bottom field */ - int out_consume_bytes; /* [OUT] consumed bytes when decoding finished */ - int out_frametag_top; /* [OUT] unique frame ID of an output frame or top field */ - int out_frametag_bottom; /* [OUT] unique frame ID of bottom field */ - int out_res_change; /* [OUT] whether resolution is changed or not (0, 1, 2) */ - int out_crop_top_offset; /* [OUT] crop information, top offset */ - int out_crop_bottom_offset; /* [OUT] crop information, bottom offset */ - int out_crop_left_offset; /* [OUT] crop information, left offset */ - int out_crop_right_offset; /* [OUT] crop information, right offset */ -} mfc_dec_exe_arg_t; - -typedef struct { - int in_config_param; /* [IN] Configurable parameter type */ - int out_config_value[4]; /* [IN] Values to get for the configurable parameter. */ -} mfc_get_config_arg_t; - -typedef struct { - int in_config_param; /* [IN] Configurable parameter type */ - int in_config_value[2]; /* [IN] Values to be set for the configurable parameter. */ - int out_config_value_old[2]; /* [OUT] Old values of the configurable parameters */ -} mfc_set_config_arg_t; - -typedef struct tag_get_phys_addr_arg -{ - unsigned int u_addr; - unsigned int p_addr; -} mfc_get_phys_addr_arg_t; - -typedef struct tag_mem_alloc_arg -{ - SSBSIP_MFC_CODEC_TYPE codec_type; - int buff_size; - unsigned int mapped_addr; - unsigned int out_uaddr; - unsigned int out_paddr; -} mfc_mem_alloc_arg_t; - -typedef struct tag_mem_free_arg_t -{ - unsigned int u_addr; -} mfc_mem_free_arg_t; - -typedef enum { - MFC_BUFFER_NO_CACHE = 0, - MFC_BUFFER_CACHE = 1 -} mfc_buffer_type; - -typedef union { - mfc_enc_init_mpeg4_arg_t enc_init_mpeg4; - mfc_enc_init_h263_arg_t enc_init_h263; - mfc_enc_init_h264_arg_t enc_init_h264; - mfc_enc_exe_arg enc_exe; - - mfc_dec_init_arg_t dec_init; - mfc_dec_exe_arg_t dec_exe; - - mfc_get_config_arg_t get_config; - mfc_set_config_arg_t set_config; - - mfc_mem_alloc_arg_t mem_alloc; - mfc_mem_free_arg_t mem_free; - mfc_get_phys_addr_arg_t get_phys_addr; - - mfc_buffer_type buf_type; -} mfc_args; - -typedef struct tag_mfc_args { - SSBSIP_MFC_ERROR_CODE ret_code; /* [OUT] error code */ - mfc_args args; -} mfc_common_args; - -typedef struct { - int magic; - int hMFC; - int width; - int height; - int sizeStrmBuf; - mfc_frame_buf_arg_t sizeFrmBuf; - int displayStatus; - int inter_buff_status; - unsigned int virFreeStrmAddr; - unsigned int phyStrmBuf; - unsigned int virStrmBuf; - unsigned int virMvRefYC; - mfc_frame_buf_arg_t phyFrmBuf; - mfc_frame_buf_arg_t virFrmBuf; - unsigned int mapped_addr; - mfc_common_args MfcArg; - SSBSIP_MFC_CODEC_TYPE codec_type; - SSBSIP_MFC_DEC_OUTPUT_INFO decOutInfo; - unsigned int encodedHeaderSize; - int encodedDataSize; - unsigned int encodedframeType; - int in_frametag; - int out_frametag_top; - int out_frametag_bottom; - unsigned int encoded_Y_paddr; - unsigned int encoded_C_paddr; - unsigned int encode_cnt; -} _MFCLIB; - -#endif /* _MFC_INTERFACE_H_ */ diff --git a/sec_mm/sec_omx/sec_omx_component/common/Android.mk b/sec_mm/sec_omx/sec_omx_component/common/Android.mk deleted file mode 100644 index aa32005..0000000 --- a/sec_mm/sec_omx/sec_omx_component/common/Android.mk +++ /dev/null @@ -1,24 +0,0 @@ -LOCAL_PATH := $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := optional - -LOCAL_SRC_FILES := \ - SEC_OMX_Basecomponent.c \ - SEC_OMX_Baseport.c \ - SEC_OMX_Resourcemanager.c - - -LOCAL_MODULE := libsecbasecomponent.aries - -LOCAL_CFLAGS := - -LOCAL_STATIC_LIBRARIES := libsecosal.aries -LOCAL_SHARED_LIBRARIES := libcutils libutils - -LOCAL_C_INCLUDES := $(SEC_OMX_INC)/khronos \ - $(SEC_OMX_INC)/sec \ - $(SEC_OMX_TOP)/sec_osal - -include $(BUILD_STATIC_LIBRARY) - diff --git a/sec_mm/sec_omx/sec_omx_component/common/SEC_OMX_Basecomponent.c b/sec_mm/sec_omx/sec_omx_component/common/SEC_OMX_Basecomponent.c deleted file mode 100644 index 89e9aeb..0000000 --- a/sec_mm/sec_omx/sec_omx_component/common/SEC_OMX_Basecomponent.c +++ /dev/null @@ -1,1486 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OMX_Basecomponent.c - * @brief - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * Yunji Kim (yunji.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#include -#include -#include - -#include "SEC_OSAL_Event.h" -#include "SEC_OSAL_Thread.h" -#include "SEC_OMX_Baseport.h" -#include "SEC_OMX_Basecomponent.h" -#include "SEC_OMX_Macros.h" - -#undef SEC_LOG_TAG -#define SEC_LOG_TAG "SEC_BASE_COMP" -#define SEC_LOG_OFF -#include "SEC_OSAL_Log.h" - - -/* Change CHECK_SIZE_VERSION Macro */ -OMX_ERRORTYPE SEC_OMX_Check_SizeVersion(OMX_PTR header, OMX_U32 size) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - - OMX_VERSIONTYPE* version = NULL; - if (header == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - version = (OMX_VERSIONTYPE*)((char*)header + sizeof(OMX_U32)); - if (*((OMX_U32*)header) != size) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - if (version->s.nVersionMajor != VERSIONMAJOR_NUMBER || - version->s.nVersionMinor != VERSIONMINOR_NUMBER) { - ret = OMX_ErrorVersionMismatch; - goto EXIT; - } - ret = OMX_ErrorNone; -EXIT: - return ret; -} - -OMX_ERRORTYPE SEC_OMX_GetComponentVersion( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_OUT OMX_STRING pComponentName, - OMX_OUT OMX_VERSIONTYPE *pComponentVersion, - OMX_OUT OMX_VERSIONTYPE *pSpecVersion, - OMX_OUT OMX_UUIDTYPE *pComponentUUID) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - OMX_U32 compUUID[3]; - - FunctionIn(); - - /* check parameters */ - if (hComponent == NULL || - pComponentName == NULL || pComponentVersion == NULL || - pSpecVersion == NULL || pComponentUUID == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - if (pSECComponent->currentState == OMX_StateInvalid) { - ret = OMX_ErrorInvalidState; - goto EXIT; - } - - SEC_OSAL_Strcpy(pComponentName, pSECComponent->componentName); - SEC_OSAL_Memcpy(pComponentVersion, &(pSECComponent->componentVersion), sizeof(OMX_VERSIONTYPE)); - SEC_OSAL_Memcpy(pSpecVersion, &(pSECComponent->specVersion), sizeof(OMX_VERSIONTYPE)); - - /* Fill UUID with handle address, PID and UID. - * This should guarantee uiniqness */ - compUUID[0] = (OMX_U32)pOMXComponent; - compUUID[1] = getpid(); - compUUID[2] = getuid(); - SEC_OSAL_Memcpy(*pComponentUUID, compUUID, 3 * sizeof(*compUUID)); - - ret = OMX_ErrorNone; - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_GetState ( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_OUT OMX_STATETYPE *pState) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - - FunctionIn(); - - if (hComponent == NULL || pState == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - *pState = pSECComponent->currentState; - ret = OMX_ErrorNone; - -EXIT: - FunctionOut(); - - return ret; -} - -static OMX_ERRORTYPE SEC_OMX_BufferProcessThread(OMX_PTR threadData) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_OMX_MESSAGE *message = NULL; - - FunctionIn(); - - if (threadData == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)threadData; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - pSECComponent->sec_BufferProcess(pOMXComponent); - - SEC_OSAL_ThreadExit(NULL); - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_ComponentStateSet(OMX_COMPONENTTYPE *pOMXComponent, OMX_U32 messageParam) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASECOMPONENT *pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - SEC_OMX_MESSAGE *message; - OMX_STATETYPE destState = messageParam; - OMX_STATETYPE currentState = pSECComponent->currentState; - SEC_OMX_BASEPORT *pSECPort = NULL; - OMX_S32 countValue = 0; - int i = 0, j = 0; - - FunctionIn(); - - /* check parameters */ - if (currentState == destState) { - ret = OMX_ErrorSameState; - goto EXIT; - } - if (currentState == OMX_StateInvalid) { - ret = OMX_ErrorInvalidState; - goto EXIT; - } - - if ((currentState == OMX_StateLoaded) && (destState == OMX_StateIdle)) { - ret = SEC_OMX_Get_Resource(pOMXComponent); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - } - if (((currentState == OMX_StateIdle) && (destState == OMX_StateLoaded)) || - ((currentState == OMX_StateIdle) && (destState == OMX_StateInvalid)) || - ((currentState == OMX_StateExecuting) && (destState == OMX_StateInvalid)) || - ((currentState == OMX_StatePause) && (destState == OMX_StateInvalid))) { - SEC_OMX_Release_Resource(pOMXComponent); - } - - SEC_OSAL_Log(SEC_LOG_TRACE, "destState: %d", destState); - - switch (destState) { - case OMX_StateInvalid: - switch (currentState) { - case OMX_StateIdle: - case OMX_StateExecuting: - case OMX_StatePause: - case OMX_StateLoaded: - case OMX_StateWaitForResources: - pSECComponent->currentState = OMX_StateInvalid; - if (pSECComponent->hBufferProcess) { - pSECComponent->bExitBufferProcessThread = OMX_TRUE; - - for (i = 0; i < ALL_PORT_NUM; i++) { - SEC_OSAL_Get_SemaphoreCount(pSECComponent->pSECPort[i].bufferSemID, &countValue); - if (countValue == 0) - SEC_OSAL_SemaphorePost(pSECComponent->pSECPort[i].bufferSemID); - } - - SEC_OSAL_SignalSet(pSECComponent->pauseEvent); - SEC_OSAL_ThreadTerminate(pSECComponent->hBufferProcess); - pSECComponent->hBufferProcess = NULL; - - for (i = 0; i < ALL_PORT_NUM; i++) { - SEC_OSAL_MutexTerminate(pSECComponent->secDataBuffer[i].bufferMutex); - pSECComponent->secDataBuffer[i].bufferMutex = NULL; - } - - SEC_OSAL_SignalTerminate(pSECComponent->pauseEvent); - for (i = 0; i < ALL_PORT_NUM; i++) { - SEC_OSAL_SemaphoreTerminate(pSECComponent->pSECPort[i].bufferSemID); - pSECComponent->pSECPort[i].bufferSemID = NULL; - } - } - if (pSECComponent->sec_mfc_componentTerminate != NULL) - pSECComponent->sec_mfc_componentTerminate(pOMXComponent); - break; - } - ret = OMX_ErrorInvalidState; - break; - case OMX_StateLoaded: - switch (currentState) { - case OMX_StateIdle: - pSECComponent->bExitBufferProcessThread = OMX_TRUE; - - for (i = 0; i < ALL_PORT_NUM; i++) { - SEC_OSAL_Get_SemaphoreCount(pSECComponent->pSECPort[i].bufferSemID, &countValue); - if (countValue == 0) - SEC_OSAL_SemaphorePost(pSECComponent->pSECPort[i].bufferSemID); - } - - SEC_OSAL_SignalSet(pSECComponent->pauseEvent); - SEC_OSAL_ThreadTerminate(pSECComponent->hBufferProcess); - pSECComponent->hBufferProcess = NULL; - - for (i = 0; i < ALL_PORT_NUM; i++) { - SEC_OSAL_MutexTerminate(pSECComponent->secDataBuffer[i].bufferMutex); - pSECComponent->secDataBuffer[i].bufferMutex = NULL; - } - - SEC_OSAL_SignalTerminate(pSECComponent->pauseEvent); - for (i = 0; i < ALL_PORT_NUM; i++) { - SEC_OSAL_SemaphoreTerminate(pSECComponent->pSECPort[i].bufferSemID); - pSECComponent->pSECPort[i].bufferSemID = NULL; - } - - pSECComponent->sec_mfc_componentTerminate(pOMXComponent); - - for (i = 0; i < (pSECComponent->portParam.nPorts); i++) { - pSECPort = (pSECComponent->pSECPort + i); - if (CHECK_PORT_TUNNELED(pSECPort) && CHECK_PORT_BUFFER_SUPPLIER(pSECPort)) { - while (SEC_OSAL_GetElemNum(&pSECPort->bufferQ) > 0) { - message = (SEC_OMX_MESSAGE*)SEC_OSAL_Dequeue(&pSECPort->bufferQ); - if (message != NULL) - SEC_OSAL_Free(message); - } - ret = pSECComponent->sec_FreeTunnelBuffer(pSECComponent, i); - if (OMX_ErrorNone != ret) { - goto EXIT; - } - } else { - if (CHECK_PORT_ENABLED(pSECPort)) { - SEC_OSAL_SemaphoreWait(pSECPort->unloadedResource); - pSECPort->portDefinition.bPopulated = OMX_FALSE; - } - } - } - pSECComponent->currentState = OMX_StateLoaded; - break; - case OMX_StateWaitForResources: - ret = SEC_OMX_Out_WaitForResource(pOMXComponent); - pSECComponent->currentState = OMX_StateLoaded; - break; - case OMX_StateExecuting: - case OMX_StatePause: - default: - ret = OMX_ErrorIncorrectStateTransition; - break; - } - break; - case OMX_StateIdle: - switch (currentState) { - case OMX_StateLoaded: - for (i = 0; i < pSECComponent->portParam.nPorts; i++) { - pSECPort = (pSECComponent->pSECPort + i); - if (pSECPort == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - if (CHECK_PORT_TUNNELED(pSECPort) && CHECK_PORT_BUFFER_SUPPLIER(pSECPort)) { - if (CHECK_PORT_ENABLED(pSECPort)) { - ret = pSECComponent->sec_AllocateTunnelBuffer(pSECPort, i); - if (ret!=OMX_ErrorNone) - goto EXIT; - } - } else { - if (CHECK_PORT_ENABLED(pSECPort)) { - SEC_OSAL_SemaphoreWait(pSECComponent->pSECPort[i].loadedResource); - pSECPort->portDefinition.bPopulated = OMX_TRUE; - } - } - } - ret = pSECComponent->sec_mfc_componentInit(pOMXComponent); - if (ret != OMX_ErrorNone) { - /* - * if (CHECK_PORT_TUNNELED == OMX_TRUE) thenTunnel Buffer Free - */ - goto EXIT; - } - pSECComponent->bExitBufferProcessThread = OMX_FALSE; - SEC_OSAL_SignalCreate(&pSECComponent->pauseEvent); - for (i = 0; i < ALL_PORT_NUM; i++) { - SEC_OSAL_SemaphoreCreate(&pSECComponent->pSECPort[i].bufferSemID); - } - for (i = 0; i < ALL_PORT_NUM; i++) { - SEC_OSAL_MutexCreate(&pSECComponent->secDataBuffer[i].bufferMutex); - } - ret = SEC_OSAL_ThreadCreate(&pSECComponent->hBufferProcess, - SEC_OMX_BufferProcessThread, - pOMXComponent); - if (ret != OMX_ErrorNone) { - /* - * if (CHECK_PORT_TUNNELED == OMX_TRUE) thenTunnel Buffer Free - */ - - SEC_OSAL_SignalTerminate(pSECComponent->pauseEvent); - for (i = 0; i < ALL_PORT_NUM; i++) { - SEC_OSAL_MutexTerminate(pSECComponent->secDataBuffer[i].bufferMutex); - pSECComponent->secDataBuffer[i].bufferMutex = NULL; - } - for (i = 0; i < ALL_PORT_NUM; i++) { - SEC_OSAL_SemaphoreTerminate(pSECComponent->pSECPort[i].bufferSemID); - pSECComponent->pSECPort[i].bufferSemID = NULL; - } - - ret = OMX_ErrorInsufficientResources; - goto EXIT; - } - pSECComponent->currentState = OMX_StateIdle; - break; - case OMX_StateExecuting: - case OMX_StatePause: - SEC_OMX_BufferFlushProcessNoEvent(pOMXComponent, ALL_PORT_INDEX); - pSECComponent->currentState = OMX_StateIdle; - break; - case OMX_StateWaitForResources: - pSECComponent->currentState = OMX_StateIdle; - break; - } - break; - case OMX_StateExecuting: - switch (currentState) { - case OMX_StateLoaded: - ret = OMX_ErrorIncorrectStateTransition; - break; - case OMX_StateIdle: - for (i = 0; i < pSECComponent->portParam.nPorts; i++) { - pSECPort = &pSECComponent->pSECPort[i]; - if (CHECK_PORT_TUNNELED(pSECPort) && CHECK_PORT_BUFFER_SUPPLIER(pSECPort) && CHECK_PORT_ENABLED(pSECPort)) { - for (j = 0; j < pSECPort->tunnelBufferNum; j++) { - SEC_OSAL_SemaphorePost(pSECComponent->pSECPort[i].bufferSemID); - } - } - } - - pSECComponent->transientState = SEC_OMX_TransStateMax; - pSECComponent->currentState = OMX_StateExecuting; - SEC_OSAL_SignalSet(pSECComponent->pauseEvent); - break; - case OMX_StatePause: - for (i = 0; i < pSECComponent->portParam.nPorts; i++) { - pSECPort = &pSECComponent->pSECPort[i]; - if (CHECK_PORT_TUNNELED(pSECPort) && CHECK_PORT_BUFFER_SUPPLIER(pSECPort) && CHECK_PORT_ENABLED(pSECPort)) { - OMX_U32 semaValue = 0, cnt = 0; - SEC_OSAL_Get_SemaphoreCount(pSECComponent->pSECPort[i].bufferSemID, &semaValue); - if (SEC_OSAL_GetElemNum(&pSECPort->bufferQ) > semaValue) { - cnt = SEC_OSAL_GetElemNum(&pSECPort->bufferQ) - semaValue; - for (j = 0; j < cnt; j++) { - SEC_OSAL_SemaphorePost(pSECComponent->pSECPort[i].bufferSemID); - } - } - } - } - - pSECComponent->currentState = OMX_StateExecuting; - SEC_OSAL_SignalSet(pSECComponent->pauseEvent); - break; - case OMX_StateWaitForResources: - ret = OMX_ErrorIncorrectStateTransition; - break; - } - break; - case OMX_StatePause: - switch (currentState) { - case OMX_StateLoaded: - ret = OMX_ErrorIncorrectStateTransition; - break; - case OMX_StateIdle: - pSECComponent->currentState = OMX_StatePause; - break; - case OMX_StateExecuting: - pSECComponent->currentState = OMX_StatePause; - break; - case OMX_StateWaitForResources: - ret = OMX_ErrorIncorrectStateTransition; - break; - } - break; - case OMX_StateWaitForResources: - switch (currentState) { - case OMX_StateLoaded: - ret = SEC_OMX_In_WaitForResource(pOMXComponent); - pSECComponent->currentState = OMX_StateWaitForResources; - break; - case OMX_StateIdle: - case OMX_StateExecuting: - case OMX_StatePause: - ret = OMX_ErrorIncorrectStateTransition; - break; - } - break; - } - -EXIT: - if (ret == OMX_ErrorNone) { - if (pSECComponent->pCallbacks != NULL) { - pSECComponent->pCallbacks->EventHandler((OMX_HANDLETYPE)pOMXComponent, - pSECComponent->callbackData, - OMX_EventCmdComplete, OMX_CommandStateSet, - destState, NULL); - } - } else { - if (pSECComponent->pCallbacks != NULL) { - pSECComponent->pCallbacks->EventHandler((OMX_HANDLETYPE)pOMXComponent, - pSECComponent->callbackData, - OMX_EventError, ret, 0, NULL); - } - } - FunctionOut(); - - return ret; -} - -static OMX_ERRORTYPE SEC_OMX_MessageHandlerThread(OMX_PTR threadData) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_OMX_MESSAGE *message = NULL; - OMX_U32 messageType = 0, portIndex = 0; - - FunctionIn(); - - if (threadData == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - - pOMXComponent = (OMX_COMPONENTTYPE *)threadData; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - while (pSECComponent->bExitMessageHandlerThread != OMX_TRUE) { - SEC_OSAL_SemaphoreWait(pSECComponent->msgSemaphoreHandle); - message = (SEC_OMX_MESSAGE *)SEC_OSAL_Dequeue(&pSECComponent->messageQ); - if (message != NULL) { - messageType = message->messageType; - switch (messageType) { - case OMX_CommandStateSet: - ret = SEC_OMX_ComponentStateSet(pOMXComponent, message->messageParam); - break; - case OMX_CommandFlush: - ret = SEC_OMX_BufferFlushProcess(pOMXComponent, message->messageParam); - break; - case OMX_CommandPortDisable: - ret = SEC_OMX_PortDisableProcess(pOMXComponent, message->messageParam); - break; - case OMX_CommandPortEnable: - ret = SEC_OMX_PortEnableProcess(pOMXComponent, message->messageParam); - break; - case OMX_CommandMarkBuffer: - portIndex = message->messageParam; - pSECComponent->pSECPort[portIndex].markType.hMarkTargetComponent = ((OMX_MARKTYPE *)message->pCmdData)->hMarkTargetComponent; - pSECComponent->pSECPort[portIndex].markType.pMarkData = ((OMX_MARKTYPE *)message->pCmdData)->pMarkData; - break; - case (OMX_COMMANDTYPE)SEC_OMX_CommandComponentDeInit: - pSECComponent->bExitMessageHandlerThread = OMX_TRUE; - break; - default: - break; - } - SEC_OSAL_Free(message); - message = NULL; - } - } - - SEC_OSAL_ThreadExit(NULL); - -EXIT: - FunctionOut(); - - return ret; -} - -static OMX_ERRORTYPE SEC_StateSet(SEC_OMX_BASECOMPONENT *pSECComponent, OMX_U32 nParam) -{ - OMX_U32 destState = nParam; - OMX_U32 i = 0; - - if ((destState == OMX_StateIdle) && (pSECComponent->currentState == OMX_StateLoaded)) { - pSECComponent->transientState = SEC_OMX_TransStateLoadedToIdle; - for(i = 0; i < pSECComponent->portParam.nPorts; i++) { - pSECComponent->pSECPort[i].portState = OMX_StateIdle; - } - SEC_OSAL_Log(SEC_LOG_TRACE, "to OMX_StateIdle"); - } else if ((destState == OMX_StateLoaded) && (pSECComponent->currentState == OMX_StateIdle)) { - pSECComponent->transientState = SEC_OMX_TransStateIdleToLoaded; - for (i = 0; i < pSECComponent->portParam.nPorts; i++) { - pSECComponent->pSECPort[i].portState = OMX_StateLoaded; - } - SEC_OSAL_Log(SEC_LOG_TRACE, "to OMX_StateLoaded"); - } else if ((destState == OMX_StateIdle) && (pSECComponent->currentState == OMX_StateExecuting)) { - pSECComponent->transientState = SEC_OMX_TransStateExecutingToIdle; - SEC_OSAL_Log(SEC_LOG_TRACE, "to OMX_StateIdle"); - } else if ((destState == OMX_StateExecuting) && (pSECComponent->currentState == OMX_StateIdle)) { - pSECComponent->transientState = SEC_OMX_TransStateIdleToExecuting; - SEC_OSAL_Log(SEC_LOG_TRACE, "to OMX_StateExecuting"); - } else if (destState == OMX_StateInvalid) { - for (i = 0; i < pSECComponent->portParam.nPorts; i++) { - pSECComponent->pSECPort[i].portState = OMX_StateInvalid; - } - } - - return OMX_ErrorNone; -} - -static OMX_ERRORTYPE SEC_SetPortFlush(SEC_OMX_BASECOMPONENT *pSECComponent, OMX_U32 nParam) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASEPORT *pSECPort = NULL; - OMX_U32 portIndex = nParam; - OMX_U16 i = 0, cnt = 0, index = 0; - - - if ((pSECComponent->currentState == OMX_StateExecuting) || - (pSECComponent->currentState == OMX_StatePause)) { - if ((portIndex != ALL_PORT_INDEX) && - ((OMX_S32)portIndex >= (OMX_S32)pSECComponent->portParam.nPorts)) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - /********************* - * need flush event set ????? - **********************/ - cnt = (portIndex == ALL_PORT_INDEX ) ? ALL_PORT_NUM : 1; - for (i = 0; i < cnt; i++) { - if (portIndex == ALL_PORT_INDEX) - index = i; - else - index = portIndex; - pSECComponent->pSECPort[index].bIsPortFlushed = OMX_TRUE; - } - } else { - ret = OMX_ErrorIncorrectStateOperation; - goto EXIT; - } - ret = OMX_ErrorNone; - -EXIT: - return ret; -} - -static OMX_ERRORTYPE SEC_SetPortEnable(SEC_OMX_BASECOMPONENT *pSECComponent, OMX_U32 nParam) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASEPORT *pSECPort = NULL; - OMX_U32 portIndex = nParam; - OMX_U16 i = 0, cnt = 0; - - FunctionIn(); - - if ((portIndex != ALL_PORT_INDEX) && - ((OMX_S32)portIndex >= (OMX_S32)pSECComponent->portParam.nPorts)) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - if (portIndex == ALL_PORT_INDEX) { - for (i = 0; i < pSECComponent->portParam.nPorts; i++) { - pSECPort = &pSECComponent->pSECPort[i]; - if (CHECK_PORT_ENABLED(pSECPort)) { - ret = OMX_ErrorIncorrectStateOperation; - goto EXIT; - } else { - pSECPort->portState = OMX_StateIdle; - } - } - } else { - pSECPort = &pSECComponent->pSECPort[portIndex]; - if (CHECK_PORT_ENABLED(pSECPort)) { - ret = OMX_ErrorIncorrectStateOperation; - goto EXIT; - } else { - pSECPort->portState = OMX_StateIdle; - } - } - ret = OMX_ErrorNone; - -EXIT: - FunctionOut(); - - return ret; - -} - -static OMX_ERRORTYPE SEC_SetPortDisable(SEC_OMX_BASECOMPONENT *pSECComponent, OMX_U32 nParam) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASEPORT *pSECPort = NULL; - OMX_U32 portIndex = nParam; - OMX_U16 i = 0, cnt = 0; - - FunctionIn(); - - if ((portIndex != ALL_PORT_INDEX) && - ((OMX_S32)portIndex >= (OMX_S32)pSECComponent->portParam.nPorts)) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - if (portIndex == ALL_PORT_INDEX) { - for (i = 0; i < pSECComponent->portParam.nPorts; i++) { - pSECPort = &pSECComponent->pSECPort[i]; - if (!CHECK_PORT_ENABLED(pSECPort)) { - ret = OMX_ErrorIncorrectStateOperation; - goto EXIT; - } - pSECPort->portState = OMX_StateLoaded; - pSECPort->bIsPortDisabled = OMX_TRUE; - } - } else { - pSECPort = &pSECComponent->pSECPort[portIndex]; - pSECPort->portState = OMX_StateLoaded; - pSECPort->bIsPortDisabled = OMX_TRUE; - } - ret = OMX_ErrorNone; - -EXIT: - FunctionOut(); - - return ret; -} - -static OMX_ERRORTYPE SEC_SetMarkBuffer(SEC_OMX_BASECOMPONENT *pSECComponent, OMX_U32 nParam) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASEPORT *pSECPort = NULL; - OMX_U32 portIndex = nParam; - OMX_U16 i = 0, cnt = 0; - - - if (nParam >= pSECComponent->portParam.nPorts) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - if ((pSECComponent->currentState == OMX_StateExecuting) || - (pSECComponent->currentState == OMX_StatePause)) { - ret = OMX_ErrorNone; - } else { - ret = OMX_ErrorIncorrectStateOperation; - } - -EXIT: - return ret; -} - -static OMX_ERRORTYPE SEC_OMX_CommandQueue( - SEC_OMX_BASECOMPONENT *pSECComponent, - OMX_COMMANDTYPE Cmd, - OMX_U32 nParam, - OMX_PTR pCmdData) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_MESSAGE *command = (SEC_OMX_MESSAGE *)SEC_OSAL_Malloc(sizeof(SEC_OMX_MESSAGE)); - - if (command == NULL) { - ret = OMX_ErrorInsufficientResources; - goto EXIT; - } - command->messageType = (OMX_U32)Cmd; - command->messageParam = nParam; - command->pCmdData = pCmdData; - - ret = SEC_OSAL_Queue(&pSECComponent->messageQ, (void *)command); - if (ret != 0) { - ret = OMX_ErrorUndefined; - goto EXIT; - } - ret = SEC_OSAL_SemaphorePost(pSECComponent->msgSemaphoreHandle); - -EXIT: - return ret; -} - -OMX_ERRORTYPE SEC_OMX_SendCommand( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_COMMANDTYPE Cmd, - OMX_IN OMX_U32 nParam, - OMX_IN OMX_PTR pCmdData) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_OMX_MESSAGE *message = NULL; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - if (pSECComponent->currentState == OMX_StateInvalid) { - ret = OMX_ErrorInvalidState; - goto EXIT; - } - - switch (Cmd) { - case OMX_CommandStateSet : - SEC_OSAL_Log(SEC_LOG_TRACE, "Command: OMX_CommandStateSet"); - SEC_StateSet(pSECComponent, nParam); - break; - case OMX_CommandFlush : - SEC_OSAL_Log(SEC_LOG_TRACE, "Command: OMX_CommandFlush"); - ret = SEC_SetPortFlush(pSECComponent, nParam); - if (ret != OMX_ErrorNone) - goto EXIT; - break; - case OMX_CommandPortDisable : - SEC_OSAL_Log(SEC_LOG_TRACE, "Command: OMX_CommandPortDisable"); - ret = SEC_SetPortDisable(pSECComponent, nParam); - if (ret != OMX_ErrorNone) - goto EXIT; - break; - case OMX_CommandPortEnable : - SEC_OSAL_Log(SEC_LOG_TRACE, "Command: OMX_CommandPortEnable"); - ret = SEC_SetPortEnable(pSECComponent, nParam); - if (ret != OMX_ErrorNone) - goto EXIT; - break; - case OMX_CommandMarkBuffer : - SEC_OSAL_Log(SEC_LOG_TRACE, "Command: OMX_CommandMarkBuffer"); - ret = SEC_SetMarkBuffer(pSECComponent, nParam); - if (ret != OMX_ErrorNone) - goto EXIT; - break; -/* - case SEC_CommandFillBuffer : - case SEC_CommandEmptyBuffer : - case SEC_CommandDeInit : -*/ - default: - break; - } - - ret = SEC_OMX_CommandQueue(pSECComponent, Cmd, nParam, pCmdData); - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_GetParameter( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_INDEXTYPE nParamIndex, - OMX_INOUT OMX_PTR ComponentParameterStructure) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - if (ComponentParameterStructure == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - if (pSECComponent->currentState == OMX_StateInvalid) { - ret = OMX_ErrorInvalidState; - goto EXIT; - } - - switch (nParamIndex) { - case (OMX_INDEXTYPE)OMX_COMPONENT_CAPABILITY_TYPE_INDEX: - { - /* For Android PV OpenCORE */ - OMXComponentCapabilityFlagsType *capabilityFlags = (OMXComponentCapabilityFlagsType *)ComponentParameterStructure; - SEC_OSAL_Memcpy(capabilityFlags, &pSECComponent->capabilityFlags, sizeof(OMXComponentCapabilityFlagsType)); - } - break; - case OMX_IndexParamAudioInit: - case OMX_IndexParamVideoInit: - case OMX_IndexParamImageInit: - case OMX_IndexParamOtherInit: - { - OMX_PORT_PARAM_TYPE *portParam = (OMX_PORT_PARAM_TYPE *)ComponentParameterStructure; - ret = SEC_OMX_Check_SizeVersion(portParam, sizeof(OMX_PORT_PARAM_TYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - portParam->nPorts = 0; - portParam->nStartPortNumber = 0; - } - break; - case OMX_IndexParamPortDefinition: - { - OMX_PARAM_PORTDEFINITIONTYPE *portDefinition = (OMX_PARAM_PORTDEFINITIONTYPE *)ComponentParameterStructure; - OMX_U32 portIndex = portDefinition->nPortIndex; - SEC_OMX_BASEPORT *pSECPort; - - if (portIndex >= pSECComponent->portParam.nPorts) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - ret = SEC_OMX_Check_SizeVersion(portDefinition, sizeof(OMX_PARAM_PORTDEFINITIONTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - pSECPort = &pSECComponent->pSECPort[portIndex]; - SEC_OSAL_Memcpy(portDefinition, &pSECPort->portDefinition, portDefinition->nSize); - } - break; - case OMX_IndexParamPriorityMgmt: - { - OMX_PRIORITYMGMTTYPE *compPriority = (OMX_PRIORITYMGMTTYPE *)ComponentParameterStructure; - - ret = SEC_OMX_Check_SizeVersion(compPriority, sizeof(OMX_PRIORITYMGMTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - compPriority->nGroupID = pSECComponent->compPriority.nGroupID; - compPriority->nGroupPriority = pSECComponent->compPriority.nGroupPriority; - } - break; - - case OMX_IndexParamCompBufferSupplier: - { - OMX_PARAM_BUFFERSUPPLIERTYPE *bufferSupplier = (OMX_PARAM_BUFFERSUPPLIERTYPE *)ComponentParameterStructure; - OMX_U32 portIndex = bufferSupplier->nPortIndex; - SEC_OMX_BASEPORT *pSECPort; - - if ((pSECComponent->currentState == OMX_StateLoaded) || - (pSECComponent->currentState == OMX_StateWaitForResources)) { - if (portIndex >= pSECComponent->portParam.nPorts) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - ret = SEC_OMX_Check_SizeVersion(bufferSupplier, sizeof(OMX_PARAM_BUFFERSUPPLIERTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - pSECPort = &pSECComponent->pSECPort[portIndex]; - - - if (pSECPort->portDefinition.eDir == OMX_DirInput) { - if (CHECK_PORT_BUFFER_SUPPLIER(pSECPort)) { - bufferSupplier->eBufferSupplier = OMX_BufferSupplyInput; - } else if (CHECK_PORT_TUNNELED(pSECPort)) { - bufferSupplier->eBufferSupplier = OMX_BufferSupplyOutput; - } else { - bufferSupplier->eBufferSupplier = OMX_BufferSupplyUnspecified; - } - } else { - if (CHECK_PORT_BUFFER_SUPPLIER(pSECPort)) { - bufferSupplier->eBufferSupplier = OMX_BufferSupplyOutput; - } else if (CHECK_PORT_TUNNELED(pSECPort)) { - bufferSupplier->eBufferSupplier = OMX_BufferSupplyInput; - } else { - bufferSupplier->eBufferSupplier = OMX_BufferSupplyUnspecified; - } - } - } - else - { - ret = OMX_ErrorIncorrectStateOperation; - goto EXIT; - } - } - break; - default: - { - ret = OMX_ErrorUnsupportedIndex; - goto EXIT; - } - break; - } - - ret = OMX_ErrorNone; - -EXIT: - - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_SetParameter( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_INDEXTYPE nIndex, - OMX_IN OMX_PTR ComponentParameterStructure) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - if (ComponentParameterStructure == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - if (pSECComponent->currentState == OMX_StateInvalid) { - ret = OMX_ErrorInvalidState; - goto EXIT; - } - - switch (nIndex) { - case OMX_IndexParamAudioInit: - case OMX_IndexParamVideoInit: - case OMX_IndexParamImageInit: - case OMX_IndexParamOtherInit: - { - OMX_PORT_PARAM_TYPE *portParam = (OMX_PORT_PARAM_TYPE *)ComponentParameterStructure; - ret = SEC_OMX_Check_SizeVersion(portParam, sizeof(OMX_PORT_PARAM_TYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if ((pSECComponent->currentState != OMX_StateLoaded) && - (pSECComponent->currentState != OMX_StateWaitForResources)) { - ret = OMX_ErrorIncorrectStateOperation; - goto EXIT; - } - ret = OMX_ErrorUndefined; - /* SEC_OSAL_Memcpy(&pSECComponent->portParam, portParam, sizeof(OMX_PORT_PARAM_TYPE)); */ - } - break; - case OMX_IndexParamPortDefinition: - { - OMX_PARAM_PORTDEFINITIONTYPE *portDefinition = (OMX_PARAM_PORTDEFINITIONTYPE *)ComponentParameterStructure; - OMX_U32 portIndex = portDefinition->nPortIndex; - SEC_OMX_BASEPORT *pSECPort; - - if (portIndex >= pSECComponent->portParam.nPorts) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - ret = SEC_OMX_Check_SizeVersion(portDefinition, sizeof(OMX_PARAM_PORTDEFINITIONTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - pSECPort = &pSECComponent->pSECPort[portIndex]; - - if ((pSECComponent->currentState != OMX_StateLoaded) && (pSECComponent->currentState != OMX_StateWaitForResources)) { - if (pSECPort->portDefinition.bEnabled == OMX_TRUE) { - ret = OMX_ErrorIncorrectStateOperation; - goto EXIT; - } - } - if (portDefinition->nBufferCountActual < pSECPort->portDefinition.nBufferCountMin) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - - SEC_OSAL_Memcpy(&pSECPort->portDefinition, portDefinition, portDefinition->nSize); - } - break; - case OMX_IndexParamPriorityMgmt: - { - OMX_PRIORITYMGMTTYPE *compPriority = (OMX_PRIORITYMGMTTYPE *)ComponentParameterStructure; - - if ((pSECComponent->currentState != OMX_StateLoaded) && - (pSECComponent->currentState != OMX_StateWaitForResources)) { - ret = OMX_ErrorIncorrectStateOperation; - goto EXIT; - } - - ret = SEC_OMX_Check_SizeVersion(compPriority, sizeof(OMX_PRIORITYMGMTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - pSECComponent->compPriority.nGroupID = compPriority->nGroupID; - pSECComponent->compPriority.nGroupPriority = compPriority->nGroupPriority; - } - break; - case OMX_IndexParamCompBufferSupplier: - { - OMX_PARAM_BUFFERSUPPLIERTYPE *bufferSupplier = (OMX_PARAM_BUFFERSUPPLIERTYPE *)ComponentParameterStructure; - OMX_U32 portIndex = bufferSupplier->nPortIndex; - SEC_OMX_BASEPORT *pSECPort = &pSECComponent->pSECPort[portIndex]; - - if ((pSECComponent->currentState != OMX_StateLoaded) && (pSECComponent->currentState != OMX_StateWaitForResources)) { - if (pSECPort->portDefinition.bEnabled == OMX_TRUE) { - ret = OMX_ErrorIncorrectStateOperation; - goto EXIT; - } - } - - if (portIndex >= pSECComponent->portParam.nPorts) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - ret = SEC_OMX_Check_SizeVersion(bufferSupplier, sizeof(OMX_PARAM_BUFFERSUPPLIERTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (bufferSupplier->eBufferSupplier == OMX_BufferSupplyUnspecified) { - ret = OMX_ErrorNone; - goto EXIT; - } - if (CHECK_PORT_TUNNELED(pSECPort) == 0) { - ret = OMX_ErrorNone; /*OMX_ErrorNone ?????*/ - goto EXIT; - } - - if (pSECPort->portDefinition.eDir == OMX_DirInput) { - if (bufferSupplier->eBufferSupplier == OMX_BufferSupplyInput) { - /* - if (CHECK_PORT_BUFFER_SUPPLIER(pSECPort)) { - ret = OMX_ErrorNone; - } - */ - pSECPort->tunnelFlags |= SEC_TUNNEL_IS_SUPPLIER; - bufferSupplier->nPortIndex = pSECPort->tunneledPort; - ret = OMX_SetParameter(pSECPort->tunneledComponent, OMX_IndexParamCompBufferSupplier, bufferSupplier); - goto EXIT; - } else if (bufferSupplier->eBufferSupplier == OMX_BufferSupplyOutput) { - ret = OMX_ErrorNone; - if (CHECK_PORT_BUFFER_SUPPLIER(pSECPort)) { - pSECPort->tunnelFlags &= ~SEC_TUNNEL_IS_SUPPLIER; - bufferSupplier->nPortIndex = pSECPort->tunneledPort; - ret = OMX_SetParameter(pSECPort->tunneledComponent, OMX_IndexParamCompBufferSupplier, bufferSupplier); - } - goto EXIT; - } - } else if (pSECPort->portDefinition.eDir == OMX_DirOutput) { - if (bufferSupplier->eBufferSupplier == OMX_BufferSupplyInput) { - ret = OMX_ErrorNone; - if (CHECK_PORT_BUFFER_SUPPLIER(pSECPort)) { - pSECPort->tunnelFlags &= ~SEC_TUNNEL_IS_SUPPLIER; - ret = OMX_ErrorNone; - } - goto EXIT; - } else if (bufferSupplier->eBufferSupplier == OMX_BufferSupplyOutput) { - /* - if (CHECK_PORT_BUFFER_SUPPLIER(pSECPort)) { - ret = OMX_ErrorNone; - } - */ - pSECPort->tunnelFlags |= SEC_TUNNEL_IS_SUPPLIER; - ret = OMX_ErrorNone; - goto EXIT; - } - } - } - break; - default: - { - ret = OMX_ErrorUnsupportedIndex; - goto EXIT; - } - break; - } - - ret = OMX_ErrorNone; - -EXIT: - - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_GetConfig( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_INDEXTYPE nIndex, - OMX_INOUT OMX_PTR pComponentConfigStructure) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - if (pComponentConfigStructure == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - if (pSECComponent->currentState == OMX_StateInvalid) { - ret = OMX_ErrorInvalidState; - goto EXIT; - } - ret = OMX_ErrorUnsupportedIndex; - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_SetConfig( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_INDEXTYPE nIndex, - OMX_IN OMX_PTR pComponentConfigStructure) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - if (pComponentConfigStructure == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - if (pSECComponent->currentState == OMX_StateInvalid) { - ret = OMX_ErrorInvalidState; - goto EXIT; - } - ret = OMX_ErrorUnsupportedIndex; - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_GetExtensionIndex( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_STRING cParameterName, - OMX_OUT OMX_INDEXTYPE *pIndexType) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - if ((cParameterName == NULL) || (pIndexType == NULL)) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - if (pSECComponent->currentState == OMX_StateInvalid) { - ret = OMX_ErrorInvalidState; - goto EXIT; - } - - ret = OMX_ErrorBadParameter; - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_SetCallbacks ( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_CALLBACKTYPE* pCallbacks, - OMX_IN OMX_PTR pAppData) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - if (pCallbacks == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - if (pSECComponent->currentState == OMX_StateInvalid) { - ret = OMX_ErrorInvalidState; - goto EXIT; - } - if (pSECComponent->currentState != OMX_StateLoaded) { - ret = OMX_ErrorIncorrectStateOperation; - goto EXIT; - } - - pSECComponent->pCallbacks = pCallbacks; - pSECComponent->callbackData = pAppData; - - ret = OMX_ErrorNone; - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_UseEGLImage( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_INOUT OMX_BUFFERHEADERTYPE **ppBufferHdr, - OMX_IN OMX_U32 nPortIndex, - OMX_IN OMX_PTR pAppPrivate, - OMX_IN void *eglImage) -{ - return OMX_ErrorNotImplemented; -} - -OMX_ERRORTYPE SEC_OMX_BaseComponent_Constructor( - OMX_IN OMX_HANDLETYPE hComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorBadParameter, Line:%d", __LINE__); - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - pSECComponent = SEC_OSAL_Malloc(sizeof(SEC_OMX_BASECOMPONENT)); - if (pSECComponent == NULL) { - ret = OMX_ErrorInsufficientResources; - SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorInsufficientResources, Line:%d", __LINE__); - goto EXIT; - } - SEC_OSAL_Memset(pSECComponent, 0, sizeof(SEC_OMX_BASECOMPONENT)); - pOMXComponent->pComponentPrivate = (OMX_PTR)pSECComponent; - - ret = SEC_OSAL_SemaphoreCreate(&pSECComponent->msgSemaphoreHandle); - if (ret != OMX_ErrorNone) { - ret = OMX_ErrorInsufficientResources; - SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorInsufficientResources, Line:%d", __LINE__); - goto EXIT; - } - ret = SEC_OSAL_MutexCreate(&pSECComponent->compMutex); - if (ret != OMX_ErrorNone) { - ret = OMX_ErrorInsufficientResources; - SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorInsufficientResources, Line:%d", __LINE__); - goto EXIT; - } - - pSECComponent->bExitMessageHandlerThread = OMX_FALSE; - SEC_OSAL_QueueCreate(&pSECComponent->messageQ); - ret = SEC_OSAL_ThreadCreate(&pSECComponent->hMessageHandler, SEC_OMX_MessageHandlerThread, pOMXComponent); - if (ret != OMX_ErrorNone) { - ret = OMX_ErrorInsufficientResources; - SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorInsufficientResources, Line:%d", __LINE__); - goto EXIT; - } - - pOMXComponent->GetComponentVersion = &SEC_OMX_GetComponentVersion; - pOMXComponent->SendCommand = &SEC_OMX_SendCommand; - pOMXComponent->GetExtensionIndex = &SEC_OMX_GetExtensionIndex; - pOMXComponent->GetState = &SEC_OMX_GetState; - pOMXComponent->SetCallbacks = &SEC_OMX_SetCallbacks; - pOMXComponent->UseEGLImage = &SEC_OMX_UseEGLImage; - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_BaseComponent_Destructor( - OMX_IN OMX_HANDLETYPE hComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - OMX_U32 semaValue = 0; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - SEC_OMX_CommandQueue(pSECComponent, SEC_OMX_CommandComponentDeInit, 0, NULL); - SEC_OSAL_SleepMillisec(0); - SEC_OSAL_Get_SemaphoreCount(pSECComponent->msgSemaphoreHandle, &semaValue); - if (semaValue == 0) - SEC_OSAL_SemaphorePost(pSECComponent->msgSemaphoreHandle); - SEC_OSAL_SemaphorePost(pSECComponent->msgSemaphoreHandle); - - SEC_OSAL_ThreadTerminate(pSECComponent->hMessageHandler); - pSECComponent->hMessageHandler = NULL; - - SEC_OSAL_MutexTerminate(pSECComponent->compMutex); - pSECComponent->compMutex = NULL; - SEC_OSAL_SemaphoreTerminate(pSECComponent->msgSemaphoreHandle); - pSECComponent->msgSemaphoreHandle = NULL; - SEC_OSAL_QueueTerminate(&pSECComponent->messageQ); - - SEC_OSAL_Free(pSECComponent); - pSECComponent = NULL; - - ret = OMX_ErrorNone; -EXIT: - FunctionOut(); - - return ret; -} diff --git a/sec_mm/sec_omx/sec_omx_component/common/SEC_OMX_Basecomponent.h b/sec_mm/sec_omx/sec_omx_component/common/SEC_OMX_Basecomponent.h deleted file mode 100644 index d413257..0000000 --- a/sec_mm/sec_omx/sec_omx_component/common/SEC_OMX_Basecomponent.h +++ /dev/null @@ -1,174 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OMX_Basecomponent.h - * @brief - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * Yunji Kim (yunji.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#ifndef SEC_OMX_BASECOMP -#define SEC_OMX_BASECOMP - -#include "SEC_OMX_Def.h" -#include "OMX_Component.h" -#include "SEC_OSAL_Queue.h" -#include "SEC_OMX_Baseport.h" - - -typedef struct _SEC_OMX_MESSAGE -{ - OMX_U32 messageType; - OMX_U32 messageParam; - OMX_PTR pCmdData; -} SEC_OMX_MESSAGE; - -typedef struct _SEC_OMX_DATABUFFER -{ - OMX_HANDLETYPE bufferMutex; - OMX_BUFFERHEADERTYPE* bufferHeader; - OMX_BOOL dataValid; - OMX_U32 allocSize; - OMX_U32 dataLen; - OMX_U32 usedDataLen; - OMX_U32 remainDataLen; - OMX_U32 nFlags; - OMX_TICKS timeStamp; -} SEC_OMX_DATABUFFER; - -typedef struct _SEC_BUFFER_HEADER{ - void *YPhyAddr; // [IN/OUT] physical address of Y - void *CPhyAddr; // [IN/OUT] physical address of CbCr - void *YVirAddr; // [IN/OUT] virtual address of Y - void *CVirAddr; // [IN/OUT] virtual address of CbCr - int YSize; // [IN/OUT] input size of Y data - int CSize; // [IN/OUT] input size of CbCr data -} SEC_BUFFER_HEADER; - -typedef struct _SEC_OMX_DATA -{ - OMX_BYTE dataBuffer; - OMX_U32 allocSize; - OMX_U32 dataLen; - OMX_U32 usedDataLen; - OMX_U32 remainDataLen; - OMX_U32 previousDataLen; - OMX_U32 nFlags; - OMX_TICKS timeStamp; - SEC_BUFFER_HEADER specificBufferHeader; -} SEC_OMX_DATA; - -/* for Check TimeStamp after Seek */ -typedef struct _SEC_OMX_TIMESTAPM -{ - OMX_BOOL needSetStartTimeStamp; - OMX_BOOL needCheckStartTimeStamp; - OMX_TICKS startTimeStamp; - OMX_U32 nStartFlags; -} SEC_OMX_TIMESTAMP; - -typedef struct _SEC_OMX_BASECOMPONENT -{ - OMX_STRING componentName; - OMX_VERSIONTYPE componentVersion; - OMX_VERSIONTYPE specVersion; - - OMX_STATETYPE currentState; - SEC_OMX_TRANS_STATETYPE transientState; - - SEC_CODEC_TYPE codecType; - SEC_OMX_PRIORITYMGMTTYPE compPriority; - OMX_MARKTYPE propagateMarkType; - OMX_HANDLETYPE compMutex; - - OMX_HANDLETYPE hCodecHandle; - - /* Message Handler */ - OMX_BOOL bExitMessageHandlerThread; - OMX_HANDLETYPE hMessageHandler; - OMX_HANDLETYPE msgSemaphoreHandle; - SEC_QUEUE messageQ; - - /* Buffer Process */ - OMX_BOOL bExitBufferProcessThread; - OMX_HANDLETYPE hBufferProcess; - - /* Buffer */ - SEC_OMX_DATABUFFER secDataBuffer[2]; - - /* Data */ - SEC_OMX_DATA processData[2]; - - /* Port */ - OMX_PORT_PARAM_TYPE portParam; - SEC_OMX_BASEPORT *pSECPort; - - OMX_HANDLETYPE pauseEvent; - - /* Callback function */ - OMX_CALLBACKTYPE *pCallbacks; - OMX_PTR callbackData; - - /* Save Timestamp */ - OMX_TICKS timeStamp[MAX_TIMESTAMP]; - SEC_OMX_TIMESTAMP checkTimeStamp; - - /* Save Flags */ - OMX_U32 nFlags[MAX_FLAGS]; - - OMX_BOOL getAllDelayBuffer; - OMX_BOOL remainOutputData; - OMX_BOOL reInputData; - - /* Android CapabilityFlags */ - OMXComponentCapabilityFlagsType capabilityFlags; - - OMX_BOOL bUseFlagEOF; - OMX_BOOL bSaveFlagEOS; - - OMX_ERRORTYPE (*sec_mfc_componentInit)(OMX_COMPONENTTYPE *pOMXComponent); - OMX_ERRORTYPE (*sec_mfc_componentTerminate)(OMX_COMPONENTTYPE *pOMXComponent); - OMX_ERRORTYPE (*sec_mfc_bufferProcess) (OMX_COMPONENTTYPE *pOMXComponent, SEC_OMX_DATA *pInputData, SEC_OMX_DATA *pOutputData); - - OMX_ERRORTYPE (*sec_AllocateTunnelBuffer)(SEC_OMX_BASEPORT *pOMXBasePort, OMX_U32 nPortIndex); - OMX_ERRORTYPE (*sec_FreeTunnelBuffer)(SEC_OMX_BASEPORT *pOMXBasePort, OMX_U32 nPortIndex); - OMX_ERRORTYPE (*sec_BufferProcess)(OMX_HANDLETYPE hComponent); - OMX_ERRORTYPE (*sec_BufferReset)(OMX_COMPONENTTYPE *pOMXComponent, OMX_U32 nPortIndex); - OMX_ERRORTYPE (*sec_InputBufferReturn)(OMX_COMPONENTTYPE *pOMXComponent); - OMX_ERRORTYPE (*sec_OutputBufferReturn)(OMX_COMPONENTTYPE *pOMXComponent); - - int (*sec_checkInputFrame)(unsigned char *pInputStream, int buffSize, OMX_U32 flag, OMX_BOOL bPreviousFrameEOF, OMX_BOOL *pbEndOfFrame); - -} SEC_OMX_BASECOMPONENT; - - -#ifdef __cplusplus -extern "C" { -#endif - - OMX_ERRORTYPE SEC_OMX_Check_SizeVersion(OMX_PTR header, OMX_U32 size); - - -#ifdef __cplusplus -}; -#endif - -#endif diff --git a/sec_mm/sec_omx/sec_omx_component/common/SEC_OMX_Baseport.c b/sec_mm/sec_omx/sec_omx_component/common/SEC_OMX_Baseport.c deleted file mode 100644 index 97e00af..0000000 --- a/sec_mm/sec_omx/sec_omx_component/common/SEC_OMX_Baseport.c +++ /dev/null @@ -1,1009 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OMX_Baseport.c - * @brief - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * HyeYeon Chung (hyeon.chung@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#include -#include -#include - -#include "SEC_OMX_Macros.h" -#include "SEC_OSAL_Event.h" -#include "SEC_OSAL_Semaphore.h" -#include "SEC_OSAL_Mutex.h" - -#include "SEC_OMX_Baseport.h" -#include "SEC_OMX_Basecomponent.h" - -#undef SEC_LOG_TAG -#define SEC_LOG_TAG "SEC_BASE_PORT" -#define SEC_LOG_OFF -#include "SEC_OSAL_Log.h" - - -OMX_ERRORTYPE SEC_OMX_FlushPort(OMX_COMPONENTTYPE *pOMXComponent, OMX_S32 portIndex) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASECOMPONENT *pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - SEC_OMX_BASEPORT *pSECPort = NULL; - OMX_BUFFERHEADERTYPE *bufferHeader = NULL; - SEC_OMX_MESSAGE *message = NULL; - OMX_U32 flushNum = 0; - OMX_S32 semValue = 0; - - FunctionIn(); - - pSECPort = &pSECComponent->pSECPort[portIndex]; - while (SEC_OSAL_GetElemNum(&pSECPort->bufferQ) > 0) { - SEC_OSAL_Get_SemaphoreCount(pSECComponent->pSECPort[portIndex].bufferSemID, &semValue); - if (semValue == 0) - SEC_OSAL_SemaphorePost(pSECComponent->pSECPort[portIndex].bufferSemID); - SEC_OSAL_SemaphoreWait(pSECComponent->pSECPort[portIndex].bufferSemID); - - message = (SEC_OMX_MESSAGE *)SEC_OSAL_Dequeue(&pSECPort->bufferQ); - if (message != NULL) { - bufferHeader = (OMX_BUFFERHEADERTYPE *)message->pCmdData; - bufferHeader->nFilledLen = 0; - - if (CHECK_PORT_TUNNELED(pSECPort) && !CHECK_PORT_BUFFER_SUPPLIER(pSECPort)) { - if (portIndex) { - OMX_EmptyThisBuffer(pSECPort->tunneledComponent, bufferHeader); - } else { - OMX_FillThisBuffer(pSECPort->tunneledComponent, bufferHeader); - } - SEC_OSAL_Free(message); - message = NULL; - } else if (CHECK_PORT_TUNNELED(pSECPort) && CHECK_PORT_BUFFER_SUPPLIER(pSECPort)) { - SEC_OSAL_Log(SEC_LOG_ERROR, "Tunneled mode is not working, Line:%d", __LINE__); - ret = OMX_ErrorNotImplemented; - SEC_OSAL_Queue(&pSECPort->bufferQ, pSECPort); - goto EXIT; - } else { - if (portIndex == OUTPUT_PORT_INDEX) { - pSECComponent->pCallbacks->FillBufferDone(pOMXComponent, pSECComponent->callbackData, bufferHeader); - } else { - pSECComponent->pCallbacks->EmptyBufferDone(pOMXComponent, pSECComponent->callbackData, bufferHeader); - } - - SEC_OSAL_Free(message); - message = NULL; - } - } - } - - if (pSECComponent->secDataBuffer[portIndex].dataValid == OMX_TRUE) { - if (CHECK_PORT_TUNNELED(pSECPort) && CHECK_PORT_BUFFER_SUPPLIER(pSECPort)) { - message = SEC_OSAL_Malloc(sizeof(SEC_OMX_MESSAGE)); - message->pCmdData = pSECComponent->secDataBuffer[portIndex].bufferHeader; - message->messageType = 0; - message->messageParam = -1; - SEC_OSAL_Queue(&pSECPort->bufferQ, message); - pSECComponent->sec_BufferReset(pOMXComponent, portIndex); - } else { - if (portIndex == INPUT_PORT_INDEX) - pSECComponent->sec_InputBufferReturn(pOMXComponent); - else if (portIndex == OUTPUT_PORT_INDEX) - pSECComponent->sec_OutputBufferReturn(pOMXComponent); - } - } - - if (CHECK_PORT_TUNNELED(pSECPort) && CHECK_PORT_BUFFER_SUPPLIER(pSECPort)) { - while (SEC_OSAL_GetElemNum(&pSECPort->bufferQ) < pSECPort->assignedBufferNum) { - SEC_OSAL_SemaphoreWait(pSECComponent->pSECPort[portIndex].bufferSemID); - } - if (SEC_OSAL_GetElemNum(&pSECPort->bufferQ) != pSECPort->assignedBufferNum) - SEC_OSAL_SetElemNum(&pSECPort->bufferQ, pSECPort->assignedBufferNum); - } else { - while(1) { - int cnt; - SEC_OSAL_Get_SemaphoreCount(pSECComponent->pSECPort[portIndex].bufferSemID, &cnt); - if (cnt == 0) - break; - SEC_OSAL_SemaphoreWait(pSECComponent->pSECPort[portIndex].bufferSemID); - } - SEC_OSAL_SetElemNum(&pSECPort->bufferQ, 0); - } - - pSECComponent->processData[portIndex].dataLen = 0; - pSECComponent->processData[portIndex].nFlags = 0; - pSECComponent->processData[portIndex].remainDataLen = 0; - pSECComponent->processData[portIndex].timeStamp = 0; - pSECComponent->processData[portIndex].usedDataLen = 0; - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_BufferFlushProcess(OMX_COMPONENTTYPE *pOMXComponent, OMX_S32 nPortIndex) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_OMX_BASEPORT *pSECPort = NULL; - OMX_S32 portIndex = 0; - OMX_U32 i = 0, cnt = 0; - SEC_OMX_DATABUFFER *flushBuffer = NULL; - - FunctionIn(); - - if (pOMXComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - cnt = (nPortIndex == ALL_PORT_INDEX ) ? ALL_PORT_NUM : 1; - - for (i = 0; i < cnt; i++) { - if (nPortIndex == ALL_PORT_INDEX) - portIndex = i; - else - portIndex = nPortIndex; - - SEC_OSAL_SignalSet(pSECComponent->pauseEvent); - - flushBuffer = &pSECComponent->secDataBuffer[portIndex]; - - SEC_OSAL_MutexLock(flushBuffer->bufferMutex); - ret = SEC_OMX_FlushPort(pOMXComponent, portIndex); - SEC_OSAL_MutexUnlock(flushBuffer->bufferMutex); - - pSECComponent->pSECPort[portIndex].bIsPortFlushed = OMX_FALSE; - - if (ret == OMX_ErrorNone) { - SEC_OSAL_Log(SEC_LOG_TRACE,"OMX_CommandFlush EventCmdComplete"); - pSECComponent->pCallbacks->EventHandler((OMX_HANDLETYPE)pOMXComponent, - pSECComponent->callbackData, - OMX_EventCmdComplete, - OMX_CommandFlush, portIndex, NULL); - } - - if (portIndex == INPUT_PORT_INDEX) { - pSECComponent->checkTimeStamp.needSetStartTimeStamp = OMX_TRUE; - pSECComponent->checkTimeStamp.needCheckStartTimeStamp = OMX_FALSE; - SEC_OSAL_Memset(pSECComponent->timeStamp, -19771003, sizeof(OMX_TICKS) * MAX_TIMESTAMP); - SEC_OSAL_Memset(pSECComponent->nFlags, 0, sizeof(OMX_U32) * MAX_FLAGS); - pSECComponent->getAllDelayBuffer = OMX_FALSE; - pSECComponent->bSaveFlagEOS = OMX_FALSE; - pSECComponent->reInputData = OMX_FALSE; - } else if (portIndex == OUTPUT_PORT_INDEX) { - pSECComponent->remainOutputData = OMX_FALSE; - } - } - -EXIT: - if (ret != OMX_ErrorNone) { - pSECComponent->pCallbacks->EventHandler(pOMXComponent, - pSECComponent->callbackData, - OMX_EventError, - ret, 0, NULL); - } - - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_BufferFlushProcessNoEvent(OMX_COMPONENTTYPE *pOMXComponent, OMX_S32 nPortIndex) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_OMX_BASEPORT *pSECPort = NULL; - OMX_S32 portIndex = 0; - OMX_U32 i = 0, cnt = 0; - SEC_OMX_DATABUFFER *flushBuffer = NULL; - - FunctionIn(); - - if (pOMXComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - cnt = (nPortIndex == ALL_PORT_INDEX ) ? ALL_PORT_NUM : 1; - - for (i = 0; i < cnt; i++) { - if (nPortIndex == ALL_PORT_INDEX) - portIndex = i; - else - portIndex = nPortIndex; - - pSECComponent->pSECPort[portIndex].bIsPortFlushed = OMX_TRUE; - - SEC_OSAL_SignalSet(pSECComponent->pauseEvent); - - flushBuffer = &pSECComponent->secDataBuffer[portIndex]; - - SEC_OSAL_MutexLock(flushBuffer->bufferMutex); - ret = SEC_OMX_FlushPort(pOMXComponent, portIndex); - SEC_OSAL_MutexUnlock(flushBuffer->bufferMutex); - - pSECComponent->pSECPort[portIndex].bIsPortFlushed = OMX_FALSE; - - if (portIndex == INPUT_PORT_INDEX) { - pSECComponent->checkTimeStamp.needSetStartTimeStamp = OMX_TRUE; - pSECComponent->checkTimeStamp.needCheckStartTimeStamp = OMX_FALSE; - SEC_OSAL_Memset(pSECComponent->timeStamp, -19771003, sizeof(OMX_TICKS) * MAX_TIMESTAMP); - SEC_OSAL_Memset(pSECComponent->nFlags, 0, sizeof(OMX_U32) * MAX_FLAGS); - pSECComponent->getAllDelayBuffer = OMX_FALSE; - pSECComponent->bSaveFlagEOS = OMX_FALSE; - pSECComponent->remainOutputData = OMX_FALSE; - pSECComponent->reInputData = OMX_FALSE; - } - } - -EXIT: - if (ret != OMX_ErrorNone) { - pSECComponent->pCallbacks->EventHandler(pOMXComponent, - pSECComponent->callbackData, - OMX_EventError, - ret, 0, NULL); - } - - FunctionOut(); - - return ret; -} - - -OMX_ERRORTYPE SEC_OMX_EnablePort(OMX_COMPONENTTYPE *pOMXComponent, OMX_S32 portIndex) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASECOMPONENT *pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - SEC_OMX_BASEPORT *pSECPort = NULL; - OMX_U32 i = 0, cnt = 0; - - FunctionIn(); - - pSECPort = &pSECComponent->pSECPort[portIndex]; - pSECPort->portDefinition.bEnabled = OMX_TRUE; - - if (CHECK_PORT_TUNNELED(pSECPort) && CHECK_PORT_BUFFER_SUPPLIER(pSECPort)) { - ret = pSECComponent->sec_AllocateTunnelBuffer(pSECPort, portIndex); - if (OMX_ErrorNone != ret) { - goto EXIT; - } - pSECPort->portDefinition.bPopulated = OMX_TRUE; - if (pSECComponent->currentState == OMX_StateExecuting) { - for (i=0; itunnelBufferNum; i++) { - SEC_OSAL_SemaphorePost(pSECComponent->pSECPort[portIndex].bufferSemID); - } - } - } else if (CHECK_PORT_TUNNELED(pSECPort) && !CHECK_PORT_BUFFER_SUPPLIER(pSECPort)) { - if ((pSECComponent->currentState != OMX_StateLoaded) && (pSECComponent->currentState != OMX_StateWaitForResources)) { - SEC_OSAL_SemaphoreWait(pSECPort->loadedResource); - pSECPort->portDefinition.bPopulated = OMX_TRUE; - } - } else { - if ((pSECComponent->currentState != OMX_StateLoaded) && (pSECComponent->currentState != OMX_StateWaitForResources)) { - SEC_OSAL_SemaphoreWait(pSECPort->loadedResource); - pSECPort->portDefinition.bPopulated = OMX_TRUE; - } - } - ret = OMX_ErrorNone; - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_PortEnableProcess(OMX_COMPONENTTYPE *pOMXComponent, OMX_S32 nPortIndex) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - OMX_S32 portIndex = 0; - OMX_U32 i = 0, cnt = 0; - - FunctionIn(); - - if (pOMXComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - cnt = (nPortIndex == ALL_PORT_INDEX) ? ALL_PORT_NUM : 1; - - for (i = 0; i < cnt; i++) { - if (nPortIndex == ALL_PORT_INDEX) - portIndex = i; - else - portIndex = nPortIndex; - - ret = SEC_OMX_EnablePort(pOMXComponent, portIndex); - if (ret == OMX_ErrorNone) { - pSECComponent->pCallbacks->EventHandler(pOMXComponent, - pSECComponent->callbackData, - OMX_EventCmdComplete, - OMX_CommandPortEnable, portIndex, NULL); - } - } - -EXIT: - if (ret != OMX_ErrorNone) { - pSECComponent->pCallbacks->EventHandler(pOMXComponent, - pSECComponent->callbackData, - OMX_EventError, - ret, 0, NULL); - } - - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_DisablePort(OMX_COMPONENTTYPE *pOMXComponent, OMX_S32 portIndex) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASECOMPONENT *pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - SEC_OMX_BASEPORT *pSECPort = NULL; - OMX_U32 i = 0, elemNum = 0; - SEC_OMX_MESSAGE *message; - - FunctionIn(); - - pSECPort = &pSECComponent->pSECPort[portIndex]; - - if (!CHECK_PORT_ENABLED(pSECPort)) { - ret = OMX_ErrorNone; - goto EXIT; - } - - if (pSECComponent->currentState!=OMX_StateLoaded) { - if (CHECK_PORT_TUNNELED(pSECPort) && CHECK_PORT_BUFFER_SUPPLIER(pSECPort)) { - while (SEC_OSAL_GetElemNum(&pSECPort->bufferQ) >0 ) { - message = (SEC_OMX_MESSAGE*)SEC_OSAL_Dequeue(&pSECPort->bufferQ); - SEC_OSAL_Free(message); - } - ret = pSECComponent->sec_FreeTunnelBuffer(pSECPort, portIndex); - if (OMX_ErrorNone != ret) { - goto EXIT; - } - pSECPort->portDefinition.bPopulated = OMX_FALSE; - } else if (CHECK_PORT_TUNNELED(pSECPort) && !CHECK_PORT_BUFFER_SUPPLIER(pSECPort)) { - pSECPort->portDefinition.bPopulated = OMX_FALSE; - SEC_OSAL_SemaphoreWait(pSECPort->unloadedResource); - } else { - if (CHECK_PORT_BUFFER_SUPPLIER(pSECPort)) { - while (SEC_OSAL_GetElemNum(&pSECPort->bufferQ) >0 ) { - message = (SEC_OMX_MESSAGE*)SEC_OSAL_Dequeue(&pSECPort->bufferQ); - SEC_OSAL_Free(message); - } - } - pSECPort->portDefinition.bPopulated = OMX_FALSE; - SEC_OSAL_SemaphoreWait(pSECPort->unloadedResource); - } - } - pSECPort->portDefinition.bEnabled = OMX_FALSE; - ret = OMX_ErrorNone; - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_PortDisableProcess(OMX_COMPONENTTYPE *pOMXComponent, OMX_S32 nPortIndex) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - OMX_S32 portIndex = 0; - OMX_U32 i = 0, cnt = 0; - SEC_OMX_DATABUFFER *flushBuffer = NULL; - - FunctionIn(); - - if (pOMXComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - cnt = (nPortIndex == ALL_PORT_INDEX ) ? ALL_PORT_NUM : 1; - - /* port flush*/ - for(i = 0; i < cnt; i++) { - if (nPortIndex == ALL_PORT_INDEX) - portIndex = i; - else - portIndex = nPortIndex; - - pSECComponent->pSECPort[portIndex].bIsPortFlushed = OMX_TRUE; - - flushBuffer = &pSECComponent->secDataBuffer[portIndex]; - - SEC_OSAL_MutexLock(flushBuffer->bufferMutex); - ret = SEC_OMX_FlushPort(pOMXComponent, portIndex); - SEC_OSAL_MutexUnlock(flushBuffer->bufferMutex); - - pSECComponent->pSECPort[portIndex].bIsPortFlushed = OMX_FALSE; - - if (portIndex == INPUT_PORT_INDEX) { - pSECComponent->checkTimeStamp.needSetStartTimeStamp = OMX_TRUE; - pSECComponent->checkTimeStamp.needCheckStartTimeStamp = OMX_FALSE; - SEC_OSAL_Memset(pSECComponent->timeStamp, -19771003, sizeof(OMX_TICKS) * MAX_TIMESTAMP); - SEC_OSAL_Memset(pSECComponent->nFlags, 0, sizeof(OMX_U32) * MAX_FLAGS); - pSECComponent->getAllDelayBuffer = OMX_FALSE; - pSECComponent->bSaveFlagEOS = OMX_FALSE; - pSECComponent->reInputData = OMX_FALSE; - } else if (portIndex == OUTPUT_PORT_INDEX) { - pSECComponent->remainOutputData = OMX_FALSE; - } - } - - for(i = 0; i < cnt; i++) { - if (nPortIndex == ALL_PORT_INDEX) - portIndex = i; - else - portIndex = nPortIndex; - - ret = SEC_OMX_DisablePort(pOMXComponent, portIndex); - pSECComponent->pSECPort[portIndex].bIsPortDisabled = OMX_FALSE; - if (ret == OMX_ErrorNone) { - pSECComponent->pCallbacks->EventHandler(pOMXComponent, - pSECComponent->callbackData, - OMX_EventCmdComplete, - OMX_CommandPortDisable, portIndex, NULL); - } - } - -EXIT: - if (ret != OMX_ErrorNone) { - pSECComponent->pCallbacks->EventHandler(pOMXComponent, - pSECComponent->callbackData, - OMX_EventError, - ret, 0, NULL); - } - - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_EmptyThisBuffer( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_BUFFERHEADERTYPE *pBuffer) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_OMX_BASEPORT *pSECPort = NULL; - OMX_BOOL findBuffer = OMX_FALSE; - SEC_OMX_MESSAGE *message; - OMX_U32 i = 0; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - if (pSECComponent->currentState == OMX_StateInvalid) { - ret = OMX_ErrorInvalidState; - goto EXIT; - } - - if (pBuffer == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - if (pBuffer->nInputPortIndex != INPUT_PORT_INDEX) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - ret = SEC_OMX_Check_SizeVersion(pBuffer, sizeof(OMX_BUFFERHEADERTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if ((pSECComponent->currentState != OMX_StateIdle) && - (pSECComponent->currentState != OMX_StateExecuting) && - (pSECComponent->currentState != OMX_StatePause)) { - ret = OMX_ErrorIncorrectStateOperation; - goto EXIT; - } - - pSECPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - if ((!CHECK_PORT_ENABLED(pSECPort)) || - ((CHECK_PORT_BEING_FLUSHED(pSECPort) || CHECK_PORT_BEING_DISABLED(pSECPort)) && - (!CHECK_PORT_TUNNELED(pSECPort) || !CHECK_PORT_BUFFER_SUPPLIER(pSECPort))) || - ((pSECComponent->transientState == SEC_OMX_TransStateExecutingToIdle) && - (CHECK_PORT_TUNNELED(pSECPort) && !CHECK_PORT_BUFFER_SUPPLIER(pSECPort)))) { - ret = OMX_ErrorIncorrectStateOperation; - goto EXIT; - } - - for (i = 0; i < pSECPort->portDefinition.nBufferCountActual; i++) { - if (pBuffer == pSECPort->bufferHeader[i]) { - findBuffer = OMX_TRUE; - break; - } - } - - if (findBuffer == OMX_FALSE) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } else { - ret = OMX_ErrorNone; - } - - message = SEC_OSAL_Malloc(sizeof(SEC_OMX_MESSAGE)); - if (message == NULL) { - ret = OMX_ErrorInsufficientResources; - goto EXIT; - } - message->messageType = SEC_OMX_CommandEmptyBuffer; - message->messageParam = (OMX_U32) i; - message->pCmdData = (OMX_PTR)pBuffer; - - SEC_OSAL_Queue(&pSECPort->bufferQ, (void *)message); - SEC_OSAL_SemaphorePost(pSECPort->bufferSemID); - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_FillThisBuffer( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_BUFFERHEADERTYPE *pBuffer) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_OMX_BASEPORT *pSECPort = NULL; - OMX_BOOL findBuffer = OMX_FALSE; - SEC_OMX_MESSAGE *message; - OMX_U32 i = 0; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - if (pSECComponent->currentState == OMX_StateInvalid) { - ret = OMX_ErrorInvalidState; - goto EXIT; - } - - if (pBuffer == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - if (pBuffer->nOutputPortIndex != OUTPUT_PORT_INDEX) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - ret = SEC_OMX_Check_SizeVersion(pBuffer, sizeof(OMX_BUFFERHEADERTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if ((pSECComponent->currentState != OMX_StateIdle) && - (pSECComponent->currentState != OMX_StateExecuting) && - (pSECComponent->currentState != OMX_StatePause)) { - ret = OMX_ErrorIncorrectStateOperation; - goto EXIT; - } - - pSECPort = &pSECComponent->pSECPort[OUTPUT_PORT_INDEX]; - if ((!CHECK_PORT_ENABLED(pSECPort)) || - ((CHECK_PORT_BEING_FLUSHED(pSECPort) || CHECK_PORT_BEING_DISABLED(pSECPort)) && - (!CHECK_PORT_TUNNELED(pSECPort) || !CHECK_PORT_BUFFER_SUPPLIER(pSECPort))) || - ((pSECComponent->transientState == SEC_OMX_TransStateExecutingToIdle) && - (CHECK_PORT_TUNNELED(pSECPort) && !CHECK_PORT_BUFFER_SUPPLIER(pSECPort)))) { - ret = OMX_ErrorIncorrectStateOperation; - goto EXIT; - } - - for (i = 0; i < pSECPort->portDefinition.nBufferCountActual; i++) { - if (pBuffer == pSECPort->bufferHeader[i]) { - findBuffer = OMX_TRUE; - break; - } - } - - if (findBuffer == OMX_FALSE) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } else { - ret = OMX_ErrorNone; - } - - message = SEC_OSAL_Malloc(sizeof(SEC_OMX_MESSAGE)); - if (message == NULL) { - ret = OMX_ErrorInsufficientResources; - goto EXIT; - } - message->messageType = SEC_OMX_CommandFillBuffer; - message->messageParam = (OMX_U32) i; - message->pCmdData = (OMX_PTR)pBuffer; - - SEC_OSAL_Queue(&pSECPort->bufferQ, (void *)message); - SEC_OSAL_SemaphorePost(pSECPort->bufferSemID); - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_Port_Constructor(OMX_HANDLETYPE hComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_OMX_BASEPORT *pSECPort = NULL; - SEC_OMX_BASEPORT *pSECInputPort = NULL; - SEC_OMX_BASEPORT *pSECOutputPort = NULL; - int i = 0; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorBadParameter, Line:%d", __LINE__); - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorBadParameter, Line:%d", __LINE__); - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - INIT_SET_SIZE_VERSION(&pSECComponent->portParam, OMX_PORT_PARAM_TYPE); - pSECComponent->portParam.nPorts = ALL_PORT_NUM; - pSECComponent->portParam.nStartPortNumber = INPUT_PORT_INDEX; - - pSECPort = SEC_OSAL_Malloc(sizeof(SEC_OMX_BASEPORT) * ALL_PORT_NUM); - if (pSECPort == NULL) { - ret = OMX_ErrorInsufficientResources; - SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorInsufficientResources, Line:%d", __LINE__); - goto EXIT; - } - SEC_OSAL_Memset(pSECPort, 0, sizeof(SEC_OMX_BASEPORT) * ALL_PORT_NUM); - pSECComponent->pSECPort = pSECPort; - - /* Input Port */ - pSECInputPort = &pSECPort[INPUT_PORT_INDEX]; - - SEC_OSAL_QueueCreate(&pSECInputPort->bufferQ); - - pSECInputPort->bufferHeader = SEC_OSAL_Malloc(sizeof(OMX_BUFFERHEADERTYPE*) * MAX_BUFFER_NUM); - if (pSECInputPort->bufferHeader == NULL) { - SEC_OSAL_Free(pSECPort); - pSECPort = NULL; - ret = OMX_ErrorInsufficientResources; - SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorInsufficientResources, Line:%d", __LINE__); - goto EXIT; - } - SEC_OSAL_Memset(pSECInputPort->bufferHeader, 0, sizeof(OMX_BUFFERHEADERTYPE*) * MAX_BUFFER_NUM); - - pSECInputPort->bufferStateAllocate = SEC_OSAL_Malloc(sizeof(OMX_U32) * MAX_BUFFER_NUM); - if (pSECInputPort->bufferStateAllocate == NULL) { - SEC_OSAL_Free(pSECInputPort->bufferHeader); - pSECInputPort->bufferHeader = NULL; - SEC_OSAL_Free(pSECPort); - pSECPort = NULL; - ret = OMX_ErrorInsufficientResources; - SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorInsufficientResources, Line:%d", __LINE__); - goto EXIT; - } - SEC_OSAL_Memset(pSECInputPort->bufferStateAllocate, 0, sizeof(OMX_U32) * MAX_BUFFER_NUM); - - pSECInputPort->bufferSemID = NULL; - pSECInputPort->assignedBufferNum = 0; - pSECInputPort->portState = OMX_StateMax; - pSECInputPort->bIsPortFlushed = OMX_FALSE; - pSECInputPort->bIsPortDisabled = OMX_FALSE; - pSECInputPort->tunneledComponent = NULL; - pSECInputPort->tunneledPort = 0; - pSECInputPort->tunnelBufferNum = 0; - pSECInputPort->bufferSupplier = OMX_BufferSupplyUnspecified; - pSECInputPort->tunnelFlags = 0; - pSECInputPort->eControlRate = OMX_Video_ControlRateDisable; - ret = SEC_OSAL_SemaphoreCreate(&pSECInputPort->loadedResource); - if (ret != OMX_ErrorNone) { - SEC_OSAL_Free(pSECInputPort->bufferStateAllocate); - pSECInputPort->bufferStateAllocate = NULL; - SEC_OSAL_Free(pSECInputPort->bufferHeader); - pSECInputPort->bufferHeader = NULL; - SEC_OSAL_Free(pSECPort); - pSECPort = NULL; - goto EXIT; - } - ret = SEC_OSAL_SemaphoreCreate(&pSECInputPort->unloadedResource); - if (ret != OMX_ErrorNone) { - SEC_OSAL_SemaphoreTerminate(pSECInputPort->loadedResource); - pSECInputPort->loadedResource = NULL; - SEC_OSAL_Free(pSECInputPort->bufferStateAllocate); - pSECInputPort->bufferStateAllocate = NULL; - SEC_OSAL_Free(pSECInputPort->bufferHeader); - pSECInputPort->bufferHeader = NULL; - SEC_OSAL_Free(pSECPort); - pSECPort = NULL; - goto EXIT; - } - - INIT_SET_SIZE_VERSION(&pSECInputPort->portDefinition, OMX_PARAM_PORTDEFINITIONTYPE); - pSECInputPort->portDefinition.nPortIndex = INPUT_PORT_INDEX; - pSECInputPort->portDefinition.eDir = OMX_DirInput; - pSECInputPort->portDefinition.nBufferCountActual = 0; - pSECInputPort->portDefinition.nBufferCountMin = 0; - pSECInputPort->portDefinition.nBufferSize = 0; - pSECInputPort->portDefinition.bEnabled = OMX_FALSE; - pSECInputPort->portDefinition.bPopulated = OMX_FALSE; - pSECInputPort->portDefinition.eDomain = OMX_PortDomainMax; - pSECInputPort->portDefinition.bBuffersContiguous = OMX_FALSE; - pSECInputPort->portDefinition.nBufferAlignment = 0; - pSECInputPort->markType.hMarkTargetComponent = NULL; - pSECInputPort->markType.pMarkData = NULL; - pSECInputPort->bUseAndroidNativeBuffer = OMX_FALSE; - pSECInputPort->bStoreMetaDataInBuffer = OMX_FALSE; - - /* Output Port */ - pSECOutputPort = &pSECPort[OUTPUT_PORT_INDEX]; - - SEC_OSAL_QueueCreate(&pSECOutputPort->bufferQ); - - pSECOutputPort->bufferHeader = SEC_OSAL_Malloc(sizeof(OMX_BUFFERHEADERTYPE*) * MAX_BUFFER_NUM); - if (pSECOutputPort->bufferHeader == NULL) { - SEC_OSAL_SemaphoreTerminate(pSECInputPort->unloadedResource); - pSECInputPort->unloadedResource = NULL; - SEC_OSAL_SemaphoreTerminate(pSECInputPort->loadedResource); - pSECInputPort->loadedResource = NULL; - SEC_OSAL_Free(pSECInputPort->bufferStateAllocate); - pSECInputPort->bufferStateAllocate = NULL; - SEC_OSAL_Free(pSECInputPort->bufferHeader); - pSECInputPort->bufferHeader = NULL; - SEC_OSAL_Free(pSECPort); - pSECPort = NULL; - ret = OMX_ErrorInsufficientResources; - goto EXIT; - } - SEC_OSAL_Memset(pSECOutputPort->bufferHeader, 0, sizeof(OMX_BUFFERHEADERTYPE*) * MAX_BUFFER_NUM); - - pSECOutputPort->bufferStateAllocate = SEC_OSAL_Malloc(sizeof(OMX_U32) * MAX_BUFFER_NUM); - if (pSECOutputPort->bufferStateAllocate == NULL) { - SEC_OSAL_Free(pSECOutputPort->bufferHeader); - pSECOutputPort->bufferHeader = NULL; - - SEC_OSAL_SemaphoreTerminate(pSECInputPort->unloadedResource); - pSECInputPort->unloadedResource = NULL; - SEC_OSAL_SemaphoreTerminate(pSECInputPort->loadedResource); - pSECInputPort->loadedResource = NULL; - SEC_OSAL_Free(pSECInputPort->bufferStateAllocate); - pSECInputPort->bufferStateAllocate = NULL; - SEC_OSAL_Free(pSECInputPort->bufferHeader); - pSECInputPort->bufferHeader = NULL; - SEC_OSAL_Free(pSECPort); - pSECPort = NULL; - ret = OMX_ErrorInsufficientResources; - goto EXIT; - } - SEC_OSAL_Memset(pSECOutputPort->bufferStateAllocate, 0, sizeof(OMX_U32) * MAX_BUFFER_NUM); - - pSECOutputPort->bufferSemID = NULL; - pSECOutputPort->assignedBufferNum = 0; - pSECOutputPort->portState = OMX_StateMax; - pSECOutputPort->bIsPortFlushed = OMX_FALSE; - pSECOutputPort->bIsPortDisabled = OMX_FALSE; - pSECOutputPort->tunneledComponent = NULL; - pSECOutputPort->tunneledPort = 0; - pSECOutputPort->tunnelBufferNum = 0; - pSECOutputPort->bufferSupplier = OMX_BufferSupplyUnspecified; - pSECOutputPort->tunnelFlags = 0; - pSECOutputPort->eControlRate = OMX_Video_ControlRateDisable; - ret = SEC_OSAL_SemaphoreCreate(&pSECOutputPort->loadedResource); - if (ret != OMX_ErrorNone) { - SEC_OSAL_Free(pSECOutputPort->bufferStateAllocate); - pSECOutputPort->bufferStateAllocate = NULL; - SEC_OSAL_Free(pSECOutputPort->bufferHeader); - pSECOutputPort->bufferHeader = NULL; - - SEC_OSAL_SemaphoreTerminate(pSECInputPort->unloadedResource); - pSECInputPort->unloadedResource = NULL; - SEC_OSAL_SemaphoreTerminate(pSECInputPort->loadedResource); - pSECInputPort->loadedResource = NULL; - SEC_OSAL_Free(pSECInputPort->bufferStateAllocate); - pSECInputPort->bufferStateAllocate = NULL; - SEC_OSAL_Free(pSECInputPort->bufferHeader); - pSECInputPort->bufferHeader = NULL; - SEC_OSAL_Free(pSECPort); - pSECPort = NULL; - goto EXIT; - } - ret = SEC_OSAL_SemaphoreCreate(&pSECOutputPort->unloadedResource); - if (ret != OMX_ErrorNone) { - SEC_OSAL_SemaphoreTerminate(pSECOutputPort->loadedResource); - pSECOutputPort->loadedResource = NULL; - SEC_OSAL_Free(pSECOutputPort->bufferStateAllocate); - pSECOutputPort->bufferStateAllocate = NULL; - SEC_OSAL_Free(pSECOutputPort->bufferHeader); - pSECOutputPort->bufferHeader = NULL; - - SEC_OSAL_SemaphoreTerminate(pSECInputPort->unloadedResource); - pSECInputPort->unloadedResource = NULL; - SEC_OSAL_SemaphoreTerminate(pSECInputPort->loadedResource); - pSECInputPort->loadedResource = NULL; - SEC_OSAL_Free(pSECInputPort->bufferStateAllocate); - pSECInputPort->bufferStateAllocate = NULL; - SEC_OSAL_Free(pSECInputPort->bufferHeader); - pSECInputPort->bufferHeader = NULL; - SEC_OSAL_Free(pSECPort); - pSECPort = NULL; - goto EXIT; - } - - INIT_SET_SIZE_VERSION(&pSECOutputPort->portDefinition, OMX_PARAM_PORTDEFINITIONTYPE); - pSECOutputPort->portDefinition.nPortIndex = OUTPUT_PORT_INDEX; - pSECOutputPort->portDefinition.eDir = OMX_DirOutput; - pSECOutputPort->portDefinition.nBufferCountActual = 0; - pSECOutputPort->portDefinition.nBufferCountMin = 0; - pSECOutputPort->portDefinition.nBufferSize = 0; - pSECOutputPort->portDefinition.bEnabled = OMX_FALSE; - pSECOutputPort->portDefinition.bPopulated = OMX_FALSE; - pSECOutputPort->portDefinition.eDomain = OMX_PortDomainMax; - pSECOutputPort->portDefinition.bBuffersContiguous = OMX_FALSE; - pSECOutputPort->portDefinition.nBufferAlignment = 0; - pSECOutputPort->markType.hMarkTargetComponent = NULL; - pSECOutputPort->markType.pMarkData = NULL; - pSECOutputPort->bUseAndroidNativeBuffer = OMX_FALSE; - pSECOutputPort->bStoreMetaDataInBuffer = OMX_FALSE; - - pSECComponent->checkTimeStamp.needSetStartTimeStamp = OMX_FALSE; - pSECComponent->checkTimeStamp.needCheckStartTimeStamp = OMX_FALSE; - pSECComponent->checkTimeStamp.startTimeStamp = 0; - pSECComponent->checkTimeStamp.nStartFlags = 0x0; - - pOMXComponent->EmptyThisBuffer = &SEC_OMX_EmptyThisBuffer; - pOMXComponent->FillThisBuffer = &SEC_OMX_FillThisBuffer; - - ret = OMX_ErrorNone; -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_Port_Destructor(OMX_HANDLETYPE hComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_OMX_BASEPORT *pSECPort = NULL; - - FunctionIn(); - - int i = 0; - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - for (i = 0; i < ALL_PORT_NUM; i++) { - pSECPort = &pSECComponent->pSECPort[i]; - - SEC_OSAL_SemaphoreTerminate(pSECPort->loadedResource); - pSECPort->loadedResource = NULL; - SEC_OSAL_SemaphoreTerminate(pSECPort->unloadedResource); - pSECPort->unloadedResource = NULL; - SEC_OSAL_Free(pSECPort->bufferStateAllocate); - pSECPort->bufferStateAllocate = NULL; - SEC_OSAL_Free(pSECPort->bufferHeader); - pSECPort->bufferHeader = NULL; - - SEC_OSAL_QueueTerminate(&pSECPort->bufferQ); - } - SEC_OSAL_Free(pSECComponent->pSECPort); - pSECComponent->pSECPort = NULL; - ret = OMX_ErrorNone; -EXIT: - FunctionOut(); - - return ret; -} diff --git a/sec_mm/sec_omx/sec_omx_component/common/SEC_OMX_Baseport.h b/sec_mm/sec_omx/sec_omx_component/common/SEC_OMX_Baseport.h deleted file mode 100644 index 147f940..0000000 --- a/sec_mm/sec_omx/sec_omx_component/common/SEC_OMX_Baseport.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OMX_Baseport.h - * @brief - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * HyeYeon Chung (hyeon.chung@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#ifndef SEC_OMX_BASE_PORT -#define SEC_OMX_BASE_PORT - - -#include "OMX_Component.h" -#include "SEC_OMX_Def.h" -#include "SEC_OSAL_Queue.h" - - -#define BUFFER_STATE_ALLOCATED (1 << 0) -#define BUFFER_STATE_ASSIGNED (1 << 1) -#define HEADER_STATE_ALLOCATED (1 << 2) -#define BUFFER_STATE_FREE 0 - -#define MAX_BUFFER_NUM 20 - -#define INPUT_PORT_INDEX 0 -#define OUTPUT_PORT_INDEX 1 -#define ALL_PORT_INDEX -1 -#define ALL_PORT_NUM 2 - -typedef struct _SEC_OMX_BASEPORT -{ - OMX_BUFFERHEADERTYPE **bufferHeader; - OMX_U32 *bufferStateAllocate; - OMX_PARAM_PORTDEFINITIONTYPE portDefinition; - OMX_HANDLETYPE bufferSemID; - SEC_QUEUE bufferQ; - OMX_U32 assignedBufferNum; - OMX_STATETYPE portState; - OMX_HANDLETYPE loadedResource; - OMX_HANDLETYPE unloadedResource; - - OMX_BOOL bIsPortFlushed; - OMX_BOOL bIsPortDisabled; - OMX_MARKTYPE markType; - - OMX_CONFIG_RECTTYPE cropRectangle; - - /* Tunnel Info */ - OMX_HANDLETYPE tunneledComponent; - OMX_U32 tunneledPort; - OMX_U32 tunnelBufferNum; - OMX_BUFFERSUPPLIERTYPE bufferSupplier; - OMX_U32 tunnelFlags; - - OMX_VIDEO_CONTROLRATETYPE eControlRate; - - /* For Android Native Buffer */ - OMX_BOOL bUseAndroidNativeBuffer; - /* For Android Store Meta Data inBuffer */ - OMX_BOOL bStoreMetaDataInBuffer; - OMX_PTR pIMGGrallocModule; -} SEC_OMX_BASEPORT; - - -#ifdef __cplusplus -extern "C" { -#endif - -OMX_ERRORTYPE SEC_OMX_PortEnableProcess(OMX_COMPONENTTYPE *pOMXComponent, OMX_S32 nPortIndex); -OMX_ERRORTYPE SEC_OMX_PortDisableProcess(OMX_COMPONENTTYPE *pOMXComponent, OMX_S32 nPortIndex); -OMX_ERRORTYPE SEC_OMX_BufferFlushProcess(OMX_COMPONENTTYPE *pOMXComponent, OMX_S32 nPortIndex); -OMX_ERRORTYPE SEC_OMX_BufferFlushProcessNoEvent(OMX_COMPONENTTYPE *pOMXComponent, OMX_S32 nPortIndex); - -#ifdef __cplusplus -}; -#endif - - -#endif diff --git a/sec_mm/sec_omx/sec_omx_component/common/SEC_OMX_Resourcemanager.c b/sec_mm/sec_omx/sec_omx_component/common/SEC_OMX_Resourcemanager.c deleted file mode 100644 index 41673ad..0000000 --- a/sec_mm/sec_omx/sec_omx_component/common/SEC_OMX_Resourcemanager.c +++ /dev/null @@ -1,383 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OMX_Resourcemanager.c - * @brief - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#include -#include -#include - -#include "SEC_OMX_Resourcemanager.h" -#include "SEC_OMX_Basecomponent.h" - -#undef SEC_LOG_TAG -#define SEC_LOG_TAG "SEC_RM" -#define SEC_LOG_OFF -#include "SEC_OSAL_Log.h" - - -#define MAX_RESOURCE_VIDEO 4 - -/* Max allowable video scheduler component instance */ -static SEC_OMX_RM_COMPONENT_LIST *gpVideoRMComponentList = NULL; -static SEC_OMX_RM_COMPONENT_LIST *gpVideoRMWaitingList = NULL; -static OMX_HANDLETYPE ghVideoRMComponentListMutex = NULL; - - -OMX_ERRORTYPE addElementList(SEC_OMX_RM_COMPONENT_LIST **ppList, OMX_COMPONENTTYPE *pOMXComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_RM_COMPONENT_LIST *pTempComp = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - if (*ppList != NULL) { - pTempComp = *ppList; - while (pTempComp->pNext != NULL) { - pTempComp = pTempComp->pNext; - } - pTempComp->pNext = (SEC_OMX_RM_COMPONENT_LIST *)SEC_OSAL_Malloc(sizeof(SEC_OMX_RM_COMPONENT_LIST)); - if (pTempComp->pNext == NULL) { - ret = OMX_ErrorInsufficientResources; - goto EXIT; - } - ((SEC_OMX_RM_COMPONENT_LIST *)(pTempComp->pNext))->pNext = NULL; - ((SEC_OMX_RM_COMPONENT_LIST *)(pTempComp->pNext))->pOMXStandComp = pOMXComponent; - ((SEC_OMX_RM_COMPONENT_LIST *)(pTempComp->pNext))->groupPriority = pSECComponent->compPriority.nGroupPriority; - goto EXIT; - } else { - *ppList = (SEC_OMX_RM_COMPONENT_LIST *)SEC_OSAL_Malloc(sizeof(SEC_OMX_RM_COMPONENT_LIST)); - if (*ppList == NULL) { - ret = OMX_ErrorInsufficientResources; - goto EXIT; - } - pTempComp = *ppList; - pTempComp->pNext = NULL; - pTempComp->pOMXStandComp = pOMXComponent; - pTempComp->groupPriority = pSECComponent->compPriority.nGroupPriority; - } - -EXIT: - return ret; -} - -OMX_ERRORTYPE removeElementList(SEC_OMX_RM_COMPONENT_LIST **ppList, OMX_COMPONENTTYPE *pOMXComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_RM_COMPONENT_LIST *pCurrComp = NULL; - SEC_OMX_RM_COMPONENT_LIST *pPrevComp = NULL; - OMX_BOOL bDetectComp = OMX_FALSE; - - if (*ppList == NULL) { - ret = OMX_ErrorUndefined; - goto EXIT; - } - - pCurrComp = *ppList; - while (pCurrComp != NULL) { - if (pCurrComp->pOMXStandComp == pOMXComponent) { - if (*ppList == pCurrComp) { - *ppList = pCurrComp->pNext; - SEC_OSAL_Free(pCurrComp); - } else { - pPrevComp->pNext = pCurrComp->pNext; - SEC_OSAL_Free(pCurrComp); - } - bDetectComp = OMX_TRUE; - break; - } else { - pPrevComp = pCurrComp; - pCurrComp = pCurrComp->pNext; - } - } - - if (bDetectComp == OMX_FALSE) - ret = OMX_ErrorComponentNotFound; - else - ret = OMX_ErrorNone; - -EXIT: - return ret; -} - -int searchLowPriority(SEC_OMX_RM_COMPONENT_LIST *RMComp_list, int inComp_priority, SEC_OMX_RM_COMPONENT_LIST **outLowComp) -{ - int ret = 0; - SEC_OMX_RM_COMPONENT_LIST *pTempComp = NULL; - SEC_OMX_RM_COMPONENT_LIST *pCandidateComp = NULL; - - if (RMComp_list == NULL) - ret = -1; - - pTempComp = RMComp_list; - *outLowComp = 0; - - while (pTempComp != NULL) { - if (pTempComp->groupPriority > inComp_priority) { - if (pCandidateComp != NULL) { - if (pCandidateComp->groupPriority < pTempComp->groupPriority) - pCandidateComp = pTempComp; - } else { - pCandidateComp = pTempComp; - } - } - - pTempComp = pTempComp->pNext; - } - - *outLowComp = pCandidateComp; - if (pCandidateComp == NULL) - ret = 0; - else - ret = 1; - -EXIT: - return ret; -} - -OMX_ERRORTYPE removeComponent(OMX_COMPONENTTYPE *pOMXComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - if (pSECComponent->currentState == OMX_StateIdle) { - (*(pSECComponent->pCallbacks->EventHandler)) - (pOMXComponent, pSECComponent->callbackData, - OMX_EventError, OMX_ErrorResourcesLost, 0, NULL); - ret = OMX_SendCommand(pOMXComponent, OMX_CommandStateSet, OMX_StateLoaded, NULL); - if (ret != OMX_ErrorNone) { - ret = OMX_ErrorUndefined; - goto EXIT; - } - } else if ((pSECComponent->currentState == OMX_StateExecuting) || (pSECComponent->currentState == OMX_StatePause)) { - /* Todo */ - } - - ret = OMX_ErrorNone; - -EXIT: - return ret; -} - - -OMX_ERRORTYPE SEC_OMX_ResourceManager_Init() -{ - FunctionIn(); - SEC_OSAL_MutexCreate(&ghVideoRMComponentListMutex); - FunctionOut(); - return OMX_ErrorNone; -} - -OMX_ERRORTYPE SEC_OMX_ResourceManager_Deinit() -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_RM_COMPONENT_LIST *pCurrComponent; - SEC_OMX_RM_COMPONENT_LIST *pNextComponent; - - FunctionIn(); - - SEC_OSAL_MutexLock(ghVideoRMComponentListMutex); - - if (gpVideoRMComponentList) { - pCurrComponent = gpVideoRMComponentList; - while (pCurrComponent != NULL) { - pNextComponent = pCurrComponent->pNext; - SEC_OSAL_Free(pCurrComponent); - pCurrComponent = pNextComponent; - } - gpVideoRMComponentList = NULL; - } - - if (gpVideoRMWaitingList) { - pCurrComponent = gpVideoRMWaitingList; - while (pCurrComponent != NULL) { - pNextComponent = pCurrComponent->pNext; - SEC_OSAL_Free(pCurrComponent); - pCurrComponent = pNextComponent; - } - gpVideoRMWaitingList = NULL; - } - SEC_OSAL_MutexUnlock(ghVideoRMComponentListMutex); - - SEC_OSAL_MutexTerminate(ghVideoRMComponentListMutex); - ghVideoRMComponentListMutex = NULL; - - ret = OMX_ErrorNone; -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_Get_Resource(OMX_COMPONENTTYPE *pOMXComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_OMX_RM_COMPONENT_LIST *pComponentTemp = NULL; - SEC_OMX_RM_COMPONENT_LIST *pComponentCandidate = NULL; - int numElem = 0; - int lowCompDetect = 0; - - FunctionIn(); - - SEC_OSAL_MutexLock(ghVideoRMComponentListMutex); - - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - pComponentTemp = gpVideoRMComponentList; - if (pSECComponent->codecType == HW_VIDEO_CODEC) { - if (pComponentTemp != NULL) { - while (pComponentTemp) { - numElem++; - pComponentTemp = pComponentTemp->pNext; - } - } else { - numElem = 0; - } - if (numElem >= MAX_RESOURCE_VIDEO) { - lowCompDetect = searchLowPriority(gpVideoRMComponentList, pSECComponent->compPriority.nGroupPriority, &pComponentCandidate); - if (lowCompDetect <= 0) { - ret = OMX_ErrorInsufficientResources; - goto EXIT; - } else { - ret = removeComponent(pComponentCandidate->pOMXStandComp); - if (ret != OMX_ErrorNone) { - ret = OMX_ErrorInsufficientResources; - goto EXIT; - } else { - ret = removeElementList(&gpVideoRMComponentList, pComponentCandidate->pOMXStandComp); - ret = addElementList(&gpVideoRMComponentList, pOMXComponent); - if (ret != OMX_ErrorNone) { - ret = OMX_ErrorInsufficientResources; - goto EXIT; - } - } - } - } else { - ret = addElementList(&gpVideoRMComponentList, pOMXComponent); - if (ret != OMX_ErrorNone) { - ret = OMX_ErrorInsufficientResources; - goto EXIT; - } - } - } - ret = OMX_ErrorNone; - -EXIT: - - SEC_OSAL_MutexUnlock(ghVideoRMComponentListMutex); - - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_Release_Resource(OMX_COMPONENTTYPE *pOMXComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_OMX_RM_COMPONENT_LIST *pComponentTemp = NULL; - OMX_COMPONENTTYPE *pOMXWaitComponent = NULL; - int numElem = 0; - - FunctionIn(); - - SEC_OSAL_MutexLock(ghVideoRMComponentListMutex); - - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - pComponentTemp = gpVideoRMWaitingList; - if (pSECComponent->codecType == HW_VIDEO_CODEC) { - if (gpVideoRMComponentList == NULL) { - ret = OMX_ErrorUndefined; - goto EXIT; - } - - ret = removeElementList(&gpVideoRMComponentList, pOMXComponent); - if (ret != OMX_ErrorNone) { - ret = OMX_ErrorUndefined; - goto EXIT; - } - while (pComponentTemp) { - numElem++; - pComponentTemp = pComponentTemp->pNext; - } - if (numElem > 0) { - pOMXWaitComponent = gpVideoRMWaitingList->pOMXStandComp; - removeElementList(&gpVideoRMWaitingList, pOMXWaitComponent); - ret = OMX_SendCommand(pOMXWaitComponent, OMX_CommandStateSet, OMX_StateIdle, NULL); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - } - } - -EXIT: - - SEC_OSAL_MutexUnlock(ghVideoRMComponentListMutex); - - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_In_WaitForResource(OMX_COMPONENTTYPE *pOMXComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - - FunctionIn(); - - SEC_OSAL_MutexLock(ghVideoRMComponentListMutex); - - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - if (pSECComponent->codecType == HW_VIDEO_CODEC) - ret = addElementList(&gpVideoRMWaitingList, pOMXComponent); - - SEC_OSAL_MutexUnlock(ghVideoRMComponentListMutex); - - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_Out_WaitForResource(OMX_COMPONENTTYPE *pOMXComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - - FunctionIn(); - - SEC_OSAL_MutexLock(ghVideoRMComponentListMutex); - - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - if (pSECComponent->codecType == HW_VIDEO_CODEC) - ret = removeElementList(&gpVideoRMWaitingList, pOMXComponent); - - SEC_OSAL_MutexUnlock(ghVideoRMComponentListMutex); - - FunctionOut(); - - return ret; -} - diff --git a/sec_mm/sec_omx/sec_omx_component/common/SEC_OMX_Resourcemanager.h b/sec_mm/sec_omx/sec_omx_component/common/SEC_OMX_Resourcemanager.h deleted file mode 100644 index b958575..0000000 --- a/sec_mm/sec_omx/sec_omx_component/common/SEC_OMX_Resourcemanager.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OMX_Resourcemanager.h - * @brief - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#ifndef SEC_OMX_RESOURCEMANAGER -#define SEC_OMX_RESOURCEMANAGER - - -#include "SEC_OMX_Def.h" -#include "OMX_Component.h" - - -struct SEC_OMX_RM_COMPONENT_LIST; -typedef struct _SEC_OMX_RM_COMPONENT_LIST -{ - OMX_COMPONENTTYPE *pOMXStandComp; - OMX_U32 groupPriority; - struct SEC_OMX_RM_COMPONENT_LIST *pNext; -} SEC_OMX_RM_COMPONENT_LIST; - - -#ifdef __cplusplus -extern "C" { -#endif - -OMX_ERRORTYPE SEC_OMX_ResourceManager_Init(); -OMX_ERRORTYPE SEC_OMX_ResourceManager_Deinit(); -OMX_ERRORTYPE SEC_OMX_Get_Resource(OMX_COMPONENTTYPE *pOMXComponent); -OMX_ERRORTYPE SEC_OMX_Release_Resource(OMX_COMPONENTTYPE *pOMXComponent); -OMX_ERRORTYPE SEC_OMX_In_WaitForResource(OMX_COMPONENTTYPE *pOMXComponent); -OMX_ERRORTYPE SEC_OMX_Out_WaitForResource(OMX_COMPONENTTYPE *pOMXComponent); - -#ifdef __cplusplus -}; -#endif - -#endif diff --git a/sec_mm/sec_omx/sec_omx_component/video/dec/Android.mk b/sec_mm/sec_omx/sec_omx_component/video/dec/Android.mk deleted file mode 100644 index 401449b..0000000 --- a/sec_mm/sec_omx/sec_omx_component/video/dec/Android.mk +++ /dev/null @@ -1,20 +0,0 @@ -LOCAL_PATH := $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := \ - SEC_OMX_Vdec.c - -LOCAL_MODULE := libSEC_OMX_Vdec.aries -LOCAL_ARM_MODE := arm -LOCAL_MODULE_TAGS := optional - -LOCAL_C_INCLUDES := $(SEC_OMX_INC)/khronos \ - $(SEC_OMX_INC)/sec \ - $(SEC_OMX_TOP)/sec_osal \ - $(SEC_OMX_TOP)/sec_omx_core \ - $(SEC_OMX_COMPONENT)/common \ - $(SEC_OMX_COMPONENT)/video/dec - -LOCAL_C_INCLUDES += $(SEC_OMX_TOP)/sec_codecs/video/mfc_c110/include - -include $(BUILD_STATIC_LIBRARY) diff --git a/sec_mm/sec_omx/sec_omx_component/video/dec/SEC_OMX_Vdec.c b/sec_mm/sec_omx/sec_omx_component/video/dec/SEC_OMX_Vdec.c deleted file mode 100644 index 30a1acb..0000000 --- a/sec_mm/sec_omx/sec_omx_component/video/dec/SEC_OMX_Vdec.c +++ /dev/null @@ -1,1389 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OMX_Vdec.c - * @brief - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * HyeYeon Chung (hyeon.chung@samsung.com) - * Yunji Kim (yunji.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#include -#include -#include -#include "SEC_OMX_Macros.h" -#include "SEC_OSAL_Event.h" -#include "SEC_OMX_Vdec.h" -#include "SEC_OMX_Basecomponent.h" -#include "SEC_OSAL_Thread.h" -#include "color_space_convertor.h" - -#undef SEC_LOG_TAG -#define SEC_LOG_TAG "SEC_VIDEO_DEC" -#define SEC_LOG_OFF -#include "SEC_OSAL_Log.h" - - -inline void SEC_UpdateFrameSize(OMX_COMPONENTTYPE *pOMXComponent) -{ - SEC_OMX_BASECOMPONENT *pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - SEC_OMX_BASEPORT *secInputPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - SEC_OMX_BASEPORT *secOutputPort = &pSECComponent->pSECPort[OUTPUT_PORT_INDEX]; - - if ((secOutputPort->portDefinition.format.video.nFrameWidth != - secInputPort->portDefinition.format.video.nFrameWidth) || - (secOutputPort->portDefinition.format.video.nFrameHeight != - secInputPort->portDefinition.format.video.nFrameHeight)) { - OMX_U32 width = 0, height = 0; - - secOutputPort->portDefinition.format.video.nFrameWidth = - secInputPort->portDefinition.format.video.nFrameWidth; - secOutputPort->portDefinition.format.video.nFrameHeight = - secInputPort->portDefinition.format.video.nFrameHeight; - width = secOutputPort->portDefinition.format.video.nStride = - secInputPort->portDefinition.format.video.nStride; - height = secOutputPort->portDefinition.format.video.nSliceHeight = - secInputPort->portDefinition.format.video.nSliceHeight; - - switch(secOutputPort->portDefinition.format.video.eColorFormat) { - case OMX_COLOR_FormatYUV420Planar: - case OMX_COLOR_FormatYUV420SemiPlanar: - case OMX_SEC_COLOR_FormatANBYUV420SemiPlanar: - if (width && height) - secOutputPort->portDefinition.nBufferSize = (width * height * 3) / 2; - break; - default: - if (width && height) - secOutputPort->portDefinition.nBufferSize = width * height * 2; - break; - } - } - - return ; -} - -OMX_ERRORTYPE SEC_OMX_UseBuffer( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_INOUT OMX_BUFFERHEADERTYPE **ppBufferHdr, - OMX_IN OMX_U32 nPortIndex, - OMX_IN OMX_PTR pAppPrivate, - OMX_IN OMX_U32 nSizeBytes, - OMX_IN OMX_U8 *pBuffer) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_OMX_BASEPORT *pSECPort = NULL; - OMX_BUFFERHEADERTYPE *temp_bufferHeader = NULL; - int i = 0; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - pSECPort = &pSECComponent->pSECPort[nPortIndex]; - if (nPortIndex >= pSECComponent->portParam.nPorts) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - if (pSECPort->portState != OMX_StateIdle) { - ret = OMX_ErrorIncorrectStateOperation; - goto EXIT; - } - - if (CHECK_PORT_TUNNELED(pSECPort) && CHECK_PORT_BUFFER_SUPPLIER(pSECPort)) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - temp_bufferHeader = (OMX_BUFFERHEADERTYPE *)SEC_OSAL_Malloc(sizeof(OMX_BUFFERHEADERTYPE)); - if (temp_bufferHeader == NULL) { - ret = OMX_ErrorInsufficientResources; - goto EXIT; - } - SEC_OSAL_Memset(temp_bufferHeader, 0, sizeof(OMX_BUFFERHEADERTYPE)); - - for (i = 0; i < pSECPort->portDefinition.nBufferCountActual; i++) { - if (pSECPort->bufferStateAllocate[i] == BUFFER_STATE_FREE) { - pSECPort->bufferHeader[i] = temp_bufferHeader; - pSECPort->bufferStateAllocate[i] = (BUFFER_STATE_ASSIGNED | HEADER_STATE_ALLOCATED); - INIT_SET_SIZE_VERSION(temp_bufferHeader, OMX_BUFFERHEADERTYPE); - temp_bufferHeader->pBuffer = pBuffer; - temp_bufferHeader->nAllocLen = nSizeBytes; - temp_bufferHeader->pAppPrivate = pAppPrivate; - if ( nPortIndex == INPUT_PORT_INDEX) - temp_bufferHeader->nInputPortIndex = INPUT_PORT_INDEX; - else - temp_bufferHeader->nOutputPortIndex = OUTPUT_PORT_INDEX; - - pSECPort->assignedBufferNum++; - if (pSECPort->assignedBufferNum == pSECPort->portDefinition.nBufferCountActual) { - pSECPort->portDefinition.bPopulated = OMX_TRUE; - /* SEC_OSAL_MutexLock(pSECComponent->compMutex); */ - SEC_OSAL_SemaphorePost(pSECPort->loadedResource); - /* SEC_OSAL_MutexUnlock(pSECComponent->compMutex); */ - } - *ppBufferHdr = temp_bufferHeader; - ret = OMX_ErrorNone; - goto EXIT; - } - } - - SEC_OSAL_Free(temp_bufferHeader); - ret = OMX_ErrorInsufficientResources; - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_AllocateBuffer( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_INOUT OMX_BUFFERHEADERTYPE **ppBuffer, - OMX_IN OMX_U32 nPortIndex, - OMX_IN OMX_PTR pAppPrivate, - OMX_IN OMX_U32 nSizeBytes) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_OMX_BASEPORT *pSECPort = NULL; - OMX_BUFFERHEADERTYPE *temp_bufferHeader = NULL; - OMX_U8 *temp_buffer = NULL; - int i = 0; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - pSECPort = &pSECComponent->pSECPort[nPortIndex]; - if (nPortIndex >= pSECComponent->portParam.nPorts) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } -/* - if (pSECPort->portState != OMX_StateIdle ) { - ret = OMX_ErrorIncorrectStateOperation; - goto EXIT; - } -*/ - if (CHECK_PORT_TUNNELED(pSECPort) && CHECK_PORT_BUFFER_SUPPLIER(pSECPort)) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - temp_buffer = SEC_OSAL_Malloc(sizeof(OMX_U8) * nSizeBytes); - if (temp_buffer == NULL) { - ret = OMX_ErrorInsufficientResources; - goto EXIT; - } - - temp_bufferHeader = (OMX_BUFFERHEADERTYPE *)SEC_OSAL_Malloc(sizeof(OMX_BUFFERHEADERTYPE)); - if (temp_bufferHeader == NULL) { - SEC_OSAL_Free(temp_buffer); - temp_buffer = NULL; - ret = OMX_ErrorInsufficientResources; - goto EXIT; - } - SEC_OSAL_Memset(temp_bufferHeader, 0, sizeof(OMX_BUFFERHEADERTYPE)); - - for (i = 0; i < pSECPort->portDefinition.nBufferCountActual; i++) { - if (pSECPort->bufferStateAllocate[i] == BUFFER_STATE_FREE) { - pSECPort->bufferHeader[i] = temp_bufferHeader; - pSECPort->bufferStateAllocate[i] = (BUFFER_STATE_ALLOCATED | HEADER_STATE_ALLOCATED); - INIT_SET_SIZE_VERSION(temp_bufferHeader, OMX_BUFFERHEADERTYPE); - temp_bufferHeader->pBuffer = temp_buffer; - temp_bufferHeader->nAllocLen = nSizeBytes; - temp_bufferHeader->pAppPrivate = pAppPrivate; - if ( nPortIndex == INPUT_PORT_INDEX) - temp_bufferHeader->nInputPortIndex = INPUT_PORT_INDEX; - else - temp_bufferHeader->nOutputPortIndex = OUTPUT_PORT_INDEX; - pSECPort->assignedBufferNum++; - if (pSECPort->assignedBufferNum == pSECPort->portDefinition.nBufferCountActual) { - pSECPort->portDefinition.bPopulated = OMX_TRUE; - /* SEC_OSAL_MutexLock(pSECComponent->compMutex); */ - SEC_OSAL_SemaphorePost(pSECPort->loadedResource); - /* SEC_OSAL_MutexUnlock(pSECComponent->compMutex); */ - } - *ppBuffer = temp_bufferHeader; - ret = OMX_ErrorNone; - goto EXIT; - } - } - - SEC_OSAL_Free(temp_bufferHeader); - SEC_OSAL_Free(temp_buffer); - ret = OMX_ErrorInsufficientResources; - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_FreeBuffer( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_U32 nPortIndex, - OMX_IN OMX_BUFFERHEADERTYPE *pBufferHdr) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_OMX_BASEPORT *pSECPort = NULL; - OMX_BUFFERHEADERTYPE *temp_bufferHeader = NULL; - OMX_U8 *temp_buffer = NULL; - int i = 0; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - pSECPort = &pSECComponent->pSECPort[nPortIndex]; - - if (CHECK_PORT_TUNNELED(pSECPort) && CHECK_PORT_BUFFER_SUPPLIER(pSECPort)) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - if ((pSECPort->portState != OMX_StateLoaded) && (pSECPort->portState != OMX_StateInvalid)) { - (*(pSECComponent->pCallbacks->EventHandler)) (pOMXComponent, - pSECComponent->callbackData, - (OMX_U32)OMX_EventError, - (OMX_U32)OMX_ErrorPortUnpopulated, - nPortIndex, NULL); - } - - for (i = 0; i < pSECPort->portDefinition.nBufferCountActual; i++) { - if (((pSECPort->bufferStateAllocate[i] | BUFFER_STATE_FREE) != 0) && (pSECPort->bufferHeader[i] != NULL)) { - if (pSECPort->bufferHeader[i]->pBuffer == pBufferHdr->pBuffer) { - if (pSECPort->bufferStateAllocate[i] & BUFFER_STATE_ALLOCATED) { - SEC_OSAL_Free(pSECPort->bufferHeader[i]->pBuffer); - pSECPort->bufferHeader[i]->pBuffer = NULL; - pBufferHdr->pBuffer = NULL; - } else if (pSECPort->bufferStateAllocate[i] & BUFFER_STATE_ASSIGNED) { - ; /* None*/ - } - pSECPort->assignedBufferNum--; - if (pSECPort->bufferStateAllocate[i] & HEADER_STATE_ALLOCATED) { - SEC_OSAL_Free(pSECPort->bufferHeader[i]); - pSECPort->bufferHeader[i] = NULL; - pBufferHdr = NULL; - } - pSECPort->bufferStateAllocate[i] = BUFFER_STATE_FREE; - ret = OMX_ErrorNone; - goto EXIT; - } - } - } - -EXIT: - if (ret == OMX_ErrorNone) { - if ( pSECPort->assignedBufferNum == 0 ) { - SEC_OSAL_Log(SEC_LOG_TRACE, "pSECPort->unloadedResource signal set"); - /* SEC_OSAL_MutexLock(pSECComponent->compMutex); */ - SEC_OSAL_SemaphorePost(pSECPort->unloadedResource); - /* SEC_OSAL_MutexUnlock(pSECComponent->compMutex); */ - pSECPort->portDefinition.bPopulated = OMX_FALSE; - } - } - - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_AllocateTunnelBuffer(SEC_OMX_BASEPORT *pOMXBasePort, OMX_U32 nPortIndex) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASEPORT *pSECPort = NULL; - OMX_BUFFERHEADERTYPE *temp_bufferHeader = NULL; - OMX_U8 *temp_buffer = NULL; - OMX_U32 bufferSize = 0; - OMX_PARAM_PORTDEFINITIONTYPE portDefinition; - - ret = OMX_ErrorTunnelingUnsupported; -EXIT: - return ret; -} - -OMX_ERRORTYPE SEC_OMX_FreeTunnelBuffer(SEC_OMX_BASEPORT *pOMXBasePort, OMX_U32 nPortIndex) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASEPORT* pSECPort = NULL; - OMX_BUFFERHEADERTYPE* temp_bufferHeader = NULL; - OMX_U8 *temp_buffer = NULL; - OMX_U32 bufferSize = 0; - - ret = OMX_ErrorTunnelingUnsupported; -EXIT: - return ret; -} - -OMX_ERRORTYPE SEC_OMX_ComponentTunnelRequest( - OMX_IN OMX_HANDLETYPE hComp, - OMX_IN OMX_U32 nPort, - OMX_IN OMX_HANDLETYPE hTunneledComp, - OMX_IN OMX_U32 nTunneledPort, - OMX_INOUT OMX_TUNNELSETUPTYPE *pTunnelSetup) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - - ret = OMX_ErrorTunnelingUnsupported; -EXIT: - return ret; -} - -OMX_BOOL SEC_Check_BufferProcess_State(SEC_OMX_BASECOMPONENT *pSECComponent) -{ - if ((pSECComponent->currentState == OMX_StateExecuting) && - (pSECComponent->pSECPort[INPUT_PORT_INDEX].portState == OMX_StateIdle) && - (pSECComponent->pSECPort[OUTPUT_PORT_INDEX].portState == OMX_StateIdle) && - (pSECComponent->transientState != SEC_OMX_TransStateExecutingToIdle) && - (pSECComponent->transientState != SEC_OMX_TransStateIdleToExecuting)) { - return OMX_TRUE; - } else { - return OMX_FALSE; - } -} - -static OMX_ERRORTYPE SEC_InputBufferReturn(OMX_COMPONENTTYPE *pOMXComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASECOMPONENT *pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - SEC_OMX_BASEPORT *secOMXInputPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - SEC_OMX_BASEPORT *secOMXOutputPort = &pSECComponent->pSECPort[OUTPUT_PORT_INDEX]; - SEC_OMX_DATABUFFER *dataBuffer = &pSECComponent->secDataBuffer[INPUT_PORT_INDEX]; - OMX_BUFFERHEADERTYPE *bufferHeader = dataBuffer->bufferHeader; - - FunctionIn(); - - if (bufferHeader != NULL) { - if (secOMXInputPort->markType.hMarkTargetComponent != NULL ) { - bufferHeader->hMarkTargetComponent = secOMXInputPort->markType.hMarkTargetComponent; - bufferHeader->pMarkData = secOMXInputPort->markType.pMarkData; - secOMXInputPort->markType.hMarkTargetComponent = NULL; - secOMXInputPort->markType.pMarkData = NULL; - } - - if (bufferHeader->hMarkTargetComponent != NULL) { - if (bufferHeader->hMarkTargetComponent == pOMXComponent) { - pSECComponent->pCallbacks->EventHandler(pOMXComponent, - pSECComponent->callbackData, - OMX_EventMark, - 0, 0, bufferHeader->pMarkData); - } else { - pSECComponent->propagateMarkType.hMarkTargetComponent = bufferHeader->hMarkTargetComponent; - pSECComponent->propagateMarkType.pMarkData = bufferHeader->pMarkData; - } - } - - if (CHECK_PORT_TUNNELED(secOMXInputPort)) { - OMX_FillThisBuffer(secOMXInputPort->tunneledComponent, bufferHeader); - } else { - bufferHeader->nFilledLen = 0; - pSECComponent->pCallbacks->EmptyBufferDone(pOMXComponent, pSECComponent->callbackData, bufferHeader); - } - } - - if ((pSECComponent->currentState == OMX_StatePause) && - ((!CHECK_PORT_BEING_FLUSHED(secOMXInputPort) && !CHECK_PORT_BEING_FLUSHED(secOMXOutputPort)))) { - SEC_OSAL_SignalReset(pSECComponent->pauseEvent); - SEC_OSAL_SignalWait(pSECComponent->pauseEvent, DEF_MAX_WAIT_TIME); - } - - dataBuffer->dataValid = OMX_FALSE; - dataBuffer->dataLen = 0; - dataBuffer->remainDataLen = 0; - dataBuffer->usedDataLen = 0; - dataBuffer->bufferHeader = NULL; - dataBuffer->nFlags = 0; - dataBuffer->timeStamp = 0; - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_InputBufferGetQueue(SEC_OMX_BASECOMPONENT *pSECComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASEPORT *pSECPort = NULL; - SEC_OMX_DATABUFFER *dataBuffer = NULL; - SEC_OMX_MESSAGE* message = NULL; - SEC_OMX_DATABUFFER *inputUseBuffer = &pSECComponent->secDataBuffer[INPUT_PORT_INDEX]; - - FunctionIn(); - - pSECPort= &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - dataBuffer = &pSECComponent->secDataBuffer[INPUT_PORT_INDEX]; - - if (pSECComponent->currentState != OMX_StateExecuting) { - ret = OMX_ErrorUndefined; - goto EXIT; - } else { - SEC_OSAL_SemaphoreWait(pSECPort->bufferSemID); - SEC_OSAL_MutexLock(inputUseBuffer->bufferMutex); - if (dataBuffer->dataValid != OMX_TRUE) { - message = (SEC_OMX_MESSAGE *)SEC_OSAL_Dequeue(&pSECPort->bufferQ); - if (message == NULL) { - ret = OMX_ErrorUndefined; - SEC_OSAL_MutexUnlock(inputUseBuffer->bufferMutex); - goto EXIT; - } - - dataBuffer->bufferHeader = (OMX_BUFFERHEADERTYPE *)(message->pCmdData); - dataBuffer->allocSize = dataBuffer->bufferHeader->nAllocLen; - dataBuffer->dataLen = dataBuffer->bufferHeader->nFilledLen; - dataBuffer->remainDataLen = dataBuffer->dataLen; - dataBuffer->usedDataLen = 0; - dataBuffer->dataValid = OMX_TRUE; - dataBuffer->nFlags = dataBuffer->bufferHeader->nFlags; - dataBuffer->timeStamp = dataBuffer->bufferHeader->nTimeStamp; - - SEC_OSAL_Free(message); - - if (dataBuffer->allocSize <= dataBuffer->dataLen) - SEC_OSAL_Log(SEC_LOG_WARNING, "Input Buffer Full, Check input buffer size! allocSize:%d, dataLen:%d", dataBuffer->allocSize, dataBuffer->dataLen); - } - SEC_OSAL_MutexUnlock(inputUseBuffer->bufferMutex); - ret = OMX_ErrorNone; - } -EXIT: - FunctionOut(); - - return ret; -} - -static OMX_ERRORTYPE SEC_OutputBufferReturn(OMX_COMPONENTTYPE *pOMXComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASECOMPONENT *pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - SEC_OMX_BASEPORT *secOMXInputPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - SEC_OMX_BASEPORT *secOMXOutputPort = &pSECComponent->pSECPort[OUTPUT_PORT_INDEX]; - SEC_OMX_DATABUFFER *dataBuffer = &pSECComponent->secDataBuffer[OUTPUT_PORT_INDEX]; - OMX_BUFFERHEADERTYPE *bufferHeader = dataBuffer->bufferHeader; - - FunctionIn(); - - if (bufferHeader != NULL) { - bufferHeader->nFilledLen = dataBuffer->remainDataLen; - bufferHeader->nOffset = 0; - bufferHeader->nFlags = dataBuffer->nFlags; - bufferHeader->nTimeStamp = dataBuffer->timeStamp; - - if (pSECComponent->propagateMarkType.hMarkTargetComponent != NULL) { - bufferHeader->hMarkTargetComponent = pSECComponent->propagateMarkType.hMarkTargetComponent; - bufferHeader->pMarkData = pSECComponent->propagateMarkType.pMarkData; - pSECComponent->propagateMarkType.hMarkTargetComponent = NULL; - pSECComponent->propagateMarkType.pMarkData = NULL; - } - - if (bufferHeader->nFlags & OMX_BUFFERFLAG_EOS) { - pSECComponent->pCallbacks->EventHandler(pOMXComponent, - pSECComponent->callbackData, - OMX_EventBufferFlag, - OUTPUT_PORT_INDEX, - bufferHeader->nFlags, NULL); - } - - if (CHECK_PORT_TUNNELED(secOMXOutputPort)) { - OMX_EmptyThisBuffer(secOMXOutputPort->tunneledComponent, bufferHeader); - } else { - pSECComponent->pCallbacks->FillBufferDone(pOMXComponent, pSECComponent->callbackData, bufferHeader); - } - } - - if ((pSECComponent->currentState == OMX_StatePause) && - ((!CHECK_PORT_BEING_FLUSHED(secOMXInputPort) && !CHECK_PORT_BEING_FLUSHED(secOMXOutputPort)))) { - SEC_OSAL_SignalReset(pSECComponent->pauseEvent); - SEC_OSAL_SignalWait(pSECComponent->pauseEvent, DEF_MAX_WAIT_TIME); - } - - /* reset dataBuffer */ - dataBuffer->dataValid = OMX_FALSE; - dataBuffer->dataLen = 0; - dataBuffer->remainDataLen = 0; - dataBuffer->usedDataLen = 0; - dataBuffer->bufferHeader = NULL; - dataBuffer->nFlags = 0; - dataBuffer->timeStamp = 0; - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OutputBufferGetQueue(SEC_OMX_BASECOMPONENT *pSECComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASEPORT *pSECPort = NULL; - SEC_OMX_DATABUFFER *dataBuffer = NULL; - SEC_OMX_MESSAGE *message = NULL; - SEC_OMX_DATABUFFER *outputUseBuffer = &pSECComponent->secDataBuffer[OUTPUT_PORT_INDEX]; - - FunctionIn(); - - pSECPort= &pSECComponent->pSECPort[OUTPUT_PORT_INDEX]; - dataBuffer = &pSECComponent->secDataBuffer[OUTPUT_PORT_INDEX]; - - if (pSECComponent->currentState != OMX_StateExecuting) { - ret = OMX_ErrorUndefined; - goto EXIT; - } else { - SEC_OSAL_SemaphoreWait(pSECPort->bufferSemID); - SEC_OSAL_MutexLock(outputUseBuffer->bufferMutex); - if (dataBuffer->dataValid != OMX_TRUE) { - message = (SEC_OMX_MESSAGE *)SEC_OSAL_Dequeue(&pSECPort->bufferQ); - if (message == NULL) { - ret = OMX_ErrorUndefined; - SEC_OSAL_MutexUnlock(outputUseBuffer->bufferMutex); - goto EXIT; - } - - dataBuffer->bufferHeader = (OMX_BUFFERHEADERTYPE *)(message->pCmdData); - dataBuffer->allocSize = dataBuffer->bufferHeader->nAllocLen; - dataBuffer->dataLen = 0; //dataBuffer->bufferHeader->nFilledLen; - dataBuffer->remainDataLen = dataBuffer->dataLen; - dataBuffer->usedDataLen = 0; //dataBuffer->bufferHeader->nOffset; - dataBuffer->dataValid =OMX_TRUE; - /* dataBuffer->nFlags = dataBuffer->bufferHeader->nFlags; */ - /* dataBuffer->nTimeStamp = dataBuffer->bufferHeader->nTimeStamp; */ - pSECComponent->processData[OUTPUT_PORT_INDEX].dataBuffer = dataBuffer->bufferHeader->pBuffer; - pSECComponent->processData[OUTPUT_PORT_INDEX].allocSize = dataBuffer->bufferHeader->nAllocLen; - - SEC_OSAL_Free(message); - } - SEC_OSAL_MutexUnlock(outputUseBuffer->bufferMutex); - ret = OMX_ErrorNone; - } -EXIT: - FunctionOut(); - - return ret; - -} - -static OMX_ERRORTYPE SEC_BufferReset(OMX_COMPONENTTYPE *pOMXComponent, OMX_U32 portIndex) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASECOMPONENT *pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - /* SEC_OMX_BASEPORT *pSECPort = &pSECComponent->pSECPort[portIndex]; */ - SEC_OMX_DATABUFFER *dataBuffer = &pSECComponent->secDataBuffer[portIndex]; - /* OMX_BUFFERHEADERTYPE *bufferHeader = dataBuffer->bufferHeader; */ - - dataBuffer->dataValid = OMX_FALSE; - dataBuffer->dataLen = 0; - dataBuffer->remainDataLen = 0; - dataBuffer->usedDataLen = 0; - dataBuffer->bufferHeader = NULL; - dataBuffer->nFlags = 0; - dataBuffer->timeStamp = 0; - - return ret; -} - -static OMX_ERRORTYPE SEC_DataReset(OMX_COMPONENTTYPE *pOMXComponent, OMX_U32 portIndex) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASECOMPONENT *pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - /* SEC_OMX_BASEPORT *pSECPort = &pSECComponent->pSECPort[portIndex]; */ - /* SEC_OMX_DATABUFFER *dataBuffer = &pSECComponent->secDataBuffer[portIndex]; */ - /* OMX_BUFFERHEADERTYPE *bufferHeader = dataBuffer->bufferHeader; */ - SEC_OMX_DATA *processData = &pSECComponent->processData[portIndex]; - - processData->dataLen = 0; - processData->remainDataLen = 0; - processData->usedDataLen = 0; - processData->nFlags = 0; - processData->timeStamp = 0; - - return ret; -} - -OMX_BOOL SEC_Preprocessor_InputData(OMX_COMPONENTTYPE *pOMXComponent) -{ - OMX_BOOL ret = OMX_FALSE; - SEC_OMX_BASECOMPONENT *pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - SEC_OMX_DATABUFFER *inputUseBuffer = &pSECComponent->secDataBuffer[INPUT_PORT_INDEX]; - SEC_OMX_DATA *inputData = &pSECComponent->processData[INPUT_PORT_INDEX]; - OMX_U32 copySize = 0; - OMX_BYTE checkInputStream = NULL; - OMX_U32 checkInputStreamLen = 0; - OMX_U32 checkedSize = 0; - OMX_BOOL flagEOF = OMX_FALSE; - OMX_BOOL previousFrameEOF = OMX_FALSE; - - FunctionIn(); - - if (inputUseBuffer->dataValid == OMX_TRUE) { - checkInputStream = inputUseBuffer->bufferHeader->pBuffer + inputUseBuffer->usedDataLen; - checkInputStreamLen = inputUseBuffer->remainDataLen; - - if (inputData->dataLen == 0) { - previousFrameEOF = OMX_TRUE; - } else { - previousFrameEOF = OMX_FALSE; - } - if ((pSECComponent->bUseFlagEOF == OMX_TRUE) && - !(inputUseBuffer->nFlags & OMX_BUFFERFLAG_CODECCONFIG)) { - flagEOF = OMX_TRUE; - checkedSize = checkInputStreamLen; - } else { - pSECComponent->bUseFlagEOF = OMX_FALSE; - checkedSize = pSECComponent->sec_checkInputFrame(checkInputStream, checkInputStreamLen, inputUseBuffer->nFlags, previousFrameEOF, &flagEOF); - } - - if (flagEOF == OMX_TRUE) { - copySize = checkedSize; - SEC_OSAL_Log(SEC_LOG_TRACE, "sec_checkInputFrame : OMX_TRUE"); - } else { - copySize = checkInputStreamLen; - SEC_OSAL_Log(SEC_LOG_TRACE, "sec_checkInputFrame : OMX_FALSE"); - } - - if (inputUseBuffer->nFlags & OMX_BUFFERFLAG_EOS) - pSECComponent->bSaveFlagEOS = OMX_TRUE; - - if (((inputData->allocSize) - (inputData->dataLen)) >= copySize) { - if (copySize > 0) - SEC_OSAL_Memcpy(inputData->dataBuffer + inputData->dataLen, checkInputStream, copySize); - - inputUseBuffer->dataLen -= copySize; - inputUseBuffer->remainDataLen -= copySize; - inputUseBuffer->usedDataLen += copySize; - - inputData->dataLen += copySize; - inputData->remainDataLen += copySize; - - if (previousFrameEOF == OMX_TRUE) { - inputData->timeStamp = inputUseBuffer->timeStamp; - inputData->nFlags = inputUseBuffer->nFlags; - } - - if (pSECComponent->bUseFlagEOF == OMX_TRUE) { - if (pSECComponent->bSaveFlagEOS == OMX_TRUE) { - inputData->nFlags |= OMX_BUFFERFLAG_EOS; - flagEOF = OMX_TRUE; - pSECComponent->bSaveFlagEOS = OMX_FALSE; - } else { - inputData->nFlags = (inputData->nFlags & (~OMX_BUFFERFLAG_EOS)); - } - } else { - if ((checkedSize == checkInputStreamLen) && (pSECComponent->bSaveFlagEOS == OMX_TRUE)) { - if ((inputUseBuffer->nFlags & OMX_BUFFERFLAG_EOS) && - ((inputData->nFlags & OMX_BUFFERFLAG_CODECCONFIG) || - (inputData->dataLen == 0))) { - inputData->nFlags |= OMX_BUFFERFLAG_EOS; - flagEOF = OMX_TRUE; - pSECComponent->bSaveFlagEOS = OMX_FALSE; - } else if ((inputUseBuffer->nFlags & OMX_BUFFERFLAG_EOS) && - (!(inputData->nFlags & OMX_BUFFERFLAG_CODECCONFIG)) && - (inputData->dataLen != 0)) { - inputData->nFlags = (inputData->nFlags & (~OMX_BUFFERFLAG_EOS)); - flagEOF = OMX_TRUE; - pSECComponent->bSaveFlagEOS = OMX_TRUE; - } - } else { - inputData->nFlags = (inputUseBuffer->nFlags & (~OMX_BUFFERFLAG_EOS)); - } - } - - if(((inputData->nFlags & OMX_BUFFERFLAG_EOS) == OMX_BUFFERFLAG_EOS) && - (inputData->dataLen <= 0) && (flagEOF == OMX_TRUE)) { - inputData->dataLen = inputData->previousDataLen; - inputData->remainDataLen = inputData->previousDataLen; - } - } else { - /*????????????????????????????????? Error ?????????????????????????????????*/ - SEC_DataReset(pOMXComponent, INPUT_PORT_INDEX); - flagEOF = OMX_FALSE; - } - - if (inputUseBuffer->remainDataLen == 0) - SEC_InputBufferReturn(pOMXComponent); - else - inputUseBuffer->dataValid = OMX_TRUE; - } - - if (flagEOF == OMX_TRUE) { - if (pSECComponent->checkTimeStamp.needSetStartTimeStamp == OMX_TRUE) { - pSECComponent->checkTimeStamp.needCheckStartTimeStamp = OMX_TRUE; - pSECComponent->checkTimeStamp.startTimeStamp = inputData->timeStamp; - pSECComponent->checkTimeStamp.nStartFlags = inputData->nFlags; - pSECComponent->checkTimeStamp.needSetStartTimeStamp = OMX_FALSE; - } - - ret = OMX_TRUE; - } else { - ret = OMX_FALSE; - } - - FunctionOut(); - - return ret; -} - -OMX_BOOL SEC_Postprocess_OutputData(OMX_COMPONENTTYPE *pOMXComponent) -{ - OMX_BOOL ret = OMX_FALSE; - SEC_OMX_BASECOMPONENT *pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - SEC_OMX_DATABUFFER *outputUseBuffer = &pSECComponent->secDataBuffer[OUTPUT_PORT_INDEX]; - SEC_OMX_DATA *outputData = &pSECComponent->processData[OUTPUT_PORT_INDEX]; - OMX_U32 copySize = 0; - - FunctionIn(); - - if (outputUseBuffer->dataValid == OMX_TRUE) { - if (pSECComponent->checkTimeStamp.needCheckStartTimeStamp == OMX_TRUE) { - if ((pSECComponent->checkTimeStamp.startTimeStamp == outputData->timeStamp) && - (pSECComponent->checkTimeStamp.nStartFlags == outputData->nFlags)){ - pSECComponent->checkTimeStamp.startTimeStamp = -19761123; - pSECComponent->checkTimeStamp.nStartFlags = 0x0; - pSECComponent->checkTimeStamp.needSetStartTimeStamp = OMX_FALSE; - pSECComponent->checkTimeStamp.needCheckStartTimeStamp = OMX_FALSE; - } else { - SEC_DataReset(pOMXComponent, OUTPUT_PORT_INDEX); - - ret = OMX_TRUE; - goto EXIT; - } - } else if (pSECComponent->checkTimeStamp.needSetStartTimeStamp == OMX_TRUE) { - SEC_DataReset(pOMXComponent, OUTPUT_PORT_INDEX); - - ret = OMX_TRUE; - goto EXIT; - } - - if (outputData->remainDataLen <= (outputUseBuffer->allocSize - outputUseBuffer->dataLen)) { - copySize = outputData->remainDataLen; - outputUseBuffer->dataLen += copySize; - outputUseBuffer->remainDataLen += copySize; - outputUseBuffer->nFlags = outputData->nFlags; - outputUseBuffer->timeStamp = outputData->timeStamp; - - ret = OMX_TRUE; - - /* reset outputData */ - SEC_DataReset(pOMXComponent, OUTPUT_PORT_INDEX); - - if ((outputUseBuffer->remainDataLen > 0) || - (outputUseBuffer->nFlags & OMX_BUFFERFLAG_EOS)) - SEC_OutputBufferReturn(pOMXComponent); - } else { - SEC_OSAL_Log(SEC_LOG_ERROR, "output buffer is smaller than decoded data size Out Length"); - - copySize = outputUseBuffer->allocSize - outputUseBuffer->dataLen; - outputUseBuffer->dataLen += copySize; - outputUseBuffer->remainDataLen += copySize; - outputUseBuffer->nFlags = 0; - outputUseBuffer->timeStamp = outputData->timeStamp; - - ret = OMX_FALSE; - - outputData->remainDataLen -= copySize; - outputData->usedDataLen += copySize; - - SEC_OutputBufferReturn(pOMXComponent); - } - } else { - ret = OMX_FALSE; - } - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_BufferProcess(OMX_HANDLETYPE hComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - SEC_OMX_BASECOMPONENT *pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - SEC_OMX_BASEPORT *secInputPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - SEC_OMX_BASEPORT *secOutputPort = &pSECComponent->pSECPort[OUTPUT_PORT_INDEX]; - SEC_OMX_DATABUFFER *inputUseBuffer = &pSECComponent->secDataBuffer[INPUT_PORT_INDEX]; - SEC_OMX_DATABUFFER *outputUseBuffer = &pSECComponent->secDataBuffer[OUTPUT_PORT_INDEX]; - SEC_OMX_DATA *inputData = &pSECComponent->processData[INPUT_PORT_INDEX]; - SEC_OMX_DATA *outputData = &pSECComponent->processData[OUTPUT_PORT_INDEX]; - OMX_U32 copySize = 0; - - pSECComponent->remainOutputData = OMX_FALSE; - pSECComponent->reInputData = OMX_FALSE; - - FunctionIn(); - - while (!pSECComponent->bExitBufferProcessThread) { - SEC_OSAL_SleepMillisec(0); - - if (((pSECComponent->currentState == OMX_StatePause) || - (pSECComponent->currentState == OMX_StateIdle) || - (pSECComponent->transientState == SEC_OMX_TransStateLoadedToIdle) || - (pSECComponent->transientState == SEC_OMX_TransStateExecutingToIdle)) && - (pSECComponent->transientState != SEC_OMX_TransStateIdleToLoaded)&& - ((!CHECK_PORT_BEING_FLUSHED(secInputPort) && !CHECK_PORT_BEING_FLUSHED(secOutputPort)))) { - SEC_OSAL_SignalReset(pSECComponent->pauseEvent); - SEC_OSAL_SignalWait(pSECComponent->pauseEvent, DEF_MAX_WAIT_TIME); - } - - while (SEC_Check_BufferProcess_State(pSECComponent) && !pSECComponent->bExitBufferProcessThread) { - SEC_OSAL_SleepMillisec(0); - - SEC_OSAL_MutexLock(outputUseBuffer->bufferMutex); - if ((outputUseBuffer->dataValid != OMX_TRUE) && - (!CHECK_PORT_BEING_FLUSHED(secOutputPort))) { - SEC_OSAL_MutexUnlock(outputUseBuffer->bufferMutex); - ret = SEC_OutputBufferGetQueue(pSECComponent); - if ((ret == OMX_ErrorUndefined) || - (secInputPort->portState != OMX_StateIdle) || - (secOutputPort->portState != OMX_StateIdle)) { - break; - } - } else { - SEC_OSAL_MutexUnlock(outputUseBuffer->bufferMutex); - } - - if (pSECComponent->remainOutputData == OMX_FALSE) { - if (pSECComponent->reInputData == OMX_FALSE) { - SEC_OSAL_MutexLock(inputUseBuffer->bufferMutex); - if ((SEC_Preprocessor_InputData(pOMXComponent) == OMX_FALSE) && - (!CHECK_PORT_BEING_FLUSHED(secInputPort))) { - SEC_OSAL_MutexUnlock(inputUseBuffer->bufferMutex); - ret = SEC_InputBufferGetQueue(pSECComponent); - break; - } - - SEC_OSAL_MutexUnlock(inputUseBuffer->bufferMutex); - } - - SEC_OSAL_MutexLock(inputUseBuffer->bufferMutex); - SEC_OSAL_MutexLock(outputUseBuffer->bufferMutex); - ret = pSECComponent->sec_mfc_bufferProcess(pOMXComponent, inputData, outputData); - SEC_OSAL_MutexUnlock(outputUseBuffer->bufferMutex); - SEC_OSAL_MutexUnlock(inputUseBuffer->bufferMutex); - - if (ret == OMX_ErrorInputDataDecodeYet) - pSECComponent->reInputData = OMX_TRUE; - else - pSECComponent->reInputData = OMX_FALSE; - } - - SEC_OSAL_MutexLock(outputUseBuffer->bufferMutex); - - if (SEC_Postprocess_OutputData(pOMXComponent) == OMX_FALSE) - pSECComponent->remainOutputData = OMX_TRUE; - else - pSECComponent->remainOutputData = OMX_FALSE; - - SEC_OSAL_MutexUnlock(outputUseBuffer->bufferMutex); - } - } - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_VideoDecodeGetParameter( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_INDEXTYPE nParamIndex, - OMX_INOUT OMX_PTR ComponentParameterStructure) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_OMX_BASEPORT *pSECPort = NULL; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - if (pSECComponent->currentState == OMX_StateInvalid ) { - ret = OMX_StateInvalid; - goto EXIT; - } - - if (ComponentParameterStructure == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - - switch (nParamIndex) { - case OMX_IndexParamVideoInit: - { - OMX_PORT_PARAM_TYPE *portParam = (OMX_PORT_PARAM_TYPE *)ComponentParameterStructure; - ret = SEC_OMX_Check_SizeVersion(portParam, sizeof(OMX_PORT_PARAM_TYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - portParam->nPorts = pSECComponent->portParam.nPorts; - portParam->nStartPortNumber = pSECComponent->portParam.nStartPortNumber; - ret = OMX_ErrorNone; - } - break; - case OMX_IndexParamVideoPortFormat: - { - OMX_VIDEO_PARAM_PORTFORMATTYPE *portFormat = (OMX_VIDEO_PARAM_PORTFORMATTYPE *)ComponentParameterStructure; - OMX_U32 portIndex = portFormat->nPortIndex; - OMX_U32 index = portFormat->nIndex; - SEC_OMX_BASEPORT *pSECPort = NULL; - OMX_PARAM_PORTDEFINITIONTYPE *portDefinition = NULL; - OMX_U32 supportFormatNum = 0; /* supportFormatNum = N-1 */ - - ret = SEC_OMX_Check_SizeVersion(portFormat, sizeof(OMX_VIDEO_PARAM_PORTFORMATTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if ((portIndex >= pSECComponent->portParam.nPorts)) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - - if (portIndex == INPUT_PORT_INDEX) { - supportFormatNum = INPUT_PORT_SUPPORTFORMAT_NUM_MAX - 1; - if (index > supportFormatNum) { - ret = OMX_ErrorNoMore; - goto EXIT; - } - - pSECPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - portDefinition = &pSECPort->portDefinition; - - portFormat->eCompressionFormat = portDefinition->format.video.eCompressionFormat; - portFormat->eColorFormat = portDefinition->format.video.eColorFormat; - portFormat->xFramerate = portDefinition->format.video.xFramerate; - } else if (portIndex == OUTPUT_PORT_INDEX) { - supportFormatNum = OUTPUT_PORT_SUPPORTFORMAT_NUM_MAX - 1; - if (index > supportFormatNum) { - ret = OMX_ErrorNoMore; - goto EXIT; - } - - pSECPort = &pSECComponent->pSECPort[OUTPUT_PORT_INDEX]; - portDefinition = &pSECPort->portDefinition; - - switch (index) { - case supportFormat_0: - portFormat->eCompressionFormat = OMX_VIDEO_CodingUnused; - portFormat->eColorFormat = OMX_COLOR_FormatYUV420Planar;//OMX_COLOR_FormatYUV420SemiPlanar; - portFormat->xFramerate = portDefinition->format.video.xFramerate; - break; - case supportFormat_1: - portFormat->eCompressionFormat = OMX_VIDEO_CodingUnused; - portFormat->eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar;//OMX_COLOR_FormatYUV420Planar; - portFormat->xFramerate = portDefinition->format.video.xFramerate; - break; - case supportFormat_2: - portFormat->eCompressionFormat = OMX_VIDEO_CodingUnused; - portFormat->eColorFormat = OMX_SEC_COLOR_FormatNV12TPhysicalAddress; - portFormat->xFramerate = portDefinition->format.video.xFramerate; - break; - } - } - ret = OMX_ErrorNone; - } - break; - case OMX_IndexParamVideoBitrate: - { - OMX_VIDEO_PARAM_BITRATETYPE *videoRateControl = (OMX_VIDEO_PARAM_BITRATETYPE *)ComponentParameterStructure; - OMX_U32 portIndex = videoRateControl->nPortIndex; - SEC_OMX_BASEPORT *pSECPort = NULL; - OMX_PARAM_PORTDEFINITIONTYPE *portDefinition = NULL; - - if ((portIndex != INPUT_PORT_INDEX)) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } else { - pSECPort = &pSECComponent->pSECPort[portIndex]; - portDefinition = &pSECPort->portDefinition; - - videoRateControl->eControlRate = pSECPort->eControlRate; - videoRateControl->nTargetBitrate = portDefinition->format.video.nBitrate; - } - ret = OMX_ErrorNone; - } - break; -#ifdef USE_ANDROID_EXTENSION - case OMX_IndexParamGetAndroidNativeBuffer: - { - if (OMX_ErrorNone != checkVersionANB(ComponentParameterStructure)) - goto EXIT; - - if (OUTPUT_PORT_INDEX != checkPortIndexANB(ComponentParameterStructure)) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - ret = getAndroidNativeBuffer(hComponent, ComponentParameterStructure); - } - break; -#endif - default: - { - ret = SEC_OMX_GetParameter(hComponent, nParamIndex, ComponentParameterStructure); - } - break; - } - -EXIT: - FunctionOut(); - - return ret; -} -OMX_ERRORTYPE SEC_OMX_VideoDecodeSetParameter( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_INDEXTYPE nIndex, - OMX_IN OMX_PTR ComponentParameterStructure) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_OMX_BASEPORT *pSECPort = NULL; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - if (pSECComponent->currentState == OMX_StateInvalid ) { - ret = OMX_StateInvalid; - goto EXIT; - } - - if (ComponentParameterStructure == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - - switch (nIndex) { - case OMX_IndexParamVideoPortFormat: - { - OMX_VIDEO_PARAM_PORTFORMATTYPE *portFormat = (OMX_VIDEO_PARAM_PORTFORMATTYPE *)ComponentParameterStructure; - OMX_U32 portIndex = portFormat->nPortIndex; - OMX_U32 index = portFormat->nIndex; - SEC_OMX_BASEPORT *pSECPort = NULL; - OMX_PARAM_PORTDEFINITIONTYPE *portDefinition = NULL; - OMX_U32 supportFormatNum = 0; - - ret = SEC_OMX_Check_SizeVersion(portFormat, sizeof(OMX_VIDEO_PARAM_PORTFORMATTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if ((portIndex >= pSECComponent->portParam.nPorts)) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } else { - pSECPort = &pSECComponent->pSECPort[portIndex]; - portDefinition = &pSECPort->portDefinition; - - portDefinition->format.video.eColorFormat = portFormat->eColorFormat; - portDefinition->format.video.eCompressionFormat = portFormat->eCompressionFormat; - portDefinition->format.video.xFramerate = portFormat->xFramerate; - } - } - break; - case OMX_IndexParamVideoBitrate: - { - OMX_VIDEO_PARAM_BITRATETYPE *videoRateControl = (OMX_VIDEO_PARAM_BITRATETYPE *)ComponentParameterStructure; - OMX_U32 portIndex = videoRateControl->nPortIndex; - SEC_OMX_BASEPORT *pSECPort = NULL; - OMX_PARAM_PORTDEFINITIONTYPE *portDefinition = NULL; - - if ((portIndex != INPUT_PORT_INDEX)) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } else { - pSECPort = &pSECComponent->pSECPort[portIndex]; - portDefinition = &pSECPort->portDefinition; - - pSECPort->eControlRate = videoRateControl->eControlRate; - portDefinition->format.video.nBitrate = videoRateControl->nTargetBitrate; - } - ret = OMX_ErrorNone; - } - break; -#ifdef USE_ANDROID_EXTENSION - case OMX_IndexParamEnableAndroidBuffers: - { - if (OMX_ErrorNone != checkVersionANB(ComponentParameterStructure)) - goto EXIT; - - if (OUTPUT_PORT_INDEX != checkPortIndexANB(ComponentParameterStructure)) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - ret = enableAndroidNativeBuffer(hComponent, ComponentParameterStructure); - if (ret == OMX_ErrorNone) { - SEC_OMX_BASECOMPONENT *pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - SEC_OMX_BASEPORT *pSECPort = &pSECComponent->pSECPort[OUTPUT_PORT_INDEX]; - if (pSECPort->bUseAndroidNativeBuffer) { - pSECPort->portDefinition.nBufferCountActual = ANDROID_MAX_VIDEO_OUTPUTBUFFER_NUM; - pSECPort->portDefinition.nBufferCountMin = ANDROID_MAX_VIDEO_OUTPUTBUFFER_NUM; - } else { - pSECPort->portDefinition.nBufferCountActual = MAX_VIDEO_OUTPUTBUFFER_NUM; - pSECPort->portDefinition.nBufferCountMin = MAX_VIDEO_OUTPUTBUFFER_NUM; - } - } - } - break; - case OMX_IndexParamUseAndroidNativeBuffer: - { - if (OMX_ErrorNone != checkVersionANB(ComponentParameterStructure)) - goto EXIT; - - if (OUTPUT_PORT_INDEX != checkPortIndexANB(ComponentParameterStructure)) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - ret = useAndroidNativeBuffer(hComponent, ComponentParameterStructure); - } - break; -#endif - default: - { - ret = SEC_OMX_SetParameter(hComponent, nIndex, ComponentParameterStructure); - } - break; - } - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_VideoDecodeComponentInit(OMX_IN OMX_HANDLETYPE hComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_OMX_BASEPORT *pSECPort = NULL; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_Error, Line:%d", __LINE__); - goto EXIT; - } - - ret = SEC_OMX_BaseComponent_Constructor(pOMXComponent); - if (ret != OMX_ErrorNone) { - SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_Error, Line:%d", __LINE__); - goto EXIT; - } - - ret = SEC_OMX_Port_Constructor(pOMXComponent); - if (ret != OMX_ErrorNone) { - SEC_OMX_BaseComponent_Destructor(pOMXComponent); - SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_Error, Line:%d", __LINE__); - goto EXIT; - } - - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - pSECComponent->bSaveFlagEOS = OMX_FALSE; - - /* Input port */ - pSECPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - pSECPort->portDefinition.nBufferCountActual = MAX_VIDEO_INPUTBUFFER_NUM; - pSECPort->portDefinition.nBufferCountMin = MAX_VIDEO_INPUTBUFFER_NUM; - pSECPort->portDefinition.nBufferSize = 0; - pSECPort->portDefinition.eDomain = OMX_PortDomainVideo; - - pSECPort->portDefinition.format.video.cMIMEType = SEC_OSAL_Malloc(MAX_OMX_MIMETYPE_SIZE); - SEC_OSAL_Strcpy(pSECPort->portDefinition.format.video.cMIMEType, "raw/video"); - pSECPort->portDefinition.format.video.pNativeRender = 0; - pSECPort->portDefinition.format.video.bFlagErrorConcealment = OMX_FALSE; - pSECPort->portDefinition.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused; - - pSECPort->portDefinition.format.video.nFrameWidth = 0; - pSECPort->portDefinition.format.video.nFrameHeight= 0; - pSECPort->portDefinition.format.video.nStride = 0; - pSECPort->portDefinition.format.video.nSliceHeight = 0; - pSECPort->portDefinition.format.video.nBitrate = 64000; - pSECPort->portDefinition.format.video.xFramerate = (15 << 16); - pSECPort->portDefinition.format.video.eColorFormat = OMX_COLOR_FormatUnused; - pSECPort->portDefinition.format.video.pNativeWindow = NULL; - - /* Output port */ - pSECPort = &pSECComponent->pSECPort[OUTPUT_PORT_INDEX]; - pSECPort->portDefinition.nBufferCountActual = MAX_VIDEO_OUTPUTBUFFER_NUM; - pSECPort->portDefinition.nBufferCountMin = MAX_VIDEO_OUTPUTBUFFER_NUM; - pSECPort->portDefinition.nBufferSize = DEFAULT_VIDEO_OUTPUT_BUFFER_SIZE; - pSECPort->portDefinition.eDomain = OMX_PortDomainVideo; - - pSECPort->portDefinition.format.video.cMIMEType = SEC_OSAL_Malloc(MAX_OMX_MIMETYPE_SIZE); - SEC_OSAL_Strcpy(pSECPort->portDefinition.format.video.cMIMEType, "raw/video"); - pSECPort->portDefinition.format.video.pNativeRender = 0; - pSECPort->portDefinition.format.video.bFlagErrorConcealment = OMX_FALSE; - pSECPort->portDefinition.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused; - - pSECPort->portDefinition.format.video.nFrameWidth = 0; - pSECPort->portDefinition.format.video.nFrameHeight= 0; - pSECPort->portDefinition.format.video.nStride = 0; - pSECPort->portDefinition.format.video.nSliceHeight = 0; - pSECPort->portDefinition.format.video.nBitrate = 64000; - pSECPort->portDefinition.format.video.xFramerate = (15 << 16); - pSECPort->portDefinition.format.video.eColorFormat = OMX_COLOR_FormatUnused; - pSECPort->portDefinition.format.video.pNativeWindow = NULL; - - pOMXComponent->UseBuffer = &SEC_OMX_UseBuffer; - pOMXComponent->AllocateBuffer = &SEC_OMX_AllocateBuffer; - pOMXComponent->FreeBuffer = &SEC_OMX_FreeBuffer; - pOMXComponent->ComponentTunnelRequest = &SEC_OMX_ComponentTunnelRequest; - - pSECComponent->sec_AllocateTunnelBuffer = &SEC_OMX_AllocateTunnelBuffer; - pSECComponent->sec_FreeTunnelBuffer = &SEC_OMX_FreeTunnelBuffer; - pSECComponent->sec_BufferProcess = &SEC_OMX_BufferProcess; - pSECComponent->sec_BufferReset = &SEC_BufferReset; - pSECComponent->sec_InputBufferReturn = &SEC_InputBufferReturn; - pSECComponent->sec_OutputBufferReturn = &SEC_OutputBufferReturn; - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_VideoDecodeComponentDeinit(OMX_IN OMX_HANDLETYPE hComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_OMX_BASEPORT *pSECPort = NULL; - int i = 0; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - for(i = 0; i < ALL_PORT_NUM; i++) { - pSECPort = &pSECComponent->pSECPort[i]; - SEC_OSAL_Free(pSECPort->portDefinition.format.video.cMIMEType); - pSECPort->portDefinition.format.video.cMIMEType = NULL; - } - - ret = SEC_OMX_Port_Destructor(pOMXComponent); - - ret = SEC_OMX_BaseComponent_Destructor(hComponent); - -EXIT: - FunctionOut(); - - return ret; -} diff --git a/sec_mm/sec_omx/sec_omx_component/video/dec/SEC_OMX_Vdec.h b/sec_mm/sec_omx/sec_omx_component/video/dec/SEC_OMX_Vdec.h deleted file mode 100644 index 52130f0..0000000 --- a/sec_mm/sec_omx/sec_omx_component/video/dec/SEC_OMX_Vdec.h +++ /dev/null @@ -1,129 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OMX_Vdec.h - * @brief - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * HyeYeon Chung (hyeon.chung@samsung.com) - * Yunji Kim (yunji.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#ifndef SEC_OMX_VIDEO_DECODE -#define SEC_OMX_VIDEO_DECODE - -#include "OMX_Component.h" -#include "SEC_OMX_Def.h" -#include "SEC_OSAL_Queue.h" -#include "SEC_OMX_Baseport.h" - -#define MAX_VIDEO_INPUTBUFFER_NUM 5 -#define MAX_VIDEO_OUTPUTBUFFER_NUM 2 - -#define DEFAULT_FRAME_WIDTH 176 -#define DEFAULT_FRAME_HEIGHT 144 - -#define DEFAULT_VIDEO_INPUT_BUFFER_SIZE ((DEFAULT_FRAME_WIDTH * DEFAULT_FRAME_HEIGHT) * 2) -#define DEFAULT_VIDEO_OUTPUT_BUFFER_SIZE ((DEFAULT_FRAME_WIDTH * DEFAULT_FRAME_HEIGHT * 3) / 2) - -#define MFC_INPUT_BUFFER_NUM_MAX 2 -#define DEFAULT_MFC_INPUT_BUFFER_SIZE ((1280 * 720 * 3) / 2) - -#define INPUT_PORT_SUPPORTFORMAT_NUM_MAX 1 -#define OUTPUT_PORT_SUPPORTFORMAT_NUM_MAX 3 - -#ifdef USE_ANDROID_EXTENSION -#define ANDROID_MAX_VIDEO_OUTPUTBUFFER_NUM 1 -#endif - -typedef struct -{ - void *pAddrY; - void *pAddrC; -} MFC_DEC_ADDR_INFO; - -typedef struct _SEC_MFC_NBDEC_THREAD -{ - OMX_HANDLETYPE hNBDecodeThread; - OMX_HANDLETYPE hDecFrameStart; - OMX_HANDLETYPE hDecFrameEnd; - OMX_BOOL bExitDecodeThread; - OMX_BOOL bDecoderRun; - - OMX_U32 oneFrameSize; -} SEC_MFC_NBDEC_THREAD; - -typedef struct _MFC_DEC_INPUT_BUFFER -{ - void *PhyAddr; // physical address - void *VirAddr; // virtual address - int bufferSize; // input buffer alloc size - int dataSize; // Data length -} MFC_DEC_INPUT_BUFFER; - -#ifdef __cplusplus -extern "C" { -#endif - -OMX_ERRORTYPE SEC_OMX_UseBuffer( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_INOUT OMX_BUFFERHEADERTYPE **ppBufferHdr, - OMX_IN OMX_U32 nPortIndex, - OMX_IN OMX_PTR pAppPrivate, - OMX_IN OMX_U32 nSizeBytes, - OMX_IN OMX_U8 *pBuffer); -OMX_ERRORTYPE SEC_OMX_AllocateBuffer( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_INOUT OMX_BUFFERHEADERTYPE **ppBuffer, - OMX_IN OMX_U32 nPortIndex, - OMX_IN OMX_PTR pAppPrivate, - OMX_IN OMX_U32 nSizeBytes); -OMX_ERRORTYPE SEC_OMX_FreeBuffer( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_U32 nPortIndex, - OMX_IN OMX_BUFFERHEADERTYPE *pBufferHdr); -OMX_ERRORTYPE SEC_OMX_AllocateTunnelBuffer( - SEC_OMX_BASEPORT *pOMXBasePort, - OMX_U32 nPortIndex); -OMX_ERRORTYPE SEC_OMX_FreeTunnelBuffer( - SEC_OMX_BASEPORT *pOMXBasePort, - OMX_U32 nPortIndex); -OMX_ERRORTYPE SEC_OMX_ComponentTunnelRequest( - OMX_IN OMX_HANDLETYPE hComp, - OMX_IN OMX_U32 nPort, - OMX_IN OMX_HANDLETYPE hTunneledComp, - OMX_IN OMX_U32 nTunneledPort, - OMX_INOUT OMX_TUNNELSETUPTYPE *pTunnelSetup); -OMX_ERRORTYPE SEC_OMX_BufferProcess(OMX_HANDLETYPE hComponent); -OMX_ERRORTYPE SEC_OMX_VideoDecodeGetParameter( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_INDEXTYPE nParamIndex, - OMX_INOUT OMX_PTR ComponentParameterStructure); -OMX_ERRORTYPE SEC_OMX_VideoDecodeSetParameter( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_INDEXTYPE nIndex, - OMX_IN OMX_PTR ComponentParameterStructure); -OMX_ERRORTYPE SEC_OMX_VideoDecodeComponentDeinit(OMX_IN OMX_HANDLETYPE hComponent); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/sec_mm/sec_omx/sec_omx_component/video/dec/h264dec/Android.mk b/sec_mm/sec_omx/sec_omx_component/video/dec/h264dec/Android.mk deleted file mode 100644 index 6cb3d2d..0000000 --- a/sec_mm/sec_omx/sec_omx_component/video/dec/h264dec/Android.mk +++ /dev/null @@ -1,30 +0,0 @@ -LOCAL_PATH := $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := optional - -LOCAL_SRC_FILES := \ - SEC_OMX_H264dec.c \ - library_register.c - - -LOCAL_MODULE := libOMX.SEC.AVC.Decoder.aries - -LOCAL_CFLAGS := - -LOCAL_ARM_MODE := arm - -LOCAL_STATIC_LIBRARIES := libSEC_OMX_Vdec.aries libsecosal.aries libsecbasecomponent.aries \ - libsecmfcdecapi.aries libseccsc.aries -LOCAL_SHARED_LIBRARIES := libc libdl libcutils libutils libui libhardware - -LOCAL_C_INCLUDES := $(SEC_OMX_INC)/khronos \ - $(SEC_OMX_INC)/sec \ - $(SEC_OMX_TOP)/sec_osal \ - $(SEC_OMX_TOP)/sec_omx_core \ - $(SEC_OMX_COMPONENT)/common \ - $(SEC_OMX_COMPONENT)/video/dec - -LOCAL_C_INCLUDES += $(SEC_OMX_TOP)/sec_codecs/video/mfc_c110/include - -include $(BUILD_SHARED_LIBRARY) diff --git a/sec_mm/sec_omx/sec_omx_component/video/dec/h264dec/SEC_OMX_H264dec.c b/sec_mm/sec_omx/sec_omx_component/video/dec/h264dec/SEC_OMX_H264dec.c deleted file mode 100644 index 64ac7eb..0000000 --- a/sec_mm/sec_omx/sec_omx_component/video/dec/h264dec/SEC_OMX_H264dec.c +++ /dev/null @@ -1,1479 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OMX_H264dec.c - * @brief - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#include -#include -#include - -#include "SEC_OMX_Macros.h" -#include "SEC_OMX_Basecomponent.h" -#include "SEC_OMX_Baseport.h" -#include "SEC_OMX_Vdec.h" -#include "library_register.h" -#include "SEC_OMX_H264dec.h" -#include "SsbSipMfcApi.h" -#include "color_space_convertor.h" - -#undef SEC_LOG_TAG -#define SEC_LOG_TAG "SEC_H264_DEC" -#define SEC_LOG_OFF -#include "SEC_OSAL_Log.h" - -//#define ADD_SPS_PPS_I_FRAME -//#define FULL_FRAME_SEARCH - -/* H.264 Decoder Supported Levels & profiles */ -SEC_OMX_VIDEO_PROFILELEVEL supportedAVCProfileLevels[] ={ - {OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel1}, - {OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel1b}, - {OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel11}, - {OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel12}, - {OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel13}, - {OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel2}, - {OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel21}, - {OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel22}, - {OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel3}, - {OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel31}, - - {OMX_VIDEO_AVCProfileMain, OMX_VIDEO_AVCLevel1}, - {OMX_VIDEO_AVCProfileMain, OMX_VIDEO_AVCLevel1b}, - {OMX_VIDEO_AVCProfileMain, OMX_VIDEO_AVCLevel11}, - {OMX_VIDEO_AVCProfileMain, OMX_VIDEO_AVCLevel12}, - {OMX_VIDEO_AVCProfileMain, OMX_VIDEO_AVCLevel13}, - {OMX_VIDEO_AVCProfileMain, OMX_VIDEO_AVCLevel2}, - {OMX_VIDEO_AVCProfileMain, OMX_VIDEO_AVCLevel21}, - {OMX_VIDEO_AVCProfileMain, OMX_VIDEO_AVCLevel22}, - {OMX_VIDEO_AVCProfileMain, OMX_VIDEO_AVCLevel3}, - {OMX_VIDEO_AVCProfileMain, OMX_VIDEO_AVCLevel31}, - - {OMX_VIDEO_AVCProfileHigh, OMX_VIDEO_AVCLevel1}, - {OMX_VIDEO_AVCProfileHigh, OMX_VIDEO_AVCLevel1b}, - {OMX_VIDEO_AVCProfileHigh, OMX_VIDEO_AVCLevel11}, - {OMX_VIDEO_AVCProfileHigh, OMX_VIDEO_AVCLevel12}, - {OMX_VIDEO_AVCProfileHigh, OMX_VIDEO_AVCLevel13}, - {OMX_VIDEO_AVCProfileHigh, OMX_VIDEO_AVCLevel2}, - {OMX_VIDEO_AVCProfileHigh, OMX_VIDEO_AVCLevel21}, - {OMX_VIDEO_AVCProfileHigh, OMX_VIDEO_AVCLevel22}, - {OMX_VIDEO_AVCProfileHigh, OMX_VIDEO_AVCLevel3}, - {OMX_VIDEO_AVCProfileHigh, OMX_VIDEO_AVCLevel31}}; - - -static int Check_H264_Frame(OMX_U8 *pInputStream, int buffSize, OMX_U32 flag, OMX_BOOL bPreviousFrameEOF, OMX_BOOL *pbEndOfFrame) -{ - OMX_U32 preFourByte = (OMX_U32)-1; - int accessUnitSize = 0; - int frameTypeBoundary = 0; - int nextNaluSize = 0; - int naluStart = 0; - - if (bPreviousFrameEOF == OMX_TRUE) - naluStart = 0; - else - naluStart = 1; - - while (1) { - int inputOneByte = 0; - - if (accessUnitSize == buffSize) - goto EXIT; - - inputOneByte = *(pInputStream++); - accessUnitSize += 1; - - if (preFourByte == 0x00000001 || (preFourByte << 8) == 0x00000100) { - int naluType = inputOneByte & 0x1F; - - SEC_OSAL_Log(SEC_LOG_TRACE, "NaluType : %d", naluType); - if (naluStart == 0) { -#ifdef ADD_SPS_PPS_I_FRAME - if (naluType == 1 || naluType == 5) -#else - if (naluType == 1 || naluType == 5 || naluType == 7 || naluType == 8) -#endif - naluStart = 1; - } else { -#ifdef OLD_DETECT - frameTypeBoundary = (8 - naluType) & (naluType - 10); //AUD(9) -#else - if (naluType == 9) - frameTypeBoundary = -2; -#endif - if (naluType == 1 || naluType == 5) { - if (accessUnitSize == buffSize) { - accessUnitSize--; - goto EXIT; - } - inputOneByte = *pInputStream++; - accessUnitSize += 1; - - if (inputOneByte >= 0x80) - frameTypeBoundary = -1; - } - if (frameTypeBoundary < 0) { - break; - } - } - - } - preFourByte = (preFourByte << 8) + inputOneByte; - } - - *pbEndOfFrame = OMX_TRUE; - nextNaluSize = -5; - if (frameTypeBoundary == -1) - nextNaluSize = -6; - if (preFourByte != 0x00000001) - nextNaluSize++; - return (accessUnitSize + nextNaluSize); - -EXIT: - *pbEndOfFrame = OMX_FALSE; - - return accessUnitSize; -} - -OMX_BOOL Check_H264_StartCode(OMX_U8 *pInputStream, OMX_U32 streamSize) -{ - if (streamSize < 4) { - return OMX_FALSE; - } else if ((pInputStream[0] == 0x00) && - (pInputStream[1] == 0x00) && - (pInputStream[2] == 0x00) && - (pInputStream[3] != 0x00) && - ((pInputStream[3] >> 3) == 0x00)) { - return OMX_TRUE; - } else if ((pInputStream[0] == 0x00) && - (pInputStream[1] == 0x00) && - (pInputStream[2] != 0x00) && - ((pInputStream[2] >> 3) == 0x00)) { - return OMX_TRUE; - } else { - return OMX_FALSE; - } -} - -OMX_ERRORTYPE SEC_MFC_H264Dec_GetParameter( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_INDEXTYPE nParamIndex, - OMX_INOUT OMX_PTR pComponentParameterStructure) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - - FunctionIn(); - - if (hComponent == NULL || pComponentParameterStructure == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - if (pSECComponent->currentState == OMX_StateInvalid ) { - ret = OMX_StateInvalid; - goto EXIT; - } - - switch (nParamIndex) { - case OMX_IndexParamVideoAvc: - { - OMX_VIDEO_PARAM_AVCTYPE *pDstAVCComponent = (OMX_VIDEO_PARAM_AVCTYPE *)pComponentParameterStructure; - OMX_VIDEO_PARAM_AVCTYPE *pSrcAVCComponent = NULL; - SEC_H264DEC_HANDLE *pH264Dec = NULL; - - ret = SEC_OMX_Check_SizeVersion(pDstAVCComponent, sizeof(OMX_VIDEO_PARAM_AVCTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pDstAVCComponent->nPortIndex >= ALL_PORT_NUM) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - pH264Dec = (SEC_H264DEC_HANDLE *)pSECComponent->hCodecHandle; - pSrcAVCComponent = &pH264Dec->AVCComponent[pDstAVCComponent->nPortIndex]; - - SEC_OSAL_Memcpy(pDstAVCComponent, pSrcAVCComponent, sizeof(OMX_VIDEO_PARAM_AVCTYPE)); - } - break; - case OMX_IndexParamStandardComponentRole: - { - OMX_PARAM_COMPONENTROLETYPE *pComponentRole = (OMX_PARAM_COMPONENTROLETYPE *)pComponentParameterStructure; - ret = SEC_OMX_Check_SizeVersion(pComponentRole, sizeof(OMX_PARAM_COMPONENTROLETYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - SEC_OSAL_Strcpy((char *)pComponentRole->cRole, SEC_OMX_COMPONENT_H264_DEC_ROLE); - } - break; - case OMX_IndexParamVideoProfileLevelQuerySupported: - { - OMX_VIDEO_PARAM_PROFILELEVELTYPE *pDstProfileLevel = (OMX_VIDEO_PARAM_PROFILELEVELTYPE*)pComponentParameterStructure; - SEC_OMX_VIDEO_PROFILELEVEL *pProfileLevel = NULL; - OMX_U32 maxProfileLevelNum = 0; - - ret = SEC_OMX_Check_SizeVersion(pDstProfileLevel, sizeof(OMX_VIDEO_PARAM_PROFILELEVELTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pDstProfileLevel->nPortIndex >= ALL_PORT_NUM) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - pProfileLevel = supportedAVCProfileLevels; - maxProfileLevelNum = sizeof(supportedAVCProfileLevels) / sizeof(SEC_OMX_VIDEO_PROFILELEVEL); - - if (pDstProfileLevel->nProfileIndex >= maxProfileLevelNum) { - ret = OMX_ErrorNoMore; - goto EXIT; - } - - pProfileLevel += pDstProfileLevel->nProfileIndex; - pDstProfileLevel->eProfile = pProfileLevel->profile; - pDstProfileLevel->eLevel = pProfileLevel->level; - } - break; - case OMX_IndexParamVideoProfileLevelCurrent: - { - OMX_VIDEO_PARAM_PROFILELEVELTYPE *pDstProfileLevel = (OMX_VIDEO_PARAM_PROFILELEVELTYPE*)pComponentParameterStructure; - OMX_VIDEO_PARAM_AVCTYPE *pSrcAVCComponent = NULL; - SEC_H264DEC_HANDLE *pH264Dec = NULL; - - ret = SEC_OMX_Check_SizeVersion(pDstProfileLevel, sizeof(OMX_VIDEO_PARAM_PROFILELEVELTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pDstProfileLevel->nPortIndex >= ALL_PORT_NUM) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - pH264Dec = (SEC_H264DEC_HANDLE *)pSECComponent->hCodecHandle; - pSrcAVCComponent = &pH264Dec->AVCComponent[pDstProfileLevel->nPortIndex]; - - pDstProfileLevel->eProfile = pSrcAVCComponent->eProfile; - pDstProfileLevel->eLevel = pSrcAVCComponent->eLevel; - } - break; - case OMX_IndexParamVideoErrorCorrection: - { - OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE *pDstErrorCorrectionType = (OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE *)pComponentParameterStructure; - OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE *pSrcErrorCorrectionType = NULL; - SEC_H264DEC_HANDLE *pH264Dec = NULL; - - ret = SEC_OMX_Check_SizeVersion(pDstErrorCorrectionType, sizeof(OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pDstErrorCorrectionType->nPortIndex != INPUT_PORT_INDEX) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - pH264Dec = (SEC_H264DEC_HANDLE *)pSECComponent->hCodecHandle; - pSrcErrorCorrectionType = &pH264Dec->errorCorrectionType[INPUT_PORT_INDEX]; - - pDstErrorCorrectionType->bEnableHEC = pSrcErrorCorrectionType->bEnableHEC; - pDstErrorCorrectionType->bEnableResync = pSrcErrorCorrectionType->bEnableResync; - pDstErrorCorrectionType->nResynchMarkerSpacing = pSrcErrorCorrectionType->nResynchMarkerSpacing; - pDstErrorCorrectionType->bEnableDataPartitioning = pSrcErrorCorrectionType->bEnableDataPartitioning; - pDstErrorCorrectionType->bEnableRVLC = pSrcErrorCorrectionType->bEnableRVLC; - } - break; - default: - ret = SEC_OMX_VideoDecodeGetParameter(hComponent, nParamIndex, pComponentParameterStructure); - break; - } -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_MFC_H264Dec_SetParameter( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_INDEXTYPE nIndex, - OMX_IN OMX_PTR pComponentParameterStructure) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - - FunctionIn(); - - if (hComponent == NULL || pComponentParameterStructure == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - if (pSECComponent->currentState == OMX_StateInvalid ) { - ret = OMX_StateInvalid; - goto EXIT; - } - - switch (nIndex) { - case OMX_IndexParamVideoAvc: - { - OMX_VIDEO_PARAM_AVCTYPE *pDstAVCComponent = NULL; - OMX_VIDEO_PARAM_AVCTYPE *pSrcAVCComponent = (OMX_VIDEO_PARAM_AVCTYPE *)pComponentParameterStructure; - SEC_H264DEC_HANDLE *pH264Dec = NULL; - - ret = SEC_OMX_Check_SizeVersion(pSrcAVCComponent, sizeof(OMX_VIDEO_PARAM_AVCTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pSrcAVCComponent->nPortIndex >= ALL_PORT_NUM) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - pH264Dec = (SEC_H264DEC_HANDLE *)pSECComponent->hCodecHandle; - pDstAVCComponent = &pH264Dec->AVCComponent[pSrcAVCComponent->nPortIndex]; - - SEC_OSAL_Memcpy(pDstAVCComponent, pSrcAVCComponent, sizeof(OMX_VIDEO_PARAM_AVCTYPE)); - } - break; - case OMX_IndexParamStandardComponentRole: - { - OMX_PARAM_COMPONENTROLETYPE *pComponentRole = (OMX_PARAM_COMPONENTROLETYPE*)pComponentParameterStructure; - - ret = SEC_OMX_Check_SizeVersion(pComponentRole, sizeof(OMX_PARAM_COMPONENTROLETYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if ((pSECComponent->currentState != OMX_StateLoaded) && (pSECComponent->currentState != OMX_StateWaitForResources)) { - ret = OMX_ErrorIncorrectStateOperation; - goto EXIT; - } - - if (!SEC_OSAL_Strcmp((char*)pComponentRole->cRole, SEC_OMX_COMPONENT_H264_DEC_ROLE)) { - pSECComponent->pSECPort[INPUT_PORT_INDEX].portDefinition.format.video.eCompressionFormat = OMX_VIDEO_CodingAVC; - } else { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - } - break; - case OMX_IndexParamPortDefinition: - { - OMX_PARAM_PORTDEFINITIONTYPE *pPortDefinition = (OMX_PARAM_PORTDEFINITIONTYPE *)pComponentParameterStructure; - OMX_U32 portIndex = pPortDefinition->nPortIndex; - SEC_OMX_BASEPORT *pSECPort; - OMX_U32 width, height, size; - - if (portIndex >= pSECComponent->portParam.nPorts) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - ret = SEC_OMX_Check_SizeVersion(pPortDefinition, sizeof(OMX_PARAM_PORTDEFINITIONTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - pSECPort = &pSECComponent->pSECPort[portIndex]; - - if ((pSECComponent->currentState != OMX_StateLoaded) && (pSECComponent->currentState != OMX_StateWaitForResources)) { - if (pSECPort->portDefinition.bEnabled == OMX_TRUE) { - ret = OMX_ErrorIncorrectStateOperation; - goto EXIT; - } - } - if(pPortDefinition->nBufferCountActual < pSECPort->portDefinition.nBufferCountMin) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - - SEC_OSAL_Memcpy(&pSECPort->portDefinition, pPortDefinition, pPortDefinition->nSize); - - width = ((pSECPort->portDefinition.format.video.nFrameWidth + 15) & (~15)); - height = ((pSECPort->portDefinition.format.video.nFrameHeight + 15) & (~15)); - size = (width * height * 3) / 2; - pSECPort->portDefinition.format.video.nStride = width; - pSECPort->portDefinition.format.video.nSliceHeight = height; - pSECPort->portDefinition.nBufferSize = (size > pSECPort->portDefinition.nBufferSize) ? size : pSECPort->portDefinition.nBufferSize; - - if (portIndex == INPUT_PORT_INDEX) { - SEC_OMX_BASEPORT *pSECOutputPort = &pSECComponent->pSECPort[OUTPUT_PORT_INDEX]; - pSECOutputPort->portDefinition.format.video.nFrameWidth = pSECPort->portDefinition.format.video.nFrameWidth; - pSECOutputPort->portDefinition.format.video.nFrameHeight = pSECPort->portDefinition.format.video.nFrameHeight; - pSECOutputPort->portDefinition.format.video.nStride = width; - pSECOutputPort->portDefinition.format.video.nSliceHeight = height; - - switch (pSECOutputPort->portDefinition.format.video.eColorFormat) { - case OMX_COLOR_FormatYUV420Planar: - case OMX_COLOR_FormatYUV420SemiPlanar: - case OMX_SEC_COLOR_FormatNV12TPhysicalAddress: - case OMX_SEC_COLOR_FormatANBYUV420SemiPlanar: - pSECOutputPort->portDefinition.nBufferSize = (width * height * 3) / 2; - break; - default: - SEC_OSAL_Log(SEC_LOG_ERROR, "Color format is not support!! use default YUV size!!"); - ret = OMX_ErrorUnsupportedSetting; - break; - } - } - } - break; - case OMX_IndexParamVideoProfileLevelCurrent: - { - OMX_VIDEO_PARAM_PROFILELEVELTYPE *pSrcProfileLevel = (OMX_VIDEO_PARAM_PROFILELEVELTYPE *)pComponentParameterStructure; - OMX_VIDEO_PARAM_AVCTYPE *pDstAVCComponent = NULL; - SEC_H264DEC_HANDLE *pH264Dec = NULL; - - ret = SEC_OMX_Check_SizeVersion(pSrcProfileLevel, sizeof(OMX_VIDEO_PARAM_PROFILELEVELTYPE)); - if (ret != OMX_ErrorNone) - goto EXIT; - - if (pSrcProfileLevel->nPortIndex >= ALL_PORT_NUM) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - pH264Dec = (SEC_H264DEC_HANDLE *)pSECComponent->hCodecHandle; - - pDstAVCComponent = &pH264Dec->AVCComponent[pSrcProfileLevel->nPortIndex]; - pDstAVCComponent->eProfile = pSrcProfileLevel->eProfile; - pDstAVCComponent->eLevel = pSrcProfileLevel->eLevel; - } - break; - case OMX_IndexParamVideoErrorCorrection: - { - OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE *pSrcErrorCorrectionType = (OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE *)pComponentParameterStructure; - OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE *pDstErrorCorrectionType = NULL; - SEC_H264DEC_HANDLE *pH264Dec = NULL; - - ret = SEC_OMX_Check_SizeVersion(pSrcErrorCorrectionType, sizeof(OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pSrcErrorCorrectionType->nPortIndex != INPUT_PORT_INDEX) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - pH264Dec = (SEC_H264DEC_HANDLE *)pSECComponent->hCodecHandle; - pDstErrorCorrectionType = &pH264Dec->errorCorrectionType[INPUT_PORT_INDEX]; - - pDstErrorCorrectionType->bEnableHEC = pSrcErrorCorrectionType->bEnableHEC; - pDstErrorCorrectionType->bEnableResync = pSrcErrorCorrectionType->bEnableResync; - pDstErrorCorrectionType->nResynchMarkerSpacing = pSrcErrorCorrectionType->nResynchMarkerSpacing; - pDstErrorCorrectionType->bEnableDataPartitioning = pSrcErrorCorrectionType->bEnableDataPartitioning; - pDstErrorCorrectionType->bEnableRVLC = pSrcErrorCorrectionType->bEnableRVLC; - } - break; - default: - ret = SEC_OMX_VideoDecodeSetParameter(hComponent, nIndex, pComponentParameterStructure); - break; - } -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_MFC_H264Dec_GetConfig( - OMX_HANDLETYPE hComponent, - OMX_INDEXTYPE nIndex, - OMX_PTR pComponentConfigStructure) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - if (pComponentConfigStructure == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - if (pSECComponent->currentState == OMX_StateInvalid) { - ret = OMX_ErrorInvalidState; - goto EXIT; - } - - switch (nIndex) { - case OMX_IndexConfigCommonOutputCrop: - { - SEC_H264DEC_HANDLE *pH264Dec = NULL; - OMX_CONFIG_RECTTYPE *pSrcRectType = NULL; - OMX_CONFIG_RECTTYPE *pDstRectType = NULL; - pH264Dec = (SEC_H264DEC_HANDLE *)pSECComponent->hCodecHandle; - - if (pH264Dec->hMFCH264Handle.bConfiguredMFC == OMX_FALSE) { - ret = OMX_ErrorNotReady; - break; - } - - pDstRectType = (OMX_CONFIG_RECTTYPE *)pComponentConfigStructure; - - if ((pDstRectType->nPortIndex != INPUT_PORT_INDEX) && - (pDstRectType->nPortIndex != OUTPUT_PORT_INDEX)) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - SEC_OMX_BASEPORT *pSECPort = &pSECComponent->pSECPort[pDstRectType->nPortIndex]; - - pSrcRectType = &(pSECPort->cropRectangle); - - pDstRectType->nTop = pSrcRectType->nTop; - pDstRectType->nLeft = pSrcRectType->nLeft; - pDstRectType->nHeight = pSrcRectType->nHeight; - pDstRectType->nWidth = pSrcRectType->nWidth; - } - break; - default: - ret = SEC_OMX_GetConfig(hComponent, nIndex, pComponentConfigStructure); - break; - } - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_MFC_H264Dec_SetConfig( - OMX_HANDLETYPE hComponent, - OMX_INDEXTYPE nIndex, - OMX_PTR pComponentConfigStructure) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - if (pComponentConfigStructure == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - if (pSECComponent->currentState == OMX_StateInvalid) { - ret = OMX_ErrorInvalidState; - goto EXIT; - } - - switch (nIndex) { - case OMX_IndexVendorThumbnailMode: - { - SEC_H264DEC_HANDLE *pH264Dec = (SEC_H264DEC_HANDLE *)pSECComponent->hCodecHandle; - - pH264Dec->hMFCH264Handle.bThumbnailMode = *((OMX_BOOL *)pComponentConfigStructure); - - ret = OMX_ErrorNone; - } - break; - default: - ret = SEC_OMX_SetConfig(hComponent, nIndex, pComponentConfigStructure); - break; - } - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_MFC_H264Dec_GetExtensionIndex( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_STRING cParameterName, - OMX_OUT OMX_INDEXTYPE *pIndexType) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - if ((cParameterName == NULL) || (pIndexType == NULL)) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - if (pSECComponent->currentState == OMX_StateInvalid) { - ret = OMX_ErrorInvalidState; - goto EXIT; - } - - if (SEC_OSAL_Strcmp(cParameterName, SEC_INDEX_PARAM_ENABLE_THUMBNAIL) == 0) { - SEC_H264DEC_HANDLE *pH264Dec = (SEC_H264DEC_HANDLE *)pSECComponent->hCodecHandle; - *pIndexType = OMX_IndexVendorThumbnailMode; - ret = OMX_ErrorNone; -#ifdef USE_ANDROID_EXTENSION - } else if (SEC_OSAL_Strcmp(cParameterName, SEC_INDEX_PARAM_ENABLE_ANB) == 0) { - if (isTvOutEnabled()) { - // Samsung normally pushes HW-decoded frames to the TV Out driver - // but it's hard for us to do that without source, so return an error - // and let Android fallback to software decoding - ret = OMX_ErrorInsufficientResources; - goto EXIT; - } - - *pIndexType = OMX_IndexParamEnableAndroidBuffers; - ret = OMX_ErrorNone; - } else if (SEC_OSAL_Strcmp(cParameterName, SEC_INDEX_PARAM_GET_ANB) == 0) { - *pIndexType = OMX_IndexParamGetAndroidNativeBuffer; - ret = OMX_ErrorNone; - } else if (SEC_OSAL_Strcmp(cParameterName, SEC_INDEX_PARAM_USE_ANB) == 0) { - *pIndexType = OMX_IndexParamUseAndroidNativeBuffer; - ret = OMX_ErrorNone; -#endif - } else { - ret = SEC_OMX_GetExtensionIndex(hComponent, cParameterName, pIndexType); - } - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_MFC_H264Dec_ComponentRoleEnum(OMX_HANDLETYPE hComponent, OMX_U8 *cRole, OMX_U32 nIndex) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - - FunctionIn(); - - if ((hComponent == NULL) || (cRole == NULL)) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - if (nIndex == (MAX_COMPONENT_ROLE_NUM-1)) { - SEC_OSAL_Strcpy((char *)cRole, SEC_OMX_COMPONENT_H264_DEC_ROLE); - ret = OMX_ErrorNone; - } else { - ret = OMX_ErrorNoMore; - } - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_MFC_DecodeThread(OMX_HANDLETYPE hComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_H264DEC_HANDLE *pH264Dec = NULL; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - pH264Dec = (SEC_H264DEC_HANDLE *)pSECComponent->hCodecHandle; - - while (pH264Dec->NBDecThread.bExitDecodeThread == OMX_FALSE) { - SEC_OSAL_SemaphoreWait(pH264Dec->NBDecThread.hDecFrameStart); - - if (pH264Dec->NBDecThread.bExitDecodeThread == OMX_FALSE) { - pH264Dec->hMFCH264Handle.returnCodec = SsbSipMfcDecExe(pH264Dec->hMFCH264Handle.hMFCHandle, pH264Dec->NBDecThread.oneFrameSize); - SEC_OSAL_SemaphorePost(pH264Dec->NBDecThread.hDecFrameEnd); - } - } - -EXIT: - SEC_OSAL_ThreadExit(NULL); - FunctionOut(); - - return ret; -} - -/* MFC Init */ -OMX_ERRORTYPE SEC_MFC_H264Dec_Init(OMX_COMPONENTTYPE *pOMXComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASECOMPONENT *pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - SEC_H264DEC_HANDLE *pH264Dec = NULL; - - OMX_PTR hMFCHandle = NULL; - OMX_PTR pStreamBuffer = NULL; - OMX_PTR pStreamPhyBuffer = NULL; - - pH264Dec = (SEC_H264DEC_HANDLE *)pSECComponent->hCodecHandle; - pH264Dec->hMFCH264Handle.bConfiguredMFC = OMX_FALSE; - pSECComponent->bUseFlagEOF = OMX_FALSE; - pSECComponent->bSaveFlagEOS = OMX_FALSE; - - /* MFC(Multi Function Codec) decoder and CMM(Codec Memory Management) driver open */ - SSBIP_MFC_BUFFER_TYPE buf_type = CACHE; - hMFCHandle = (OMX_PTR)SsbSipMfcDecOpen(&buf_type); - if (hMFCHandle == NULL) { - ret = OMX_ErrorInsufficientResources; - goto EXIT; - } - pH264Dec->hMFCH264Handle.hMFCHandle = hMFCHandle; - - /* Allocate decoder's input buffer */ - pStreamBuffer = SsbSipMfcDecGetInBuf(hMFCHandle, &pStreamPhyBuffer, DEFAULT_MFC_INPUT_BUFFER_SIZE * MFC_INPUT_BUFFER_NUM_MAX); - if (pStreamBuffer == NULL) { - ret = OMX_ErrorInsufficientResources; - goto EXIT; - } - - pH264Dec->MFCDecInputBuffer[0].VirAddr = pStreamBuffer; - pH264Dec->MFCDecInputBuffer[0].PhyAddr = pStreamPhyBuffer; - pH264Dec->MFCDecInputBuffer[0].bufferSize = DEFAULT_MFC_INPUT_BUFFER_SIZE; - pH264Dec->MFCDecInputBuffer[0].dataSize = 0; - pH264Dec->MFCDecInputBuffer[1].VirAddr = (unsigned char *)pStreamBuffer + pH264Dec->MFCDecInputBuffer[0].bufferSize; - pH264Dec->MFCDecInputBuffer[1].PhyAddr = (unsigned char *)pStreamPhyBuffer + pH264Dec->MFCDecInputBuffer[0].bufferSize; - pH264Dec->MFCDecInputBuffer[1].bufferSize = DEFAULT_MFC_INPUT_BUFFER_SIZE; - pH264Dec->MFCDecInputBuffer[1].dataSize = 0; - pH264Dec->indexInputBuffer = 0; - - pH264Dec->bFirstFrame = OMX_TRUE; - - pH264Dec->NBDecThread.bExitDecodeThread = OMX_FALSE; - pH264Dec->NBDecThread.bDecoderRun = OMX_FALSE; - pH264Dec->NBDecThread.oneFrameSize = 0; - SEC_OSAL_SemaphoreCreate(&(pH264Dec->NBDecThread.hDecFrameStart)); - SEC_OSAL_SemaphoreCreate(&(pH264Dec->NBDecThread.hDecFrameEnd)); - if (OMX_ErrorNone == SEC_OSAL_ThreadCreate(&pH264Dec->NBDecThread.hNBDecodeThread, - SEC_MFC_DecodeThread, - pOMXComponent)) { - pH264Dec->hMFCH264Handle.returnCodec = MFC_RET_OK; - } - - pH264Dec->hMFCH264Handle.pMFCStreamBuffer = pH264Dec->MFCDecInputBuffer[0].VirAddr; - pH264Dec->hMFCH264Handle.pMFCStreamPhyBuffer = pH264Dec->MFCDecInputBuffer[0].PhyAddr; - pSECComponent->processData[INPUT_PORT_INDEX].dataBuffer = pH264Dec->MFCDecInputBuffer[0].VirAddr; - pSECComponent->processData[INPUT_PORT_INDEX].allocSize = pH264Dec->MFCDecInputBuffer[0].bufferSize; - - SEC_OSAL_Memset(pSECComponent->timeStamp, -19771003, sizeof(OMX_TICKS) * MAX_TIMESTAMP); - SEC_OSAL_Memset(pSECComponent->nFlags, 0, sizeof(OMX_U32) * MAX_FLAGS); - pH264Dec->hMFCH264Handle.indexTimestamp = 0; - pSECComponent->getAllDelayBuffer = OMX_FALSE; - -EXIT: - return ret; -} - -/* MFC Terminate */ -OMX_ERRORTYPE SEC_MFC_H264Dec_Terminate(OMX_COMPONENTTYPE *pOMXComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASECOMPONENT *pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - SEC_H264DEC_HANDLE *pH264Dec = NULL; - OMX_PTR hMFCHandle = NULL; - - FunctionIn(); - - pH264Dec = (SEC_H264DEC_HANDLE *)pSECComponent->hCodecHandle; - hMFCHandle = pH264Dec->hMFCH264Handle.hMFCHandle; - - pH264Dec->hMFCH264Handle.pMFCStreamBuffer = NULL; - pH264Dec->hMFCH264Handle.pMFCStreamPhyBuffer = NULL; - pSECComponent->processData[INPUT_PORT_INDEX].dataBuffer = NULL; - pSECComponent->processData[INPUT_PORT_INDEX].allocSize = 0; - - if (pH264Dec->NBDecThread.hNBDecodeThread != NULL) { - pH264Dec->NBDecThread.bExitDecodeThread = OMX_TRUE; - SEC_OSAL_SemaphorePost(pH264Dec->NBDecThread.hDecFrameStart); - SEC_OSAL_ThreadTerminate(pH264Dec->NBDecThread.hNBDecodeThread); - pH264Dec->NBDecThread.hNBDecodeThread = NULL; - } - - if(pH264Dec->NBDecThread.hDecFrameEnd != NULL) { - SEC_OSAL_SemaphoreTerminate(pH264Dec->NBDecThread.hDecFrameEnd); - pH264Dec->NBDecThread.hDecFrameEnd = NULL; - } - - if(pH264Dec->NBDecThread.hDecFrameStart != NULL) { - SEC_OSAL_SemaphoreTerminate(pH264Dec->NBDecThread.hDecFrameStart); - pH264Dec->NBDecThread.hDecFrameStart = NULL; - } - - if (hMFCHandle != NULL) { - SsbSipMfcDecClose(hMFCHandle); - hMFCHandle = pH264Dec->hMFCH264Handle.hMFCHandle = NULL; - } - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_MFC_H264_Decode(OMX_COMPONENTTYPE *pOMXComponent, SEC_OMX_DATA *pInputData, SEC_OMX_DATA *pOutputData) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASECOMPONENT *pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - SEC_H264DEC_HANDLE *pH264Dec = (SEC_H264DEC_HANDLE *)pSECComponent->hCodecHandle; - OMX_U32 oneFrameSize = pInputData->dataLen; - SSBSIP_MFC_DEC_OUTPUT_INFO outputInfo; - OMX_S32 setConfVal = 0; - int bufWidth = 0; - int bufHeight = 0; - OMX_BOOL outputDataValid = OMX_FALSE; - - FunctionIn(); - - if (pH264Dec->hMFCH264Handle.bConfiguredMFC == OMX_FALSE) { - SSBSIP_MFC_CODEC_TYPE eCodecType = H264_DEC; - - if ((oneFrameSize <= 0) && (pInputData->nFlags & OMX_BUFFERFLAG_EOS)) { - pOutputData->timeStamp = pInputData->timeStamp; - pOutputData->nFlags = pInputData->nFlags; - ret = OMX_ErrorNone; - goto EXIT; - } - - setConfVal = 0; - SsbSipMfcDecSetConfig(pH264Dec->hMFCH264Handle.hMFCHandle, MFC_DEC_SETCONF_EXTRA_BUFFER_NUM, &setConfVal); - - /* Default number in the driver is optimized */ - if (pH264Dec->hMFCH264Handle.bThumbnailMode == OMX_TRUE) { - setConfVal = 1; - SsbSipMfcDecSetConfig(pH264Dec->hMFCH264Handle.hMFCHandle, MFC_DEC_SETCONF_DISPLAY_DELAY, &setConfVal); - } else { - setConfVal = 8; - SsbSipMfcDecSetConfig(pH264Dec->hMFCH264Handle.hMFCHandle, MFC_DEC_SETCONF_DISPLAY_DELAY, &setConfVal); - } - - pH264Dec->hMFCH264Handle.returnCodec = SsbSipMfcDecInit(pH264Dec->hMFCH264Handle.hMFCHandle, eCodecType, oneFrameSize); - if (pH264Dec->hMFCH264Handle.returnCodec == MFC_RET_OK) { - SSBSIP_MFC_IMG_RESOLUTION imgResol; - SSBSIP_MFC_CROP_INFORMATION cropInfo; - SEC_OMX_BASEPORT *secInputPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - SEC_OMX_BASEPORT *secOutputPort = &pSECComponent->pSECPort[OUTPUT_PORT_INDEX]; - - SsbSipMfcDecGetConfig(pH264Dec->hMFCH264Handle.hMFCHandle, MFC_DEC_GETCONF_BUF_WIDTH_HEIGHT, &imgResol); - SEC_OSAL_Log(SEC_LOG_TRACE, "set width height information : %d, %d", - secInputPort->portDefinition.format.video.nFrameWidth, - secInputPort->portDefinition.format.video.nFrameHeight); - SEC_OSAL_Log(SEC_LOG_TRACE, "mfc width height information : %d, %d", - imgResol.width, imgResol.height); - - SsbSipMfcDecGetConfig(pH264Dec->hMFCH264Handle.hMFCHandle, MFC_DEC_GETCONF_CROP_INFO, &cropInfo); - SEC_OSAL_Log(SEC_LOG_TRACE, "mfc crop_top crop_bottom crop_left crop_right : %d, %d, %d, %d", - cropInfo.crop_top_offset , cropInfo.crop_bottom_offset , - cropInfo.crop_left_offset , cropInfo.crop_right_offset); - - secOutputPort->cropRectangle.nTop = cropInfo.crop_top_offset; - secOutputPort->cropRectangle.nLeft = cropInfo.crop_left_offset; - secOutputPort->cropRectangle.nWidth = imgResol.width - cropInfo.crop_left_offset - cropInfo.crop_right_offset; - secOutputPort->cropRectangle.nHeight = imgResol.height - cropInfo.crop_top_offset - cropInfo.crop_bottom_offset; - - pH264Dec->hMFCH264Handle.bConfiguredMFC = OMX_TRUE; - - /** Update Frame Size **/ - if ((cropInfo.crop_left_offset != 0) || (cropInfo.crop_right_offset != 0) || - (cropInfo.crop_top_offset != 0) || (cropInfo.crop_bottom_offset != 0)) { - /* change width and height information */ - secInputPort->portDefinition.format.video.nFrameWidth = imgResol.width; - secInputPort->portDefinition.format.video.nFrameHeight = imgResol.height; - secInputPort->portDefinition.format.video.nStride = ((imgResol.width + 15) & (~15)); - secInputPort->portDefinition.format.video.nSliceHeight = ((imgResol.height + 15) & (~15)); - - SEC_UpdateFrameSize(pOMXComponent); - - /** Send crop info call back */ - (*(pSECComponent->pCallbacks->EventHandler)) - (pOMXComponent, - pSECComponent->callbackData, - OMX_EventPortSettingsChanged, /* The command was completed */ - OMX_DirOutput, /* This is the port index */ - OMX_IndexConfigCommonOutputCrop, - NULL); - } else if((secInputPort->portDefinition.format.video.nFrameWidth != imgResol.width) || - (secInputPort->portDefinition.format.video.nFrameHeight != imgResol.height)) { - SEC_OSAL_Log(SEC_LOG_TRACE, "change width height information : OMX_EventPortSettingsChanged"); - /* change width and height information */ - secInputPort->portDefinition.format.video.nFrameWidth = imgResol.width; - secInputPort->portDefinition.format.video.nFrameHeight = imgResol.height; - secInputPort->portDefinition.format.video.nStride = ((imgResol.width + 15) & (~15)); - secInputPort->portDefinition.format.video.nSliceHeight = ((imgResol.height + 15) & (~15)); - - SEC_UpdateFrameSize(pOMXComponent); - - /** Send Port Settings changed call back */ - (*(pSECComponent->pCallbacks->EventHandler)) - (pOMXComponent, - pSECComponent->callbackData, - OMX_EventPortSettingsChanged, /* The command was completed */ - OMX_DirOutput, /* This is the port index */ - 0, - NULL); - } - -#ifdef ADD_SPS_PPS_I_FRAME - ret = OMX_ErrorInputDataDecodeYet; -#else - pOutputData->timeStamp = pInputData->timeStamp; - pOutputData->nFlags = pInputData->nFlags; - - ret = OMX_ErrorNone; -#endif - goto EXIT; - } else { - ret = OMX_ErrorMFCInit; - goto EXIT; - } - } - -#ifndef FULL_FRAME_SEARCH - if ((pInputData->nFlags & OMX_BUFFERFLAG_ENDOFFRAME) && - (pSECComponent->bUseFlagEOF == OMX_FALSE)) - pSECComponent->bUseFlagEOF = OMX_TRUE; -#endif - - pSECComponent->timeStamp[pH264Dec->hMFCH264Handle.indexTimestamp] = pInputData->timeStamp; - pSECComponent->nFlags[pH264Dec->hMFCH264Handle.indexTimestamp] = pInputData->nFlags; - - if ((pH264Dec->hMFCH264Handle.returnCodec == MFC_RET_OK) && - (pH264Dec->bFirstFrame == OMX_FALSE)) { - SSBSIP_MFC_DEC_OUTBUF_STATUS status; - OMX_S32 indexTimestamp = 0; - - /* wait for mfc decode done */ - if (pH264Dec->NBDecThread.bDecoderRun == OMX_TRUE) { - SEC_OSAL_SemaphoreWait(pH264Dec->NBDecThread.hDecFrameEnd); - pH264Dec->NBDecThread.bDecoderRun = OMX_FALSE; - } - - status = SsbSipMfcDecGetOutBuf(pH264Dec->hMFCH264Handle.hMFCHandle, &outputInfo); - bufWidth = (outputInfo.img_width + 15) & (~15); - bufHeight = (outputInfo.img_height + 15) & (~15); - - if ((SsbSipMfcDecGetConfig(pH264Dec->hMFCH264Handle.hMFCHandle, MFC_DEC_GETCONF_FRAME_TAG, &indexTimestamp) != MFC_RET_OK) || - (((indexTimestamp < 0) || (indexTimestamp >= MAX_TIMESTAMP)))) { - pOutputData->timeStamp = pInputData->timeStamp; - pOutputData->nFlags = (pInputData->nFlags & (~OMX_BUFFERFLAG_EOS)); - } else { - pOutputData->timeStamp = pSECComponent->timeStamp[indexTimestamp]; - pOutputData->nFlags = pSECComponent->nFlags[indexTimestamp]; - } - SEC_OSAL_Log(SEC_LOG_TRACE, "timestamp %lld us (%.2f secs)", pOutputData->timeStamp, pOutputData->timeStamp / 1E6); - - if ((status == MFC_GETOUTBUF_DISPLAY_DECODING) || - (status == MFC_GETOUTBUF_DISPLAY_ONLY)) { - outputDataValid = OMX_TRUE; - } - if (pOutputData->nFlags & OMX_BUFFERFLAG_EOS) - outputDataValid = OMX_FALSE; - - if ((status == MFC_GETOUTBUF_DISPLAY_ONLY) || - (pSECComponent->getAllDelayBuffer == OMX_TRUE)) - ret = OMX_ErrorInputDataDecodeYet; - - if(status == MFC_GETOUTBUF_DECODING_ONLY) { - if (((pInputData->nFlags & OMX_BUFFERFLAG_EOS) != OMX_BUFFERFLAG_EOS) && - ((pSECComponent->bSaveFlagEOS == OMX_TRUE) || (pSECComponent->getAllDelayBuffer == OMX_TRUE))) { - pInputData->nFlags |= OMX_BUFFERFLAG_EOS; - pSECComponent->getAllDelayBuffer = OMX_TRUE; - ret = OMX_ErrorInputDataDecodeYet; - } else { - ret = OMX_ErrorNone; - } - outputDataValid = OMX_FALSE; - } - -#ifdef FULL_FRAME_SEARCH - if (((pInputData->nFlags & OMX_BUFFERFLAG_EOS) != OMX_BUFFERFLAG_EOS) && - (pSECComponent->bSaveFlagEOS == OMX_TRUE)) { - pInputData->nFlags |= OMX_BUFFERFLAG_EOS; - pSECComponent->getAllDelayBuffer = OMX_TRUE; - ret = OMX_ErrorInputDataDecodeYet; - } else -#endif - if ((pInputData->nFlags & OMX_BUFFERFLAG_EOS) == OMX_BUFFERFLAG_EOS) { - //setConfVal = 1; - //SsbSipMfcDecSetConfig(pH264Dec->hMFCH264Handle.hMFCHandle, MFC_DEC_SETCONF_IS_LAST_FRAME, &setConfVal); - pInputData->nFlags = (pOutputData->nFlags & (~OMX_BUFFERFLAG_EOS)); - pSECComponent->getAllDelayBuffer = OMX_TRUE; - ret = OMX_ErrorInputDataDecodeYet; - } else if ((pOutputData->nFlags & OMX_BUFFERFLAG_EOS) == OMX_BUFFERFLAG_EOS) { - pSECComponent->getAllDelayBuffer = OMX_FALSE; - ret = OMX_ErrorNone; - } - } else { - pOutputData->timeStamp = pInputData->timeStamp; - pOutputData->nFlags = pInputData->nFlags; - - if ((pSECComponent->bSaveFlagEOS == OMX_TRUE) || - (pSECComponent->getAllDelayBuffer == OMX_TRUE) || - (pInputData->nFlags & OMX_BUFFERFLAG_EOS)) { - pOutputData->nFlags |= OMX_BUFFERFLAG_EOS; - pSECComponent->getAllDelayBuffer = OMX_FALSE; - } - if ((pH264Dec->bFirstFrame == OMX_TRUE) && - ((pOutputData->nFlags & OMX_BUFFERFLAG_EOS) == OMX_BUFFERFLAG_EOS)) { - pInputData->nFlags = (pInputData->nFlags | OMX_BUFFERFLAG_EOS); - pOutputData->nFlags = (pOutputData->nFlags & (~OMX_BUFFERFLAG_EOS)); - } - - outputDataValid = OMX_FALSE; - - /* ret = OMX_ErrorUndefined; */ - ret = OMX_ErrorNone; - } - - if (ret == OMX_ErrorInputDataDecodeYet) { - pH264Dec->MFCDecInputBuffer[pH264Dec->indexInputBuffer].dataSize = oneFrameSize; - pH264Dec->indexInputBuffer++; - pH264Dec->indexInputBuffer %= MFC_INPUT_BUFFER_NUM_MAX; - pH264Dec->hMFCH264Handle.pMFCStreamBuffer = pH264Dec->MFCDecInputBuffer[pH264Dec->indexInputBuffer].VirAddr; - pH264Dec->hMFCH264Handle.pMFCStreamPhyBuffer = pH264Dec->MFCDecInputBuffer[pH264Dec->indexInputBuffer].PhyAddr; - pSECComponent->processData[INPUT_PORT_INDEX].dataBuffer = pH264Dec->MFCDecInputBuffer[pH264Dec->indexInputBuffer].VirAddr; - pSECComponent->processData[INPUT_PORT_INDEX].allocSize = pH264Dec->MFCDecInputBuffer[pH264Dec->indexInputBuffer].bufferSize; - oneFrameSize = pH264Dec->MFCDecInputBuffer[pH264Dec->indexInputBuffer].dataSize; - //pInputData->dataLen = oneFrameSize; - //pInputData->remainDataLen = oneFrameSize; - } - - if ((Check_H264_StartCode(pInputData->dataBuffer, pInputData->dataLen) == OMX_TRUE) && - ((pOutputData->nFlags & OMX_BUFFERFLAG_EOS) != OMX_BUFFERFLAG_EOS)) { - SsbSipMfcDecSetConfig(pH264Dec->hMFCH264Handle.hMFCHandle, MFC_DEC_SETCONF_FRAME_TAG, &(pH264Dec->hMFCH264Handle.indexTimestamp)); - pH264Dec->hMFCH264Handle.indexTimestamp++; - pH264Dec->hMFCH264Handle.indexTimestamp %= MAX_TIMESTAMP; - - SsbSipMfcDecSetInBuf(pH264Dec->hMFCH264Handle.hMFCHandle, - pH264Dec->hMFCH264Handle.pMFCStreamPhyBuffer, - pH264Dec->hMFCH264Handle.pMFCStreamBuffer, - pSECComponent->processData[INPUT_PORT_INDEX].allocSize); - - pH264Dec->MFCDecInputBuffer[pH264Dec->indexInputBuffer].dataSize = oneFrameSize; - pH264Dec->NBDecThread.oneFrameSize = oneFrameSize; - - /* mfc decode start */ - SEC_OSAL_SemaphorePost(pH264Dec->NBDecThread.hDecFrameStart); - pH264Dec->NBDecThread.bDecoderRun = OMX_TRUE; - pH264Dec->hMFCH264Handle.returnCodec = MFC_RET_OK; - - pH264Dec->indexInputBuffer++; - pH264Dec->indexInputBuffer %= MFC_INPUT_BUFFER_NUM_MAX; - pH264Dec->hMFCH264Handle.pMFCStreamBuffer = pH264Dec->MFCDecInputBuffer[pH264Dec->indexInputBuffer].VirAddr; - pH264Dec->hMFCH264Handle.pMFCStreamPhyBuffer = pH264Dec->MFCDecInputBuffer[pH264Dec->indexInputBuffer].PhyAddr; - pSECComponent->processData[INPUT_PORT_INDEX].dataBuffer = pH264Dec->MFCDecInputBuffer[pH264Dec->indexInputBuffer].VirAddr; - pSECComponent->processData[INPUT_PORT_INDEX].allocSize = pH264Dec->MFCDecInputBuffer[pH264Dec->indexInputBuffer].bufferSize; - if (((pH264Dec->hMFCH264Handle.bThumbnailMode == OMX_TRUE) || (pSECComponent->bSaveFlagEOS == OMX_TRUE)) && - (pH264Dec->bFirstFrame == OMX_TRUE) && - (outputDataValid == OMX_FALSE)) { - ret = OMX_ErrorInputDataDecodeYet; - } - pH264Dec->bFirstFrame = OMX_FALSE; - } - - /** Fill Output Buffer **/ - if (outputDataValid == OMX_TRUE) { - SEC_OMX_BASEPORT *pSECInputPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - SEC_OMX_BASEPORT *pSECOutputPort = &pSECComponent->pSECPort[OUTPUT_PORT_INDEX]; - void *pOutputBuf[3]; - - int frameSize = bufWidth * bufHeight; - int imageSize = outputInfo.img_width * outputInfo.img_height; - - int actualWidth = outputInfo.img_width; - int actualHeight = outputInfo.img_height; - int actualImageSize = imageSize; - - pOutputBuf[0] = (void *)pOutputData->dataBuffer; - pOutputBuf[1] = (void *)pOutputData->dataBuffer + actualImageSize; - pOutputBuf[2] = (void *)pOutputData->dataBuffer + ((actualImageSize * 5) / 4); - -#ifdef USE_ANDROID_EXTENSION - if (pSECOutputPort->bUseAndroidNativeBuffer == OMX_TRUE) { - OMX_U32 retANB = 0; - void *pVirAddrs[2]; - actualWidth = (outputInfo.img_width + 15) & (~15); - actualImageSize = actualWidth * actualHeight; - - retANB = getVADDRfromANB (pOutputData->dataBuffer, - (OMX_U32)pSECInputPort->portDefinition.format.video.nFrameWidth, - (OMX_U32)pSECInputPort->portDefinition.format.video.nFrameHeight, - pVirAddrs); - if (retANB != 0) { - SEC_OSAL_Log(SEC_LOG_ERROR, "Error getVADDRfromANB, Error code:%d", retANB); - ret = OMX_ErrorOverflow; - goto EXIT; - } - pOutputBuf[0] = pVirAddrs[0]; - pOutputBuf[1] = pVirAddrs[1]; - } -#endif - if ((pH264Dec->hMFCH264Handle.bThumbnailMode == OMX_FALSE) && - (pSECOutputPort->portDefinition.format.video.eColorFormat == OMX_SEC_COLOR_FormatNV12TPhysicalAddress)) - { - /* if use Post copy address structure */ - SEC_OSAL_Memcpy(pOutputBuf[0], &frameSize, sizeof(frameSize)); - SEC_OSAL_Memcpy(pOutputBuf[0] + sizeof(frameSize), &(outputInfo.YPhyAddr), sizeof(outputInfo.YPhyAddr)); - SEC_OSAL_Memcpy(pOutputBuf[0] + sizeof(frameSize) + (sizeof(void *) * 1), &(outputInfo.CPhyAddr), sizeof(outputInfo.CPhyAddr)); - SEC_OSAL_Memcpy(pOutputBuf[0] + sizeof(frameSize) + (sizeof(void *) * 2), &(outputInfo.YVirAddr), sizeof(outputInfo.YVirAddr)); - SEC_OSAL_Memcpy(pOutputBuf[0] + sizeof(frameSize) + (sizeof(void *) * 3), &(outputInfo.CVirAddr), sizeof(outputInfo.CVirAddr)); - pOutputData->dataLen = (bufWidth * bufHeight * 3) / 2; - } else { - switch (pSECOutputPort->portDefinition.format.video.eColorFormat) { - case OMX_COLOR_FormatYUV420Planar: - { - SEC_OSAL_Log(SEC_LOG_TRACE, "YUV420P out"); - csc_tiled_to_linear( - (unsigned char *)pOutputBuf[0], - (unsigned char *)outputInfo.YVirAddr, - actualWidth, - actualHeight); - csc_tiled_to_linear_deinterleave( - (unsigned char *)pOutputBuf[1], - (unsigned char *)pOutputBuf[2], - (unsigned char *)outputInfo.CVirAddr, - actualWidth, - actualHeight >> 1); - pOutputData->dataLen = actualImageSize * 3 / 2; - } - break; - case OMX_COLOR_FormatYUV420SemiPlanar: - case OMX_SEC_COLOR_FormatANBYUV420SemiPlanar: - default: - { - SEC_OSAL_Log(SEC_LOG_TRACE, "YUV420SP out"); - csc_tiled_to_linear( - (unsigned char *)pOutputBuf[0], - (unsigned char *)outputInfo.YVirAddr, - actualWidth, - actualHeight); - csc_tiled_to_linear( - (unsigned char *)pOutputBuf[1], - (unsigned char *)outputInfo.CVirAddr, - actualWidth, - actualHeight >> 1); - pOutputData->dataLen = actualImageSize * 3 / 2; - } - break; - } - } -#ifdef USE_ANDROID_EXTENSION - if (pSECOutputPort->bUseAndroidNativeBuffer == OMX_TRUE) - putVADDRtoANB(pOutputData->dataBuffer); -#endif - } else { - pOutputData->dataLen = 0; - } - -EXIT: - FunctionOut(); - - return ret; -} - -/* MFC Decode */ -OMX_ERRORTYPE SEC_MFC_H264Dec_bufferProcess(OMX_COMPONENTTYPE *pOMXComponent, SEC_OMX_DATA *pInputData, SEC_OMX_DATA *pOutputData) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASECOMPONENT *pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - SEC_H264DEC_HANDLE *pH264Dec = (SEC_H264DEC_HANDLE *)pSECComponent->hCodecHandle; - SEC_OMX_BASEPORT *pSECInputPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - SEC_OMX_BASEPORT *pSECOutputPort = &pSECComponent->pSECPort[OUTPUT_PORT_INDEX]; - OMX_BOOL endOfFrame = OMX_FALSE; - - FunctionIn(); - - if ((!CHECK_PORT_ENABLED(pSECInputPort)) || (!CHECK_PORT_ENABLED(pSECOutputPort)) || - (!CHECK_PORT_POPULATED(pSECInputPort)) || (!CHECK_PORT_POPULATED(pSECOutputPort))) { - ret = OMX_ErrorNone; - goto EXIT; - } - if (OMX_FALSE == SEC_Check_BufferProcess_State(pSECComponent)) { - ret = OMX_ErrorNone; - goto EXIT; - } - - ret = SEC_MFC_H264_Decode(pOMXComponent, pInputData, pOutputData); - if (ret != OMX_ErrorNone) { - if (ret == OMX_ErrorInputDataDecodeYet) { - pOutputData->usedDataLen = 0; - pOutputData->remainDataLen = pOutputData->dataLen; - } else { - pSECComponent->pCallbacks->EventHandler((OMX_HANDLETYPE)pOMXComponent, - pSECComponent->callbackData, - OMX_EventError, ret, 0, NULL); - } - } else { - pInputData->previousDataLen = pInputData->dataLen; - pInputData->usedDataLen += pInputData->dataLen; - pInputData->remainDataLen = pInputData->dataLen - pInputData->usedDataLen; - pInputData->dataLen -= pInputData->usedDataLen; - pInputData->usedDataLen = 0; - - pOutputData->usedDataLen = 0; - pOutputData->remainDataLen = pOutputData->dataLen; - } - -EXIT: - FunctionOut(); - - return ret; -} - -OSCL_EXPORT_REF OMX_ERRORTYPE SEC_OMX_ComponentInit(OMX_HANDLETYPE hComponent, OMX_STRING componentName) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_OMX_BASEPORT *pSECPort = NULL; - SEC_H264DEC_HANDLE *pH264Dec = NULL; - int i = 0; - - FunctionIn(); - - if ((hComponent == NULL) || (componentName == NULL)) { - ret = OMX_ErrorBadParameter; - SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorBadParameter, Line:%d", __LINE__); - goto EXIT; - } - if (SEC_OSAL_Strcmp(SEC_OMX_COMPONENT_H264_DEC, componentName) != 0) { - ret = OMX_ErrorBadParameter; - SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorBadParameter, componentName:%s, Line:%d", componentName, __LINE__); - goto EXIT; - } - - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_VideoDecodeComponentInit(pOMXComponent); - if (ret != OMX_ErrorNone) { - SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_Error, Line:%d", __LINE__); - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - pSECComponent->codecType = HW_VIDEO_CODEC; - - pSECComponent->componentName = (OMX_STRING)SEC_OSAL_Malloc(MAX_OMX_COMPONENT_NAME_SIZE); - if (pSECComponent->componentName == NULL) { - SEC_OMX_VideoDecodeComponentDeinit(pOMXComponent); - ret = OMX_ErrorInsufficientResources; - SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorInsufficientResources, Line:%d", __LINE__); - goto EXIT; - } - SEC_OSAL_Memset(pSECComponent->componentName, 0, MAX_OMX_COMPONENT_NAME_SIZE); - - pH264Dec = SEC_OSAL_Malloc(sizeof(SEC_H264DEC_HANDLE)); - if (pH264Dec == NULL) { - SEC_OMX_VideoDecodeComponentDeinit(pOMXComponent); - ret = OMX_ErrorInsufficientResources; - SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorInsufficientResources, Line:%d", __LINE__); - goto EXIT; - } - SEC_OSAL_Memset(pH264Dec, 0, sizeof(SEC_H264DEC_HANDLE)); - pSECComponent->hCodecHandle = (OMX_HANDLETYPE)pH264Dec; - - SEC_OSAL_Strcpy(pSECComponent->componentName, SEC_OMX_COMPONENT_H264_DEC); - /* Set componentVersion */ - pSECComponent->componentVersion.s.nVersionMajor = VERSIONMAJOR_NUMBER; - pSECComponent->componentVersion.s.nVersionMinor = VERSIONMINOR_NUMBER; - pSECComponent->componentVersion.s.nRevision = REVISION_NUMBER; - pSECComponent->componentVersion.s.nStep = STEP_NUMBER; - /* Set specVersion */ - pSECComponent->specVersion.s.nVersionMajor = VERSIONMAJOR_NUMBER; - pSECComponent->specVersion.s.nVersionMinor = VERSIONMINOR_NUMBER; - pSECComponent->specVersion.s.nRevision = REVISION_NUMBER; - pSECComponent->specVersion.s.nStep = STEP_NUMBER; - - /* Android CapabilityFlags */ - pSECComponent->capabilityFlags.iIsOMXComponentMultiThreaded = OMX_TRUE; - pSECComponent->capabilityFlags.iOMXComponentSupportsExternalInputBufferAlloc = OMX_TRUE; - pSECComponent->capabilityFlags.iOMXComponentSupportsExternalOutputBufferAlloc = OMX_TRUE; - pSECComponent->capabilityFlags.iOMXComponentSupportsMovableInputBuffers = OMX_FALSE; - pSECComponent->capabilityFlags.iOMXComponentSupportsPartialFrames = OMX_FALSE; - pSECComponent->capabilityFlags.iOMXComponentUsesNALStartCodes = OMX_TRUE; - pSECComponent->capabilityFlags.iOMXComponentCanHandleIncompleteFrames = OMX_TRUE; - pSECComponent->capabilityFlags.iOMXComponentUsesFullAVCFrames = OMX_TRUE; - - /* Input port */ - pSECPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - pSECPort->portDefinition.format.video.nFrameWidth = DEFAULT_FRAME_WIDTH; - pSECPort->portDefinition.format.video.nFrameHeight= DEFAULT_FRAME_HEIGHT; - pSECPort->portDefinition.format.video.nStride = 0; /*DEFAULT_FRAME_WIDTH;*/ - pSECPort->portDefinition.format.video.nSliceHeight = 0; - pSECPort->portDefinition.nBufferSize = DEFAULT_VIDEO_INPUT_BUFFER_SIZE; - pSECPort->portDefinition.format.video.eCompressionFormat = OMX_VIDEO_CodingAVC; - SEC_OSAL_Memset(pSECPort->portDefinition.format.video.cMIMEType, 0, MAX_OMX_MIMETYPE_SIZE); - SEC_OSAL_Strcpy(pSECPort->portDefinition.format.video.cMIMEType, "video/avc"); - pSECPort->portDefinition.format.video.pNativeRender = 0; - pSECPort->portDefinition.format.video.bFlagErrorConcealment = OMX_FALSE; - pSECPort->portDefinition.format.video.eColorFormat = OMX_COLOR_FormatUnused; - pSECPort->portDefinition.bEnabled = OMX_TRUE; - - /* Output port */ - pSECPort = &pSECComponent->pSECPort[OUTPUT_PORT_INDEX]; - pSECPort->portDefinition.format.video.nFrameWidth = DEFAULT_FRAME_WIDTH; - pSECPort->portDefinition.format.video.nFrameHeight= DEFAULT_FRAME_HEIGHT; - pSECPort->portDefinition.format.video.nStride = 0; /*DEFAULT_FRAME_WIDTH;*/ - pSECPort->portDefinition.format.video.nSliceHeight = 0; - pSECPort->portDefinition.nBufferSize = DEFAULT_VIDEO_OUTPUT_BUFFER_SIZE; - pSECPort->portDefinition.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused; - SEC_OSAL_Memset(pSECPort->portDefinition.format.video.cMIMEType, 0, MAX_OMX_MIMETYPE_SIZE); - SEC_OSAL_Strcpy(pSECPort->portDefinition.format.video.cMIMEType, "raw/video"); - pSECPort->portDefinition.format.video.pNativeRender = 0; - pSECPort->portDefinition.format.video.bFlagErrorConcealment = OMX_FALSE; - pSECPort->portDefinition.format.video.eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar; - pSECPort->portDefinition.bEnabled = OMX_TRUE; - - for(i = 0; i < ALL_PORT_NUM; i++) { - INIT_SET_SIZE_VERSION(&pH264Dec->AVCComponent[i], OMX_VIDEO_PARAM_AVCTYPE); - pH264Dec->AVCComponent[i].nPortIndex = i; - pH264Dec->AVCComponent[i].eProfile = OMX_VIDEO_AVCProfileBaseline; - pH264Dec->AVCComponent[i].eLevel = OMX_VIDEO_AVCLevel4; - } - - pOMXComponent->GetParameter = &SEC_MFC_H264Dec_GetParameter; - pOMXComponent->SetParameter = &SEC_MFC_H264Dec_SetParameter; - pOMXComponent->GetConfig = &SEC_MFC_H264Dec_GetConfig; - pOMXComponent->SetConfig = &SEC_MFC_H264Dec_SetConfig; - pOMXComponent->GetExtensionIndex = &SEC_MFC_H264Dec_GetExtensionIndex; - pOMXComponent->ComponentRoleEnum = &SEC_MFC_H264Dec_ComponentRoleEnum; - pOMXComponent->ComponentDeInit = &SEC_OMX_ComponentDeinit; - - pSECComponent->sec_mfc_componentInit = &SEC_MFC_H264Dec_Init; - pSECComponent->sec_mfc_componentTerminate = &SEC_MFC_H264Dec_Terminate; - pSECComponent->sec_mfc_bufferProcess = &SEC_MFC_H264Dec_bufferProcess; - pSECComponent->sec_checkInputFrame = &Check_H264_Frame; - - pSECComponent->currentState = OMX_StateLoaded; - - ret = OMX_ErrorNone; - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_ComponentDeinit(OMX_HANDLETYPE hComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_H264DEC_HANDLE *pH264Dec = NULL; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - SEC_OSAL_Free(pSECComponent->componentName); - pSECComponent->componentName = NULL; - - pH264Dec = (SEC_H264DEC_HANDLE *)pSECComponent->hCodecHandle; - if (pH264Dec != NULL) { - SEC_OSAL_Free(pH264Dec); - pH264Dec = pSECComponent->hCodecHandle = NULL; - } - - ret = SEC_OMX_VideoDecodeComponentDeinit(pOMXComponent); - if(ret != OMX_ErrorNone) { - goto EXIT; - } - - ret = OMX_ErrorNone; - -EXIT: - FunctionOut(); - - return ret; -} diff --git a/sec_mm/sec_omx/sec_omx_component/video/dec/h264dec/SEC_OMX_H264dec.h b/sec_mm/sec_omx/sec_omx_component/video/dec/h264dec/SEC_OMX_H264dec.h deleted file mode 100644 index d3f8ac8..0000000 --- a/sec_mm/sec_omx/sec_omx_component/video/dec/h264dec/SEC_OMX_H264dec.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OMX_H264dec.h - * @brief - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#ifndef SEC_OMX_H264_DEC_COMPONENT -#define SEC_OMX_H264_DEC_COMPONENT - -#include "SEC_OMX_Def.h" -#include "OMX_Component.h" -#include "OMX_Video.h" - - -typedef struct _SEC_MFC_H264DEC_HANDLE -{ - OMX_HANDLETYPE hMFCHandle; - OMX_PTR pMFCStreamBuffer; - OMX_PTR pMFCStreamPhyBuffer; - OMX_U32 indexTimestamp; - OMX_BOOL bConfiguredMFC; - OMX_BOOL bThumbnailMode; - OMX_S32 returnCodec; -} SEC_MFC_H264DEC_HANDLE; - -typedef struct _SEC_H264DEC_HANDLE -{ - /* OMX Codec specific */ - OMX_VIDEO_PARAM_AVCTYPE AVCComponent[ALL_PORT_NUM]; - OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE errorCorrectionType[ALL_PORT_NUM]; - - /* SEC MFC Codec specific */ - SEC_MFC_H264DEC_HANDLE hMFCH264Handle; - - /* For Non-Block mode */ - SEC_MFC_NBDEC_THREAD NBDecThread; - OMX_BOOL bFirstFrame; - MFC_DEC_INPUT_BUFFER MFCDecInputBuffer[MFC_INPUT_BUFFER_NUM_MAX]; - OMX_U32 indexInputBuffer; -} SEC_H264DEC_HANDLE; - -#ifdef __cplusplus -extern "C" { -#endif - -OSCL_EXPORT_REF OMX_ERRORTYPE SEC_OMX_ComponentInit(OMX_HANDLETYPE hComponent, OMX_STRING componentName); -OMX_ERRORTYPE SEC_OMX_ComponentDeinit(OMX_HANDLETYPE hComponent); - -#ifdef __cplusplus -}; -#endif - -#endif diff --git a/sec_mm/sec_omx/sec_omx_component/video/dec/h264dec/library_register.c b/sec_mm/sec_omx/sec_omx_component/video/dec/h264dec/library_register.c deleted file mode 100644 index ef3d672..0000000 --- a/sec_mm/sec_omx/sec_omx_component/video/dec/h264dec/library_register.c +++ /dev/null @@ -1,55 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file library_register.c - * @brief - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#include -#include -#include -#include - -#include "SEC_OSAL_Memory.h" -#include "SEC_OSAL_ETC.h" -#include "library_register.h" -#include "SEC_OSAL_Log.h" - - -OSCL_EXPORT_REF int SEC_OMX_COMPONENT_Library_Register(SECRegisterComponentType **secComponents) -{ - FunctionIn(); - - if (secComponents == NULL) - goto EXIT; - - /* component 1 - video decoder H.264 */ - SEC_OSAL_Strcpy(secComponents[0]->componentName, SEC_OMX_COMPONENT_H264_DEC); - SEC_OSAL_Strcpy(secComponents[0]->roles[0], SEC_OMX_COMPONENT_H264_DEC_ROLE); - secComponents[0]->totalRoleNum = MAX_COMPONENT_ROLE_NUM; - -EXIT: - FunctionOut(); - - return MAX_COMPONENT_NUM; -} - diff --git a/sec_mm/sec_omx/sec_omx_component/video/dec/h264dec/library_register.h b/sec_mm/sec_omx/sec_omx_component/video/dec/h264dec/library_register.h deleted file mode 100644 index 7a6f7a1..0000000 --- a/sec_mm/sec_omx/sec_omx_component/video/dec/h264dec/library_register.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file library_register.h - * @brief - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#ifndef SEC_OMX_H264_REG -#define SEC_OMX_H264_REG - -#include "SEC_OMX_Def.h" -#include "OMX_Component.h" -#include "SEC_OMX_Component_Register.h" - - -#define OSCL_EXPORT_REF __attribute__((visibility("default"))) -#define MAX_COMPONENT_NUM 1 -#define MAX_COMPONENT_ROLE_NUM 1 - -/* H.264 */ -#define SEC_OMX_COMPONENT_H264_DEC "OMX.SEC.AVC.Decoder" -#define SEC_OMX_COMPONENT_H264_DEC_ROLE "video_decoder.avc" - - -#ifdef __cplusplus -extern "C" { -#endif - -OSCL_EXPORT_REF int SEC_OMX_COMPONENT_Library_Register(SECRegisterComponentType **secComponents); - -#ifdef __cplusplus -}; -#endif - -#endif - diff --git a/sec_mm/sec_omx/sec_omx_component/video/dec/mpeg4dec/Android.mk b/sec_mm/sec_omx/sec_omx_component/video/dec/mpeg4dec/Android.mk deleted file mode 100644 index 42c528f..0000000 --- a/sec_mm/sec_omx/sec_omx_component/video/dec/mpeg4dec/Android.mk +++ /dev/null @@ -1,30 +0,0 @@ -LOCAL_PATH := $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := optional - -LOCAL_SRC_FILES := \ - SEC_OMX_Mpeg4dec.c \ - library_register.c - - -LOCAL_MODULE := libOMX.SEC.M4V.Decoder.aries - -LOCAL_CFLAGS := - -LOCAL_ARM_MODE := arm - -LOCAL_STATIC_LIBRARIES := libSEC_OMX_Vdec.aries libsecosal.aries libsecbasecomponent.aries \ - libsecmfcdecapi.aries libseccsc.aries -LOCAL_SHARED_LIBRARIES := libc libdl libcutils libutils libui libhardware - -LOCAL_C_INCLUDES := $(SEC_OMX_INC)/khronos \ - $(SEC_OMX_INC)/sec \ - $(SEC_OMX_TOP)/sec_osal \ - $(SEC_OMX_TOP)/sec_omx_core \ - $(SEC_OMX_COMPONENT)/common \ - $(SEC_OMX_COMPONENT)/video/dec - -LOCAL_C_INCLUDES += $(SEC_OMX_TOP)/sec_codecs/video/mfc_c110/include - -include $(BUILD_SHARED_LIBRARY) diff --git a/sec_mm/sec_omx/sec_omx_component/video/dec/mpeg4dec/SEC_OMX_Mpeg4dec.c b/sec_mm/sec_omx/sec_omx_component/video/dec/mpeg4dec/SEC_OMX_Mpeg4dec.c deleted file mode 100644 index fb679da..0000000 --- a/sec_mm/sec_omx/sec_omx_component/video/dec/mpeg4dec/SEC_OMX_Mpeg4dec.c +++ /dev/null @@ -1,1652 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OMX_Mpeg4dec.c - * @brief - * @author Yunji Kim (yunji.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#include -#include -#include - -#include "SEC_OMX_Macros.h" -#include "SEC_OMX_Basecomponent.h" -#include "SEC_OMX_Baseport.h" -#include "SEC_OMX_Vdec.h" -#include "library_register.h" -#include "SEC_OMX_Mpeg4dec.h" -#include "SsbSipMfcApi.h" -#include "color_space_convertor.h" - -#undef SEC_LOG_TAG -#define SEC_LOG_TAG "SEC_MPEG4_DEC" -#define SEC_LOG_OFF -#include "SEC_OSAL_Log.h" - -//#define FULL_FRAME_SEARCH - -/* MPEG4 Decoder Supported Levels & profiles */ -SEC_OMX_VIDEO_PROFILELEVEL supportedMPEG4ProfileLevels[] ={ - {OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level0}, - {OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level0b}, - {OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level1}, - {OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level2}, - {OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level3}, - {OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level4}, - {OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level4a}, - {OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level5}, - {OMX_VIDEO_MPEG4ProfileAdvancedSimple, OMX_VIDEO_MPEG4Level0}, - {OMX_VIDEO_MPEG4ProfileAdvancedSimple, OMX_VIDEO_MPEG4Level0b}, - {OMX_VIDEO_MPEG4ProfileAdvancedSimple, OMX_VIDEO_MPEG4Level1}, - {OMX_VIDEO_MPEG4ProfileAdvancedSimple, OMX_VIDEO_MPEG4Level2}, - {OMX_VIDEO_MPEG4ProfileAdvancedSimple, OMX_VIDEO_MPEG4Level3}, - {OMX_VIDEO_MPEG4ProfileAdvancedSimple, OMX_VIDEO_MPEG4Level4}, - {OMX_VIDEO_MPEG4ProfileAdvancedSimple, OMX_VIDEO_MPEG4Level4a}, - {OMX_VIDEO_MPEG4ProfileAdvancedSimple, OMX_VIDEO_MPEG4Level5}}; - -/* H.263 Decoder Supported Levels & profiles */ -SEC_OMX_VIDEO_PROFILELEVEL supportedH263ProfileLevels[] = { - /* Baseline (Profile 0) */ - {OMX_VIDEO_H263ProfileBaseline, OMX_VIDEO_H263Level10}, - {OMX_VIDEO_H263ProfileBaseline, OMX_VIDEO_H263Level20}, - {OMX_VIDEO_H263ProfileBaseline, OMX_VIDEO_H263Level30}, - {OMX_VIDEO_H263ProfileBaseline, OMX_VIDEO_H263Level40}, - {OMX_VIDEO_H263ProfileBaseline, OMX_VIDEO_H263Level45}, - {OMX_VIDEO_H263ProfileBaseline, OMX_VIDEO_H263Level50}, - {OMX_VIDEO_H263ProfileBaseline, OMX_VIDEO_H263Level60}, - {OMX_VIDEO_H263ProfileBaseline, OMX_VIDEO_H263Level70}, - /* Profile 1 */ - {OMX_VIDEO_H263ProfileH320Coding, OMX_VIDEO_H263Level10}, - {OMX_VIDEO_H263ProfileH320Coding, OMX_VIDEO_H263Level20}, - {OMX_VIDEO_H263ProfileH320Coding, OMX_VIDEO_H263Level30}, - {OMX_VIDEO_H263ProfileH320Coding, OMX_VIDEO_H263Level40}, - {OMX_VIDEO_H263ProfileH320Coding, OMX_VIDEO_H263Level45}, - {OMX_VIDEO_H263ProfileH320Coding, OMX_VIDEO_H263Level50}, - {OMX_VIDEO_H263ProfileH320Coding, OMX_VIDEO_H263Level60}, - {OMX_VIDEO_H263ProfileH320Coding, OMX_VIDEO_H263Level70}, - /* Profile 2 */ - {OMX_VIDEO_H263ProfileBackwardCompatible, OMX_VIDEO_H263Level10}, - {OMX_VIDEO_H263ProfileBackwardCompatible, OMX_VIDEO_H263Level20}, - {OMX_VIDEO_H263ProfileBackwardCompatible, OMX_VIDEO_H263Level30}, - {OMX_VIDEO_H263ProfileBackwardCompatible, OMX_VIDEO_H263Level40}, - {OMX_VIDEO_H263ProfileBackwardCompatible, OMX_VIDEO_H263Level45}, - {OMX_VIDEO_H263ProfileBackwardCompatible, OMX_VIDEO_H263Level50}, - {OMX_VIDEO_H263ProfileBackwardCompatible, OMX_VIDEO_H263Level60}, - {OMX_VIDEO_H263ProfileBackwardCompatible, OMX_VIDEO_H263Level70}, - /* Profile 3, restricted up to SD resolution */ - {OMX_VIDEO_H263ProfileISWV2, OMX_VIDEO_H263Level10}, - {OMX_VIDEO_H263ProfileISWV2, OMX_VIDEO_H263Level20}, - {OMX_VIDEO_H263ProfileISWV2, OMX_VIDEO_H263Level30}, - {OMX_VIDEO_H263ProfileISWV2, OMX_VIDEO_H263Level40}, - {OMX_VIDEO_H263ProfileISWV2, OMX_VIDEO_H263Level45}, - {OMX_VIDEO_H263ProfileISWV2, OMX_VIDEO_H263Level50}, - {OMX_VIDEO_H263ProfileISWV2, OMX_VIDEO_H263Level60}, - {OMX_VIDEO_H263ProfileISWV2, OMX_VIDEO_H263Level70}}; - -static OMX_HANDLETYPE ghMFCHandle = NULL; -static OMX_BOOL gbFIMV1 = OMX_FALSE; - -static int Check_Mpeg4_Frame(OMX_U8 *pInputStream, OMX_U32 buffSize, OMX_U32 flag, OMX_BOOL bPreviousFrameEOF, OMX_BOOL *pbEndOfFrame) -{ - int len, readStream; - unsigned startCode; - OMX_BOOL bFrameStart; - - len = 0; - bFrameStart = OMX_FALSE; - - if (flag & OMX_BUFFERFLAG_CODECCONFIG) { - if (*pInputStream == 0x03) { /* FIMV1 */ - if (ghMFCHandle != NULL) { - BitmapInfoHhr *pInfoHeader; - SSBSIP_MFC_IMG_RESOLUTION imgResolution; - - pInfoHeader = (BitmapInfoHhr *)(pInputStream + 1); - imgResolution.width = pInfoHeader->BiWidth; - imgResolution.height = pInfoHeader->BiHeight; - SsbSipMfcDecSetConfig(ghMFCHandle, MFC_DEC_SETCONF_FIMV1_WIDTH_HEIGHT, &imgResolution); - - SEC_OSAL_Log(SEC_LOG_TRACE, "width(%d), height(%d)", imgResolution.width, imgResolution.height); - gbFIMV1 = OMX_TRUE; - *pbEndOfFrame = OMX_TRUE; - return buffSize; - } - } - } - - if (gbFIMV1) { - *pbEndOfFrame = OMX_TRUE; - return buffSize; - } - - if (bPreviousFrameEOF == OMX_FALSE) - bFrameStart = OMX_TRUE; - - startCode = 0xFFFFFFFF; - if (bFrameStart == OMX_FALSE) { - /* find VOP start code */ - while(startCode != 0x1B6) { - readStream = *(pInputStream + len); - startCode = (startCode << 8) | readStream; - len++; - if (len > buffSize) - goto EXIT; - } - } - - /* find next VOP start code */ - startCode = 0xFFFFFFFF; - while ((startCode != 0x1B6)) { - readStream = *(pInputStream + len); - startCode = (startCode << 8) | readStream; - len++; - if (len > buffSize) - goto EXIT; - } - - *pbEndOfFrame = OMX_TRUE; - - SEC_OSAL_Log(SEC_LOG_TRACE, "1. Check_Mpeg4_Frame returned EOF = %d, len = %d, buffSize = %d", *pbEndOfFrame, len - 4, buffSize); - - return len - 4; - -EXIT : - *pbEndOfFrame = OMX_FALSE; - - SEC_OSAL_Log(SEC_LOG_TRACE, "2. Check_Mpeg4_Frame returned EOF = %d, len = %d, buffSize = %d", *pbEndOfFrame, len - 1, buffSize); - - return --len; -} - -static int Check_H263_Frame(OMX_U8 *pInputStream, OMX_U32 buffSize, OMX_U32 flag, OMX_BOOL bPreviousFrameEOF, OMX_BOOL *pbEndOfFrame) -{ - int len, readStream; - unsigned startCode; - OMX_BOOL bFrameStart = 0; - unsigned pTypeMask = 0x03; - unsigned pType = 0; - - len = 0; - bFrameStart = OMX_FALSE; - - if (bPreviousFrameEOF == OMX_FALSE) - bFrameStart = OMX_TRUE; - - startCode = 0xFFFFFFFF; - if (bFrameStart == OMX_FALSE) { - /* find PSC(Picture Start Code) : 0000 0000 0000 0000 1000 00 */ - while (((startCode << 8 >> 10) != 0x20) || (pType != 0x02)) { - readStream = *(pInputStream + len); - startCode = (startCode << 8) | readStream; - - readStream = *(pInputStream + len + 1); - pType = readStream & pTypeMask; - - len++; - if (len > buffSize) - goto EXIT; - } - } - - /* find next PSC */ - startCode = 0xFFFFFFFF; - pType = 0; - while (((startCode << 8 >> 10) != 0x20) || (pType != 0x02)) { - readStream = *(pInputStream + len); - startCode = (startCode << 8) | readStream; - - readStream = *(pInputStream + len + 1); - pType = readStream & pTypeMask; - - len++; - if (len > buffSize) - goto EXIT; - } - - *pbEndOfFrame = OMX_TRUE; - - SEC_OSAL_Log(SEC_LOG_TRACE, "1. Check_H263_Frame returned EOF = %d, len = %d, iBuffSize = %d", *pbEndOfFrame, len - 3, buffSize); - - return len - 3; - -EXIT : - - *pbEndOfFrame = OMX_FALSE; - - SEC_OSAL_Log(SEC_LOG_TRACE, "2. Check_H263_Frame returned EOF = %d, len = %d, iBuffSize = %d", *pbEndOfFrame, len - 1, buffSize); - - return --len; -} - -OMX_BOOL Check_Stream_PrefixCode(OMX_U8 *pInputStream, OMX_U32 streamSize, CODEC_TYPE codecType) -{ - switch (codecType) { - case CODEC_TYPE_MPEG4: - if (gbFIMV1) { - return OMX_TRUE; - } else { - if (streamSize < 3) { - return OMX_FALSE; - } else if ((pInputStream[0] == 0x00) && - (pInputStream[1] == 0x00) && - (pInputStream[2] == 0x01)) { - return OMX_TRUE; - } else { - return OMX_FALSE; - } - } - break; - case CODEC_TYPE_H263: - if (streamSize > 0) - return OMX_TRUE; - else - return OMX_FALSE; - default: - SEC_OSAL_Log(SEC_LOG_WARNING, "%s: undefined codec type (%d)", __FUNCTION__, codecType); - return OMX_FALSE; - } -} - -OMX_ERRORTYPE SEC_MFC_Mpeg4Dec_GetParameter( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_INDEXTYPE nParamIndex, - OMX_INOUT OMX_PTR pComponentParameterStructure) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - - FunctionIn(); - - if (hComponent == NULL || pComponentParameterStructure == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - if (pSECComponent->currentState == OMX_StateInvalid ) { - ret = OMX_StateInvalid; - goto EXIT; - } - - switch (nParamIndex) { - case OMX_IndexParamVideoMpeg4: - { - OMX_VIDEO_PARAM_MPEG4TYPE *pDstMpeg4Param = (OMX_VIDEO_PARAM_MPEG4TYPE *)pComponentParameterStructure; - OMX_VIDEO_PARAM_MPEG4TYPE *pSrcMpeg4Param = NULL; - SEC_MPEG4_HANDLE *pMpeg4Dec = NULL; - ret = SEC_OMX_Check_SizeVersion(pDstMpeg4Param, sizeof(OMX_VIDEO_PARAM_MPEG4TYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pDstMpeg4Param->nPortIndex >= ALL_PORT_NUM) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - pMpeg4Dec = (SEC_MPEG4_HANDLE *)pSECComponent->hCodecHandle; - pSrcMpeg4Param = &pMpeg4Dec->mpeg4Component[pDstMpeg4Param->nPortIndex]; - - SEC_OSAL_Memcpy(pDstMpeg4Param, pSrcMpeg4Param, sizeof(OMX_VIDEO_PARAM_MPEG4TYPE)); - } - break; - case OMX_IndexParamVideoH263: - { - OMX_VIDEO_PARAM_H263TYPE *pDstH263Param = (OMX_VIDEO_PARAM_H263TYPE *)pComponentParameterStructure; - OMX_VIDEO_PARAM_H263TYPE *pSrcH263Param = NULL; - SEC_MPEG4_HANDLE *pMpeg4Dec = NULL; - ret = SEC_OMX_Check_SizeVersion(pDstH263Param, sizeof(OMX_VIDEO_PARAM_H263TYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pDstH263Param->nPortIndex >= ALL_PORT_NUM) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - pMpeg4Dec = (SEC_MPEG4_HANDLE *)pSECComponent->hCodecHandle; - pSrcH263Param = &pMpeg4Dec->h263Component[pDstH263Param->nPortIndex]; - - SEC_OSAL_Memcpy(pDstH263Param, pSrcH263Param, sizeof(OMX_VIDEO_PARAM_H263TYPE)); - } - break; - case OMX_IndexParamStandardComponentRole: - { - OMX_S32 codecType; - OMX_PARAM_COMPONENTROLETYPE *pComponentRole = (OMX_PARAM_COMPONENTROLETYPE *)pComponentParameterStructure; - - ret = SEC_OMX_Check_SizeVersion(pComponentRole, sizeof(OMX_PARAM_COMPONENTROLETYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - codecType = ((SEC_MPEG4_HANDLE *)(pSECComponent->hCodecHandle))->hMFCMpeg4Handle.codecType; - if (codecType == CODEC_TYPE_MPEG4) - SEC_OSAL_Strcpy((char *)pComponentRole->cRole, SEC_OMX_COMPONENT_MPEG4_DEC_ROLE); - else - SEC_OSAL_Strcpy((char *)pComponentRole->cRole, SEC_OMX_COMPONENT_H263_DEC_ROLE); - } - break; - case OMX_IndexParamVideoProfileLevelQuerySupported: - { - OMX_VIDEO_PARAM_PROFILELEVELTYPE *pDstProfileLevel = (OMX_VIDEO_PARAM_PROFILELEVELTYPE *)pComponentParameterStructure; - SEC_OMX_VIDEO_PROFILELEVEL *pProfileLevel = NULL; - OMX_U32 maxProfileLevelNum = 0; - OMX_S32 codecType; - - ret = SEC_OMX_Check_SizeVersion(pDstProfileLevel, sizeof(OMX_VIDEO_PARAM_PROFILELEVELTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pDstProfileLevel->nPortIndex >= ALL_PORT_NUM) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - codecType = ((SEC_MPEG4_HANDLE *)(pSECComponent->hCodecHandle))->hMFCMpeg4Handle.codecType; - if (codecType == CODEC_TYPE_MPEG4) { - pProfileLevel = supportedMPEG4ProfileLevels; - maxProfileLevelNum = sizeof(supportedMPEG4ProfileLevels) / sizeof(SEC_OMX_VIDEO_PROFILELEVEL); - } else { - pProfileLevel = supportedH263ProfileLevels; - maxProfileLevelNum = sizeof(supportedH263ProfileLevels) / sizeof(SEC_OMX_VIDEO_PROFILELEVEL); - } - - if (pDstProfileLevel->nProfileIndex >= maxProfileLevelNum) { - ret = OMX_ErrorNoMore; - goto EXIT; - } - - pProfileLevel += pDstProfileLevel->nProfileIndex; - pDstProfileLevel->eProfile = pProfileLevel->profile; - pDstProfileLevel->eLevel = pProfileLevel->level; - } - break; - case OMX_IndexParamVideoProfileLevelCurrent: - { - OMX_VIDEO_PARAM_PROFILELEVELTYPE *pDstProfileLevel = (OMX_VIDEO_PARAM_PROFILELEVELTYPE *)pComponentParameterStructure; - OMX_VIDEO_PARAM_MPEG4TYPE *pSrcMpeg4Param = NULL; - OMX_VIDEO_PARAM_H263TYPE *pSrcH263Param = NULL; - SEC_MPEG4_HANDLE *pMpeg4Dec = NULL; - OMX_S32 codecType; - - ret = SEC_OMX_Check_SizeVersion(pDstProfileLevel, sizeof(OMX_VIDEO_PARAM_PROFILELEVELTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pDstProfileLevel->nPortIndex >= ALL_PORT_NUM) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - pMpeg4Dec = (SEC_MPEG4_HANDLE *)pSECComponent->hCodecHandle; - codecType = pMpeg4Dec->hMFCMpeg4Handle.codecType; - if (codecType == CODEC_TYPE_MPEG4) { - pSrcMpeg4Param = &pMpeg4Dec->mpeg4Component[pDstProfileLevel->nPortIndex]; - pDstProfileLevel->eProfile = pSrcMpeg4Param->eProfile; - pDstProfileLevel->eLevel = pSrcMpeg4Param->eLevel; - } else { - pSrcH263Param = &pMpeg4Dec->h263Component[pDstProfileLevel->nPortIndex]; - pDstProfileLevel->eProfile = pSrcH263Param->eProfile; - pDstProfileLevel->eLevel = pSrcH263Param->eLevel; - } - } - break; - case OMX_IndexParamVideoErrorCorrection: - { - OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE *pDstErrorCorrectionType = (OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE *)pComponentParameterStructure; - OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE *pSrcErrorCorrectionType = NULL; - SEC_MPEG4_HANDLE *pMpeg4Dec = NULL; - - ret = SEC_OMX_Check_SizeVersion(pDstErrorCorrectionType, sizeof(OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pDstErrorCorrectionType->nPortIndex != INPUT_PORT_INDEX) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - pMpeg4Dec = (SEC_MPEG4_HANDLE *)pSECComponent->hCodecHandle; - pSrcErrorCorrectionType = &pMpeg4Dec->errorCorrectionType[INPUT_PORT_INDEX]; - - pDstErrorCorrectionType->bEnableHEC = pSrcErrorCorrectionType->bEnableHEC; - pDstErrorCorrectionType->bEnableResync = pSrcErrorCorrectionType->bEnableResync; - pDstErrorCorrectionType->nResynchMarkerSpacing = pSrcErrorCorrectionType->nResynchMarkerSpacing; - pDstErrorCorrectionType->bEnableDataPartitioning = pSrcErrorCorrectionType->bEnableDataPartitioning; - pDstErrorCorrectionType->bEnableRVLC = pSrcErrorCorrectionType->bEnableRVLC; - } - break; - default: - ret = SEC_OMX_VideoDecodeGetParameter(hComponent, nParamIndex, pComponentParameterStructure); - break; - } -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_MFC_Mpeg4Dec_SetParameter( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_INDEXTYPE nIndex, - OMX_IN OMX_PTR pComponentParameterStructure) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - - FunctionIn(); - - if (hComponent == NULL || pComponentParameterStructure == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - if (pSECComponent->currentState == OMX_StateInvalid ) { - ret = OMX_StateInvalid; - goto EXIT; - } - - switch (nIndex) { - case OMX_IndexParamVideoMpeg4: - { - OMX_VIDEO_PARAM_MPEG4TYPE *pDstMpeg4Param = NULL; - OMX_VIDEO_PARAM_MPEG4TYPE *pSrcMpeg4Param = (OMX_VIDEO_PARAM_MPEG4TYPE *)pComponentParameterStructure; - SEC_MPEG4_HANDLE *pMpeg4Dec = NULL; - - ret = SEC_OMX_Check_SizeVersion(pSrcMpeg4Param, sizeof(OMX_VIDEO_PARAM_MPEG4TYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pSrcMpeg4Param->nPortIndex >= ALL_PORT_NUM) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - pMpeg4Dec = (SEC_MPEG4_HANDLE *)pSECComponent->hCodecHandle; - pDstMpeg4Param = &pMpeg4Dec->mpeg4Component[pSrcMpeg4Param->nPortIndex]; - - SEC_OSAL_Memcpy(pDstMpeg4Param, pSrcMpeg4Param, sizeof(OMX_VIDEO_PARAM_MPEG4TYPE)); - } - break; - case OMX_IndexParamVideoH263: - { - OMX_VIDEO_PARAM_H263TYPE *pDstH263Param = NULL; - OMX_VIDEO_PARAM_H263TYPE *pSrcH263Param = (OMX_VIDEO_PARAM_H263TYPE *)pComponentParameterStructure; - SEC_MPEG4_HANDLE *pMpeg4Dec = NULL; - - ret = SEC_OMX_Check_SizeVersion(pSrcH263Param, sizeof(OMX_VIDEO_PARAM_H263TYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pSrcH263Param->nPortIndex >= ALL_PORT_NUM) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - pMpeg4Dec = (SEC_MPEG4_HANDLE *)pSECComponent->hCodecHandle; - pDstH263Param = &pMpeg4Dec->h263Component[pSrcH263Param->nPortIndex]; - - SEC_OSAL_Memcpy(pDstH263Param, pSrcH263Param, sizeof(OMX_VIDEO_PARAM_H263TYPE)); - } - break; - case OMX_IndexParamStandardComponentRole: - { - OMX_PARAM_COMPONENTROLETYPE *pComponentRole = (OMX_PARAM_COMPONENTROLETYPE*)pComponentParameterStructure; - - ret = SEC_OMX_Check_SizeVersion(pComponentRole, sizeof(OMX_PARAM_COMPONENTROLETYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if ((pSECComponent->currentState != OMX_StateLoaded) && (pSECComponent->currentState != OMX_StateWaitForResources)) { - ret = OMX_ErrorIncorrectStateOperation; - goto EXIT; - } - - if (!SEC_OSAL_Strcmp((char*)pComponentRole->cRole, SEC_OMX_COMPONENT_MPEG4_DEC_ROLE)) { - pSECComponent->pSECPort[INPUT_PORT_INDEX].portDefinition.format.video.eCompressionFormat = OMX_VIDEO_CodingMPEG4; - //((SEC_MPEG4_HANDLE *)(pSECComponent->hCodecHandle))->hMFCMpeg4Handle.codecType = CODEC_TYPE_MPEG4; - } else if (!SEC_OSAL_Strcmp((char*)pComponentRole->cRole, SEC_OMX_COMPONENT_H263_DEC_ROLE)) { - pSECComponent->pSECPort[INPUT_PORT_INDEX].portDefinition.format.video.eCompressionFormat = OMX_VIDEO_CodingH263; - //((SEC_MPEG4_HANDLE *)(pSECComponent->hCodecHandle))->hMFCMpeg4Handle.codecType = CODEC_TYPE_H263; - } else { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - } - break; - case OMX_IndexParamPortDefinition: - { - OMX_PARAM_PORTDEFINITIONTYPE *pPortDefinition = (OMX_PARAM_PORTDEFINITIONTYPE *)pComponentParameterStructure; - OMX_U32 portIndex = pPortDefinition->nPortIndex; - SEC_OMX_BASEPORT *pSECPort; - OMX_U32 width, height, size; - - if (portIndex >= pSECComponent->portParam.nPorts) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - ret = SEC_OMX_Check_SizeVersion(pPortDefinition, sizeof(OMX_PARAM_PORTDEFINITIONTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - pSECPort = &pSECComponent->pSECPort[portIndex]; - - if ((pSECComponent->currentState != OMX_StateLoaded) && (pSECComponent->currentState != OMX_StateWaitForResources)) { - if (pSECPort->portDefinition.bEnabled == OMX_TRUE) { - ret = OMX_ErrorIncorrectStateOperation; - goto EXIT; - } - } - if (pPortDefinition->nBufferCountActual < pSECPort->portDefinition.nBufferCountMin) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - - SEC_OSAL_Memcpy(&pSECPort->portDefinition, pPortDefinition, pPortDefinition->nSize); - - width = ((pSECPort->portDefinition.format.video.nFrameWidth + 15) & (~15)); - height = ((pSECPort->portDefinition.format.video.nFrameHeight + 15) & (~15)); - size = (width * height * 3) / 2; - pSECPort->portDefinition.format.video.nStride = width; - pSECPort->portDefinition.format.video.nSliceHeight = height; - pSECPort->portDefinition.nBufferSize = (size > pSECPort->portDefinition.nBufferSize) ? size : pSECPort->portDefinition.nBufferSize; - - if (portIndex == INPUT_PORT_INDEX) { - SEC_OMX_BASEPORT *pSECOutputPort = &pSECComponent->pSECPort[OUTPUT_PORT_INDEX]; - pSECOutputPort->portDefinition.format.video.nFrameWidth = pSECPort->portDefinition.format.video.nFrameWidth; - pSECOutputPort->portDefinition.format.video.nFrameHeight = pSECPort->portDefinition.format.video.nFrameHeight; - pSECOutputPort->portDefinition.format.video.nStride = width; - pSECOutputPort->portDefinition.format.video.nSliceHeight = height; - - switch (pSECOutputPort->portDefinition.format.video.eColorFormat) { - case OMX_COLOR_FormatYUV420Planar: - case OMX_COLOR_FormatYUV420SemiPlanar: - case OMX_SEC_COLOR_FormatNV12TPhysicalAddress: - case OMX_SEC_COLOR_FormatANBYUV420SemiPlanar: - pSECOutputPort->portDefinition.nBufferSize = (width * height * 3) / 2; - break; - default: - SEC_OSAL_Log(SEC_LOG_ERROR, "Color format is not support!! use default YUV size!!"); - ret = OMX_ErrorUnsupportedSetting; - break; - } - } - } - break; - case OMX_IndexParamVideoProfileLevelCurrent: - { - OMX_VIDEO_PARAM_PROFILELEVELTYPE *pSrcProfileLevel = (OMX_VIDEO_PARAM_PROFILELEVELTYPE *)pComponentParameterStructure; - OMX_VIDEO_PARAM_MPEG4TYPE *pDstMpeg4Param = NULL; - OMX_VIDEO_PARAM_H263TYPE *pDstH263Param = NULL; - SEC_MPEG4_HANDLE *pMpeg4Dec = NULL; - OMX_S32 codecType; - - ret = SEC_OMX_Check_SizeVersion(pSrcProfileLevel, sizeof(OMX_VIDEO_PARAM_PROFILELEVELTYPE)); - if (ret != OMX_ErrorNone) - goto EXIT; - - if (pSrcProfileLevel->nPortIndex >= ALL_PORT_NUM) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - pMpeg4Dec = (SEC_MPEG4_HANDLE *)pSECComponent->hCodecHandle; - codecType = pMpeg4Dec->hMFCMpeg4Handle.codecType; - if (codecType == CODEC_TYPE_MPEG4) { - /* - * To do: Check validity of profile & level parameters - */ - - pDstMpeg4Param = &pMpeg4Dec->mpeg4Component[pSrcProfileLevel->nPortIndex]; - pDstMpeg4Param->eProfile = pSrcProfileLevel->eProfile; - pDstMpeg4Param->eLevel = pSrcProfileLevel->eLevel; - } else { - /* - * To do: Check validity of profile & level parameters - */ - - pDstH263Param = &pMpeg4Dec->h263Component[pSrcProfileLevel->nPortIndex]; - pDstH263Param->eProfile = pSrcProfileLevel->eProfile; - pDstH263Param->eLevel = pSrcProfileLevel->eLevel; - } - } - break; - case OMX_IndexParamVideoErrorCorrection: - { - OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE *pSrcErrorCorrectionType = (OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE *)pComponentParameterStructure; - OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE *pDstErrorCorrectionType = NULL; - SEC_MPEG4_HANDLE *pMpeg4Dec = NULL; - - ret = SEC_OMX_Check_SizeVersion(pSrcErrorCorrectionType, sizeof(OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pSrcErrorCorrectionType->nPortIndex != INPUT_PORT_INDEX) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - pMpeg4Dec = (SEC_MPEG4_HANDLE *)pSECComponent->hCodecHandle; - pDstErrorCorrectionType = &pMpeg4Dec->errorCorrectionType[INPUT_PORT_INDEX]; - - pDstErrorCorrectionType->bEnableHEC = pSrcErrorCorrectionType->bEnableHEC; - pDstErrorCorrectionType->bEnableResync = pSrcErrorCorrectionType->bEnableResync; - pDstErrorCorrectionType->nResynchMarkerSpacing = pSrcErrorCorrectionType->nResynchMarkerSpacing; - pDstErrorCorrectionType->bEnableDataPartitioning = pSrcErrorCorrectionType->bEnableDataPartitioning; - pDstErrorCorrectionType->bEnableRVLC = pSrcErrorCorrectionType->bEnableRVLC; - } - break; - default: - ret = SEC_OMX_VideoDecodeSetParameter(hComponent, nIndex, pComponentParameterStructure); - break; - } -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_MFC_Mpeg4Dec_GetConfig( - OMX_HANDLETYPE hComponent, - OMX_INDEXTYPE nIndex, - OMX_PTR pComponentConfigStructure) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - if (pComponentConfigStructure == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - if (pSECComponent->currentState == OMX_StateInvalid) { - ret = OMX_ErrorInvalidState; - goto EXIT; - } - - switch (nIndex) { - default: - ret = SEC_OMX_GetConfig(hComponent, nIndex, pComponentConfigStructure); - break; - } - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_MFC_Mpeg4Dec_SetConfig( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_INDEXTYPE nIndex, - OMX_IN OMX_PTR pComponentConfigStructure) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - - FunctionIn(); - - if (hComponent == NULL || pComponentConfigStructure == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - if (pSECComponent->currentState == OMX_StateInvalid) { - ret = OMX_ErrorInvalidState; - goto EXIT; - } - - switch (nIndex) { - case OMX_IndexVendorThumbnailMode: - { - SEC_MPEG4_HANDLE *pMpeg4Dec = (SEC_MPEG4_HANDLE *)pSECComponent->hCodecHandle; - - pMpeg4Dec->hMFCMpeg4Handle.bThumbnailMode = *((OMX_BOOL *)pComponentConfigStructure); - } - break; - default: - ret = SEC_OMX_SetConfig(hComponent, nIndex, pComponentConfigStructure); - break; - } - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_MFC_Mpeg4Dec_GetExtensionIndex( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_STRING cParameterName, - OMX_OUT OMX_INDEXTYPE *pIndexType) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - if ((cParameterName == NULL) || (pIndexType == NULL)) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - if (pSECComponent->currentState == OMX_StateInvalid) { - ret = OMX_ErrorInvalidState; - goto EXIT; - } - - if (SEC_OSAL_Strcmp(cParameterName, SEC_INDEX_PARAM_ENABLE_THUMBNAIL) == 0) { - SEC_MPEG4_HANDLE *pMpeg4Dec = (SEC_MPEG4_HANDLE *)pSECComponent->hCodecHandle; - *pIndexType = OMX_IndexVendorThumbnailMode; - ret = OMX_ErrorNone; -#ifdef USE_ANDROID_EXTENSION - } else if (SEC_OSAL_Strcmp(cParameterName, SEC_INDEX_PARAM_ENABLE_ANB) == 0) { - if (isTvOutEnabled()) { - // Samsung normally pushes HW-decoded frames to the TV Out driver - // but it's hard for us to do that without source, so return an error - // and let Android fallback to software decoding - ret = OMX_ErrorInsufficientResources; - goto EXIT; - } - - *pIndexType = OMX_IndexParamEnableAndroidBuffers; - ret = OMX_ErrorNone; - } else if (SEC_OSAL_Strcmp(cParameterName, SEC_INDEX_PARAM_GET_ANB) == 0) { - *pIndexType = OMX_IndexParamGetAndroidNativeBuffer; - ret = OMX_ErrorNone; - } else if (SEC_OSAL_Strcmp(cParameterName, SEC_INDEX_PARAM_USE_ANB) == 0) { - *pIndexType = OMX_IndexParamUseAndroidNativeBuffer; - ret = OMX_ErrorNone; -#endif - } else { - ret = SEC_OMX_GetExtensionIndex(hComponent, cParameterName, pIndexType); - } - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_MFC_Mpeg4Dec_ComponentRoleEnum( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_OUT OMX_U8 *cRole, - OMX_IN OMX_U32 nIndex) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - OMX_S32 codecType; - - FunctionIn(); - - if ((hComponent == NULL) || (cRole == NULL)) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - if (nIndex != (MAX_COMPONENT_ROLE_NUM - 1)) { - ret = OMX_ErrorNoMore; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - if (pSECComponent->currentState == OMX_StateInvalid ) { - ret = OMX_StateInvalid; - goto EXIT; - } - - codecType = ((SEC_MPEG4_HANDLE *)(pSECComponent->hCodecHandle))->hMFCMpeg4Handle.codecType; - if (codecType == CODEC_TYPE_MPEG4) - SEC_OSAL_Strcpy((char *)cRole, SEC_OMX_COMPONENT_MPEG4_DEC_ROLE); - else - SEC_OSAL_Strcpy((char *)cRole, SEC_OMX_COMPONENT_H263_DEC_ROLE); - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_MFC_DecodeThread(OMX_HANDLETYPE hComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_MPEG4_HANDLE *pMpeg4Dec = NULL; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - pMpeg4Dec = (SEC_MPEG4_HANDLE *)pSECComponent->hCodecHandle; - - while (pMpeg4Dec->NBDecThread.bExitDecodeThread == OMX_FALSE) { - SEC_OSAL_SemaphoreWait(pMpeg4Dec->NBDecThread.hDecFrameStart); - - if (pMpeg4Dec->NBDecThread.bExitDecodeThread == OMX_FALSE) { - pMpeg4Dec->hMFCMpeg4Handle.returnCodec = SsbSipMfcDecExe(pMpeg4Dec->hMFCMpeg4Handle.hMFCHandle, pMpeg4Dec->NBDecThread.oneFrameSize); - SEC_OSAL_SemaphorePost(pMpeg4Dec->NBDecThread.hDecFrameEnd); - } - } - -EXIT: - SEC_OSAL_ThreadExit(NULL); - FunctionOut(); - - return ret; -} - -/* MFC Init */ -OMX_ERRORTYPE SEC_MFC_Mpeg4Dec_Init(OMX_COMPONENTTYPE *pOMXComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASECOMPONENT *pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - SEC_MPEG4_HANDLE *pMpeg4Dec = NULL; - OMX_HANDLETYPE hMFCHandle = NULL; - OMX_PTR pStreamBuffer = NULL; - OMX_PTR pStreamPhyBuffer = NULL; - - FunctionIn(); - - pMpeg4Dec = (SEC_MPEG4_HANDLE *)pSECComponent->hCodecHandle; - pMpeg4Dec->hMFCMpeg4Handle.bConfiguredMFC = OMX_FALSE; - pSECComponent->bUseFlagEOF = OMX_FALSE; - pSECComponent->bSaveFlagEOS = OMX_FALSE; - - /* MFC(Multi Format Codec) decoder and CMM(Codec Memory Management) driver open */ - SSBIP_MFC_BUFFER_TYPE buf_type = CACHE; - hMFCHandle = (OMX_PTR)SsbSipMfcDecOpen(&buf_type); - if (hMFCHandle == NULL) { - ret = OMX_ErrorInsufficientResources; - goto EXIT; - } - ghMFCHandle = pMpeg4Dec->hMFCMpeg4Handle.hMFCHandle = hMFCHandle; - - /* Allocate decoder's input buffer */ - pStreamBuffer = SsbSipMfcDecGetInBuf(hMFCHandle, &pStreamPhyBuffer, DEFAULT_MFC_INPUT_BUFFER_SIZE); - if (pStreamBuffer == NULL) { - ret = OMX_ErrorInsufficientResources; - goto EXIT; - } - - pMpeg4Dec->MFCDecInputBuffer[0].VirAddr = pStreamBuffer; - pMpeg4Dec->MFCDecInputBuffer[0].PhyAddr = pStreamPhyBuffer; - pMpeg4Dec->MFCDecInputBuffer[0].bufferSize = DEFAULT_MFC_INPUT_BUFFER_SIZE; - pMpeg4Dec->MFCDecInputBuffer[0].dataSize = 0; - pMpeg4Dec->MFCDecInputBuffer[1].VirAddr = (unsigned char *)pStreamBuffer + pMpeg4Dec->MFCDecInputBuffer[0].bufferSize; - pMpeg4Dec->MFCDecInputBuffer[1].PhyAddr = (unsigned char *)pStreamPhyBuffer + pMpeg4Dec->MFCDecInputBuffer[0].bufferSize; - pMpeg4Dec->MFCDecInputBuffer[1].bufferSize = DEFAULT_MFC_INPUT_BUFFER_SIZE; - pMpeg4Dec->MFCDecInputBuffer[1].dataSize = 0; - pMpeg4Dec->indexInputBuffer = 0; - - pMpeg4Dec->bFirstFrame = OMX_TRUE; - - pMpeg4Dec->NBDecThread.bExitDecodeThread = OMX_FALSE; - pMpeg4Dec->NBDecThread.bDecoderRun = OMX_FALSE; - pMpeg4Dec->NBDecThread.oneFrameSize = 0; - SEC_OSAL_SemaphoreCreate(&(pMpeg4Dec->NBDecThread.hDecFrameStart)); - SEC_OSAL_SemaphoreCreate(&(pMpeg4Dec->NBDecThread.hDecFrameEnd)); - if (OMX_ErrorNone == SEC_OSAL_ThreadCreate(&pMpeg4Dec->NBDecThread.hNBDecodeThread, - SEC_MFC_DecodeThread, - pOMXComponent)) { - pMpeg4Dec->hMFCMpeg4Handle.returnCodec = MFC_RET_OK; - } - - pMpeg4Dec->hMFCMpeg4Handle.pMFCStreamBuffer = pMpeg4Dec->MFCDecInputBuffer[0].VirAddr; - pMpeg4Dec->hMFCMpeg4Handle.pMFCStreamPhyBuffer = pMpeg4Dec->MFCDecInputBuffer[0].PhyAddr; - pSECComponent->processData[INPUT_PORT_INDEX].dataBuffer = pMpeg4Dec->MFCDecInputBuffer[0].VirAddr; - pSECComponent->processData[INPUT_PORT_INDEX].allocSize = pMpeg4Dec->MFCDecInputBuffer[0].bufferSize; - - SEC_OSAL_Memset(pSECComponent->timeStamp, -19771003, sizeof(OMX_TICKS) * MAX_TIMESTAMP); - SEC_OSAL_Memset(pSECComponent->nFlags, 0, sizeof(OMX_U32) * MAX_FLAGS); - pMpeg4Dec->hMFCMpeg4Handle.indexTimestamp = 0; - pSECComponent->getAllDelayBuffer = OMX_FALSE; - -EXIT: - FunctionOut(); - - return ret; -} - -/* MFC Terminate */ -OMX_ERRORTYPE SEC_MFC_Mpeg4Dec_Terminate(OMX_COMPONENTTYPE *pOMXComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASECOMPONENT *pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - SEC_MPEG4_HANDLE *pMpeg4Dec = NULL; - OMX_HANDLETYPE hMFCHandle = NULL; - - FunctionIn(); - - pMpeg4Dec = (SEC_MPEG4_HANDLE *)pSECComponent->hCodecHandle; - hMFCHandle = pMpeg4Dec->hMFCMpeg4Handle.hMFCHandle; - - pMpeg4Dec->hMFCMpeg4Handle.pMFCStreamBuffer = NULL; - pMpeg4Dec->hMFCMpeg4Handle.pMFCStreamPhyBuffer = NULL; - pSECComponent->processData[INPUT_PORT_INDEX].dataBuffer = NULL; - pSECComponent->processData[INPUT_PORT_INDEX].allocSize = 0; - - if (pMpeg4Dec->NBDecThread.hNBDecodeThread != NULL) { - pMpeg4Dec->NBDecThread.bExitDecodeThread = OMX_TRUE; - SEC_OSAL_SemaphorePost(pMpeg4Dec->NBDecThread.hDecFrameStart); - SEC_OSAL_ThreadTerminate(pMpeg4Dec->NBDecThread.hNBDecodeThread); - pMpeg4Dec->NBDecThread.hNBDecodeThread = NULL; - } - - if(pMpeg4Dec->NBDecThread.hDecFrameEnd != NULL) { - SEC_OSAL_SemaphoreTerminate(pMpeg4Dec->NBDecThread.hDecFrameEnd); - pMpeg4Dec->NBDecThread.hDecFrameEnd = NULL; - } - - if(pMpeg4Dec->NBDecThread.hDecFrameStart != NULL) { - SEC_OSAL_SemaphoreTerminate(pMpeg4Dec->NBDecThread.hDecFrameStart); - pMpeg4Dec->NBDecThread.hDecFrameStart = NULL; - } - - if (hMFCHandle != NULL) { - SsbSipMfcDecClose(hMFCHandle); - pMpeg4Dec->hMFCMpeg4Handle.hMFCHandle = NULL; - } - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_MFC_Mpeg4_Decode(OMX_COMPONENTTYPE *pOMXComponent, SEC_OMX_DATA *pInputData, SEC_OMX_DATA *pOutputData) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASECOMPONENT *pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - SEC_MPEG4_HANDLE *pMpeg4Dec = (SEC_MPEG4_HANDLE *)pSECComponent->hCodecHandle; - OMX_HANDLETYPE hMFCHandle = pMpeg4Dec->hMFCMpeg4Handle.hMFCHandle; - OMX_U32 oneFrameSize = pInputData->dataLen; - SSBSIP_MFC_DEC_OUTPUT_INFO outputInfo; - OMX_S32 configValue = 0; - int bufWidth = 0; - int bufHeight = 0; - OMX_BOOL outputDataValid = OMX_FALSE; - - FunctionIn(); - - if (pMpeg4Dec->hMFCMpeg4Handle.bConfiguredMFC == OMX_FALSE) { - SSBSIP_MFC_CODEC_TYPE MFCCodecType; - if (pMpeg4Dec->hMFCMpeg4Handle.codecType == CODEC_TYPE_MPEG4) { - if (gbFIMV1) - MFCCodecType = FIMV1_DEC; - else - MFCCodecType = MPEG4_DEC; - } else { - MFCCodecType = H263_DEC; - } - - if ((oneFrameSize <= 0) && (pInputData->nFlags & OMX_BUFFERFLAG_EOS)) { - pOutputData->timeStamp = pInputData->timeStamp; - pOutputData->nFlags = pInputData->nFlags; - ret = OMX_ErrorNone; - goto EXIT; - } - - /* Set the number of extra buffer to prevent tearing */ - configValue = 0; - SsbSipMfcDecSetConfig(hMFCHandle, MFC_DEC_SETCONF_EXTRA_BUFFER_NUM, &configValue); - - /* Set mpeg4 deblocking filter enable */ - configValue = 1; - SsbSipMfcDecSetConfig(hMFCHandle, MFC_DEC_SETCONF_POST_ENABLE, &configValue); - - if (pMpeg4Dec->hMFCMpeg4Handle.bThumbnailMode == OMX_TRUE) { - configValue = 1; // the number that you want to delay - SsbSipMfcDecSetConfig(hMFCHandle, MFC_DEC_SETCONF_DISPLAY_DELAY, &configValue); - } - - pMpeg4Dec->hMFCMpeg4Handle.returnCodec = SsbSipMfcDecInit(hMFCHandle, MFCCodecType, oneFrameSize); - if (pMpeg4Dec->hMFCMpeg4Handle.returnCodec == MFC_RET_OK) { - SSBSIP_MFC_IMG_RESOLUTION imgResol; - SEC_OMX_BASEPORT *pInputPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - - if (SsbSipMfcDecGetConfig(hMFCHandle, MFC_DEC_GETCONF_BUF_WIDTH_HEIGHT, &imgResol) != MFC_RET_OK) { - ret = OMX_ErrorMFCInit; - SEC_OSAL_Log(SEC_LOG_ERROR, "%s: SsbSipMfcDecGetConfig failed", __FUNCTION__); - goto EXIT; - } - - /** Update Frame Size **/ - if ((pInputPort->portDefinition.format.video.nFrameWidth != imgResol.width) || - (pInputPort->portDefinition.format.video.nFrameHeight != imgResol.height)) { - /* change width and height information */ - pInputPort->portDefinition.format.video.nFrameWidth = imgResol.width; - pInputPort->portDefinition.format.video.nFrameHeight = imgResol.height; - pInputPort->portDefinition.format.video.nStride = ((imgResol.width + 15) & (~15)); - pInputPort->portDefinition.format.video.nSliceHeight = ((imgResol.height + 15) & (~15)); - - SEC_UpdateFrameSize(pOMXComponent); - - /* Send Port Settings changed call back */ - (*(pSECComponent->pCallbacks->EventHandler)) - (pOMXComponent, - pSECComponent->callbackData, - OMX_EventPortSettingsChanged, // The command was completed - OMX_DirOutput, // This is the port index - 0, - NULL); - } - - SEC_OSAL_Log(SEC_LOG_TRACE, "nFrameWidth(%d) nFrameHeight(%d), nStride(%d), nSliceHeight(%d)", - pInputPort->portDefinition.format.video.nFrameWidth, pInputPort->portDefinition.format.video.nFrameHeight, - pInputPort->portDefinition.format.video.nStride, pInputPort->portDefinition.format.video.nSliceHeight); - - pMpeg4Dec->hMFCMpeg4Handle.bConfiguredMFC = OMX_TRUE; - if (pMpeg4Dec->hMFCMpeg4Handle.codecType == CODEC_TYPE_MPEG4) { - pOutputData->timeStamp = pInputData->timeStamp; - pOutputData->nFlags = pInputData->nFlags; - ret = OMX_ErrorNone; - } else { - pOutputData->dataLen = 0; - ret = OMX_ErrorInputDataDecodeYet; - } - goto EXIT; - } else { - SEC_OSAL_Log(SEC_LOG_ERROR, "%s: SsbSipMfcDecInit failed", __FUNCTION__); - ret = OMX_ErrorMFCInit; /* OMX_ErrorUndefined */ - goto EXIT; - } - } - -#ifndef FULL_FRAME_SEARCH - if ((pInputData->nFlags & OMX_BUFFERFLAG_ENDOFFRAME) && - (pSECComponent->bUseFlagEOF == OMX_FALSE)) - pSECComponent->bUseFlagEOF = OMX_TRUE; -#endif - - pSECComponent->timeStamp[pMpeg4Dec->hMFCMpeg4Handle.indexTimestamp] = pInputData->timeStamp; - pSECComponent->nFlags[pMpeg4Dec->hMFCMpeg4Handle.indexTimestamp] = pInputData->nFlags; - - if ((pMpeg4Dec->hMFCMpeg4Handle.returnCodec == MFC_RET_OK) && - (pMpeg4Dec->bFirstFrame == OMX_FALSE)) { - SSBSIP_MFC_DEC_OUTBUF_STATUS status; - OMX_S32 indexTimestamp = 0; - - /* wait for mfc decode done */ - if (pMpeg4Dec->NBDecThread.bDecoderRun == OMX_TRUE) { - SEC_OSAL_SemaphoreWait(pMpeg4Dec->NBDecThread.hDecFrameEnd); - pMpeg4Dec->NBDecThread.bDecoderRun = OMX_FALSE; - } - - status = SsbSipMfcDecGetOutBuf(hMFCHandle, &outputInfo); - bufWidth = (outputInfo.img_width + 15) & (~15); - bufHeight = (outputInfo.img_height + 15) & (~15); - - if ((SsbSipMfcDecGetConfig(hMFCHandle, MFC_DEC_GETCONF_FRAME_TAG, &indexTimestamp) != MFC_RET_OK) || - (((indexTimestamp < 0) || (indexTimestamp >= MAX_TIMESTAMP)))) { - pOutputData->timeStamp = pInputData->timeStamp; - pOutputData->nFlags = (pInputData->nFlags & (~OMX_BUFFERFLAG_EOS)); - } else { - pOutputData->timeStamp = pSECComponent->timeStamp[indexTimestamp]; - pOutputData->nFlags = pSECComponent->nFlags[indexTimestamp]; - } - SEC_OSAL_Log(SEC_LOG_TRACE, "timestamp %lld us (%.2f secs)", pOutputData->timeStamp, pOutputData->timeStamp / 1E6); - - if ((status == MFC_GETOUTBUF_DISPLAY_DECODING) || - (status == MFC_GETOUTBUF_DISPLAY_ONLY)) { - outputDataValid = OMX_TRUE; - } - if (pOutputData->nFlags & OMX_BUFFERFLAG_EOS) - outputDataValid = OMX_FALSE; - - if ((status == MFC_GETOUTBUF_DISPLAY_ONLY) || - (pSECComponent->getAllDelayBuffer == OMX_TRUE)) - ret = OMX_ErrorInputDataDecodeYet; - - if (status == MFC_GETOUTBUF_DECODING_ONLY) { - if (((pInputData->nFlags & OMX_BUFFERFLAG_EOS) != OMX_BUFFERFLAG_EOS) && - ((pSECComponent->bSaveFlagEOS == OMX_TRUE) || (pSECComponent->getAllDelayBuffer == OMX_TRUE))) { - pInputData->nFlags |= OMX_BUFFERFLAG_EOS; - pSECComponent->getAllDelayBuffer = OMX_TRUE; - ret = OMX_ErrorInputDataDecodeYet; - } else { - ret = OMX_ErrorNone; - } - outputDataValid = OMX_FALSE; - } - -#ifdef FULL_FRAME_SEARCH - if (((pInputData->nFlags & OMX_BUFFERFLAG_EOS) != OMX_BUFFERFLAG_EOS) && - (pSECComponent->bSaveFlagEOS == OMX_TRUE)) { - pInputData->nFlags |= OMX_BUFFERFLAG_EOS; - pSECComponent->getAllDelayBuffer = OMX_TRUE; - ret = OMX_ErrorInputDataDecodeYet; - } else -#endif - if ((pInputData->nFlags & OMX_BUFFERFLAG_EOS) == OMX_BUFFERFLAG_EOS) { - //configValue = 1; - //SsbSipMfcDecSetConfig(pMpeg4Dec->hMFCMpeg4Handle.hMFCHandle, MFC_DEC_SETCONF_IS_LAST_FRAME, &configValue); - pInputData->nFlags = (pOutputData->nFlags & (~OMX_BUFFERFLAG_EOS)); - pSECComponent->getAllDelayBuffer = OMX_TRUE; - ret = OMX_ErrorInputDataDecodeYet; - } else if ((pOutputData->nFlags & OMX_BUFFERFLAG_EOS) == OMX_BUFFERFLAG_EOS) { - pSECComponent->getAllDelayBuffer = OMX_FALSE; - ret = OMX_ErrorNone; - } - } else { - pOutputData->timeStamp = pInputData->timeStamp; - pOutputData->nFlags = pInputData->nFlags; - - if ((pSECComponent->bSaveFlagEOS == OMX_TRUE) || - (pSECComponent->getAllDelayBuffer == OMX_TRUE) || - (pInputData->nFlags & OMX_BUFFERFLAG_EOS)) { - pOutputData->nFlags |= OMX_BUFFERFLAG_EOS; - pSECComponent->getAllDelayBuffer = OMX_FALSE; - } - if ((pMpeg4Dec->bFirstFrame == OMX_TRUE) && - ((pOutputData->nFlags & OMX_BUFFERFLAG_EOS) == OMX_BUFFERFLAG_EOS)) { - pInputData->nFlags = (pInputData->nFlags | OMX_BUFFERFLAG_EOS); - pOutputData->nFlags = (pOutputData->nFlags & (~OMX_BUFFERFLAG_EOS)); - } - - outputDataValid = OMX_FALSE; - - /* ret = OMX_ErrorUndefined; */ - ret = OMX_ErrorNone; - } - - if (ret == OMX_ErrorInputDataDecodeYet) { - pMpeg4Dec->MFCDecInputBuffer[pMpeg4Dec->indexInputBuffer].dataSize = oneFrameSize; - pMpeg4Dec->indexInputBuffer++; - pMpeg4Dec->indexInputBuffer %= MFC_INPUT_BUFFER_NUM_MAX; - pMpeg4Dec->hMFCMpeg4Handle.pMFCStreamBuffer = pMpeg4Dec->MFCDecInputBuffer[pMpeg4Dec->indexInputBuffer].VirAddr; - pMpeg4Dec->hMFCMpeg4Handle.pMFCStreamPhyBuffer = pMpeg4Dec->MFCDecInputBuffer[pMpeg4Dec->indexInputBuffer].PhyAddr; - pSECComponent->processData[INPUT_PORT_INDEX].dataBuffer = pMpeg4Dec->MFCDecInputBuffer[pMpeg4Dec->indexInputBuffer].VirAddr; - pSECComponent->processData[INPUT_PORT_INDEX].allocSize = pMpeg4Dec->MFCDecInputBuffer[pMpeg4Dec->indexInputBuffer].bufferSize; - oneFrameSize = pMpeg4Dec->MFCDecInputBuffer[pMpeg4Dec->indexInputBuffer].dataSize; - //pInputData->dataLen = oneFrameSize; - //pInputData->remainDataLen = oneFrameSize; - } - - if ((Check_Stream_PrefixCode(pInputData->dataBuffer, pInputData->dataLen, pMpeg4Dec->hMFCMpeg4Handle.codecType) == OMX_TRUE) && - ((pOutputData->nFlags & OMX_BUFFERFLAG_EOS) != OMX_BUFFERFLAG_EOS)) { - SsbSipMfcDecSetConfig(hMFCHandle, MFC_DEC_SETCONF_FRAME_TAG, &(pMpeg4Dec->hMFCMpeg4Handle.indexTimestamp)); - pMpeg4Dec->hMFCMpeg4Handle.indexTimestamp++; - pMpeg4Dec->hMFCMpeg4Handle.indexTimestamp %= MAX_TIMESTAMP; - - SsbSipMfcDecSetInBuf(pMpeg4Dec->hMFCMpeg4Handle.hMFCHandle, - pMpeg4Dec->hMFCMpeg4Handle.pMFCStreamPhyBuffer, - pMpeg4Dec->hMFCMpeg4Handle.pMFCStreamBuffer, - pSECComponent->processData[INPUT_PORT_INDEX].allocSize); - - pMpeg4Dec->MFCDecInputBuffer[pMpeg4Dec->indexInputBuffer].dataSize = oneFrameSize; - pMpeg4Dec->NBDecThread.oneFrameSize = oneFrameSize; - - /* mfc decode start */ - SEC_OSAL_SemaphorePost(pMpeg4Dec->NBDecThread.hDecFrameStart); - pMpeg4Dec->NBDecThread.bDecoderRun = OMX_TRUE; - pMpeg4Dec->hMFCMpeg4Handle.returnCodec = MFC_RET_OK; - - pMpeg4Dec->indexInputBuffer++; - pMpeg4Dec->indexInputBuffer %= MFC_INPUT_BUFFER_NUM_MAX; - pMpeg4Dec->hMFCMpeg4Handle.pMFCStreamBuffer = pMpeg4Dec->MFCDecInputBuffer[pMpeg4Dec->indexInputBuffer].VirAddr; - pMpeg4Dec->hMFCMpeg4Handle.pMFCStreamPhyBuffer = pMpeg4Dec->MFCDecInputBuffer[pMpeg4Dec->indexInputBuffer].PhyAddr; - pSECComponent->processData[INPUT_PORT_INDEX].dataBuffer = pMpeg4Dec->MFCDecInputBuffer[pMpeg4Dec->indexInputBuffer].VirAddr; - pSECComponent->processData[INPUT_PORT_INDEX].allocSize = pMpeg4Dec->MFCDecInputBuffer[pMpeg4Dec->indexInputBuffer].bufferSize; - if (((pMpeg4Dec->hMFCMpeg4Handle.bThumbnailMode == OMX_TRUE) || (pSECComponent->bSaveFlagEOS == OMX_TRUE)) && - (pMpeg4Dec->bFirstFrame == OMX_TRUE) && - (outputDataValid == OMX_FALSE)) { - ret = OMX_ErrorInputDataDecodeYet; - } - pMpeg4Dec->bFirstFrame = OMX_FALSE; - } - - /** Fill Output Buffer **/ - if (outputDataValid == OMX_TRUE) { - SEC_OMX_BASEPORT *pSECInputPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - SEC_OMX_BASEPORT *pSECOutputPort = &pSECComponent->pSECPort[OUTPUT_PORT_INDEX]; - void *pOutputBuf[3]; - - int frameSize = bufWidth * bufHeight; - int imageSize = outputInfo.img_width * outputInfo.img_height; - - int actualWidth = outputInfo.img_width; - int actualHeight = outputInfo.img_height; - int actualImageSize = imageSize; - - pOutputBuf[0] = (void *)pOutputData->dataBuffer; - pOutputBuf[1] = (void *)pOutputData->dataBuffer + actualImageSize; - pOutputBuf[2] = (void *)pOutputData->dataBuffer + ((actualImageSize * 5) / 4); - -#ifdef USE_ANDROID_EXTENSION - if (pSECOutputPort->bUseAndroidNativeBuffer == OMX_TRUE) { - OMX_U32 retANB = 0; - void *pVirAddrs[2]; - actualWidth = (outputInfo.img_width + 15) & (~15); - actualImageSize = actualWidth * actualHeight; - - retANB = getVADDRfromANB(pOutputData->dataBuffer, - (OMX_U32)pSECInputPort->portDefinition.format.video.nFrameWidth, - (OMX_U32)pSECInputPort->portDefinition.format.video.nFrameHeight, - pVirAddrs); - if (retANB != 0) { - SEC_OSAL_Log(SEC_LOG_ERROR, "Error getVADDRfromANB, Error code:%d", retANB); - ret = OMX_ErrorOverflow; - goto EXIT; - } - pOutputBuf[0] = pVirAddrs[0]; - pOutputBuf[1] = pVirAddrs[1]; - } -#endif - if ((pMpeg4Dec->hMFCMpeg4Handle.bThumbnailMode == OMX_FALSE) && - (pSECOutputPort->portDefinition.format.video.eColorFormat == OMX_SEC_COLOR_FormatNV12TPhysicalAddress)) - { - /* if use Post copy address structure */ - SEC_OSAL_Memcpy(pOutputBuf[0], &frameSize, sizeof(frameSize)); - SEC_OSAL_Memcpy(pOutputBuf[0] + sizeof(frameSize), &(outputInfo.YPhyAddr), sizeof(outputInfo.YPhyAddr)); - SEC_OSAL_Memcpy(pOutputBuf[0] + sizeof(frameSize) + (sizeof(void *) * 1), &(outputInfo.CPhyAddr), sizeof(outputInfo.CPhyAddr)); - SEC_OSAL_Memcpy(pOutputBuf[0] + sizeof(frameSize) + (sizeof(void *) * 2), &(outputInfo.YVirAddr), sizeof(outputInfo.YVirAddr)); - SEC_OSAL_Memcpy(pOutputBuf[0] + sizeof(frameSize) + (sizeof(void *) * 3), &(outputInfo.CVirAddr), sizeof(outputInfo.CVirAddr)); - pOutputData->dataLen = (bufWidth * bufHeight * 3) / 2; - } else { - switch (pSECComponent->pSECPort[OUTPUT_PORT_INDEX].portDefinition.format.video.eColorFormat) { - case OMX_COLOR_FormatYUV420Planar: - { - SEC_OSAL_Log(SEC_LOG_TRACE, "YUV420P out"); - csc_tiled_to_linear( - (unsigned char *)pOutputBuf[0], - (unsigned char *)outputInfo.YVirAddr, - actualWidth, - actualHeight); - csc_tiled_to_linear_deinterleave( - (unsigned char *)pOutputBuf[1], - (unsigned char *)pOutputBuf[2], - (unsigned char *)outputInfo.CVirAddr, - actualWidth, - actualHeight >> 1); - pOutputData->dataLen = actualImageSize * 3 / 2; - } - break; - case OMX_COLOR_FormatYUV420SemiPlanar: - case OMX_SEC_COLOR_FormatANBYUV420SemiPlanar: - default: - { - SEC_OSAL_Log(SEC_LOG_TRACE, "YUV420SP out"); - csc_tiled_to_linear( - (unsigned char *)pOutputBuf[0], - (unsigned char *)outputInfo.YVirAddr, - actualWidth, - actualHeight); - csc_tiled_to_linear( - (unsigned char *)pOutputBuf[1], - (unsigned char *)outputInfo.CVirAddr, - actualWidth, - actualHeight >> 1); - pOutputData->dataLen = actualImageSize * 3 / 2; - } - break; - } - } -#ifdef USE_ANDROID_EXTENSION - if (pSECOutputPort->bUseAndroidNativeBuffer == OMX_TRUE) - putVADDRtoANB(pOutputData->dataBuffer); -#endif - } else { - pOutputData->dataLen = 0; - } - -EXIT: - FunctionOut(); - - return ret; -} - -/* MFC Decode */ -OMX_ERRORTYPE SEC_MFC_Mpeg4Dec_bufferProcess(OMX_COMPONENTTYPE *pOMXComponent, SEC_OMX_DATA *pInputData, SEC_OMX_DATA *pOutputData) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASECOMPONENT *pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - SEC_MPEG4_HANDLE *pMpeg4Dec = (SEC_MPEG4_HANDLE *)pSECComponent->hCodecHandle; - SEC_OMX_BASEPORT *pInputPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - SEC_OMX_BASEPORT *pOutputPort = &pSECComponent->pSECPort[OUTPUT_PORT_INDEX]; - OMX_BOOL bCheckPrefix = OMX_FALSE; - - FunctionIn(); - - if ((!CHECK_PORT_ENABLED(pInputPort)) || (!CHECK_PORT_ENABLED(pOutputPort)) || - (!CHECK_PORT_POPULATED(pInputPort)) || (!CHECK_PORT_POPULATED(pOutputPort))) { - ret = OMX_ErrorNone; - goto EXIT; - } - if (OMX_FALSE == SEC_Check_BufferProcess_State(pSECComponent)) { - ret = OMX_ErrorNone; - goto EXIT; - } - - ret = SEC_MFC_Mpeg4_Decode(pOMXComponent, pInputData, pOutputData); - if (ret != OMX_ErrorNone) { - if (ret == OMX_ErrorInputDataDecodeYet) { - pOutputData->usedDataLen = 0; - pOutputData->remainDataLen = pOutputData->dataLen; - } else { - pSECComponent->pCallbacks->EventHandler((OMX_HANDLETYPE)pOMXComponent, - pSECComponent->callbackData, - OMX_EventError, ret, 0, NULL); - } - } else { - pInputData->previousDataLen = pInputData->dataLen; - pInputData->usedDataLen += pInputData->dataLen; - pInputData->remainDataLen = pInputData->dataLen - pInputData->usedDataLen; - pInputData->dataLen -= pInputData->usedDataLen; - pInputData->usedDataLen = 0; - - pOutputData->usedDataLen = 0; - pOutputData->remainDataLen = pOutputData->dataLen; - } - -EXIT: - FunctionOut(); - - return ret; -} - -OSCL_EXPORT_REF OMX_ERRORTYPE SEC_OMX_ComponentInit(OMX_HANDLETYPE hComponent, OMX_STRING componentName) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_OMX_BASEPORT *pSECPort = NULL; - SEC_MPEG4_HANDLE *pMpeg4Dec = NULL; - OMX_S32 codecType = -1; - int i = 0; - - FunctionIn(); - - if ((hComponent == NULL) || (componentName == NULL)) { - ret = OMX_ErrorBadParameter; - SEC_OSAL_Log(SEC_LOG_ERROR, "%s: parameters are null, ret: %X", __FUNCTION__, ret); - goto EXIT; - } - if (SEC_OSAL_Strcmp(SEC_OMX_COMPONENT_MPEG4_DEC, componentName) == 0) { - codecType = CODEC_TYPE_MPEG4; - } else if (SEC_OSAL_Strcmp(SEC_OMX_COMPONENT_H263_DEC, componentName) == 0) { - codecType = CODEC_TYPE_H263; - } else { - ret = OMX_ErrorBadParameter; - SEC_OSAL_Log(SEC_LOG_ERROR, "%s: componentName(%s) error, ret: %X", __FUNCTION__, ret); - goto EXIT; - } - - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_VideoDecodeComponentInit(pOMXComponent); - if (ret != OMX_ErrorNone) { - SEC_OSAL_Log(SEC_LOG_ERROR, "%s: SEC_OMX_VideoDecodeComponentInit error, ret: %X", __FUNCTION__, ret); - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - pSECComponent->codecType = HW_VIDEO_CODEC; - - pSECComponent->componentName = (OMX_STRING)SEC_OSAL_Malloc(MAX_OMX_COMPONENT_NAME_SIZE); - if (pSECComponent->componentName == NULL) { - SEC_OMX_VideoDecodeComponentDeinit(pOMXComponent); - ret = OMX_ErrorInsufficientResources; - SEC_OSAL_Log(SEC_LOG_ERROR, "%s: componentName alloc error, ret: %X", __FUNCTION__, ret); - goto EXIT; - } - SEC_OSAL_Memset(pSECComponent->componentName, 0, MAX_OMX_COMPONENT_NAME_SIZE); - - pMpeg4Dec = SEC_OSAL_Malloc(sizeof(SEC_MPEG4_HANDLE)); - if (pMpeg4Dec == NULL) { - SEC_OMX_VideoDecodeComponentDeinit(pOMXComponent); - ret = OMX_ErrorInsufficientResources; - SEC_OSAL_Log(SEC_LOG_ERROR, "%s: SEC_MPEG4_HANDLE alloc error, ret: %X", __FUNCTION__, ret); - goto EXIT; - } - SEC_OSAL_Memset(pMpeg4Dec, 0, sizeof(SEC_MPEG4_HANDLE)); - pSECComponent->hCodecHandle = (OMX_HANDLETYPE)pMpeg4Dec; - pMpeg4Dec->hMFCMpeg4Handle.codecType = codecType; - - if (codecType == CODEC_TYPE_MPEG4) - SEC_OSAL_Strcpy(pSECComponent->componentName, SEC_OMX_COMPONENT_MPEG4_DEC); - else - SEC_OSAL_Strcpy(pSECComponent->componentName, SEC_OMX_COMPONENT_H263_DEC); - - /* Set componentVersion */ - pSECComponent->componentVersion.s.nVersionMajor = VERSIONMAJOR_NUMBER; - pSECComponent->componentVersion.s.nVersionMinor = VERSIONMINOR_NUMBER; - pSECComponent->componentVersion.s.nRevision = REVISION_NUMBER; - pSECComponent->componentVersion.s.nStep = STEP_NUMBER; - /* Set specVersion */ - pSECComponent->specVersion.s.nVersionMajor = VERSIONMAJOR_NUMBER; - pSECComponent->specVersion.s.nVersionMinor = VERSIONMINOR_NUMBER; - pSECComponent->specVersion.s.nRevision = REVISION_NUMBER; - pSECComponent->specVersion.s.nStep = STEP_NUMBER; - - /* Android CapabilityFlags */ - pSECComponent->capabilityFlags.iIsOMXComponentMultiThreaded = OMX_TRUE; - pSECComponent->capabilityFlags.iOMXComponentSupportsExternalInputBufferAlloc = OMX_TRUE; - pSECComponent->capabilityFlags.iOMXComponentSupportsExternalOutputBufferAlloc = OMX_TRUE; - pSECComponent->capabilityFlags.iOMXComponentSupportsMovableInputBuffers = OMX_FALSE; - pSECComponent->capabilityFlags.iOMXComponentSupportsPartialFrames = OMX_FALSE; - pSECComponent->capabilityFlags.iOMXComponentUsesNALStartCodes = OMX_TRUE; - pSECComponent->capabilityFlags.iOMXComponentCanHandleIncompleteFrames = OMX_TRUE; - pSECComponent->capabilityFlags.iOMXComponentUsesFullAVCFrames = OMX_TRUE; - - /* Input port */ - pSECPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - pSECPort->portDefinition.format.video.nFrameWidth = DEFAULT_FRAME_WIDTH; - pSECPort->portDefinition.format.video.nFrameHeight= DEFAULT_FRAME_HEIGHT; - pSECPort->portDefinition.format.video.nStride = 0; - pSECPort->portDefinition.format.video.nSliceHeight = 0; - pSECPort->portDefinition.nBufferSize = DEFAULT_VIDEO_INPUT_BUFFER_SIZE; - if (codecType == CODEC_TYPE_MPEG4) { - pSECPort->portDefinition.format.video.eCompressionFormat = OMX_VIDEO_CodingMPEG4; - SEC_OSAL_Memset(pSECPort->portDefinition.format.video.cMIMEType, 0, MAX_OMX_MIMETYPE_SIZE); - SEC_OSAL_Strcpy(pSECPort->portDefinition.format.video.cMIMEType, "video/mpeg4"); - } else { - pSECPort->portDefinition.format.video.eCompressionFormat = OMX_VIDEO_CodingH263; - SEC_OSAL_Memset(pSECPort->portDefinition.format.video.cMIMEType, 0, MAX_OMX_MIMETYPE_SIZE); - SEC_OSAL_Strcpy(pSECPort->portDefinition.format.video.cMIMEType, "video/h263"); - } - pSECPort->portDefinition.format.video.pNativeRender = 0; - pSECPort->portDefinition.format.video.bFlagErrorConcealment = OMX_FALSE; - pSECPort->portDefinition.format.video.eColorFormat = OMX_COLOR_FormatUnused; - pSECPort->portDefinition.bEnabled = OMX_TRUE; - - /* Output port */ - pSECPort = &pSECComponent->pSECPort[OUTPUT_PORT_INDEX]; - pSECPort->portDefinition.format.video.nFrameWidth = DEFAULT_FRAME_WIDTH; - pSECPort->portDefinition.format.video.nFrameHeight= DEFAULT_FRAME_HEIGHT; - pSECPort->portDefinition.format.video.nStride = 0; - pSECPort->portDefinition.format.video.nSliceHeight = 0; - pSECPort->portDefinition.nBufferSize = DEFAULT_VIDEO_OUTPUT_BUFFER_SIZE; - pSECPort->portDefinition.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused; - SEC_OSAL_Memset(pSECPort->portDefinition.format.video.cMIMEType, 0, MAX_OMX_MIMETYPE_SIZE); - SEC_OSAL_Strcpy(pSECPort->portDefinition.format.video.cMIMEType, "raw/video"); - pSECPort->portDefinition.format.video.pNativeRender = 0; - pSECPort->portDefinition.format.video.bFlagErrorConcealment = OMX_FALSE; - pSECPort->portDefinition.format.video.eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar; - pSECPort->portDefinition.bEnabled = OMX_TRUE; - - if (codecType == CODEC_TYPE_MPEG4) { - for(i = 0; i < ALL_PORT_NUM; i++) { - INIT_SET_SIZE_VERSION(&pMpeg4Dec->mpeg4Component[i], OMX_VIDEO_PARAM_MPEG4TYPE); - pMpeg4Dec->mpeg4Component[i].nPortIndex = i; - pMpeg4Dec->mpeg4Component[i].eProfile = OMX_VIDEO_MPEG4ProfileSimple; - pMpeg4Dec->mpeg4Component[i].eLevel = OMX_VIDEO_MPEG4Level3; - } - } else { - for(i = 0; i < ALL_PORT_NUM; i++) { - INIT_SET_SIZE_VERSION(&pMpeg4Dec->h263Component[i], OMX_VIDEO_PARAM_H263TYPE); - pMpeg4Dec->h263Component[i].nPortIndex = i; - pMpeg4Dec->h263Component[i].eProfile = OMX_VIDEO_H263ProfileBaseline | OMX_VIDEO_H263ProfileISWV2; - pMpeg4Dec->h263Component[i].eLevel = OMX_VIDEO_H263Level45; - } - } - - pOMXComponent->GetParameter = &SEC_MFC_Mpeg4Dec_GetParameter; - pOMXComponent->SetParameter = &SEC_MFC_Mpeg4Dec_SetParameter; - pOMXComponent->GetConfig = &SEC_MFC_Mpeg4Dec_GetConfig; - pOMXComponent->SetConfig = &SEC_MFC_Mpeg4Dec_SetConfig; - pOMXComponent->GetExtensionIndex = &SEC_MFC_Mpeg4Dec_GetExtensionIndex; - pOMXComponent->ComponentRoleEnum = &SEC_MFC_Mpeg4Dec_ComponentRoleEnum; - pOMXComponent->ComponentDeInit = &SEC_OMX_ComponentDeinit; - - pSECComponent->sec_mfc_componentInit = &SEC_MFC_Mpeg4Dec_Init; - pSECComponent->sec_mfc_componentTerminate = &SEC_MFC_Mpeg4Dec_Terminate; - pSECComponent->sec_mfc_bufferProcess = &SEC_MFC_Mpeg4Dec_bufferProcess; - if (codecType == CODEC_TYPE_MPEG4) - pSECComponent->sec_checkInputFrame = &Check_Mpeg4_Frame; - else - pSECComponent->sec_checkInputFrame = &Check_H263_Frame; - - pSECComponent->currentState = OMX_StateLoaded; - - ret = OMX_ErrorNone; - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_ComponentDeinit(OMX_HANDLETYPE hComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_MPEG4_HANDLE *pMpeg4Dec = NULL; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - SEC_OSAL_Free(pSECComponent->componentName); - pSECComponent->componentName = NULL; - - pMpeg4Dec = (SEC_MPEG4_HANDLE *)pSECComponent->hCodecHandle; - if (pMpeg4Dec != NULL) { - SEC_OSAL_Free(pMpeg4Dec); - pSECComponent->hCodecHandle = NULL; - } - - ret = SEC_OMX_VideoDecodeComponentDeinit(pOMXComponent); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - ret = OMX_ErrorNone; - -EXIT: - FunctionOut(); - - return ret; -} diff --git a/sec_mm/sec_omx/sec_omx_component/video/dec/mpeg4dec/SEC_OMX_Mpeg4dec.h b/sec_mm/sec_omx/sec_omx_component/video/dec/mpeg4dec/SEC_OMX_Mpeg4dec.h deleted file mode 100644 index 9af04e3..0000000 --- a/sec_mm/sec_omx/sec_omx_component/video/dec/mpeg4dec/SEC_OMX_Mpeg4dec.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OMX_Mpeg4dec.h - * @brief - * @author Yunji Kim (yunji.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#ifndef SEC_OMX_MPEG4_DEC_COMPONENT -#define SEC_OMX_MPEG4_DEC_COMPONENT - -#include "SEC_OMX_Def.h" -#include "OMX_Component.h" - - -typedef enum _CODEC_TYPE -{ - CODEC_TYPE_H263, - CODEC_TYPE_MPEG4 -} CODEC_TYPE; - -/* - * This structure is the same as BitmapInfoHhr struct in pv_avifile_typedefs.h file - */ -typedef struct _BitmapInfoHhr -{ - OMX_U32 BiSize; - OMX_U32 BiWidth; - OMX_U32 BiHeight; - OMX_U16 BiPlanes; - OMX_U16 BiBitCount; - OMX_U32 BiCompression; - OMX_U32 BiSizeImage; - OMX_U32 BiXPelsPerMeter; - OMX_U32 BiYPelsPerMeter; - OMX_U32 BiClrUsed; - OMX_U32 BiClrImportant; -} BitmapInfoHhr; - -typedef struct _SEC_MFC_MPEG4_HANDLE -{ - OMX_HANDLETYPE hMFCHandle; - OMX_PTR pMFCStreamBuffer; - OMX_PTR pMFCStreamPhyBuffer; - OMX_U32 indexTimestamp; - OMX_BOOL bConfiguredMFC; - OMX_BOOL bThumbnailMode; - CODEC_TYPE codecType; - OMX_S32 returnCodec; -} SEC_MFC_MPEG4_HANDLE; - -typedef struct _SEC_MPEG4_HANDLE -{ - /* OMX Codec specific */ - OMX_VIDEO_PARAM_H263TYPE h263Component[ALL_PORT_NUM]; - OMX_VIDEO_PARAM_MPEG4TYPE mpeg4Component[ALL_PORT_NUM]; - OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE errorCorrectionType[ALL_PORT_NUM]; - - /* SEC MFC Codec specific */ - SEC_MFC_MPEG4_HANDLE hMFCMpeg4Handle; - - /* For Non-Block mode */ - SEC_MFC_NBDEC_THREAD NBDecThread; - OMX_BOOL bFirstFrame; - MFC_DEC_INPUT_BUFFER MFCDecInputBuffer[MFC_INPUT_BUFFER_NUM_MAX]; - OMX_U32 indexInputBuffer; -} SEC_MPEG4_HANDLE; - -#ifdef __cplusplus -extern "C" { -#endif - -OSCL_EXPORT_REF OMX_ERRORTYPE SEC_OMX_ComponentInit(OMX_HANDLETYPE hComponent, OMX_STRING componentName); - OMX_ERRORTYPE SEC_OMX_ComponentDeinit(OMX_HANDLETYPE hComponent); - -#ifdef __cplusplus -}; -#endif - -#endif diff --git a/sec_mm/sec_omx/sec_omx_component/video/dec/mpeg4dec/library_register.c b/sec_mm/sec_omx/sec_omx_component/video/dec/mpeg4dec/library_register.c deleted file mode 100644 index 02d8d39..0000000 --- a/sec_mm/sec_omx/sec_omx_component/video/dec/mpeg4dec/library_register.c +++ /dev/null @@ -1,63 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file library_register.c - * @brief - * @author Yunji Kim (yunji.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#include -#include -#include -#include - -#include "SEC_OSAL_Memory.h" -#include "SEC_OSAL_ETC.h" -#include "library_register.h" - -#undef SEC_LOG_TAG -#define SEC_LOG_TAG "SEC_MPEG4_DEC" -#define SEC_LOG_OFF -#include "SEC_OSAL_Log.h" - - -OSCL_EXPORT_REF int SEC_OMX_COMPONENT_Library_Register(SECRegisterComponentType **ppSECComponent) -{ - FunctionIn(); - - if (ppSECComponent == NULL) - goto EXIT; - - /* component 1 - video decoder MPEG4 */ - SEC_OSAL_Strcpy(ppSECComponent[0]->componentName, SEC_OMX_COMPONENT_MPEG4_DEC); - SEC_OSAL_Strcpy(ppSECComponent[0]->roles[0], SEC_OMX_COMPONENT_MPEG4_DEC_ROLE); - ppSECComponent[0]->totalRoleNum = MAX_COMPONENT_ROLE_NUM; - - /* component 2 - video decoder H.263 */ - SEC_OSAL_Strcpy(ppSECComponent[1]->componentName, SEC_OMX_COMPONENT_H263_DEC); - SEC_OSAL_Strcpy(ppSECComponent[1]->roles[0], SEC_OMX_COMPONENT_H263_DEC_ROLE); - ppSECComponent[1]->totalRoleNum = MAX_COMPONENT_ROLE_NUM; - -EXIT: - FunctionOut(); - return MAX_COMPONENT_NUM; -} - diff --git a/sec_mm/sec_omx/sec_omx_component/video/dec/mpeg4dec/library_register.h b/sec_mm/sec_omx/sec_omx_component/video/dec/mpeg4dec/library_register.h deleted file mode 100644 index c3e5b9c..0000000 --- a/sec_mm/sec_omx/sec_omx_component/video/dec/mpeg4dec/library_register.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file library_register.h - * @brief - * @author Yunji Kim (yunji.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#ifndef SEC_OMX_MPEG4_DEC_REG -#define SEC_OMX_MPEG4_DEC_REG - -#include "SEC_OMX_Def.h" -#include "OMX_Component.h" -#include "SEC_OMX_Component_Register.h" - - -#define OSCL_EXPORT_REF __attribute__((visibility("default"))) -#define MAX_COMPONENT_NUM 2 -#define MAX_COMPONENT_ROLE_NUM 1 - -/* MPEG4 */ -#define SEC_OMX_COMPONENT_MPEG4_DEC "OMX.SEC.MPEG4.Decoder" -#define SEC_OMX_COMPONENT_MPEG4_DEC_ROLE "video_decoder.mpeg4" - -/* H.263 */ -#define SEC_OMX_COMPONENT_H263_DEC "OMX.SEC.H263.Decoder" -#define SEC_OMX_COMPONENT_H263_DEC_ROLE "video_decoder.h263" - - -#ifdef __cplusplus -extern "C" { -#endif - -OSCL_EXPORT_REF int SEC_OMX_COMPONENT_Library_Register(SECRegisterComponentType **ppSECComponent); - -#ifdef __cplusplus -}; -#endif - -#endif - diff --git a/sec_mm/sec_omx/sec_omx_component/video/enc/Android.mk b/sec_mm/sec_omx/sec_omx_component/video/enc/Android.mk deleted file mode 100644 index e9ca8e7..0000000 --- a/sec_mm/sec_omx/sec_omx_component/video/enc/Android.mk +++ /dev/null @@ -1,20 +0,0 @@ -LOCAL_PATH := $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := \ - SEC_OMX_Venc.c - -LOCAL_MODULE := libSEC_OMX_Venc.aries -LOCAL_ARM_MODE := arm -LOCAL_MODULE_TAGS := optional - -LOCAL_C_INCLUDES := $(SEC_OMX_INC)/khronos \ - $(SEC_OMX_INC)/sec \ - $(SEC_OMX_TOP)/sec_osal \ - $(SEC_OMX_TOP)/sec_omx_core \ - $(SEC_OMX_COMPONENT)/common \ - $(SEC_OMX_COMPONENT)/video/dec - -LOCAL_C_INCLUDES += $(SEC_OMX_TOP)/sec_codecs/video/mfc_c110/include - -include $(BUILD_STATIC_LIBRARY) diff --git a/sec_mm/sec_omx/sec_omx_component/video/enc/SEC_OMX_Venc.c b/sec_mm/sec_omx/sec_omx_component/video/enc/SEC_OMX_Venc.c deleted file mode 100644 index 19e33de..0000000 --- a/sec_mm/sec_omx/sec_omx_component/video/enc/SEC_OMX_Venc.c +++ /dev/null @@ -1,1467 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OMX_Venc.c - * @brief - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * Yunji Kim (yunji.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#include -#include -#include -#include "SEC_OMX_Macros.h" -#include "SEC_OSAL_Event.h" -#include "SEC_OMX_Venc.h" -#include "SEC_OMX_Basecomponent.h" -#include "SEC_OSAL_Thread.h" -#include "color_space_convertor.h" - -#undef SEC_LOG_TAG -#define SEC_LOG_TAG "SEC_VIDEO_ENC" -#define SEC_LOG_OFF -#include "SEC_OSAL_Log.h" - - -inline void SEC_UpdateFrameSize(OMX_COMPONENTTYPE *pOMXComponent) -{ - SEC_OMX_BASECOMPONENT *pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - SEC_OMX_BASEPORT *secInputPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - SEC_OMX_BASEPORT *secOutputPort = &pSECComponent->pSECPort[OUTPUT_PORT_INDEX]; - - if ((secOutputPort->portDefinition.format.video.nFrameWidth != - secInputPort->portDefinition.format.video.nFrameWidth) || - (secOutputPort->portDefinition.format.video.nFrameHeight != - secInputPort->portDefinition.format.video.nFrameHeight)) { - OMX_U32 width = 0, height = 0; - - secOutputPort->portDefinition.format.video.nFrameWidth = - secInputPort->portDefinition.format.video.nFrameWidth; - secOutputPort->portDefinition.format.video.nFrameHeight = - secInputPort->portDefinition.format.video.nFrameHeight; - width = secOutputPort->portDefinition.format.video.nStride = - secInputPort->portDefinition.format.video.nStride; - height = secOutputPort->portDefinition.format.video.nSliceHeight = - secInputPort->portDefinition.format.video.nSliceHeight; - - switch(secOutputPort->portDefinition.format.video.eColorFormat) { - case OMX_COLOR_FormatYUV420Planar: - case OMX_COLOR_FormatYUV420SemiPlanar: - if (width && height) - secOutputPort->portDefinition.nBufferSize = (width * height * 3) / 2; - break; - default: - if (width && height) - secOutputPort->portDefinition.nBufferSize = width * height * 2; - break; - } - } - - return ; -} - -OMX_ERRORTYPE SEC_OMX_UseBuffer( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_INOUT OMX_BUFFERHEADERTYPE **ppBufferHdr, - OMX_IN OMX_U32 nPortIndex, - OMX_IN OMX_PTR pAppPrivate, - OMX_IN OMX_U32 nSizeBytes, - OMX_IN OMX_U8 *pBuffer) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_OMX_BASEPORT *pSECPort = NULL; - OMX_BUFFERHEADERTYPE *temp_bufferHeader = NULL; - int i = 0; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - pSECPort = &pSECComponent->pSECPort[nPortIndex]; - if (nPortIndex >= pSECComponent->portParam.nPorts) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - if (pSECPort->portState != OMX_StateIdle) { - ret = OMX_ErrorIncorrectStateOperation; - goto EXIT; - } - - if (CHECK_PORT_TUNNELED(pSECPort) && CHECK_PORT_BUFFER_SUPPLIER(pSECPort)) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - temp_bufferHeader = (OMX_BUFFERHEADERTYPE *)SEC_OSAL_Malloc(sizeof(OMX_BUFFERHEADERTYPE)); - if (temp_bufferHeader == NULL) { - ret = OMX_ErrorInsufficientResources; - goto EXIT; - } - SEC_OSAL_Memset(temp_bufferHeader, 0, sizeof(OMX_BUFFERHEADERTYPE)); - - for (i = 0; i < pSECPort->portDefinition.nBufferCountActual; i++) { - if (pSECPort->bufferStateAllocate[i] == BUFFER_STATE_FREE) { - pSECPort->bufferHeader[i] = temp_bufferHeader; - pSECPort->bufferStateAllocate[i] = (BUFFER_STATE_ASSIGNED | HEADER_STATE_ALLOCATED); - INIT_SET_SIZE_VERSION(temp_bufferHeader, OMX_BUFFERHEADERTYPE); - temp_bufferHeader->pBuffer = pBuffer; - temp_bufferHeader->nAllocLen = nSizeBytes; - temp_bufferHeader->pAppPrivate = pAppPrivate; - if (nPortIndex == INPUT_PORT_INDEX) - temp_bufferHeader->nInputPortIndex = INPUT_PORT_INDEX; - else - temp_bufferHeader->nOutputPortIndex = OUTPUT_PORT_INDEX; - - pSECPort->assignedBufferNum++; - if (pSECPort->assignedBufferNum == pSECPort->portDefinition.nBufferCountActual) { - pSECPort->portDefinition.bPopulated = OMX_TRUE; - /* SEC_OSAL_MutexLock(pSECComponent->compMutex); */ - SEC_OSAL_SemaphorePost(pSECPort->loadedResource); - /* SEC_OSAL_MutexUnlock(pSECComponent->compMutex); */ - } - *ppBufferHdr = temp_bufferHeader; - ret = OMX_ErrorNone; - goto EXIT; - } - } - - SEC_OSAL_Free(temp_bufferHeader); - ret = OMX_ErrorInsufficientResources; - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_AllocateBuffer( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_INOUT OMX_BUFFERHEADERTYPE **ppBuffer, - OMX_IN OMX_U32 nPortIndex, - OMX_IN OMX_PTR pAppPrivate, - OMX_IN OMX_U32 nSizeBytes) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_OMX_BASEPORT *pSECPort = NULL; - OMX_BUFFERHEADERTYPE *temp_bufferHeader = NULL; - OMX_U8 *temp_buffer = NULL; - int i = 0; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - pSECPort = &pSECComponent->pSECPort[nPortIndex]; - if (nPortIndex >= pSECComponent->portParam.nPorts) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } -/* - if (pSECPort->portState != OMX_StateIdle ) { - ret = OMX_ErrorIncorrectStateOperation; - goto EXIT; - } -*/ - if (CHECK_PORT_TUNNELED(pSECPort) && CHECK_PORT_BUFFER_SUPPLIER(pSECPort)) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - temp_buffer = SEC_OSAL_Malloc(sizeof(OMX_U8) * nSizeBytes); - if (temp_buffer == NULL) { - ret = OMX_ErrorInsufficientResources; - goto EXIT; - } - - temp_bufferHeader = (OMX_BUFFERHEADERTYPE *)SEC_OSAL_Malloc(sizeof(OMX_BUFFERHEADERTYPE)); - if (temp_bufferHeader == NULL) { - SEC_OSAL_Free(temp_buffer); - temp_buffer = NULL; - ret = OMX_ErrorInsufficientResources; - goto EXIT; - } - SEC_OSAL_Memset(temp_bufferHeader, 0, sizeof(OMX_BUFFERHEADERTYPE)); - - for (i = 0; i < pSECPort->portDefinition.nBufferCountActual; i++) { - if (pSECPort->bufferStateAllocate[i] == BUFFER_STATE_FREE) { - pSECPort->bufferHeader[i] = temp_bufferHeader; - pSECPort->bufferStateAllocate[i] = (BUFFER_STATE_ALLOCATED | HEADER_STATE_ALLOCATED); - INIT_SET_SIZE_VERSION(temp_bufferHeader, OMX_BUFFERHEADERTYPE); - temp_bufferHeader->pBuffer = temp_buffer; - temp_bufferHeader->nAllocLen = nSizeBytes; - temp_bufferHeader->pAppPrivate = pAppPrivate; - if (nPortIndex == INPUT_PORT_INDEX) - temp_bufferHeader->nInputPortIndex = INPUT_PORT_INDEX; - else - temp_bufferHeader->nOutputPortIndex = OUTPUT_PORT_INDEX; - pSECPort->assignedBufferNum++; - if (pSECPort->assignedBufferNum == pSECPort->portDefinition.nBufferCountActual) { - pSECPort->portDefinition.bPopulated = OMX_TRUE; - /* SEC_OSAL_MutexLock(pSECComponent->compMutex); */ - SEC_OSAL_SemaphorePost(pSECPort->loadedResource); - /* SEC_OSAL_MutexUnlock(pSECComponent->compMutex); */ - } - *ppBuffer = temp_bufferHeader; - ret = OMX_ErrorNone; - goto EXIT; - } - } - - SEC_OSAL_Free(temp_bufferHeader); - SEC_OSAL_Free(temp_buffer); - ret = OMX_ErrorInsufficientResources; - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_FreeBuffer( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_U32 nPortIndex, - OMX_IN OMX_BUFFERHEADERTYPE *pBufferHdr) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_OMX_BASEPORT *pSECPort = NULL; - OMX_BUFFERHEADERTYPE *temp_bufferHeader = NULL; - OMX_U8 *temp_buffer = NULL; - int i = 0; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - pSECPort = &pSECComponent->pSECPort[nPortIndex]; - - if (CHECK_PORT_TUNNELED(pSECPort) && CHECK_PORT_BUFFER_SUPPLIER(pSECPort)) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - if ((pSECPort->portState != OMX_StateLoaded) && (pSECPort->portState != OMX_StateInvalid)) { - (*(pSECComponent->pCallbacks->EventHandler)) (pOMXComponent, - pSECComponent->callbackData, - (OMX_U32)OMX_EventError, - (OMX_U32)OMX_ErrorPortUnpopulated, - nPortIndex, NULL); - } - - for (i = 0; i < pSECPort->portDefinition.nBufferCountActual; i++) { - if (((pSECPort->bufferStateAllocate[i] | BUFFER_STATE_FREE) != 0) && (pSECPort->bufferHeader[i] != NULL)) { - if (pSECPort->bufferHeader[i]->pBuffer == pBufferHdr->pBuffer) { - if (pSECPort->bufferStateAllocate[i] & BUFFER_STATE_ALLOCATED) { - SEC_OSAL_Free(pSECPort->bufferHeader[i]->pBuffer); - pSECPort->bufferHeader[i]->pBuffer = NULL; - pBufferHdr->pBuffer = NULL; - } else if (pSECPort->bufferStateAllocate[i] & BUFFER_STATE_ASSIGNED) { - ; /* None*/ - } - pSECPort->assignedBufferNum--; - if (pSECPort->bufferStateAllocate[i] & HEADER_STATE_ALLOCATED) { - SEC_OSAL_Free(pSECPort->bufferHeader[i]); - pSECPort->bufferHeader[i] = NULL; - pBufferHdr = NULL; - } - pSECPort->bufferStateAllocate[i] = BUFFER_STATE_FREE; - ret = OMX_ErrorNone; - goto EXIT; - } - } - } - -EXIT: - if (ret == OMX_ErrorNone) { - if (pSECPort->assignedBufferNum == 0 ) { - SEC_OSAL_Log(SEC_LOG_TRACE, "pSECPort->unloadedResource signal set"); - /* SEC_OSAL_MutexLock(pSECComponent->compMutex); */ - SEC_OSAL_SemaphorePost(pSECPort->unloadedResource); - /* SEC_OSAL_MutexUnlock(pSECComponent->compMutex); */ - pSECPort->portDefinition.bPopulated = OMX_FALSE; - } - } - - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_AllocateTunnelBuffer(SEC_OMX_BASEPORT *pOMXBasePort, OMX_U32 nPortIndex) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASEPORT *pSECPort = NULL; - OMX_BUFFERHEADERTYPE *temp_bufferHeader = NULL; - OMX_U8 *temp_buffer = NULL; - OMX_U32 bufferSize = 0; - OMX_PARAM_PORTDEFINITIONTYPE portDefinition; - - ret = OMX_ErrorTunnelingUnsupported; -EXIT: - return ret; -} - -OMX_ERRORTYPE SEC_OMX_FreeTunnelBuffer(SEC_OMX_BASEPORT *pOMXBasePort, OMX_U32 nPortIndex) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASEPORT* pSECPort = NULL; - OMX_BUFFERHEADERTYPE* temp_bufferHeader = NULL; - OMX_U8 *temp_buffer = NULL; - OMX_U32 bufferSize = 0; - OMX_PARAM_PORTDEFINITIONTYPE portDefinition; - - ret = OMX_ErrorTunnelingUnsupported; -EXIT: - return ret; -} - -OMX_ERRORTYPE SEC_OMX_ComponentTunnelRequest( - OMX_IN OMX_HANDLETYPE hComp, - OMX_IN OMX_U32 nPort, - OMX_IN OMX_HANDLETYPE hTunneledComp, - OMX_IN OMX_U32 nTunneledPort, - OMX_INOUT OMX_TUNNELSETUPTYPE *pTunnelSetup) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - - ret = OMX_ErrorTunnelingUnsupported; -EXIT: - return ret; -} - -OMX_BOOL SEC_Check_BufferProcess_State(SEC_OMX_BASECOMPONENT *pSECComponent) -{ - if ((pSECComponent->currentState == OMX_StateExecuting) && - (pSECComponent->pSECPort[INPUT_PORT_INDEX].portState == OMX_StateIdle) && - (pSECComponent->pSECPort[OUTPUT_PORT_INDEX].portState == OMX_StateIdle) && - (pSECComponent->transientState != SEC_OMX_TransStateExecutingToIdle) && - (pSECComponent->transientState != SEC_OMX_TransStateIdleToExecuting)) - return OMX_TRUE; - else - return OMX_FALSE; -} - -static OMX_ERRORTYPE SEC_InputBufferReturn(OMX_COMPONENTTYPE *pOMXComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASECOMPONENT *pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - SEC_OMX_BASEPORT *secOMXInputPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - SEC_OMX_BASEPORT *secOMXOutputPort = &pSECComponent->pSECPort[OUTPUT_PORT_INDEX]; - SEC_OMX_DATABUFFER *dataBuffer = &pSECComponent->secDataBuffer[INPUT_PORT_INDEX]; - OMX_BUFFERHEADERTYPE *bufferHeader = dataBuffer->bufferHeader; - - FunctionIn(); - - if (bufferHeader != NULL) { - if (secOMXInputPort->markType.hMarkTargetComponent != NULL ) { - bufferHeader->hMarkTargetComponent = secOMXInputPort->markType.hMarkTargetComponent; - bufferHeader->pMarkData = secOMXInputPort->markType.pMarkData; - secOMXInputPort->markType.hMarkTargetComponent = NULL; - secOMXInputPort->markType.pMarkData = NULL; - } - - if (bufferHeader->hMarkTargetComponent != NULL) { - if (bufferHeader->hMarkTargetComponent == pOMXComponent) { - pSECComponent->pCallbacks->EventHandler(pOMXComponent, - pSECComponent->callbackData, - OMX_EventMark, - 0, 0, bufferHeader->pMarkData); - } else { - pSECComponent->propagateMarkType.hMarkTargetComponent = bufferHeader->hMarkTargetComponent; - pSECComponent->propagateMarkType.pMarkData = bufferHeader->pMarkData; - } - } - - if (CHECK_PORT_TUNNELED(secOMXInputPort)) { - OMX_FillThisBuffer(secOMXInputPort->tunneledComponent, bufferHeader); - } else { - bufferHeader->nFilledLen = 0; - pSECComponent->pCallbacks->EmptyBufferDone(pOMXComponent, pSECComponent->callbackData, bufferHeader); - } - } - - if ((pSECComponent->currentState == OMX_StatePause) && - ((!CHECK_PORT_BEING_FLUSHED(secOMXInputPort) && !CHECK_PORT_BEING_FLUSHED(secOMXOutputPort)))) { - SEC_OSAL_SignalReset(pSECComponent->pauseEvent); - SEC_OSAL_SignalWait(pSECComponent->pauseEvent, DEF_MAX_WAIT_TIME); - } - - dataBuffer->dataValid = OMX_FALSE; - dataBuffer->dataLen = 0; - dataBuffer->remainDataLen = 0; - dataBuffer->usedDataLen = 0; - dataBuffer->bufferHeader = NULL; - dataBuffer->nFlags = 0; - dataBuffer->timeStamp = 0; - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_InputBufferGetQueue(SEC_OMX_BASECOMPONENT *pSECComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASEPORT *pSECPort = NULL; - SEC_OMX_DATABUFFER *dataBuffer = NULL; - SEC_OMX_MESSAGE* message = NULL; - SEC_OMX_DATABUFFER *inputUseBuffer = &pSECComponent->secDataBuffer[INPUT_PORT_INDEX]; - - FunctionIn(); - - pSECPort= &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - dataBuffer = &pSECComponent->secDataBuffer[INPUT_PORT_INDEX]; - - if (pSECComponent->currentState != OMX_StateExecuting) { - ret = OMX_ErrorUndefined; - goto EXIT; - } else { - SEC_OSAL_SemaphoreWait(pSECPort->bufferSemID); - SEC_OSAL_MutexLock(inputUseBuffer->bufferMutex); - if (dataBuffer->dataValid != OMX_TRUE) { - message = (SEC_OMX_MESSAGE *)SEC_OSAL_Dequeue(&pSECPort->bufferQ); - if (message == NULL) { - ret = OMX_ErrorUndefined; - SEC_OSAL_MutexUnlock(inputUseBuffer->bufferMutex); - goto EXIT; - } - - dataBuffer->bufferHeader = (OMX_BUFFERHEADERTYPE *)(message->pCmdData); - dataBuffer->allocSize = dataBuffer->bufferHeader->nAllocLen; - dataBuffer->dataLen = dataBuffer->bufferHeader->nFilledLen; - dataBuffer->remainDataLen = dataBuffer->dataLen; - dataBuffer->usedDataLen = 0; //dataBuffer->bufferHeader->nOffset; - dataBuffer->dataValid = OMX_TRUE; - dataBuffer->nFlags = dataBuffer->bufferHeader->nFlags; - dataBuffer->timeStamp = dataBuffer->bufferHeader->nTimeStamp; - pSECComponent->processData[INPUT_PORT_INDEX].dataBuffer = dataBuffer->bufferHeader->pBuffer; - pSECComponent->processData[INPUT_PORT_INDEX].allocSize = dataBuffer->bufferHeader->nAllocLen; - - SEC_OSAL_Free(message); - } - SEC_OSAL_MutexUnlock(inputUseBuffer->bufferMutex); - ret = OMX_ErrorNone; - } -EXIT: - FunctionOut(); - - return ret; -} - -static OMX_ERRORTYPE SEC_OutputBufferReturn(OMX_COMPONENTTYPE *pOMXComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASECOMPONENT *pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - SEC_OMX_BASEPORT *secOMXInputPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - SEC_OMX_BASEPORT *secOMXOutputPort = &pSECComponent->pSECPort[OUTPUT_PORT_INDEX]; - SEC_OMX_DATABUFFER *dataBuffer = &pSECComponent->secDataBuffer[OUTPUT_PORT_INDEX]; - OMX_BUFFERHEADERTYPE *bufferHeader = dataBuffer->bufferHeader; - - FunctionIn(); - - if (bufferHeader != NULL) { - bufferHeader->nFilledLen = dataBuffer->remainDataLen; - bufferHeader->nOffset = 0; - bufferHeader->nFlags = dataBuffer->nFlags; - bufferHeader->nTimeStamp = dataBuffer->timeStamp; - - if (pSECComponent->propagateMarkType.hMarkTargetComponent != NULL) { - bufferHeader->hMarkTargetComponent = pSECComponent->propagateMarkType.hMarkTargetComponent; - bufferHeader->pMarkData = pSECComponent->propagateMarkType.pMarkData; - pSECComponent->propagateMarkType.hMarkTargetComponent = NULL; - pSECComponent->propagateMarkType.pMarkData = NULL; - } - - if (bufferHeader->nFlags & OMX_BUFFERFLAG_EOS) { - pSECComponent->pCallbacks->EventHandler(pOMXComponent, - pSECComponent->callbackData, - OMX_EventBufferFlag, - OUTPUT_PORT_INDEX, - bufferHeader->nFlags, NULL); - } - - if (CHECK_PORT_TUNNELED(secOMXOutputPort)) { - OMX_EmptyThisBuffer(secOMXOutputPort->tunneledComponent, bufferHeader); - } else { - pSECComponent->pCallbacks->FillBufferDone(pOMXComponent, pSECComponent->callbackData, bufferHeader); - } - } - - if ((pSECComponent->currentState == OMX_StatePause) && - ((!CHECK_PORT_BEING_FLUSHED(secOMXInputPort) && !CHECK_PORT_BEING_FLUSHED(secOMXOutputPort)))) { - SEC_OSAL_SignalReset(pSECComponent->pauseEvent); - SEC_OSAL_SignalWait(pSECComponent->pauseEvent, DEF_MAX_WAIT_TIME); - } - - /* reset dataBuffer */ - dataBuffer->dataValid = OMX_FALSE; - dataBuffer->dataLen = 0; - dataBuffer->remainDataLen = 0; - dataBuffer->usedDataLen = 0; - dataBuffer->bufferHeader = NULL; - dataBuffer->nFlags = 0; - dataBuffer->timeStamp = 0; - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OutputBufferGetQueue(SEC_OMX_BASECOMPONENT *pSECComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASEPORT *pSECPort = NULL; - SEC_OMX_DATABUFFER *dataBuffer = NULL; - SEC_OMX_MESSAGE *message = NULL; - SEC_OMX_DATABUFFER *outputUseBuffer = &pSECComponent->secDataBuffer[OUTPUT_PORT_INDEX]; - - FunctionIn(); - - pSECPort= &pSECComponent->pSECPort[OUTPUT_PORT_INDEX]; - dataBuffer = &pSECComponent->secDataBuffer[OUTPUT_PORT_INDEX]; - - if (pSECComponent->currentState != OMX_StateExecuting) { - ret = OMX_ErrorUndefined; - goto EXIT; - } else { - SEC_OSAL_SemaphoreWait(pSECPort->bufferSemID); - SEC_OSAL_MutexLock(outputUseBuffer->bufferMutex); - if (dataBuffer->dataValid != OMX_TRUE) { - message = (SEC_OMX_MESSAGE *)SEC_OSAL_Dequeue(&pSECPort->bufferQ); - if (message == NULL) { - ret = OMX_ErrorUndefined; - SEC_OSAL_MutexUnlock(outputUseBuffer->bufferMutex); - goto EXIT; - } - - dataBuffer->bufferHeader = (OMX_BUFFERHEADERTYPE *)(message->pCmdData); - dataBuffer->allocSize = dataBuffer->bufferHeader->nAllocLen; - dataBuffer->dataLen = 0; //dataBuffer->bufferHeader->nFilledLen; - dataBuffer->remainDataLen = dataBuffer->dataLen; - dataBuffer->usedDataLen = 0; //dataBuffer->bufferHeader->nOffset; - dataBuffer->dataValid =OMX_TRUE; - /* dataBuffer->nFlags = dataBuffer->bufferHeader->nFlags; */ - /* dataBuffer->nTimeStamp = dataBuffer->bufferHeader->nTimeStamp; */ - SEC_OSAL_Free(message); - } - SEC_OSAL_MutexUnlock(outputUseBuffer->bufferMutex); - ret = OMX_ErrorNone; - } -EXIT: - FunctionOut(); - - return ret; - -} - -static OMX_ERRORTYPE SEC_BufferReset(OMX_COMPONENTTYPE *pOMXComponent, OMX_U32 portIndex) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASECOMPONENT *pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - /* SEC_OMX_BASEPORT *pSECPort = &pSECComponent->pSECPort[portIndex]; */ - SEC_OMX_DATABUFFER *dataBuffer = &pSECComponent->secDataBuffer[portIndex]; - /* OMX_BUFFERHEADERTYPE *bufferHeader = dataBuffer->bufferHeader; */ - - dataBuffer->dataValid = OMX_FALSE; - dataBuffer->dataLen = 0; - dataBuffer->remainDataLen = 0; - dataBuffer->usedDataLen = 0; - dataBuffer->bufferHeader = NULL; - dataBuffer->nFlags = 0; - dataBuffer->timeStamp = 0; - - return ret; -} - -static OMX_ERRORTYPE SEC_DataReset(OMX_COMPONENTTYPE *pOMXComponent, OMX_U32 portIndex) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASECOMPONENT *pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - /* SEC_OMX_BASEPORT *pSECPort = &pSECComponent->pSECPort[portIndex]; */ - /* SEC_OMX_DATABUFFER *dataBuffer = &pSECComponent->secDataBuffer[portIndex]; */ - /* OMX_BUFFERHEADERTYPE *bufferHeader = dataBuffer->bufferHeader; */ - SEC_OMX_DATA *processData = &pSECComponent->processData[portIndex]; - - processData->dataLen = 0; - processData->remainDataLen = 0; - processData->usedDataLen = 0; - processData->nFlags = 0; - processData->timeStamp = 0; - - return ret; -} - -OMX_BOOL SEC_Preprocessor_InputData(OMX_COMPONENTTYPE *pOMXComponent) -{ - OMX_BOOL ret = OMX_FALSE; - SEC_OMX_BASECOMPONENT *pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - SEC_OMX_DATABUFFER *inputUseBuffer = &pSECComponent->secDataBuffer[INPUT_PORT_INDEX]; - SEC_OMX_DATA *inputData = &pSECComponent->processData[INPUT_PORT_INDEX]; - OMX_U32 copySize = 0; - OMX_BYTE checkInputStream = NULL; - OMX_U32 checkInputStreamLen = 0; - OMX_U32 checkedSize = 0; - OMX_BOOL flagEOS = OMX_FALSE; - OMX_BOOL flagEOF = OMX_FALSE; - OMX_BOOL previousFrameEOF = OMX_FALSE; - - if (inputUseBuffer->dataValid == OMX_TRUE) { - checkInputStream = inputUseBuffer->bufferHeader->pBuffer + inputUseBuffer->usedDataLen; - checkInputStreamLen = inputUseBuffer->remainDataLen; - - if ((inputUseBuffer->nFlags & OMX_BUFFERFLAG_ENDOFFRAME) && - (pSECComponent->bUseFlagEOF == OMX_FALSE)) { - pSECComponent->bUseFlagEOF = OMX_TRUE; - } - - if (inputData->dataLen == 0) { - previousFrameEOF = OMX_TRUE; - } else { - previousFrameEOF = OMX_FALSE; - } - if (pSECComponent->bUseFlagEOF == OMX_TRUE) { - flagEOF = OMX_TRUE; - checkedSize = checkInputStreamLen; - if (checkedSize == 0) { - SEC_OMX_BASEPORT *pSECPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - int width = pSECPort->portDefinition.format.video.nFrameWidth; - int height = pSECPort->portDefinition.format.video.nFrameHeight; - inputUseBuffer->remainDataLen = inputUseBuffer->dataLen = (width * height * 3) / 2; - checkedSize = checkInputStreamLen = inputUseBuffer->remainDataLen; - inputUseBuffer->nFlags |= OMX_BUFFERFLAG_EOS; - } - if (inputUseBuffer->nFlags & OMX_BUFFERFLAG_EOS) { - flagEOS = OMX_TRUE; - } - } else { - SEC_OMX_BASEPORT *pSECPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - int width = pSECPort->portDefinition.format.video.nFrameWidth; - int height = pSECPort->portDefinition.format.video.nFrameHeight; - int oneFrameSize = 0; - - if (pSECPort->portDefinition.format.video.eColorFormat == OMX_COLOR_FormatYUV420SemiPlanar) - oneFrameSize = (width * height * 3) / 2; - else if (pSECPort->portDefinition.format.video.eColorFormat == OMX_COLOR_FormatYUV420Planar) - oneFrameSize = (width * height * 3) / 2; - else if (pSECPort->portDefinition.format.video.eColorFormat == OMX_COLOR_FormatYUV422Planar) - oneFrameSize = width * height * 2; - - if (previousFrameEOF == OMX_TRUE) { - if (checkInputStreamLen >= oneFrameSize) { - checkedSize = oneFrameSize; - flagEOF = OMX_TRUE; - } else { - flagEOF = OMX_FALSE; - } - } else { - if (checkInputStreamLen >= (oneFrameSize - inputData->dataLen)) { - checkedSize = oneFrameSize - inputData->dataLen; - flagEOF = OMX_TRUE; - } else { - flagEOF = OMX_FALSE; - } - } - - if ((flagEOF == OMX_FALSE) && (inputUseBuffer->nFlags & OMX_BUFFERFLAG_EOS)) { - flagEOF = OMX_TRUE; - flagEOS = OMX_TRUE; - } - } - - if (flagEOF == OMX_TRUE) { - copySize = checkedSize; - SEC_OSAL_Log(SEC_LOG_TRACE, "sec_checkInputFrame : OMX_TRUE"); - } else { - copySize = checkInputStreamLen; - SEC_OSAL_Log(SEC_LOG_TRACE, "sec_checkInputFrame : OMX_FALSE"); - } - - if (inputUseBuffer->nFlags & OMX_BUFFERFLAG_EOS) - pSECComponent->bSaveFlagEOS = OMX_TRUE; - - if (((inputData->allocSize) - (inputData->dataLen)) >= copySize) { - SEC_OMX_BASEPORT *pSECPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - - if ((pSECPort->portDefinition.format.video.eColorFormat != OMX_SEC_COLOR_FormatNV12TPhysicalAddress) && - (pSECPort->bStoreMetaDataInBuffer == OMX_FALSE)) { - if (flagEOF == OMX_TRUE) { - OMX_U32 width, height; - - width = pSECPort->portDefinition.format.video.nFrameWidth; - height = pSECPort->portDefinition.format.video.nFrameHeight; - - SEC_OSAL_Log(SEC_LOG_TRACE, "inputData->specificBufferHeader.YVirAddr : 0x%x", inputData->specificBufferHeader.YVirAddr); - SEC_OSAL_Log(SEC_LOG_TRACE, "inputData->specificBufferHeader.CVirAddr : 0x%x", inputData->specificBufferHeader.CVirAddr); - - SEC_OSAL_Log(SEC_LOG_TRACE, "width:%d, height:%d, Ysize:%d", width, height, ALIGN_TO_8KB(ALIGN_TO_128B(width) * ALIGN_TO_32B(height))); - SEC_OSAL_Log(SEC_LOG_TRACE, "width:%d, height:%d, Csize:%d", width, height, ALIGN_TO_8KB(ALIGN_TO_128B(width) * ALIGN_TO_32B(height / 2))); - - switch (pSECPort->portDefinition.format.video.eColorFormat) { - case OMX_COLOR_FormatYUV420Planar: - /* Real YUV420P Data */ - csc_linear_to_tiled(inputData->specificBufferHeader.YVirAddr, - checkInputStream, width, height); - csc_linear_to_tiled_interleave(inputData->specificBufferHeader.CVirAddr, - checkInputStream + (width * height), - checkInputStream + (((width * height) * 5) / 4), - width, height >> 1); - break; - case OMX_COLOR_FormatYUV420SemiPlanar: - default: - SEC_OSAL_Memcpy(inputData->specificBufferHeader.YVirAddr, checkInputStream, (width * height)); - SEC_OSAL_Memcpy(inputData->specificBufferHeader.CVirAddr, checkInputStream + (width * height), (width * height / 2)); - break; - } - } - } - - inputUseBuffer->dataLen -= copySize; - inputUseBuffer->remainDataLen -= copySize; - inputUseBuffer->usedDataLen += copySize; - - inputData->dataLen += copySize; - inputData->remainDataLen += copySize; - - if (previousFrameEOF == OMX_TRUE) { - inputData->timeStamp = inputUseBuffer->timeStamp; - inputData->nFlags = inputUseBuffer->nFlags; - } - - if (pSECComponent->bUseFlagEOF == OMX_TRUE) { - if (pSECComponent->bSaveFlagEOS == OMX_TRUE) { - inputData->nFlags |= OMX_BUFFERFLAG_EOS; - flagEOF = OMX_TRUE; - pSECComponent->bSaveFlagEOS = OMX_FALSE; - } - } else { - if ((checkedSize == checkInputStreamLen) && (pSECComponent->bSaveFlagEOS == OMX_TRUE)) { - inputData->nFlags |= OMX_BUFFERFLAG_EOS; - flagEOF = OMX_TRUE; - pSECComponent->bSaveFlagEOS = OMX_FALSE; - } else { - inputData->nFlags = (inputUseBuffer->nFlags & (~OMX_BUFFERFLAG_EOS)); - } - } - } else { - /*????????????????????????????????? Error ?????????????????????????????????*/ - SEC_DataReset(pOMXComponent, INPUT_PORT_INDEX); - flagEOF = OMX_FALSE; - } - - if (inputUseBuffer->remainDataLen == 0) { - if(flagEOF == OMX_FALSE) - SEC_InputBufferReturn(pOMXComponent); - } else { - inputUseBuffer->dataValid = OMX_TRUE; - } - } - - if (flagEOF == OMX_TRUE) { - if (pSECComponent->checkTimeStamp.needSetStartTimeStamp == OMX_TRUE) { - pSECComponent->checkTimeStamp.needCheckStartTimeStamp = OMX_TRUE; - pSECComponent->checkTimeStamp.startTimeStamp = inputData->timeStamp; - pSECComponent->checkTimeStamp.nStartFlags = inputData->nFlags; - pSECComponent->checkTimeStamp.needSetStartTimeStamp = OMX_FALSE; - } - - ret = OMX_TRUE; - } else { - ret = OMX_FALSE; - } - return ret; -} - -OMX_BOOL SEC_Postprocess_OutputData(OMX_COMPONENTTYPE *pOMXComponent) -{ - OMX_BOOL ret = OMX_FALSE; - SEC_OMX_BASECOMPONENT *pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - SEC_OMX_DATABUFFER *outputUseBuffer = &pSECComponent->secDataBuffer[OUTPUT_PORT_INDEX]; - SEC_OMX_DATA *outputData = &pSECComponent->processData[OUTPUT_PORT_INDEX]; - OMX_U32 copySize = 0; - - if (outputUseBuffer->dataValid == OMX_TRUE) { - if (pSECComponent->checkTimeStamp.needCheckStartTimeStamp == OMX_TRUE) { - if (pSECComponent->checkTimeStamp.startTimeStamp == outputData->timeStamp){ - pSECComponent->checkTimeStamp.startTimeStamp = -19761123; - pSECComponent->checkTimeStamp.nStartFlags = 0x0; - pSECComponent->checkTimeStamp.needSetStartTimeStamp = OMX_FALSE; - pSECComponent->checkTimeStamp.needCheckStartTimeStamp = OMX_FALSE; - } else { - SEC_DataReset(pOMXComponent, OUTPUT_PORT_INDEX); - - ret = OMX_TRUE; - goto EXIT; - } - } else if (pSECComponent->checkTimeStamp.needSetStartTimeStamp == OMX_TRUE) { - SEC_DataReset(pOMXComponent, OUTPUT_PORT_INDEX); - - ret = OMX_TRUE; - goto EXIT; - } - - if (outputData->remainDataLen <= (outputUseBuffer->allocSize - outputUseBuffer->dataLen)) { - copySize = outputData->remainDataLen; - if (copySize > 0) - SEC_OSAL_Memcpy((outputUseBuffer->bufferHeader->pBuffer + outputUseBuffer->dataLen), - (outputData->dataBuffer + outputData->usedDataLen), - copySize); - - outputUseBuffer->dataLen += copySize; - outputUseBuffer->remainDataLen += copySize; - outputUseBuffer->nFlags = outputData->nFlags; - outputUseBuffer->timeStamp = outputData->timeStamp; - - ret = OMX_TRUE; - - /* reset outputData */ - SEC_DataReset(pOMXComponent, OUTPUT_PORT_INDEX); - - if ((outputUseBuffer->remainDataLen > 0) || - (outputUseBuffer->nFlags & OMX_BUFFERFLAG_EOS)) - SEC_OutputBufferReturn(pOMXComponent); - } else { - SEC_OSAL_Log(SEC_LOG_ERROR, "output buffer is smaller than encoded data size Out Length"); - - copySize = outputUseBuffer->allocSize - outputUseBuffer->dataLen; - - SEC_OSAL_Memcpy((outputUseBuffer->bufferHeader->pBuffer + outputUseBuffer->dataLen), - (outputData->dataBuffer + outputData->usedDataLen), - copySize); - - outputUseBuffer->dataLen += copySize; - outputUseBuffer->remainDataLen += copySize; - outputUseBuffer->nFlags = 0; - outputUseBuffer->timeStamp = outputData->timeStamp; - - ret = OMX_FALSE; - - outputData->remainDataLen -= copySize; - outputData->usedDataLen += copySize; - - SEC_OutputBufferReturn(pOMXComponent); - } - } else { - ret = OMX_FALSE; - } - -EXIT: - return ret; -} - -OMX_ERRORTYPE SEC_OMX_BufferProcess(OMX_HANDLETYPE hComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - SEC_OMX_BASECOMPONENT *pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - SEC_OMX_BASEPORT *secInputPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - SEC_OMX_BASEPORT *secOutputPort = &pSECComponent->pSECPort[OUTPUT_PORT_INDEX]; - SEC_OMX_DATABUFFER *inputUseBuffer = &pSECComponent->secDataBuffer[INPUT_PORT_INDEX]; - SEC_OMX_DATABUFFER *outputUseBuffer = &pSECComponent->secDataBuffer[OUTPUT_PORT_INDEX]; - SEC_OMX_DATA *inputData = &pSECComponent->processData[INPUT_PORT_INDEX]; - SEC_OMX_DATA *outputData = &pSECComponent->processData[OUTPUT_PORT_INDEX]; - OMX_U32 copySize = 0; - - pSECComponent->remainOutputData = OMX_FALSE; - pSECComponent->reInputData = OMX_FALSE; - - FunctionIn(); - - while (!pSECComponent->bExitBufferProcessThread) { - SEC_OSAL_SleepMillisec(0); - - if (((pSECComponent->currentState == OMX_StatePause) || - (pSECComponent->currentState == OMX_StateIdle) || - (pSECComponent->transientState == SEC_OMX_TransStateLoadedToIdle) || - (pSECComponent->transientState == SEC_OMX_TransStateExecutingToIdle)) && - (pSECComponent->transientState != SEC_OMX_TransStateIdleToLoaded)&& - ((!CHECK_PORT_BEING_FLUSHED(secInputPort) && !CHECK_PORT_BEING_FLUSHED(secOutputPort)))) { - SEC_OSAL_SignalReset(pSECComponent->pauseEvent); - SEC_OSAL_SignalWait(pSECComponent->pauseEvent, DEF_MAX_WAIT_TIME); - } - - while (SEC_Check_BufferProcess_State(pSECComponent) && !pSECComponent->bExitBufferProcessThread) { - SEC_OSAL_SleepMillisec(0); - - SEC_OSAL_MutexLock(outputUseBuffer->bufferMutex); - if ((outputUseBuffer->dataValid != OMX_TRUE) && - (!CHECK_PORT_BEING_FLUSHED(secOutputPort))) { - SEC_OSAL_MutexUnlock(outputUseBuffer->bufferMutex); - ret = SEC_OutputBufferGetQueue(pSECComponent); - if ((ret == OMX_ErrorUndefined) || - (secInputPort->portState != OMX_StateIdle) || - (secOutputPort->portState != OMX_StateIdle)) { - break; - } - } else { - SEC_OSAL_MutexUnlock(outputUseBuffer->bufferMutex); - } - - if (pSECComponent->remainOutputData == OMX_FALSE) { - if (pSECComponent->reInputData == OMX_FALSE) { - SEC_OSAL_MutexLock(inputUseBuffer->bufferMutex); - if ((SEC_Preprocessor_InputData(pOMXComponent) == OMX_FALSE) && - (!CHECK_PORT_BEING_FLUSHED(secInputPort))) { - SEC_OSAL_MutexUnlock(inputUseBuffer->bufferMutex); - ret = SEC_InputBufferGetQueue(pSECComponent); - break; - } - - SEC_OSAL_MutexUnlock(inputUseBuffer->bufferMutex); - } - - SEC_OSAL_MutexLock(inputUseBuffer->bufferMutex); - SEC_OSAL_MutexLock(outputUseBuffer->bufferMutex); - ret = pSECComponent->sec_mfc_bufferProcess(pOMXComponent, inputData, outputData); - - if (inputUseBuffer->remainDataLen == 0) - SEC_InputBufferReturn(pOMXComponent); - else - inputUseBuffer->dataValid = OMX_TRUE; - - SEC_OSAL_MutexUnlock(outputUseBuffer->bufferMutex); - SEC_OSAL_MutexUnlock(inputUseBuffer->bufferMutex); - - if (ret == OMX_ErrorInputDataEncodeYet) - pSECComponent->reInputData = OMX_TRUE; - else - pSECComponent->reInputData = OMX_FALSE; - } - - SEC_OSAL_MutexLock(outputUseBuffer->bufferMutex); - - if (SEC_Postprocess_OutputData(pOMXComponent) == OMX_FALSE) - pSECComponent->remainOutputData = OMX_TRUE; - else - pSECComponent->remainOutputData = OMX_FALSE; - - SEC_OSAL_MutexUnlock(outputUseBuffer->bufferMutex); - } - } - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_VideoEncodeGetParameter( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_INDEXTYPE nParamIndex, - OMX_INOUT OMX_PTR ComponentParameterStructure) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_OMX_BASEPORT *pSECPort = NULL; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - if (pSECComponent->currentState == OMX_StateInvalid ) { - ret = OMX_StateInvalid; - goto EXIT; - } - - if (ComponentParameterStructure == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - - switch (nParamIndex) { - case OMX_IndexParamVideoInit: - { - OMX_PORT_PARAM_TYPE *portParam = (OMX_PORT_PARAM_TYPE *)ComponentParameterStructure; - ret = SEC_OMX_Check_SizeVersion(portParam, sizeof(OMX_PORT_PARAM_TYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - portParam->nPorts = pSECComponent->portParam.nPorts; - portParam->nStartPortNumber = pSECComponent->portParam.nStartPortNumber; - ret = OMX_ErrorNone; - } - break; - case OMX_IndexParamVideoPortFormat: - { - OMX_VIDEO_PARAM_PORTFORMATTYPE *portFormat = (OMX_VIDEO_PARAM_PORTFORMATTYPE *)ComponentParameterStructure; - OMX_U32 portIndex = portFormat->nPortIndex; - OMX_U32 index = portFormat->nIndex; - SEC_OMX_BASEPORT *pSECPort = NULL; - OMX_PARAM_PORTDEFINITIONTYPE *portDefinition = NULL; - OMX_U32 supportFormatNum = 0; - - ret = SEC_OMX_Check_SizeVersion(portFormat, sizeof(OMX_VIDEO_PARAM_PORTFORMATTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if ((portIndex >= pSECComponent->portParam.nPorts)) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - - if (portIndex == INPUT_PORT_INDEX) { - supportFormatNum = INPUT_PORT_SUPPORTFORMAT_NUM_MAX - 1; - if (index > supportFormatNum) { - ret = OMX_ErrorNoMore; - goto EXIT; - } - - pSECPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - portDefinition = &pSECPort->portDefinition; - - switch (index) { - case supportFormat_0: - portFormat->eCompressionFormat = OMX_VIDEO_CodingUnused; - portFormat->eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar; - portFormat->xFramerate = portDefinition->format.video.xFramerate; - break; - case supportFormat_1: - portFormat->eCompressionFormat = OMX_VIDEO_CodingUnused; - portFormat->eColorFormat = OMX_COLOR_FormatYUV420Planar; - portFormat->xFramerate = portDefinition->format.video.xFramerate; - break; - case supportFormat_2: - portFormat->eCompressionFormat = OMX_VIDEO_CodingUnused; - portFormat->eColorFormat = OMX_SEC_COLOR_FormatNV12TPhysicalAddress; - portFormat->xFramerate = portDefinition->format.video.xFramerate; - break; -#ifdef USE_ANDROID_EXTENSION - case supportFormat_3: - portFormat->eCompressionFormat = OMX_VIDEO_CodingUnused; - portFormat->eColorFormat = OMX_COLOR_FormatAndroidOpaque; - portFormat->xFramerate = portDefinition->format.video.xFramerate; - break; -#endif - } - } else if (portIndex == OUTPUT_PORT_INDEX) { - supportFormatNum = OUTPUT_PORT_SUPPORTFORMAT_NUM_MAX - 1; - if (index > supportFormatNum) { - ret = OMX_ErrorNoMore; - goto EXIT; - } - - pSECPort = &pSECComponent->pSECPort[OUTPUT_PORT_INDEX]; - portDefinition = &pSECPort->portDefinition; - - portFormat->eCompressionFormat = portDefinition->format.video.eCompressionFormat; - portFormat->eColorFormat = portDefinition->format.video.eColorFormat; - portFormat->xFramerate = portDefinition->format.video.xFramerate; - } - ret = OMX_ErrorNone; - } - break; - case OMX_IndexParamVideoBitrate: - { - OMX_VIDEO_PARAM_BITRATETYPE *videoRateControl = (OMX_VIDEO_PARAM_BITRATETYPE *)ComponentParameterStructure; - OMX_U32 portIndex = videoRateControl->nPortIndex; - SEC_OMX_BASEPORT *pSECPort = NULL; - OMX_PARAM_PORTDEFINITIONTYPE *portDefinition = NULL; - - if ((portIndex != OUTPUT_PORT_INDEX)) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } else { - pSECPort = &pSECComponent->pSECPort[portIndex]; - portDefinition = &pSECPort->portDefinition; - - videoRateControl->eControlRate = pSECPort->eControlRate; - videoRateControl->nTargetBitrate = portDefinition->format.video.nBitrate; - } - ret = OMX_ErrorNone; - } - break; - case OMX_IndexParamPortDefinition: - { - OMX_PARAM_PORTDEFINITIONTYPE *portDefinition = (OMX_PARAM_PORTDEFINITIONTYPE *)ComponentParameterStructure; - OMX_U32 portIndex = portDefinition->nPortIndex; - SEC_OMX_BASEPORT *pSECPort; - - if (portIndex >= pSECComponent->portParam.nPorts) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - ret = SEC_OMX_Check_SizeVersion(portDefinition, sizeof(OMX_PARAM_PORTDEFINITIONTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - pSECPort = &pSECComponent->pSECPort[portIndex]; - SEC_OSAL_Memcpy(portDefinition, &pSECPort->portDefinition, portDefinition->nSize); - -#ifdef USE_ANDROID_EXTENSION - if (portIndex == 0 && pSECPort->bStoreMetaDataInBuffer == OMX_TRUE) { - portDefinition->nBufferSize = MAX_INPUT_METADATA_BUFFER_SIZE; - } -#endif - } - break; - default: - { - ret = SEC_OMX_GetParameter(hComponent, nParamIndex, ComponentParameterStructure); - } - break; - } - -EXIT: - FunctionOut(); - - return ret; -} -OMX_ERRORTYPE SEC_OMX_VideoEncodeSetParameter( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_INDEXTYPE nIndex, - OMX_IN OMX_PTR ComponentParameterStructure) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_OMX_BASEPORT *pSECPort = NULL; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - if (pSECComponent->currentState == OMX_StateInvalid ) { - ret = OMX_StateInvalid; - goto EXIT; - } - - if (ComponentParameterStructure == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - - switch (nIndex) { - case OMX_IndexParamVideoPortFormat: - { - OMX_VIDEO_PARAM_PORTFORMATTYPE *portFormat = (OMX_VIDEO_PARAM_PORTFORMATTYPE *)ComponentParameterStructure; - OMX_U32 portIndex = portFormat->nPortIndex; - OMX_U32 index = portFormat->nIndex; - SEC_OMX_BASEPORT *pSECPort = NULL; - OMX_PARAM_PORTDEFINITIONTYPE *portDefinition = NULL; - OMX_U32 supportFormatNum = 0; - - ret = SEC_OMX_Check_SizeVersion(portFormat, sizeof(OMX_VIDEO_PARAM_PORTFORMATTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if ((portIndex >= pSECComponent->portParam.nPorts)) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } else { - pSECPort = &pSECComponent->pSECPort[portIndex]; - portDefinition = &pSECPort->portDefinition; - - portDefinition->format.video.eColorFormat = portFormat->eColorFormat; - portDefinition->format.video.eCompressionFormat = portFormat->eCompressionFormat; - portDefinition->format.video.xFramerate = portFormat->xFramerate; - } - } - break; - case OMX_IndexParamVideoBitrate: - { - OMX_VIDEO_PARAM_BITRATETYPE *videoRateControl = (OMX_VIDEO_PARAM_BITRATETYPE *)ComponentParameterStructure; - OMX_U32 portIndex = videoRateControl->nPortIndex; - SEC_OMX_BASEPORT *pSECPort = NULL; - OMX_PARAM_PORTDEFINITIONTYPE *portDefinition = NULL; - - if ((portIndex != OUTPUT_PORT_INDEX)) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } else { - pSECPort = &pSECComponent->pSECPort[portIndex]; - portDefinition = &pSECPort->portDefinition; - - pSECPort->eControlRate = videoRateControl->eControlRate; - portDefinition->format.video.nBitrate = videoRateControl->nTargetBitrate; - } - ret = OMX_ErrorNone; - } - break; - case OMX_IndexParamPortDefinition: - { - OMX_PARAM_PORTDEFINITIONTYPE *pPortDefinition = - (OMX_PARAM_PORTDEFINITIONTYPE *)ComponentParameterStructure; - ret = SEC_OMX_SetParameter(hComponent, nIndex, ComponentParameterStructure); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pPortDefinition->nPortIndex == INPUT_PORT_INDEX) { - SEC_OMX_BASEPORT *pSECInputPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - OMX_U32 width = pSECInputPort->portDefinition.format.video.nFrameWidth; - OMX_U32 height = pSECInputPort->portDefinition.format.video.nFrameHeight; - SEC_OMX_BASEPORT *pSECOutputPort = &pSECComponent->pSECPort[OUTPUT_PORT_INDEX]; - pSECOutputPort->portDefinition.format.video.nFrameWidth = width; - pSECOutputPort->portDefinition.format.video.nFrameHeight = height; - pSECOutputPort->portDefinition.nBufferSize = (width * height * 3) / 2; - SEC_OSAL_Log(SEC_LOG_TRACE, "pSECOutputPort->portDefinition.nBufferSize: %d", - pSECOutputPort->portDefinition.nBufferSize); - } - } - break; -#ifdef USE_ANDROID_EXTENSION - case OMX_IndexParamStoreMetaDataBuffer: - { - if (OMX_ErrorNone != checkVersionANB(ComponentParameterStructure)) - goto EXIT; - - if (INPUT_PORT_INDEX != checkPortIndexANB(ComponentParameterStructure)) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - ret = enableStoreMetaDataInBuffers(hComponent, ComponentParameterStructure); - } - break; -#endif - default: - { - ret = SEC_OMX_SetParameter(hComponent, nIndex, ComponentParameterStructure); - } - break; - } - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_VideoEncodeComponentInit(OMX_IN OMX_HANDLETYPE hComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_OMX_BASEPORT *pSECPort = NULL; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_Error, Line:%d", __LINE__); - goto EXIT; - } - - ret = SEC_OMX_BaseComponent_Constructor(pOMXComponent); - if (ret != OMX_ErrorNone) { - SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_Error, Line:%d", __LINE__); - goto EXIT; - } - - ret = SEC_OMX_Port_Constructor(pOMXComponent); - if (ret != OMX_ErrorNone) { - SEC_OMX_BaseComponent_Destructor(pOMXComponent); - SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_Error, Line:%d", __LINE__); - goto EXIT; - } - - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - pSECComponent->bSaveFlagEOS = OMX_FALSE; - - /* Input port */ - pSECPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - pSECPort->portDefinition.nBufferCountActual = MAX_VIDEO_INPUTBUFFER_NUM; - pSECPort->portDefinition.nBufferCountMin = MAX_VIDEO_INPUTBUFFER_NUM; - pSECPort->portDefinition.nBufferSize = 0; - pSECPort->portDefinition.eDomain = OMX_PortDomainVideo; - - pSECPort->portDefinition.format.video.cMIMEType = SEC_OSAL_Malloc(MAX_OMX_MIMETYPE_SIZE); - SEC_OSAL_Strcpy(pSECPort->portDefinition.format.video.cMIMEType, "raw/video"); - pSECPort->portDefinition.format.video.pNativeRender = 0; - pSECPort->portDefinition.format.video.bFlagErrorConcealment = OMX_FALSE; - pSECPort->portDefinition.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused; - - pSECPort->portDefinition.format.video.nFrameWidth = 0; - pSECPort->portDefinition.format.video.nFrameHeight= 0; - pSECPort->portDefinition.format.video.nStride = 0; - pSECPort->portDefinition.format.video.nSliceHeight = 0; - pSECPort->portDefinition.format.video.nBitrate = 64000; - pSECPort->portDefinition.format.video.xFramerate = (15 << 16); - pSECPort->portDefinition.format.video.eColorFormat = OMX_COLOR_FormatUnused; - pSECPort->portDefinition.format.video.pNativeWindow = NULL; - - /* Output port */ - pSECPort = &pSECComponent->pSECPort[OUTPUT_PORT_INDEX]; - pSECPort->portDefinition.nBufferCountActual = MAX_VIDEO_OUTPUTBUFFER_NUM; - pSECPort->portDefinition.nBufferCountMin = MAX_VIDEO_OUTPUTBUFFER_NUM; - pSECPort->portDefinition.nBufferSize = DEFAULT_VIDEO_OUTPUT_BUFFER_SIZE; - pSECPort->portDefinition.eDomain = OMX_PortDomainVideo; - - pSECPort->portDefinition.format.video.cMIMEType = SEC_OSAL_Malloc(MAX_OMX_MIMETYPE_SIZE); - SEC_OSAL_Strcpy(pSECPort->portDefinition.format.video.cMIMEType, "raw/video"); - pSECPort->portDefinition.format.video.pNativeRender = 0; - pSECPort->portDefinition.format.video.bFlagErrorConcealment = OMX_FALSE; - pSECPort->portDefinition.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused; - - pSECPort->portDefinition.format.video.nFrameWidth = 0; - pSECPort->portDefinition.format.video.nFrameHeight= 0; - pSECPort->portDefinition.format.video.nStride = 0; - pSECPort->portDefinition.format.video.nSliceHeight = 0; - pSECPort->portDefinition.format.video.nBitrate = 64000; - pSECPort->portDefinition.format.video.xFramerate = (15 << 16); - pSECPort->portDefinition.format.video.eColorFormat = OMX_COLOR_FormatUnused; - pSECPort->portDefinition.format.video.pNativeWindow = NULL; - - pOMXComponent->UseBuffer = &SEC_OMX_UseBuffer; - pOMXComponent->AllocateBuffer = &SEC_OMX_AllocateBuffer; - pOMXComponent->FreeBuffer = &SEC_OMX_FreeBuffer; - pOMXComponent->ComponentTunnelRequest = &SEC_OMX_ComponentTunnelRequest; - - pSECComponent->sec_AllocateTunnelBuffer = &SEC_OMX_AllocateTunnelBuffer; - pSECComponent->sec_FreeTunnelBuffer = &SEC_OMX_FreeTunnelBuffer; - pSECComponent->sec_BufferProcess = &SEC_OMX_BufferProcess; - pSECComponent->sec_BufferReset = &SEC_BufferReset; - pSECComponent->sec_InputBufferReturn = &SEC_InputBufferReturn; - pSECComponent->sec_OutputBufferReturn = &SEC_OutputBufferReturn; - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_VideoEncodeComponentDeinit(OMX_IN OMX_HANDLETYPE hComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_OMX_BASEPORT *pSECPort = NULL; - int i = 0; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - for(i = 0; i < ALL_PORT_NUM; i++) { - pSECPort = &pSECComponent->pSECPort[i]; - SEC_OSAL_Free(pSECPort->portDefinition.format.video.cMIMEType); - pSECPort->portDefinition.format.video.cMIMEType = NULL; - } - - ret = SEC_OMX_Port_Destructor(pOMXComponent); - - ret = SEC_OMX_BaseComponent_Destructor(hComponent); - -EXIT: - FunctionOut(); - - return ret; -} diff --git a/sec_mm/sec_omx/sec_omx_component/video/enc/SEC_OMX_Venc.h b/sec_mm/sec_omx/sec_omx_component/video/enc/SEC_OMX_Venc.h deleted file mode 100644 index ac24e10..0000000 --- a/sec_mm/sec_omx/sec_omx_component/video/enc/SEC_OMX_Venc.h +++ /dev/null @@ -1,137 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OMX_Venc.h - * @brief - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * Yunji Kim (yunji.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#ifndef SEC_OMX_VIDEO_ENCODE -#define SEC_OMX_VIDEO_ENCODE - -#include "OMX_Component.h" -#include "SEC_OMX_Def.h" -#include "SEC_OSAL_Queue.h" -#include "SEC_OMX_Baseport.h" - -#define MAX_VIDEO_INPUTBUFFER_NUM 5 -#define MAX_VIDEO_OUTPUTBUFFER_NUM 4 - -#define DEFAULT_FRAME_WIDTH 176 -#define DEFAULT_FRAME_HEIGHT 144 - -#define DEFAULT_VIDEO_INPUT_BUFFER_SIZE ALIGN_TO_8KB(ALIGN_TO_128B(DEFAULT_FRAME_WIDTH) * ALIGN_TO_32B(DEFAULT_FRAME_HEIGHT)) \ - + ALIGN_TO_8KB(ALIGN_TO_128B(DEFAULT_FRAME_WIDTH) * ALIGN_TO_32B(DEFAULT_FRAME_HEIGHT / 2)) - /* (DEFAULT_FRAME_WIDTH * DEFAULT_FRAME_HEIGHT * 3) / 2 */ -#define DEFAULT_VIDEO_OUTPUT_BUFFER_SIZE DEFAULT_VIDEO_INPUT_BUFFER_SIZE - -#define MFC_INPUT_BUFFER_NUM_MAX 2 - -#ifdef USE_ANDROID_EXTENSION -#define INPUT_PORT_SUPPORTFORMAT_NUM_MAX 4 -#else -#define INPUT_PORT_SUPPORTFORMAT_NUM_MAX 3 -#endif -#define OUTPUT_PORT_SUPPORTFORMAT_NUM_MAX 1 - -#ifdef USE_ANDROID_EXTENSION -// The largest metadata buffer size advertised -// when metadata buffer mode is used for video encoding -#define MAX_INPUT_METADATA_BUFFER_SIZE (64) -#endif - -typedef struct -{ - void *pAddrY; - void *pAddrC; -} MFC_ENC_ADDR_INFO; - -typedef struct _SEC_MFC_NBENC_THREAD -{ - OMX_HANDLETYPE hNBEncodeThread; - OMX_HANDLETYPE hEncFrameStart; - OMX_HANDLETYPE hEncFrameEnd; - OMX_BOOL bExitEncodeThread; - OMX_BOOL bEncoderRun; -} SEC_MFC_NBENC_THREAD; - -typedef struct _MFC_ENC_INPUT_BUFFER -{ - void *YPhyAddr; // physical address of Y - void *CPhyAddr; // physical address of CbCr - void *YVirAddr; // virtual address of Y - void *CVirAddr; // virtual address of CbCr - int YBufferSize; // input buffer alloc size of Y - int CBufferSize; // input buffer alloc size of CbCr - int YDataSize; // input size of Y data - int CDataSize; // input size of CbCr data -} MFC_ENC_INPUT_BUFFER; - -#ifdef __cplusplus -extern "C" { -#endif - -OMX_ERRORTYPE SEC_OMX_UseBuffer( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_INOUT OMX_BUFFERHEADERTYPE **ppBufferHdr, - OMX_IN OMX_U32 nPortIndex, - OMX_IN OMX_PTR pAppPrivate, - OMX_IN OMX_U32 nSizeBytes, - OMX_IN OMX_U8 *pBuffer); -OMX_ERRORTYPE SEC_OMX_AllocateBuffer( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_INOUT OMX_BUFFERHEADERTYPE **ppBuffer, - OMX_IN OMX_U32 nPortIndex, - OMX_IN OMX_PTR pAppPrivate, - OMX_IN OMX_U32 nSizeBytes); -OMX_ERRORTYPE SEC_OMX_FreeBuffer( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_U32 nPortIndex, - OMX_IN OMX_BUFFERHEADERTYPE *pBufferHdr); -OMX_ERRORTYPE SEC_OMX_AllocateTunnelBuffer( - SEC_OMX_BASEPORT *pOMXBasePort, - OMX_U32 nPortIndex); -OMX_ERRORTYPE SEC_OMX_FreeTunnelBuffer( - SEC_OMX_BASEPORT *pOMXBasePort, - OMX_U32 nPortIndex); -OMX_ERRORTYPE SEC_OMX_ComponentTunnelRequest( - OMX_IN OMX_HANDLETYPE hComp, - OMX_IN OMX_U32 nPort, - OMX_IN OMX_HANDLETYPE hTunneledComp, - OMX_IN OMX_U32 nTunneledPort, - OMX_INOUT OMX_TUNNELSETUPTYPE *pTunnelSetup); -OMX_ERRORTYPE SEC_OMX_BufferProcess(OMX_HANDLETYPE hComponent); -OMX_ERRORTYPE SEC_OMX_VideoEncodeGetParameter( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_INDEXTYPE nParamIndex, - OMX_INOUT OMX_PTR ComponentParameterStructure); -OMX_ERRORTYPE SEC_OMX_VideoEncodeSetParameter( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_INDEXTYPE nIndex, - OMX_IN OMX_PTR ComponentParameterStructure); -OMX_ERRORTYPE SEC_OMX_VideoEncodeComponentDeinit(OMX_IN OMX_HANDLETYPE hComponent); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/sec_mm/sec_omx/sec_omx_component/video/enc/h264enc/Android.mk b/sec_mm/sec_omx/sec_omx_component/video/enc/h264enc/Android.mk deleted file mode 100644 index 4157e31..0000000 --- a/sec_mm/sec_omx/sec_omx_component/video/enc/h264enc/Android.mk +++ /dev/null @@ -1,30 +0,0 @@ -LOCAL_PATH := $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := optional - -LOCAL_SRC_FILES := \ - SEC_OMX_H264enc.c \ - library_register.c - - -LOCAL_MODULE := libOMX.SEC.AVC.Encoder.aries - -LOCAL_CFLAGS := - -LOCAL_ARM_MODE := arm - -LOCAL_STATIC_LIBRARIES := libSEC_OMX_Venc.aries libsecosal.aries libsecbasecomponent.aries \ - libsecmfcencapi.aries libseccsc.aries -LOCAL_SHARED_LIBRARIES := libc libdl libcutils libutils libui libhardware - -LOCAL_C_INCLUDES := $(SEC_OMX_INC)/khronos \ - $(SEC_OMX_INC)/sec \ - $(SEC_OMX_TOP)/sec_osal \ - $(SEC_OMX_TOP)/sec_omx_core \ - $(SEC_OMX_COMPONENT)/common \ - $(SEC_OMX_COMPONENT)/video/enc - -LOCAL_C_INCLUDES += $(SEC_OMX_TOP)/sec_codecs/video/mfc_c110/include - -include $(BUILD_SHARED_LIBRARY) diff --git a/sec_mm/sec_omx/sec_omx_component/video/enc/h264enc/SEC_OMX_H264enc.c b/sec_mm/sec_omx/sec_omx_component/video/enc/h264enc/SEC_OMX_H264enc.c deleted file mode 100644 index 24bbc7a..0000000 --- a/sec_mm/sec_omx/sec_omx_component/video/enc/h264enc/SEC_OMX_H264enc.c +++ /dev/null @@ -1,1307 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OMX_H264enc.c - * @brief - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#include -#include -#include - -#include "SEC_OMX_Macros.h" -#include "SEC_OMX_Basecomponent.h" -#include "SEC_OMX_Baseport.h" -#include "SEC_OMX_Venc.h" -#include "library_register.h" -#include "SEC_OMX_H264enc.h" -#include "SsbSipMfcApi.h" -#include "color_space_convertor.h" - -#undef SEC_LOG_TAG -#define SEC_LOG_TAG "SEC_H264_ENC" -#define SEC_LOG_OFF -#include "SEC_OSAL_Log.h" - - -/* H.264 Encoder Supported Levels & profiles */ -SEC_OMX_VIDEO_PROFILELEVEL supportedAVCProfileLevels[] ={ - {OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel1}, - {OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel1b}, - {OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel11}, - {OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel12}, - {OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel13}, - {OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel2}, - {OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel21}, - {OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel22}, - {OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel3}, - {OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel31}, - {OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel32}, - {OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel4}, - - {OMX_VIDEO_AVCProfileMain, OMX_VIDEO_AVCLevel1}, - {OMX_VIDEO_AVCProfileMain, OMX_VIDEO_AVCLevel1b}, - {OMX_VIDEO_AVCProfileMain, OMX_VIDEO_AVCLevel11}, - {OMX_VIDEO_AVCProfileMain, OMX_VIDEO_AVCLevel12}, - {OMX_VIDEO_AVCProfileMain, OMX_VIDEO_AVCLevel13}, - {OMX_VIDEO_AVCProfileMain, OMX_VIDEO_AVCLevel2}, - {OMX_VIDEO_AVCProfileMain, OMX_VIDEO_AVCLevel21}, - {OMX_VIDEO_AVCProfileMain, OMX_VIDEO_AVCLevel22}, - {OMX_VIDEO_AVCProfileMain, OMX_VIDEO_AVCLevel3}, - {OMX_VIDEO_AVCProfileMain, OMX_VIDEO_AVCLevel31}, - {OMX_VIDEO_AVCProfileMain, OMX_VIDEO_AVCLevel32}, - {OMX_VIDEO_AVCProfileMain, OMX_VIDEO_AVCLevel4}, - - {OMX_VIDEO_AVCProfileHigh, OMX_VIDEO_AVCLevel1}, - {OMX_VIDEO_AVCProfileHigh, OMX_VIDEO_AVCLevel1b}, - {OMX_VIDEO_AVCProfileHigh, OMX_VIDEO_AVCLevel11}, - {OMX_VIDEO_AVCProfileHigh, OMX_VIDEO_AVCLevel12}, - {OMX_VIDEO_AVCProfileHigh, OMX_VIDEO_AVCLevel13}, - {OMX_VIDEO_AVCProfileHigh, OMX_VIDEO_AVCLevel2}, - {OMX_VIDEO_AVCProfileHigh, OMX_VIDEO_AVCLevel21}, - {OMX_VIDEO_AVCProfileHigh, OMX_VIDEO_AVCLevel22}, - {OMX_VIDEO_AVCProfileHigh, OMX_VIDEO_AVCLevel3}, - {OMX_VIDEO_AVCProfileHigh, OMX_VIDEO_AVCLevel31}, - {OMX_VIDEO_AVCProfileHigh, OMX_VIDEO_AVCLevel32}, - {OMX_VIDEO_AVCProfileHigh, OMX_VIDEO_AVCLevel4}}; - - -OMX_U32 OMXAVCProfileToProfileIDC(OMX_VIDEO_AVCPROFILETYPE profile) -{ - OMX_U32 ret = 0; //default OMX_VIDEO_AVCProfileMain - - if (profile == OMX_VIDEO_AVCProfileMain) - ret = 0; - else if (profile == OMX_VIDEO_AVCProfileHigh) - ret = 1; - else if (profile == OMX_VIDEO_AVCProfileBaseline) - ret = 2; - - return ret; -} - -OMX_U32 OMXAVCLevelToLevelIDC(OMX_VIDEO_AVCLEVELTYPE level) -{ - OMX_U32 ret = 40; //default OMX_VIDEO_AVCLevel4 - - if (level == OMX_VIDEO_AVCLevel1) - ret = 10; - else if (level == OMX_VIDEO_AVCLevel1b) - ret = 9; - else if (level == OMX_VIDEO_AVCLevel11) - ret = 11; - else if (level == OMX_VIDEO_AVCLevel12) - ret = 12; - else if (level == OMX_VIDEO_AVCLevel13) - ret = 13; - else if (level == OMX_VIDEO_AVCLevel2) - ret = 20; - else if (level == OMX_VIDEO_AVCLevel21) - ret = 21; - else if (level == OMX_VIDEO_AVCLevel22) - ret = 22; - else if (level == OMX_VIDEO_AVCLevel3) - ret = 30; - else if (level == OMX_VIDEO_AVCLevel31) - ret = 31; - else if (level == OMX_VIDEO_AVCLevel32) - ret = 32; - else if (level == OMX_VIDEO_AVCLevel4) - ret = 40; - - return ret; -} - -OMX_U8 *FindDelimiter(OMX_U8 *pBuffer, OMX_U32 size) -{ - int i; - - for (i = 0; i < size - 3; i++) { - if ((pBuffer[i] == 0x00) && - (pBuffer[i+1] == 0x00) && - (pBuffer[i+2] == 0x00) && - (pBuffer[i+3] == 0x01)) - return (pBuffer + i); - } - - return NULL; -} - -void H264PrintParams(SSBSIP_MFC_ENC_H264_PARAM h264Arg) -{ - SEC_OSAL_Log(SEC_LOG_TRACE, "SourceWidth : %d\n", h264Arg.SourceWidth); - SEC_OSAL_Log(SEC_LOG_TRACE, "SourceHeight : %d\n", h264Arg.SourceHeight); - SEC_OSAL_Log(SEC_LOG_TRACE, "ProfileIDC : %d\n", h264Arg.ProfileIDC); - SEC_OSAL_Log(SEC_LOG_TRACE, "LevelIDC : %d\n", h264Arg.LevelIDC); - SEC_OSAL_Log(SEC_LOG_TRACE, "IDRPeriod : %d\n", h264Arg.IDRPeriod); - SEC_OSAL_Log(SEC_LOG_TRACE, "NumberReferenceFrames : %d\n", h264Arg.NumberReferenceFrames); - SEC_OSAL_Log(SEC_LOG_TRACE, "NumberRefForPframes : %d\n", h264Arg.NumberRefForPframes); - SEC_OSAL_Log(SEC_LOG_TRACE, "SliceMode : %d\n", h264Arg.SliceMode); - SEC_OSAL_Log(SEC_LOG_TRACE, "SliceArgument : %d\n", h264Arg.SliceArgument); - SEC_OSAL_Log(SEC_LOG_TRACE, "NumberBFrames : %d\n", h264Arg.NumberBFrames); - SEC_OSAL_Log(SEC_LOG_TRACE, "LoopFilterDisable : %d\n", h264Arg.LoopFilterDisable); - SEC_OSAL_Log(SEC_LOG_TRACE, "LoopFilterAlphaC0Offset : %d\n", h264Arg.LoopFilterAlphaC0Offset); - SEC_OSAL_Log(SEC_LOG_TRACE, "LoopFilterBetaOffset : %d\n", h264Arg.LoopFilterBetaOffset); - SEC_OSAL_Log(SEC_LOG_TRACE, "SymbolMode : %d\n", h264Arg.SymbolMode); - SEC_OSAL_Log(SEC_LOG_TRACE, "PictureInterlace : %d\n", h264Arg.PictureInterlace); - SEC_OSAL_Log(SEC_LOG_TRACE, "Transform8x8Mode : %d\n", h264Arg.Transform8x8Mode); - SEC_OSAL_Log(SEC_LOG_TRACE, "RandomIntraMBRefresh : %d\n", h264Arg.RandomIntraMBRefresh); - SEC_OSAL_Log(SEC_LOG_TRACE, "PadControlOn : %d\n", h264Arg.PadControlOn); - SEC_OSAL_Log(SEC_LOG_TRACE, "LumaPadVal : %d\n", h264Arg.LumaPadVal); - SEC_OSAL_Log(SEC_LOG_TRACE, "CbPadVal : %d\n", h264Arg.CbPadVal); - SEC_OSAL_Log(SEC_LOG_TRACE, "CrPadVal : %d\n", h264Arg.CrPadVal); - SEC_OSAL_Log(SEC_LOG_TRACE, "EnableFRMRateControl : %d\n", h264Arg.EnableFRMRateControl); - SEC_OSAL_Log(SEC_LOG_TRACE, "EnableMBRateControl : %d\n", h264Arg.EnableMBRateControl); - SEC_OSAL_Log(SEC_LOG_TRACE, "FrameRate : %d\n", h264Arg.FrameRate); - SEC_OSAL_Log(SEC_LOG_TRACE, "Bitrate : %d\n", h264Arg.Bitrate); - SEC_OSAL_Log(SEC_LOG_TRACE, "FrameQp : %d\n", h264Arg.FrameQp); - SEC_OSAL_Log(SEC_LOG_TRACE, "QSCodeMax : %d\n", h264Arg.QSCodeMax); - SEC_OSAL_Log(SEC_LOG_TRACE, "QSCodeMin : %d\n", h264Arg.QSCodeMin); - SEC_OSAL_Log(SEC_LOG_TRACE, "CBRPeriodRf : %d\n", h264Arg.CBRPeriodRf); - SEC_OSAL_Log(SEC_LOG_TRACE, "DarkDisable : %d\n", h264Arg.DarkDisable); - SEC_OSAL_Log(SEC_LOG_TRACE, "SmoothDisable : %d\n", h264Arg.SmoothDisable); - SEC_OSAL_Log(SEC_LOG_TRACE, "StaticDisable : %d\n", h264Arg.StaticDisable); - SEC_OSAL_Log(SEC_LOG_TRACE, "ActivityDisable : %d\n", h264Arg.ActivityDisable); -} - -void Set_H264ENC_Param(SSBSIP_MFC_ENC_H264_PARAM *pH264Arg, SEC_OMX_BASECOMPONENT *pSECComponent) -{ - SEC_OMX_BASEPORT *pSECInputPort = NULL; - SEC_OMX_BASEPORT *pSECOutputPort = NULL; - SEC_H264ENC_HANDLE *pH264Enc = NULL; - - pH264Enc = (SEC_H264ENC_HANDLE *)pSECComponent->hCodecHandle; - pSECInputPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - pSECOutputPort = &pSECComponent->pSECPort[OUTPUT_PORT_INDEX]; - - pH264Arg->codecType = H264_ENC; - pH264Arg->SourceWidth = pSECOutputPort->portDefinition.format.video.nFrameWidth; - pH264Arg->SourceHeight = pSECOutputPort->portDefinition.format.video.nFrameHeight; - pH264Arg->IDRPeriod = pH264Enc->AVCComponent[OUTPUT_PORT_INDEX].nPFrames + 1; - pH264Arg->SliceMode = 0; - pH264Arg->RandomIntraMBRefresh = 0; - pH264Arg->EnableFRMRateControl = 1; // 0: Disable, 1: Frame level RC - pH264Arg->Bitrate = pSECOutputPort->portDefinition.format.video.nBitrate; - pH264Arg->FrameQp = 20; - pH264Arg->FrameQp_P = 20; - pH264Arg->QSCodeMax = 30; - pH264Arg->QSCodeMin = 10; - pH264Arg->CBRPeriodRf = 100; - pH264Arg->PadControlOn = 0; // 0: disable, 1: enable - pH264Arg->LumaPadVal = 0; - pH264Arg->CbPadVal = 0; - pH264Arg->CrPadVal = 0; - - pH264Arg->ProfileIDC = OMXAVCProfileToProfileIDC(pH264Enc->AVCComponent[OUTPUT_PORT_INDEX].eProfile); //0; //(OMX_VIDEO_AVCProfileMain) - pH264Arg->LevelIDC = OMXAVCLevelToLevelIDC(pH264Enc->AVCComponent[OUTPUT_PORT_INDEX].eLevel); //40; //(OMX_VIDEO_AVCLevel4) - pH264Arg->FrameQp_B = 20; - pH264Arg->FrameRate = (pSECInputPort->portDefinition.format.video.xFramerate) >> 16; - pH264Arg->SliceArgument = 0; // Slice mb/byte size number - pH264Arg->NumberBFrames = 0; // 0 ~ 2 - pH264Arg->NumberReferenceFrames = 1; - pH264Arg->NumberRefForPframes = 1; - pH264Arg->LoopFilterDisable = 1; // 1: Loop Filter Disable, 0: Filter Enable - pH264Arg->LoopFilterAlphaC0Offset = 0; - pH264Arg->LoopFilterBetaOffset = 0; - pH264Arg->SymbolMode = 0; // 0: CAVLC, 1: CABAC - pH264Arg->PictureInterlace = 0; - pH264Arg->Transform8x8Mode = 0; // 0: 4x4, 1: allow 8x8 - pH264Arg->EnableMBRateControl = 0; // 0: Disable, 1:MB level RC - pH264Arg->DarkDisable = 1; - pH264Arg->SmoothDisable = 1; - pH264Arg->StaticDisable = 1; - pH264Arg->ActivityDisable = 1; - - switch ((SEC_OMX_COLOR_FORMATTYPE)pSECInputPort->portDefinition.format.video.eColorFormat) { - case OMX_COLOR_FormatYUV420SemiPlanar: - pH264Arg->FrameMap = NV12_LINEAR; - break; - case OMX_SEC_COLOR_FormatNV12TPhysicalAddress: - default: - pH264Arg->FrameMap = NV12_TILE; - break; - } - -#ifdef USE_ANDROID_EXTENSION - if (pSECInputPort->bStoreMetaDataInBuffer != OMX_FALSE) { - SEC_OMX_DATA *pInputData = &pSECComponent->processData[INPUT_PORT_INDEX]; - if(isMetadataBufferTypeGrallocSource(pInputData->dataBuffer) == OMX_TRUE) - pH264Arg->FrameMap = NV12_LINEAR; - else - pH264Arg->FrameMap = NV12_TILE; - } -#endif - -/* - SEC_OSAL_Log(SEC_LOG_TRACE, "pSECPort->eControlRate: 0x%x", pSECOutputPort->eControlRate); - switch (pSECOutputPort->eControlRate) { - case OMX_Video_ControlRateVariable: - SEC_OSAL_Log(SEC_LOG_TRACE, "Video Encode VBR"); - pH264Arg->EnableFRMRateControl = 0; // 0: Disable, 1: Frame level RC - pH264Arg->EnableMBRateControl = 0; // 0: Disable, 1:MB level RC - pH264Arg->CBRPeriodRf = 100; - break; - case OMX_Video_ControlRateConstant: - SEC_OSAL_Log(SEC_LOG_TRACE, "Video Encode CBR"); - pH264Arg->EnableFRMRateControl = 1; // 0: Disable, 1: Frame level RC - pH264Arg->EnableMBRateControl = 1; // 0: Disable, 1:MB level RC - pH264Arg->CBRPeriodRf = 10; - break; - case OMX_Video_ControlRateDisable: - default: //Android default - SEC_OSAL_Log(SEC_LOG_TRACE, "Video Encode VBR"); - pH264Arg->EnableFRMRateControl = 0; - pH264Arg->EnableMBRateControl = 0; - pH264Arg->CBRPeriodRf = 100; - break; - } -*/ - H264PrintParams(*pH264Arg); -} - -OMX_ERRORTYPE SEC_MFC_H264Enc_GetParameter( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_INDEXTYPE nParamIndex, - OMX_INOUT OMX_PTR pComponentParameterStructure) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - - FunctionIn(); - - if (hComponent == NULL || pComponentParameterStructure == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - if (pSECComponent->currentState == OMX_StateInvalid ) { - ret = OMX_StateInvalid; - goto EXIT; - } - - switch (nParamIndex) { - case OMX_IndexParamVideoAvc: - { - OMX_VIDEO_PARAM_AVCTYPE *pDstAVCComponent = (OMX_VIDEO_PARAM_AVCTYPE *)pComponentParameterStructure; - OMX_VIDEO_PARAM_AVCTYPE *pSrcAVCComponent = NULL; - SEC_H264ENC_HANDLE *pH264Enc = NULL; - - ret = SEC_OMX_Check_SizeVersion(pDstAVCComponent, sizeof(OMX_VIDEO_PARAM_AVCTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pDstAVCComponent->nPortIndex >= ALL_PORT_NUM) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - pH264Enc = (SEC_H264ENC_HANDLE *)pSECComponent->hCodecHandle; - pSrcAVCComponent = &pH264Enc->AVCComponent[pDstAVCComponent->nPortIndex]; - - SEC_OSAL_Memcpy(pDstAVCComponent, pSrcAVCComponent, sizeof(OMX_VIDEO_PARAM_AVCTYPE)); - } - break; - case OMX_IndexParamStandardComponentRole: - { - OMX_PARAM_COMPONENTROLETYPE *pComponentRole = (OMX_PARAM_COMPONENTROLETYPE *)pComponentParameterStructure; - ret = SEC_OMX_Check_SizeVersion(pComponentRole, sizeof(OMX_PARAM_COMPONENTROLETYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - SEC_OSAL_Strcpy((char *)pComponentRole->cRole, SEC_OMX_COMPONENT_H264_ENC_ROLE); - } - break; - case OMX_IndexParamVideoProfileLevelQuerySupported: - { - OMX_VIDEO_PARAM_PROFILELEVELTYPE *pDstProfileLevel = (OMX_VIDEO_PARAM_PROFILELEVELTYPE*)pComponentParameterStructure; - SEC_OMX_VIDEO_PROFILELEVEL *pProfileLevel = NULL; - OMX_U32 maxProfileLevelNum = 0; - - ret = SEC_OMX_Check_SizeVersion(pDstProfileLevel, sizeof(OMX_VIDEO_PARAM_PROFILELEVELTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pDstProfileLevel->nPortIndex >= ALL_PORT_NUM) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - pProfileLevel = supportedAVCProfileLevels; - maxProfileLevelNum = sizeof(supportedAVCProfileLevels) / sizeof(SEC_OMX_VIDEO_PROFILELEVEL); - - if (pDstProfileLevel->nProfileIndex >= maxProfileLevelNum) { - ret = OMX_ErrorNoMore; - goto EXIT; - } - - pProfileLevel += pDstProfileLevel->nProfileIndex; - pDstProfileLevel->eProfile = pProfileLevel->profile; - pDstProfileLevel->eLevel = pProfileLevel->level; - } - break; - case OMX_IndexParamVideoProfileLevelCurrent: - { - OMX_VIDEO_PARAM_PROFILELEVELTYPE *pDstProfileLevel = (OMX_VIDEO_PARAM_PROFILELEVELTYPE*)pComponentParameterStructure; - OMX_VIDEO_PARAM_AVCTYPE *pSrcAVCComponent = NULL; - SEC_H264ENC_HANDLE *pH264Enc = NULL; - - ret = SEC_OMX_Check_SizeVersion(pDstProfileLevel, sizeof(OMX_VIDEO_PARAM_PROFILELEVELTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pDstProfileLevel->nPortIndex >= ALL_PORT_NUM) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - pH264Enc = (SEC_H264ENC_HANDLE *)pSECComponent->hCodecHandle; - pSrcAVCComponent = &pH264Enc->AVCComponent[pDstProfileLevel->nPortIndex]; - - pDstProfileLevel->eProfile = pSrcAVCComponent->eProfile; - pDstProfileLevel->eLevel = pSrcAVCComponent->eLevel; - } - break; - case OMX_IndexParamVideoErrorCorrection: - { - OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE *pDstErrorCorrectionType = (OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE *)pComponentParameterStructure; - OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE *pSrcErrorCorrectionType = NULL; - SEC_H264ENC_HANDLE *pH264Enc = NULL; - - ret = SEC_OMX_Check_SizeVersion(pDstErrorCorrectionType, sizeof(OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pDstErrorCorrectionType->nPortIndex != OUTPUT_PORT_INDEX) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - pH264Enc = (SEC_H264ENC_HANDLE *)pSECComponent->hCodecHandle; - pSrcErrorCorrectionType = &pH264Enc->errorCorrectionType[OUTPUT_PORT_INDEX]; - - pDstErrorCorrectionType->bEnableHEC = pSrcErrorCorrectionType->bEnableHEC; - pDstErrorCorrectionType->bEnableResync = pSrcErrorCorrectionType->bEnableResync; - pDstErrorCorrectionType->nResynchMarkerSpacing = pSrcErrorCorrectionType->nResynchMarkerSpacing; - pDstErrorCorrectionType->bEnableDataPartitioning = pSrcErrorCorrectionType->bEnableDataPartitioning; - pDstErrorCorrectionType->bEnableRVLC = pSrcErrorCorrectionType->bEnableRVLC; - } - break; - default: - ret = SEC_OMX_VideoEncodeGetParameter(hComponent, nParamIndex, pComponentParameterStructure); - break; - } -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_MFC_H264Enc_SetParameter( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_INDEXTYPE nIndex, - OMX_IN OMX_PTR pComponentParameterStructure) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - - FunctionIn(); - - if (hComponent == NULL || pComponentParameterStructure == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - if (pSECComponent->currentState == OMX_StateInvalid ) { - ret = OMX_StateInvalid; - goto EXIT; - } - - switch (nIndex) { - case OMX_IndexParamVideoAvc: - { - OMX_VIDEO_PARAM_AVCTYPE *pDstAVCComponent = NULL; - OMX_VIDEO_PARAM_AVCTYPE *pSrcAVCComponent = (OMX_VIDEO_PARAM_AVCTYPE *)pComponentParameterStructure; - SEC_H264ENC_HANDLE *pH264Enc = NULL; - - ret = SEC_OMX_Check_SizeVersion(pSrcAVCComponent, sizeof(OMX_VIDEO_PARAM_AVCTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pSrcAVCComponent->nPortIndex >= ALL_PORT_NUM) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - pH264Enc = (SEC_H264ENC_HANDLE *)pSECComponent->hCodecHandle; - pDstAVCComponent = &pH264Enc->AVCComponent[pSrcAVCComponent->nPortIndex]; - - SEC_OSAL_Memcpy(pDstAVCComponent, pSrcAVCComponent, sizeof(OMX_VIDEO_PARAM_AVCTYPE)); - } - break; - case OMX_IndexParamStandardComponentRole: - { - OMX_PARAM_COMPONENTROLETYPE *pComponentRole = (OMX_PARAM_COMPONENTROLETYPE*)pComponentParameterStructure; - - ret = SEC_OMX_Check_SizeVersion(pComponentRole, sizeof(OMX_PARAM_COMPONENTROLETYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if ((pSECComponent->currentState != OMX_StateLoaded) && (pSECComponent->currentState != OMX_StateWaitForResources)) { - ret = OMX_ErrorIncorrectStateOperation; - goto EXIT; - } - - if (!SEC_OSAL_Strcmp((char*)pComponentRole->cRole, SEC_OMX_COMPONENT_H264_ENC_ROLE)) { - pSECComponent->pSECPort[OUTPUT_PORT_INDEX].portDefinition.format.video.eCompressionFormat = OMX_VIDEO_CodingAVC; - } else { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - } - break; - case OMX_IndexParamVideoProfileLevelCurrent: - { - OMX_VIDEO_PARAM_PROFILELEVELTYPE *pSrcProfileLevel = (OMX_VIDEO_PARAM_PROFILELEVELTYPE *)pComponentParameterStructure; - OMX_VIDEO_PARAM_AVCTYPE *pDstAVCComponent = NULL; - SEC_H264ENC_HANDLE *pH264Enc = NULL; - - ret = SEC_OMX_Check_SizeVersion(pSrcProfileLevel, sizeof(OMX_VIDEO_PARAM_PROFILELEVELTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pSrcProfileLevel->nPortIndex >= ALL_PORT_NUM) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - pH264Enc = (SEC_H264ENC_HANDLE *)pSECComponent->hCodecHandle; - - pDstAVCComponent = &pH264Enc->AVCComponent[pSrcProfileLevel->nPortIndex]; - pDstAVCComponent->eProfile = pSrcProfileLevel->eProfile; - pDstAVCComponent->eLevel = pSrcProfileLevel->eLevel; - } - break; - case OMX_IndexParamVideoErrorCorrection: - { - OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE *pSrcErrorCorrectionType = (OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE *)pComponentParameterStructure; - OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE *pDstErrorCorrectionType = NULL; - SEC_H264ENC_HANDLE *pH264Enc = NULL; - - ret = SEC_OMX_Check_SizeVersion(pSrcErrorCorrectionType, sizeof(OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pSrcErrorCorrectionType->nPortIndex != OUTPUT_PORT_INDEX) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - pH264Enc = (SEC_H264ENC_HANDLE *)pSECComponent->hCodecHandle; - pDstErrorCorrectionType = &pH264Enc->errorCorrectionType[OUTPUT_PORT_INDEX]; - - pDstErrorCorrectionType->bEnableHEC = pSrcErrorCorrectionType->bEnableHEC; - pDstErrorCorrectionType->bEnableResync = pSrcErrorCorrectionType->bEnableResync; - pDstErrorCorrectionType->nResynchMarkerSpacing = pSrcErrorCorrectionType->nResynchMarkerSpacing; - pDstErrorCorrectionType->bEnableDataPartitioning = pSrcErrorCorrectionType->bEnableDataPartitioning; - pDstErrorCorrectionType->bEnableRVLC = pSrcErrorCorrectionType->bEnableRVLC; - } - break; - default: - ret = SEC_OMX_VideoEncodeSetParameter(hComponent, nIndex, pComponentParameterStructure); - break; - } -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_MFC_H264Enc_GetConfig( - OMX_HANDLETYPE hComponent, - OMX_INDEXTYPE nIndex, - OMX_PTR pComponentConfigStructure) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - if (pComponentConfigStructure == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - if (pSECComponent->currentState == OMX_StateInvalid) { - ret = OMX_ErrorInvalidState; - goto EXIT; - } - - switch (nIndex) { - default: - ret = SEC_OMX_GetConfig(hComponent, nIndex, pComponentConfigStructure); - break; - } - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_MFC_H264Enc_SetConfig( - OMX_HANDLETYPE hComponent, - OMX_INDEXTYPE nIndex, - OMX_PTR pComponentConfigStructure) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - - FunctionIn(); - - if (hComponent == NULL || pComponentConfigStructure == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - if (pSECComponent->currentState == OMX_StateInvalid) { - ret = OMX_ErrorInvalidState; - goto EXIT; - } - - switch (nIndex) { - default: - ret = SEC_OMX_SetConfig(hComponent, nIndex, pComponentConfigStructure); - break; - } - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_MFC_H264Enc_GetExtensionIndex( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_STRING cParameterName, - OMX_OUT OMX_INDEXTYPE *pIndexType) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - if ((cParameterName == NULL) || (pIndexType == NULL)) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - if (pSECComponent->currentState == OMX_StateInvalid) { - ret = OMX_ErrorInvalidState; - goto EXIT; - } - -#ifdef USE_ANDROID_EXTENSION - if (SEC_OSAL_Strcmp(cParameterName, SEC_INDEX_PARAM_STORE_METADATA_BUFFER) == 0) { - *pIndexType = OMX_IndexParamStoreMetaDataBuffer; - ret = OMX_ErrorNone; - } else { - ret = SEC_OMX_GetExtensionIndex(hComponent, cParameterName, pIndexType); - } -#else - ret = SEC_OMX_GetExtensionIndex(hComponent, cParameterName, pIndexType); -#endif - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_MFC_H264Enc_ComponentRoleEnum(OMX_HANDLETYPE hComponent, OMX_U8 *cRole, OMX_U32 nIndex) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - - FunctionIn(); - - if ((hComponent == NULL) || (cRole == NULL)) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - if (nIndex == (MAX_COMPONENT_ROLE_NUM-1)) { - SEC_OSAL_Strcpy((char *)cRole, SEC_OMX_COMPONENT_H264_ENC_ROLE); - ret = OMX_ErrorNone; - } else { - ret = OMX_ErrorNoMore; - } - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_MFC_EncodeThread(OMX_HANDLETYPE hComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_H264ENC_HANDLE *pH264Enc = NULL; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - pH264Enc = (SEC_H264ENC_HANDLE *)pSECComponent->hCodecHandle; - - while (pH264Enc->NBEncThread.bExitEncodeThread == OMX_FALSE) { - SEC_OSAL_SemaphoreWait(pH264Enc->NBEncThread.hEncFrameStart); - - if (pH264Enc->NBEncThread.bExitEncodeThread == OMX_FALSE) { - pH264Enc->hMFCH264Handle.returnCodec = SsbSipMfcEncExe(pH264Enc->hMFCH264Handle.hMFCHandle); - SEC_OSAL_SemaphorePost(pH264Enc->NBEncThread.hEncFrameEnd); - } - } - -EXIT: - FunctionOut(); - SEC_OSAL_ThreadExit(NULL); - - return ret; -} - -/* MFC Init */ -OMX_ERRORTYPE SEC_MFC_H264Enc_Init(OMX_COMPONENTTYPE *pOMXComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASECOMPONENT *pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - SEC_OMX_BASEPORT *pSECInputPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - SEC_OMX_BASEPORT *pSECOutputPort = &pSECComponent->pSECPort[OUTPUT_PORT_INDEX]; - SEC_H264ENC_HANDLE *pH264Enc = NULL; - OMX_PTR hMFCHandle = NULL; - OMX_S32 returnCodec = 0; - - FunctionIn(); - - pH264Enc = (SEC_H264ENC_HANDLE *)pSECComponent->hCodecHandle; - pH264Enc->hMFCH264Handle.bConfiguredMFC = OMX_FALSE; - pSECComponent->bUseFlagEOF = OMX_FALSE; - pSECComponent->bSaveFlagEOS = OMX_FALSE; - - /* MFC(Multi Function Codec) encoder and CMM(Codec Memory Management) driver open */ - SSBIP_MFC_BUFFER_TYPE buf_type = CACHE; - hMFCHandle = (OMX_PTR)SsbSipMfcEncOpen(&buf_type); - if (hMFCHandle == NULL) { - ret = OMX_ErrorInsufficientResources; - goto EXIT; - } - pH264Enc->hMFCH264Handle.hMFCHandle = hMFCHandle; - - SsbSipMfcEncSetSize(hMFCHandle, H264_ENC, - pSECOutputPort->portDefinition.format.video.nFrameWidth, - pSECOutputPort->portDefinition.format.video.nFrameHeight); - - /* Allocate encoder's input buffer */ - returnCodec = SsbSipMfcEncGetInBuf(hMFCHandle, &(pH264Enc->hMFCH264Handle.inputInfo)); - if (returnCodec != MFC_RET_OK) { - ret = OMX_ErrorInsufficientResources; - goto EXIT; - } - pH264Enc->MFCEncInputBuffer[0].YPhyAddr = pH264Enc->hMFCH264Handle.inputInfo.YPhyAddr; - pH264Enc->MFCEncInputBuffer[0].CPhyAddr = pH264Enc->hMFCH264Handle.inputInfo.CPhyAddr; - pH264Enc->MFCEncInputBuffer[0].YVirAddr = pH264Enc->hMFCH264Handle.inputInfo.YVirAddr; - pH264Enc->MFCEncInputBuffer[0].CVirAddr = pH264Enc->hMFCH264Handle.inputInfo.CVirAddr; - pH264Enc->MFCEncInputBuffer[0].YBufferSize = pH264Enc->hMFCH264Handle.inputInfo.YSize; - pH264Enc->MFCEncInputBuffer[0].CBufferSize = pH264Enc->hMFCH264Handle.inputInfo.CSize; - pH264Enc->MFCEncInputBuffer[0].YDataSize = 0; - pH264Enc->MFCEncInputBuffer[0].CDataSize = 0; - SEC_OSAL_Log(SEC_LOG_TRACE, "pH264Enc->hMFCH264Handle.inputInfo.YVirAddr : 0x%x", pH264Enc->hMFCH264Handle.inputInfo.YVirAddr); - SEC_OSAL_Log(SEC_LOG_TRACE, "pH264Enc->hMFCH264Handle.inputInfo.CVirAddr : 0x%x", pH264Enc->hMFCH264Handle.inputInfo.CVirAddr); - - returnCodec = SsbSipMfcEncGetInBuf(hMFCHandle, &(pH264Enc->hMFCH264Handle.inputInfo)); - if (returnCodec != MFC_RET_OK) { - ret = OMX_ErrorInsufficientResources; - goto EXIT; - } - pH264Enc->MFCEncInputBuffer[1].YPhyAddr = pH264Enc->hMFCH264Handle.inputInfo.YPhyAddr; - pH264Enc->MFCEncInputBuffer[1].CPhyAddr = pH264Enc->hMFCH264Handle.inputInfo.CPhyAddr; - pH264Enc->MFCEncInputBuffer[1].YVirAddr = pH264Enc->hMFCH264Handle.inputInfo.YVirAddr; - pH264Enc->MFCEncInputBuffer[1].CVirAddr = pH264Enc->hMFCH264Handle.inputInfo.CVirAddr; - pH264Enc->MFCEncInputBuffer[1].YBufferSize = pH264Enc->hMFCH264Handle.inputInfo.YSize; - pH264Enc->MFCEncInputBuffer[1].CBufferSize = pH264Enc->hMFCH264Handle.inputInfo.CSize; - pH264Enc->MFCEncInputBuffer[1].YDataSize = 0; - pH264Enc->MFCEncInputBuffer[1].CDataSize = 0; - SEC_OSAL_Log(SEC_LOG_TRACE, "pH264Enc->hMFCH264Handle.inputInfo.YVirAddr : 0x%x", pH264Enc->hMFCH264Handle.inputInfo.YVirAddr); - SEC_OSAL_Log(SEC_LOG_TRACE, "pH264Enc->hMFCH264Handle.inputInfo.CVirAddr : 0x%x", pH264Enc->hMFCH264Handle.inputInfo.CVirAddr); - - pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.YPhyAddr = pH264Enc->MFCEncInputBuffer[0].YPhyAddr; - pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.CPhyAddr = pH264Enc->MFCEncInputBuffer[0].CPhyAddr; - pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.YVirAddr = pH264Enc->MFCEncInputBuffer[0].YVirAddr; - pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.CVirAddr = pH264Enc->MFCEncInputBuffer[0].CVirAddr; - pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.YSize = pH264Enc->MFCEncInputBuffer[0].YBufferSize; - pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.CSize = pH264Enc->MFCEncInputBuffer[0].CBufferSize; - - pH264Enc->indexInputBuffer = 0; - pH264Enc->bFirstFrame = OMX_TRUE; - - pH264Enc->NBEncThread.bExitEncodeThread = OMX_FALSE; - pH264Enc->NBEncThread.bEncoderRun = OMX_FALSE; - SEC_OSAL_SemaphoreCreate(&(pH264Enc->NBEncThread.hEncFrameStart)); - SEC_OSAL_SemaphoreCreate(&(pH264Enc->NBEncThread.hEncFrameEnd)); - if (OMX_ErrorNone == SEC_OSAL_ThreadCreate(&pH264Enc->NBEncThread.hNBEncodeThread, - SEC_MFC_EncodeThread, - pOMXComponent)) { - pH264Enc->hMFCH264Handle.returnCodec = MFC_RET_OK; - } - - SEC_OSAL_Memset(pSECComponent->timeStamp, -19771003, sizeof(OMX_TICKS) * MAX_TIMESTAMP); - SEC_OSAL_Memset(pSECComponent->nFlags, 0, sizeof(OMX_U32) * MAX_FLAGS); - pH264Enc->hMFCH264Handle.indexTimestamp = 0; - -EXIT: - FunctionOut(); - - return ret; -} - -/* MFC Terminate */ -OMX_ERRORTYPE SEC_MFC_H264Enc_Terminate(OMX_COMPONENTTYPE *pOMXComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASECOMPONENT *pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - SEC_H264ENC_HANDLE *pH264Enc = NULL; - OMX_PTR hMFCHandle = NULL; - - FunctionIn(); - - pH264Enc = (SEC_H264ENC_HANDLE *)pSECComponent->hCodecHandle; - - if (pH264Enc->NBEncThread.hNBEncodeThread != NULL) { - pH264Enc->NBEncThread.bExitEncodeThread = OMX_TRUE; - SEC_OSAL_SemaphorePost(pH264Enc->NBEncThread.hEncFrameStart); - SEC_OSAL_ThreadTerminate(pH264Enc->NBEncThread.hNBEncodeThread); - pH264Enc->NBEncThread.hNBEncodeThread = NULL; - } - - if(pH264Enc->NBEncThread.hEncFrameEnd != NULL) { - SEC_OSAL_SemaphoreTerminate(pH264Enc->NBEncThread.hEncFrameEnd); - pH264Enc->NBEncThread.hEncFrameEnd = NULL; - } - - if(pH264Enc->NBEncThread.hEncFrameStart != NULL) { - SEC_OSAL_SemaphoreTerminate(pH264Enc->NBEncThread.hEncFrameStart); - pH264Enc->NBEncThread.hEncFrameStart = NULL; - } - - hMFCHandle = pH264Enc->hMFCH264Handle.hMFCHandle; - if (hMFCHandle != NULL) { - SsbSipMfcEncClose(hMFCHandle); - hMFCHandle = pH264Enc->hMFCH264Handle.hMFCHandle = NULL; - } - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_MFC_H264_Encode(OMX_COMPONENTTYPE *pOMXComponent, SEC_OMX_DATA *pInputData, SEC_OMX_DATA *pOutputData) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASECOMPONENT *pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - SEC_H264ENC_HANDLE *pH264Enc = (SEC_H264ENC_HANDLE *)pSECComponent->hCodecHandle; - SSBSIP_MFC_ENC_INPUT_INFO *pInputInfo = &pH264Enc->hMFCH264Handle.inputInfo; - SSBSIP_MFC_ENC_OUTPUT_INFO outputInfo; - SEC_OMX_BASEPORT *pSECPort = NULL; - MFC_ENC_ADDR_INFO addrInfo; - OMX_U32 oneFrameSize = pInputData->dataLen; - - FunctionIn(); - - if (pH264Enc->hMFCH264Handle.bConfiguredMFC == OMX_FALSE) { - Set_H264ENC_Param(&(pH264Enc->hMFCH264Handle.mfcVideoAvc), pSECComponent); - pH264Enc->hMFCH264Handle.returnCodec = SsbSipMfcEncInit(pH264Enc->hMFCH264Handle.hMFCHandle, &(pH264Enc->hMFCH264Handle.mfcVideoAvc)); - if (pH264Enc->hMFCH264Handle.returnCodec != MFC_RET_OK) { - ret = OMX_ErrorInsufficientResources; - goto EXIT; - } - - pH264Enc->hMFCH264Handle.returnCodec = SsbSipMfcEncGetOutBuf(pH264Enc->hMFCH264Handle.hMFCHandle, &outputInfo); - if (pH264Enc->hMFCH264Handle.returnCodec != MFC_RET_OK) - { - SEC_OSAL_Log(SEC_LOG_TRACE, "%s - SsbSipMfcEncGetOutBuf Failed\n", __func__); - ret = OMX_ErrorUndefined; - goto EXIT; - } else { - char *p = NULL; - int iSpsSize = 0; - int iPpsSize = 0; - - p = FindDelimiter((OMX_U8 *)outputInfo.StrmVirAddr + 4, outputInfo.headerSize - 4); - - iSpsSize = (unsigned int)p - (unsigned int)outputInfo.StrmVirAddr; - pH264Enc->hMFCH264Handle.headerData.pHeaderSPS = (OMX_PTR)outputInfo.StrmVirAddr; - pH264Enc->hMFCH264Handle.headerData.SPSLen = iSpsSize; - - iPpsSize = outputInfo.headerSize - iSpsSize; - pH264Enc->hMFCH264Handle.headerData.pHeaderPPS = outputInfo.StrmVirAddr + iSpsSize; - pH264Enc->hMFCH264Handle.headerData.PPSLen = iPpsSize; - } - - /* SEC_OSAL_Memcpy((void*)(pOutputData->dataBuffer), (const void*)(outputInfo.StrmVirAddr), outputInfo.headerSize); */ - pOutputData->dataBuffer = outputInfo.StrmVirAddr; - pOutputData->allocSize = outputInfo.headerSize; - pOutputData->dataLen = outputInfo.headerSize; - pOutputData->timeStamp = 0; - pOutputData->nFlags |= OMX_BUFFERFLAG_CODECCONFIG; - pOutputData->nFlags |= OMX_BUFFERFLAG_ENDOFFRAME; - - pH264Enc->hMFCH264Handle.bConfiguredMFC = OMX_TRUE; - - ret = OMX_ErrorInputDataEncodeYet; - goto EXIT; - } - - if ((pInputData->nFlags & OMX_BUFFERFLAG_ENDOFFRAME) && - (pSECComponent->bUseFlagEOF == OMX_FALSE)) { - pSECComponent->bUseFlagEOF = OMX_TRUE; - } - - if (oneFrameSize <= 0) { - pOutputData->timeStamp = pInputData->timeStamp; - pOutputData->nFlags = pInputData->nFlags; - - ret = OMX_ErrorNone; - goto EXIT; - } - - pSECPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - if (((pInputData->nFlags & OMX_BUFFERFLAG_EOS) == OMX_BUFFERFLAG_EOS) || - (pSECComponent->getAllDelayBuffer == OMX_TRUE)){ - /* Dummy input data for get out encoded last frame */ - pInputInfo->YPhyAddr = pH264Enc->MFCEncInputBuffer[pH264Enc->indexInputBuffer].YPhyAddr; - pInputInfo->CPhyAddr = pH264Enc->MFCEncInputBuffer[pH264Enc->indexInputBuffer].CPhyAddr; - pInputInfo->YVirAddr = pH264Enc->MFCEncInputBuffer[pH264Enc->indexInputBuffer].YVirAddr; - pInputInfo->CVirAddr = pH264Enc->MFCEncInputBuffer[pH264Enc->indexInputBuffer].CVirAddr; - } else if (pSECPort->portDefinition.format.video.eColorFormat == OMX_SEC_COLOR_FormatNV12TPhysicalAddress) { - SEC_OSAL_Memcpy(&addrInfo.pAddrY, pInputData->dataBuffer, sizeof(addrInfo.pAddrY)); - SEC_OSAL_Memcpy(&addrInfo.pAddrC, pInputData->dataBuffer + sizeof(addrInfo.pAddrY), sizeof(addrInfo.pAddrC)); - pInputInfo->YPhyAddr = addrInfo.pAddrY; - pInputInfo->CPhyAddr = addrInfo.pAddrC; -#ifdef USE_ANDROID_EXTENSION - } else if (pSECPort->bStoreMetaDataInBuffer != OMX_FALSE) { - ret = preprocessMetaDataInBuffers(pOMXComponent, pInputData->dataBuffer, pInputInfo); - if (ret != OMX_ErrorNone) - goto EXIT; -#endif - } else { - /* Real input data */ - pInputInfo->YPhyAddr = pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.YPhyAddr; - pInputInfo->CPhyAddr = pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.CPhyAddr; - } - - pSECComponent->timeStamp[pH264Enc->hMFCH264Handle.indexTimestamp] = pInputData->timeStamp; - pSECComponent->nFlags[pH264Enc->hMFCH264Handle.indexTimestamp] = pInputData->nFlags; - - if ((pH264Enc->hMFCH264Handle.returnCodec == MFC_RET_OK) && - (pH264Enc->bFirstFrame == OMX_FALSE)) { - OMX_S32 indexTimestamp = 0; - - /* wait for mfc encode done */ - if (pH264Enc->NBEncThread.bEncoderRun != OMX_FALSE) { - SEC_OSAL_SemaphoreWait(pH264Enc->NBEncThread.hEncFrameEnd); - pH264Enc->NBEncThread.bEncoderRun = OMX_FALSE; - } - - pH264Enc->hMFCH264Handle.returnCodec = SsbSipMfcEncGetOutBuf(pH264Enc->hMFCH264Handle.hMFCHandle, &outputInfo); - if ((SsbSipMfcEncGetConfig(pH264Enc->hMFCH264Handle.hMFCHandle, MFC_ENC_GETCONF_FRAME_TAG, &indexTimestamp) != MFC_RET_OK) || - (((indexTimestamp < 0) || (indexTimestamp >= MAX_TIMESTAMP)))){ - pOutputData->timeStamp = pInputData->timeStamp; - pOutputData->nFlags = pInputData->nFlags; - } else { - pOutputData->timeStamp = pSECComponent->timeStamp[indexTimestamp]; - pOutputData->nFlags = pSECComponent->nFlags[indexTimestamp]; - } - - if (pH264Enc->hMFCH264Handle.returnCodec == MFC_RET_OK) { - /** Fill Output Buffer **/ - pOutputData->dataBuffer = outputInfo.StrmVirAddr; - pOutputData->allocSize = outputInfo.dataSize; - pOutputData->dataLen = outputInfo.dataSize; - pOutputData->usedDataLen = 0; - - pOutputData->nFlags |= OMX_BUFFERFLAG_ENDOFFRAME; - if (outputInfo.frameType == MFC_FRAME_TYPE_I_FRAME) - pOutputData->nFlags |= OMX_BUFFERFLAG_SYNCFRAME; - - SEC_OSAL_Log(SEC_LOG_TRACE, "MFC Encode OK!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); - - ret = OMX_ErrorNone; - } else { - SEC_OSAL_Log(SEC_LOG_ERROR, "%s: SsbSipMfcEncGetOutBuf failed, ret:%d", __FUNCTION__, pH264Enc->hMFCH264Handle.returnCodec); - ret = OMX_ErrorUndefined; - goto EXIT; - } - - if (pSECComponent->getAllDelayBuffer == OMX_TRUE) { - ret = OMX_ErrorInputDataEncodeYet; - } - if ((pInputData->nFlags & OMX_BUFFERFLAG_EOS) == OMX_BUFFERFLAG_EOS) { - pInputData->nFlags = (pOutputData->nFlags & (~OMX_BUFFERFLAG_EOS)); - pSECComponent->getAllDelayBuffer = OMX_TRUE; - ret = OMX_ErrorInputDataEncodeYet; - } - if ((pOutputData->nFlags & OMX_BUFFERFLAG_EOS) == OMX_BUFFERFLAG_EOS) { - pSECComponent->getAllDelayBuffer = OMX_FALSE; - pOutputData->dataLen = 0; - pOutputData->usedDataLen = 0; - SEC_OSAL_Log(SEC_LOG_TRACE, "OMX_BUFFERFLAG_EOS!!!"); - ret = OMX_ErrorNone; - } - } - if (pH264Enc->hMFCH264Handle.returnCodec != MFC_RET_OK) { - SEC_OSAL_Log(SEC_LOG_ERROR, "In %s : SsbSipMfcEncExe Failed!!!\n", __func__); - ret = OMX_ErrorUndefined; - } - - pH264Enc->hMFCH264Handle.returnCodec = SsbSipMfcEncSetInBuf(pH264Enc->hMFCH264Handle.hMFCHandle, pInputInfo); - if (pH264Enc->hMFCH264Handle.returnCodec != MFC_RET_OK) { - SEC_OSAL_Log(SEC_LOG_TRACE, "Error : SsbSipMfcEncSetInBuf() \n"); - ret = OMX_ErrorUndefined; - goto EXIT; - } else { - pH264Enc->indexInputBuffer++; - pH264Enc->indexInputBuffer %= MFC_INPUT_BUFFER_NUM_MAX; - pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.YPhyAddr = pH264Enc->MFCEncInputBuffer[pH264Enc->indexInputBuffer].YPhyAddr; - pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.CPhyAddr = pH264Enc->MFCEncInputBuffer[pH264Enc->indexInputBuffer].CPhyAddr; - pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.YVirAddr = pH264Enc->MFCEncInputBuffer[pH264Enc->indexInputBuffer].YVirAddr; - pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.CVirAddr = pH264Enc->MFCEncInputBuffer[pH264Enc->indexInputBuffer].CVirAddr; - pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.YSize = pH264Enc->MFCEncInputBuffer[pH264Enc->indexInputBuffer].YBufferSize; - pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.CSize = pH264Enc->MFCEncInputBuffer[pH264Enc->indexInputBuffer].CBufferSize; - } - - SsbSipMfcEncSetConfig(pH264Enc->hMFCH264Handle.hMFCHandle, MFC_ENC_SETCONF_FRAME_TAG, &(pH264Enc->hMFCH264Handle.indexTimestamp)); - - /* mfc encode start */ - SEC_OSAL_SemaphorePost(pH264Enc->NBEncThread.hEncFrameStart); - pH264Enc->NBEncThread.bEncoderRun = OMX_TRUE; - pH264Enc->hMFCH264Handle.indexTimestamp++; - pH264Enc->hMFCH264Handle.indexTimestamp %= MAX_TIMESTAMP; - pH264Enc->bFirstFrame = OMX_FALSE; - -EXIT: - FunctionOut(); - - return ret; -} - -/* MFC Encode */ -OMX_ERRORTYPE SEC_MFC_H264Enc_bufferProcess(OMX_COMPONENTTYPE *pOMXComponent, SEC_OMX_DATA *pInputData, SEC_OMX_DATA *pOutputData) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASECOMPONENT *pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - SEC_H264ENC_HANDLE *pH264Enc = (SEC_H264ENC_HANDLE *)pSECComponent->hCodecHandle; - SEC_OMX_BASEPORT *pSECInputPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - SEC_OMX_BASEPORT *pSECOutputPort = &pSECComponent->pSECPort[OUTPUT_PORT_INDEX]; - OMX_BOOL endOfFrame = OMX_FALSE; - OMX_BOOL flagEOS = OMX_FALSE; - - FunctionIn(); - - if ((!CHECK_PORT_ENABLED(pSECInputPort)) || (!CHECK_PORT_ENABLED(pSECOutputPort)) || - (!CHECK_PORT_POPULATED(pSECInputPort)) || (!CHECK_PORT_POPULATED(pSECOutputPort))) { - ret = OMX_ErrorNone; - goto EXIT; - } - if (OMX_FALSE == SEC_Check_BufferProcess_State(pSECComponent)) { - ret = OMX_ErrorNone; - goto EXIT; - } - - ret = SEC_MFC_H264_Encode(pOMXComponent, pInputData, pOutputData); - if (ret != OMX_ErrorNone) { - if (ret == OMX_ErrorInputDataEncodeYet) { - pOutputData->usedDataLen = 0; - pOutputData->remainDataLen = pOutputData->dataLen; - } else { - pSECComponent->pCallbacks->EventHandler((OMX_HANDLETYPE)pOMXComponent, - pSECComponent->callbackData, - OMX_EventError, ret, 0, NULL); - } - } else { - pInputData->usedDataLen += pInputData->dataLen; - pInputData->remainDataLen = pInputData->dataLen - pInputData->usedDataLen; - pInputData->dataLen -= pInputData->usedDataLen; - pInputData->usedDataLen = 0; - - /* pOutputData->usedDataLen = 0; */ - pOutputData->remainDataLen = pOutputData->dataLen - pOutputData->usedDataLen; - } - -EXIT: - FunctionOut(); - - return ret; -} - -OSCL_EXPORT_REF OMX_ERRORTYPE SEC_OMX_ComponentInit(OMX_HANDLETYPE hComponent, OMX_STRING componentName) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_OMX_BASEPORT *pSECPort = NULL; - SEC_H264ENC_HANDLE *pH264Enc = NULL; - int i = 0; - - FunctionIn(); - - if ((hComponent == NULL) || (componentName == NULL)) { - ret = OMX_ErrorBadParameter; - SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorBadParameter, Line:%d", __LINE__); - goto EXIT; - } - if (SEC_OSAL_Strcmp(SEC_OMX_COMPONENT_H264_ENC, componentName) != 0) { - ret = OMX_ErrorBadParameter; - SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorBadParameter, componentName:%s, Line:%d", componentName, __LINE__); - goto EXIT; - } - - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_VideoEncodeComponentInit(pOMXComponent); - if (ret != OMX_ErrorNone) { - SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_Error, Line:%d", __LINE__); - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - pSECComponent->codecType = HW_VIDEO_CODEC; - - pSECComponent->componentName = (OMX_STRING)SEC_OSAL_Malloc(MAX_OMX_COMPONENT_NAME_SIZE); - if (pSECComponent->componentName == NULL) { - SEC_OMX_VideoEncodeComponentDeinit(pOMXComponent); - ret = OMX_ErrorInsufficientResources; - SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorInsufficientResources, Line:%d", __LINE__); - goto EXIT; - } - SEC_OSAL_Memset(pSECComponent->componentName, 0, MAX_OMX_COMPONENT_NAME_SIZE); - - pH264Enc = SEC_OSAL_Malloc(sizeof(SEC_H264ENC_HANDLE)); - if (pH264Enc == NULL) { - SEC_OMX_VideoEncodeComponentDeinit(pOMXComponent); - ret = OMX_ErrorInsufficientResources; - SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorInsufficientResources, Line:%d", __LINE__); - goto EXIT; - } - SEC_OSAL_Memset(pH264Enc, 0, sizeof(SEC_H264ENC_HANDLE)); - pSECComponent->hCodecHandle = (OMX_HANDLETYPE)pH264Enc; - - SEC_OSAL_Strcpy(pSECComponent->componentName, SEC_OMX_COMPONENT_H264_ENC); - /* Set componentVersion */ - pSECComponent->componentVersion.s.nVersionMajor = VERSIONMAJOR_NUMBER; - pSECComponent->componentVersion.s.nVersionMinor = VERSIONMINOR_NUMBER; - pSECComponent->componentVersion.s.nRevision = REVISION_NUMBER; - pSECComponent->componentVersion.s.nStep = STEP_NUMBER; - /* Set specVersion */ - pSECComponent->specVersion.s.nVersionMajor = VERSIONMAJOR_NUMBER; - pSECComponent->specVersion.s.nVersionMinor = VERSIONMINOR_NUMBER; - pSECComponent->specVersion.s.nRevision = REVISION_NUMBER; - pSECComponent->specVersion.s.nStep = STEP_NUMBER; - - /* Android CapabilityFlags */ - pSECComponent->capabilityFlags.iIsOMXComponentMultiThreaded = OMX_TRUE; - pSECComponent->capabilityFlags.iOMXComponentSupportsExternalInputBufferAlloc = OMX_TRUE; - pSECComponent->capabilityFlags.iOMXComponentSupportsExternalOutputBufferAlloc = OMX_TRUE; - pSECComponent->capabilityFlags.iOMXComponentSupportsMovableInputBuffers = OMX_FALSE; - pSECComponent->capabilityFlags.iOMXComponentSupportsPartialFrames = OMX_FALSE; - pSECComponent->capabilityFlags.iOMXComponentUsesNALStartCodes = OMX_TRUE; - pSECComponent->capabilityFlags.iOMXComponentCanHandleIncompleteFrames = OMX_TRUE; - pSECComponent->capabilityFlags.iOMXComponentUsesFullAVCFrames = OMX_TRUE; - - /* Input port */ - pSECPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - pSECPort->portDefinition.format.video.nFrameWidth = DEFAULT_FRAME_WIDTH; - pSECPort->portDefinition.format.video.nFrameHeight= DEFAULT_FRAME_HEIGHT; - pSECPort->portDefinition.format.video.nStride = 0; /*DEFAULT_FRAME_WIDTH;*/ - pSECPort->portDefinition.nBufferSize = DEFAULT_VIDEO_INPUT_BUFFER_SIZE; - pSECPort->portDefinition.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused; - SEC_OSAL_Memset(pSECPort->portDefinition.format.video.cMIMEType, 0, MAX_OMX_MIMETYPE_SIZE); - SEC_OSAL_Strcpy(pSECPort->portDefinition.format.video.cMIMEType, "raw/video"); - pSECPort->portDefinition.format.video.eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar; - pSECPort->portDefinition.bEnabled = OMX_TRUE; - - /* Output port */ - pSECPort = &pSECComponent->pSECPort[OUTPUT_PORT_INDEX]; - pSECPort->portDefinition.format.video.nFrameWidth = DEFAULT_FRAME_WIDTH; - pSECPort->portDefinition.format.video.nFrameHeight= DEFAULT_FRAME_HEIGHT; - pSECPort->portDefinition.format.video.nStride = 0; /*DEFAULT_FRAME_WIDTH;*/ - pSECPort->portDefinition.nBufferSize = DEFAULT_VIDEO_OUTPUT_BUFFER_SIZE; - pSECPort->portDefinition.format.video.eCompressionFormat = OMX_VIDEO_CodingAVC; - SEC_OSAL_Memset(pSECPort->portDefinition.format.video.cMIMEType, 0, MAX_OMX_MIMETYPE_SIZE); - SEC_OSAL_Strcpy(pSECPort->portDefinition.format.video.cMIMEType, "video/avc"); - pSECPort->portDefinition.format.video.eColorFormat = OMX_COLOR_FormatUnused; - pSECPort->portDefinition.bEnabled = OMX_TRUE; - - for(i = 0; i < ALL_PORT_NUM; i++) { - INIT_SET_SIZE_VERSION(&pH264Enc->AVCComponent[i], OMX_VIDEO_PARAM_AVCTYPE); - pH264Enc->AVCComponent[i].nPortIndex = i; - pH264Enc->AVCComponent[i].eProfile = OMX_VIDEO_AVCProfileBaseline; - pH264Enc->AVCComponent[i].eLevel = OMX_VIDEO_AVCLevel31; - } - - pOMXComponent->GetParameter = &SEC_MFC_H264Enc_GetParameter; - pOMXComponent->SetParameter = &SEC_MFC_H264Enc_SetParameter; - pOMXComponent->GetConfig = &SEC_MFC_H264Enc_GetConfig; - pOMXComponent->SetConfig = &SEC_MFC_H264Enc_SetConfig; - pOMXComponent->GetExtensionIndex = &SEC_MFC_H264Enc_GetExtensionIndex; - pOMXComponent->ComponentRoleEnum = &SEC_MFC_H264Enc_ComponentRoleEnum; - pOMXComponent->ComponentDeInit = &SEC_OMX_ComponentDeinit; - - pSECComponent->sec_mfc_componentInit = &SEC_MFC_H264Enc_Init; - pSECComponent->sec_mfc_componentTerminate = &SEC_MFC_H264Enc_Terminate; - pSECComponent->sec_mfc_bufferProcess = &SEC_MFC_H264Enc_bufferProcess; - pSECComponent->sec_checkInputFrame = NULL; - - pSECComponent->currentState = OMX_StateLoaded; - - ret = OMX_ErrorNone; - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_ComponentDeinit(OMX_HANDLETYPE hComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_H264ENC_HANDLE *pH264Enc = NULL; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - SEC_OSAL_Free(pSECComponent->componentName); - pSECComponent->componentName = NULL; - - pH264Enc = (SEC_H264ENC_HANDLE *)pSECComponent->hCodecHandle; - if (pH264Enc != NULL) { - SEC_OSAL_Free(pH264Enc); - pH264Enc = pSECComponent->hCodecHandle = NULL; - } - - ret = SEC_OMX_VideoEncodeComponentDeinit(pOMXComponent); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - ret = OMX_ErrorNone; - -EXIT: - FunctionOut(); - - return ret; -} diff --git a/sec_mm/sec_omx/sec_omx_component/video/enc/h264enc/SEC_OMX_H264enc.h b/sec_mm/sec_omx/sec_omx_component/video/enc/h264enc/SEC_OMX_H264enc.h deleted file mode 100644 index bdd525f..0000000 --- a/sec_mm/sec_omx/sec_omx_component/video/enc/h264enc/SEC_OMX_H264enc.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OMX_H264enc.h - * @brief - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#ifndef SEC_OMX_H264_ENC_COMPONENT -#define SEC_OMX_H264_ENC_COMPONENT - -#include "SEC_OMX_Def.h" -#include "OMX_Component.h" -#include "OMX_Video.h" -#include "SsbSipMfcApi.h" - - -typedef struct _EXTRA_DATA -{ - OMX_PTR pHeaderSPS; - OMX_U32 SPSLen; - OMX_PTR pHeaderPPS; - OMX_U32 PPSLen; -} EXTRA_DATA; - -typedef struct _SEC_MFC_H264ENC_HANDLE -{ - OMX_HANDLETYPE hMFCHandle; - SSBSIP_MFC_ENC_H264_PARAM mfcVideoAvc; - SSBSIP_MFC_ENC_INPUT_INFO inputInfo; -/* SSBSIP_MFC_ENC_OUTPUT_INFO outputInfo; */ - OMX_U32 indexTimestamp; - OMX_BOOL bConfiguredMFC; - EXTRA_DATA headerData; - OMX_S32 returnCodec; -} SEC_MFC_H264ENC_HANDLE; - -typedef struct _SEC_H264ENC_HANDLE -{ - /* OMX Codec specific */ - OMX_VIDEO_PARAM_AVCTYPE AVCComponent[ALL_PORT_NUM]; - OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE errorCorrectionType[ALL_PORT_NUM]; - - /* SEC MFC Codec specific */ - SEC_MFC_H264ENC_HANDLE hMFCH264Handle; - - /* For Non-Block mode */ - SEC_MFC_NBENC_THREAD NBEncThread; - OMX_BOOL bFirstFrame; - MFC_ENC_INPUT_BUFFER MFCEncInputBuffer[MFC_INPUT_BUFFER_NUM_MAX]; - OMX_U32 indexInputBuffer; -} SEC_H264ENC_HANDLE; - -#ifdef __cplusplus -extern "C" { -#endif - -OSCL_EXPORT_REF OMX_ERRORTYPE SEC_OMX_ComponentInit(OMX_HANDLETYPE hComponent, OMX_STRING componentName); -OMX_ERRORTYPE SEC_OMX_ComponentDeinit(OMX_HANDLETYPE hComponent); - -#ifdef __cplusplus -}; -#endif - -#endif diff --git a/sec_mm/sec_omx/sec_omx_component/video/enc/h264enc/library_register.c b/sec_mm/sec_omx/sec_omx_component/video/enc/h264enc/library_register.c deleted file mode 100644 index 247b38b..0000000 --- a/sec_mm/sec_omx/sec_omx_component/video/enc/h264enc/library_register.c +++ /dev/null @@ -1,55 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file library_register.c - * @brief - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#include -#include -#include -#include - -#include "SEC_OSAL_Memory.h" -#include "SEC_OSAL_ETC.h" -#include "library_register.h" -#include "SEC_OSAL_Log.h" - - -OSCL_EXPORT_REF int SEC_OMX_COMPONENT_Library_Register(SECRegisterComponentType **secComponents) -{ - FunctionIn(); - - if (secComponents == NULL) - goto EXIT; - - /* component 1 - video decoder H.264 */ - SEC_OSAL_Strcpy(secComponents[0]->componentName, SEC_OMX_COMPONENT_H264_ENC); - SEC_OSAL_Strcpy(secComponents[0]->roles[0], SEC_OMX_COMPONENT_H264_ENC_ROLE); - secComponents[0]->totalRoleNum = MAX_COMPONENT_ROLE_NUM; - -EXIT: - FunctionOut(); - - return MAX_COMPONENT_NUM; -} - diff --git a/sec_mm/sec_omx/sec_omx_component/video/enc/h264enc/library_register.h b/sec_mm/sec_omx/sec_omx_component/video/enc/h264enc/library_register.h deleted file mode 100644 index 6a176ad..0000000 --- a/sec_mm/sec_omx/sec_omx_component/video/enc/h264enc/library_register.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file library_register.h - * @brief - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#ifndef SEC_OMX_H264_REG -#define SEC_OMX_H264_REG - -#include "SEC_OMX_Def.h" -#include "OMX_Component.h" -#include "SEC_OMX_Component_Register.h" - - -#define OSCL_EXPORT_REF __attribute__((visibility("default"))) -#define MAX_COMPONENT_NUM 1 -#define MAX_COMPONENT_ROLE_NUM 1 - -/* H.264 */ -#define SEC_OMX_COMPONENT_H264_ENC "OMX.SEC.AVC.Encoder" -#define SEC_OMX_COMPONENT_H264_ENC_ROLE "video_encoder.avc" - - -#ifdef __cplusplus -extern "C" { -#endif - -OSCL_EXPORT_REF int SEC_OMX_COMPONENT_Library_Register(SECRegisterComponentType **secComponents); - -#ifdef __cplusplus -}; -#endif - -#endif - diff --git a/sec_mm/sec_omx/sec_omx_component/video/enc/mpeg4enc/Android.mk b/sec_mm/sec_omx/sec_omx_component/video/enc/mpeg4enc/Android.mk deleted file mode 100644 index e00dd1c..0000000 --- a/sec_mm/sec_omx/sec_omx_component/video/enc/mpeg4enc/Android.mk +++ /dev/null @@ -1,30 +0,0 @@ -LOCAL_PATH := $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := optional - -LOCAL_SRC_FILES := \ - SEC_OMX_Mpeg4enc.c \ - library_register.c - - -LOCAL_MODULE := libOMX.SEC.M4V.Encoder.aries - -LOCAL_CFLAGS := - -LOCAL_ARM_MODE := arm - -LOCAL_STATIC_LIBRARIES := libSEC_OMX_Venc.aries libsecosal.aries libsecbasecomponent.aries \ - libsecmfcencapi.aries libseccsc.aries -LOCAL_SHARED_LIBRARIES := libc libdl libcutils libutils libui libhardware - -LOCAL_C_INCLUDES := $(SEC_OMX_INC)/khronos \ - $(SEC_OMX_INC)/sec \ - $(SEC_OMX_TOP)/sec_osal \ - $(SEC_OMX_TOP)/sec_omx_core \ - $(SEC_OMX_COMPONENT)/common \ - $(SEC_OMX_COMPONENT)/video/enc - -LOCAL_C_INCLUDES += $(SEC_OMX_TOP)/sec_codecs/video/mfc_c110/include - -include $(BUILD_SHARED_LIBRARY) diff --git a/sec_mm/sec_omx/sec_omx_component/video/enc/mpeg4enc/SEC_OMX_Mpeg4enc.c b/sec_mm/sec_omx/sec_omx_component/video/enc/mpeg4enc/SEC_OMX_Mpeg4enc.c deleted file mode 100644 index 5213522..0000000 --- a/sec_mm/sec_omx/sec_omx_component/video/enc/mpeg4enc/SEC_OMX_Mpeg4enc.c +++ /dev/null @@ -1,1516 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OMX_Mpeg4enc.c - * @brief - * @author Yunji Kim (yunji.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - - -#include -#include -#include - -#include "SEC_OMX_Macros.h" -#include "SEC_OMX_Basecomponent.h" -#include "SEC_OMX_Baseport.h" -#include "SEC_OMX_Venc.h" -#include "library_register.h" -#include "SEC_OMX_Mpeg4enc.h" -#include "SsbSipMfcApi.h" -#include "color_space_convertor.h" - -#undef SEC_LOG_TAG -#define SEC_LOG_TAG "SEC_MPEG4_ENC" -#define SEC_LOG_OFF -#include "SEC_OSAL_Log.h" - - -/* MPEG4 Encoder Supported Levels & profiles */ -SEC_OMX_VIDEO_PROFILELEVEL supportedMPEG4ProfileLevels[] ={ - {OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level0}, - {OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level0b}, - {OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level1}, - {OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level2}, - {OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level3}, - {OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level4}, - {OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level4a}, - {OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level5}, - {OMX_VIDEO_MPEG4ProfileAdvancedSimple, OMX_VIDEO_MPEG4Level0}, - {OMX_VIDEO_MPEG4ProfileAdvancedSimple, OMX_VIDEO_MPEG4Level0b}, - {OMX_VIDEO_MPEG4ProfileAdvancedSimple, OMX_VIDEO_MPEG4Level1}, - {OMX_VIDEO_MPEG4ProfileAdvancedSimple, OMX_VIDEO_MPEG4Level2}, - {OMX_VIDEO_MPEG4ProfileAdvancedSimple, OMX_VIDEO_MPEG4Level3}, - {OMX_VIDEO_MPEG4ProfileAdvancedSimple, OMX_VIDEO_MPEG4Level4}, - {OMX_VIDEO_MPEG4ProfileAdvancedSimple, OMX_VIDEO_MPEG4Level4a}, - {OMX_VIDEO_MPEG4ProfileAdvancedSimple, OMX_VIDEO_MPEG4Level5}}; - -/* H.263 Encoder Supported Levels & profiles */ -SEC_OMX_VIDEO_PROFILELEVEL supportedH263ProfileLevels[] = { - {OMX_VIDEO_H263ProfileBaseline, OMX_VIDEO_H263Level10}, - {OMX_VIDEO_H263ProfileBaseline, OMX_VIDEO_H263Level20}, - {OMX_VIDEO_H263ProfileBaseline, OMX_VIDEO_H263Level30}, - {OMX_VIDEO_H263ProfileBaseline, OMX_VIDEO_H263Level40}, - {OMX_VIDEO_H263ProfileBaseline, OMX_VIDEO_H263Level45}, - {OMX_VIDEO_H263ProfileBaseline, OMX_VIDEO_H263Level50}, - {OMX_VIDEO_H263ProfileBaseline, OMX_VIDEO_H263Level60}, - {OMX_VIDEO_H263ProfileBaseline, OMX_VIDEO_H263Level70}}; - -OMX_U32 OMXMpeg4ProfileToMFCProfile(OMX_VIDEO_MPEG4PROFILETYPE profile) -{ - OMX_U32 ret; - - switch (profile) { - case OMX_VIDEO_MPEG4ProfileSimple: - ret = 0; - break; - case OMX_VIDEO_MPEG4ProfileAdvancedSimple: - ret = 1; - break; - default: - ret = 0; - }; - - return ret; -} -OMX_U32 OMXMpeg4LevelToMFCLevel(OMX_VIDEO_MPEG4LEVELTYPE level) -{ - OMX_U32 ret; - - switch (level) { - case OMX_VIDEO_MPEG4Level0: - ret = 0; - break; - case OMX_VIDEO_MPEG4Level0b: - ret = 9; - break; - case OMX_VIDEO_MPEG4Level1: - ret = 1; - break; - case OMX_VIDEO_MPEG4Level2: - ret = 2; - break; - case OMX_VIDEO_MPEG4Level3: - ret = 3; - break; - case OMX_VIDEO_MPEG4Level4: - case OMX_VIDEO_MPEG4Level4a: - ret = 4; - break; - case OMX_VIDEO_MPEG4Level5: - ret = 5; - break; - default: - ret = 0; - }; - - return ret; -} - -void Mpeg4PrintParams(SSBSIP_MFC_ENC_MPEG4_PARAM mpeg4Param) -{ - SEC_OSAL_Log(SEC_LOG_TRACE, "SourceWidth : %d\n", mpeg4Param.SourceWidth); - SEC_OSAL_Log(SEC_LOG_TRACE, "SourceHeight : %d\n", mpeg4Param.SourceHeight); - SEC_OSAL_Log(SEC_LOG_TRACE, "IDRPeriod : %d\n", mpeg4Param.IDRPeriod); - SEC_OSAL_Log(SEC_LOG_TRACE, "SliceMode : %d\n", mpeg4Param.SliceMode); - SEC_OSAL_Log(SEC_LOG_TRACE, "RandomIntraMBRefresh : %d\n", mpeg4Param.RandomIntraMBRefresh); - SEC_OSAL_Log(SEC_LOG_TRACE, "EnableFRMRateControl : %d\n", mpeg4Param.EnableFRMRateControl); - SEC_OSAL_Log(SEC_LOG_TRACE, "Bitrate : %d\n", mpeg4Param.Bitrate); - SEC_OSAL_Log(SEC_LOG_TRACE, "FrameQp : %d\n", mpeg4Param.FrameQp); - SEC_OSAL_Log(SEC_LOG_TRACE, "FrameQp_P : %d\n", mpeg4Param.FrameQp_P); - SEC_OSAL_Log(SEC_LOG_TRACE, "QSCodeMax : %d\n", mpeg4Param.QSCodeMax); - SEC_OSAL_Log(SEC_LOG_TRACE, "QSCodeMin : %d\n", mpeg4Param.QSCodeMin); - SEC_OSAL_Log(SEC_LOG_TRACE, "CBRPeriodRf : %d\n", mpeg4Param.CBRPeriodRf); - SEC_OSAL_Log(SEC_LOG_TRACE, "PadControlOn : %d\n", mpeg4Param.PadControlOn); - SEC_OSAL_Log(SEC_LOG_TRACE, "LumaPadVal : %d\n", mpeg4Param.LumaPadVal); - SEC_OSAL_Log(SEC_LOG_TRACE, "CbPadVal : %d\n", mpeg4Param.CbPadVal); - SEC_OSAL_Log(SEC_LOG_TRACE, "CrPadVal : %d\n", mpeg4Param.CrPadVal); - - /* MPEG4 specific parameters */ - SEC_OSAL_Log(SEC_LOG_TRACE, "ProfileIDC : %d\n", mpeg4Param.ProfileIDC); - SEC_OSAL_Log(SEC_LOG_TRACE, "LevelIDC : %d\n", mpeg4Param.LevelIDC); - SEC_OSAL_Log(SEC_LOG_TRACE, "FrameQp_B : %d\n", mpeg4Param.FrameQp_B); - SEC_OSAL_Log(SEC_LOG_TRACE, "TimeIncreamentRes : %d\n", mpeg4Param.TimeIncreamentRes); - SEC_OSAL_Log(SEC_LOG_TRACE, "VopTimeIncreament : %d\n", mpeg4Param.VopTimeIncreament); - SEC_OSAL_Log(SEC_LOG_TRACE, "SliceArgument : %d\n", mpeg4Param.SliceArgument); - SEC_OSAL_Log(SEC_LOG_TRACE, "NumberBFrames : %d\n", mpeg4Param.NumberBFrames); - SEC_OSAL_Log(SEC_LOG_TRACE, "DisableQpelME : %d\n", mpeg4Param.DisableQpelME); -} - -void H263PrintParams(SSBSIP_MFC_ENC_H263_PARAM h263Param) -{ - SEC_OSAL_Log(SEC_LOG_TRACE, "SourceWidth : %d\n", h263Param.SourceWidth); - SEC_OSAL_Log(SEC_LOG_TRACE, "SourceHeight : %d\n", h263Param.SourceHeight); - SEC_OSAL_Log(SEC_LOG_TRACE, "IDRPeriod : %d\n", h263Param.IDRPeriod); - SEC_OSAL_Log(SEC_LOG_TRACE, "SliceMode : %d\n", h263Param.SliceMode); - SEC_OSAL_Log(SEC_LOG_TRACE, "RandomIntraMBRefresh : %d\n", h263Param.RandomIntraMBRefresh); - SEC_OSAL_Log(SEC_LOG_TRACE, "EnableFRMRateControl : %d\n", h263Param.EnableFRMRateControl); - SEC_OSAL_Log(SEC_LOG_TRACE, "Bitrate : %d\n", h263Param.Bitrate); - SEC_OSAL_Log(SEC_LOG_TRACE, "FrameQp : %d\n", h263Param.FrameQp); - SEC_OSAL_Log(SEC_LOG_TRACE, "FrameQp_P : %d\n", h263Param.FrameQp_P); - SEC_OSAL_Log(SEC_LOG_TRACE, "QSCodeMax : %d\n", h263Param.QSCodeMax); - SEC_OSAL_Log(SEC_LOG_TRACE, "QSCodeMin : %d\n", h263Param.QSCodeMin); - SEC_OSAL_Log(SEC_LOG_TRACE, "CBRPeriodRf : %d\n", h263Param.CBRPeriodRf); - SEC_OSAL_Log(SEC_LOG_TRACE, "PadControlOn : %d\n", h263Param.PadControlOn); - SEC_OSAL_Log(SEC_LOG_TRACE, "LumaPadVal : %d\n", h263Param.LumaPadVal); - SEC_OSAL_Log(SEC_LOG_TRACE, "CbPadVal : %d\n", h263Param.CbPadVal); - SEC_OSAL_Log(SEC_LOG_TRACE, "CrPadVal : %d\n", h263Param.CrPadVal); - - /* H.263 specific parameters */ - SEC_OSAL_Log(SEC_LOG_TRACE, "FrameRate : %d\n", h263Param.FrameRate); -} - -void Set_Mpeg4Enc_Param(SSBSIP_MFC_ENC_MPEG4_PARAM *pMpeg4Param, SEC_OMX_BASECOMPONENT *pSECComponent) -{ - SEC_OMX_BASEPORT *pSECInputPort = NULL; - SEC_OMX_BASEPORT *pSECOutputPort = NULL; - SEC_MPEG4ENC_HANDLE *pMpeg4Enc = NULL; - - pMpeg4Enc = (SEC_MPEG4ENC_HANDLE *)pSECComponent->hCodecHandle; - pSECInputPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - pSECOutputPort = &pSECComponent->pSECPort[OUTPUT_PORT_INDEX]; - - pMpeg4Param->codecType = MPEG4_ENC; - pMpeg4Param->SourceWidth = pSECOutputPort->portDefinition.format.video.nFrameWidth; - pMpeg4Param->SourceHeight = pSECOutputPort->portDefinition.format.video.nFrameHeight; - pMpeg4Param->IDRPeriod = pMpeg4Enc->mpeg4Component[OUTPUT_PORT_INDEX].nPFrames + 1; - pMpeg4Param->SliceMode = 0; - pMpeg4Param->RandomIntraMBRefresh = 0; - pMpeg4Param->EnableFRMRateControl = 1; /* 0: disable, 1: enable */ - pMpeg4Param->Bitrate = pSECOutputPort->portDefinition.format.video.nBitrate; - pMpeg4Param->FrameQp = 20; - pMpeg4Param->FrameQp_P = 20; - pMpeg4Param->QSCodeMax = 30; - pMpeg4Param->QSCodeMin = 10; - pMpeg4Param->CBRPeriodRf = 10; - pMpeg4Param->PadControlOn = 0; /* 0: Use boundary pixel, 1: Use the below setting value */ - pMpeg4Param->LumaPadVal = 0; - pMpeg4Param->CbPadVal = 0; - pMpeg4Param->CrPadVal = 0; - - pMpeg4Param->ProfileIDC = OMXMpeg4ProfileToMFCProfile(pMpeg4Enc->mpeg4Component[OUTPUT_PORT_INDEX].eProfile); - pMpeg4Param->LevelIDC = OMXMpeg4LevelToMFCLevel(pMpeg4Enc->mpeg4Component[OUTPUT_PORT_INDEX].eLevel); - pMpeg4Param->FrameQp_B = 20; - pMpeg4Param->TimeIncreamentRes = (pSECInputPort->portDefinition.format.video.xFramerate) >> 16; - pMpeg4Param->VopTimeIncreament = 1; - pMpeg4Param->SliceArgument = 0; /* MB number or byte number */ - pMpeg4Param->NumberBFrames = 0; /* 0(not used) ~ 2 */ - pMpeg4Param->DisableQpelME = 1; - - switch ((SEC_OMX_COLOR_FORMATTYPE)pSECInputPort->portDefinition.format.video.eColorFormat) { - case OMX_COLOR_FormatYUV420SemiPlanar: - pMpeg4Param->FrameMap = NV12_LINEAR; - break; - case OMX_SEC_COLOR_FormatNV12TPhysicalAddress: - default: - pMpeg4Param->FrameMap = NV12_TILE; - break; - } - -#ifdef USE_ANDROID_EXTENSION - if (pSECInputPort->bStoreMetaDataInBuffer != OMX_FALSE) { - SEC_OMX_DATA *pInputData = &pSECComponent->processData[INPUT_PORT_INDEX]; - if(isMetadataBufferTypeGrallocSource(pInputData->dataBuffer) == OMX_TRUE) - pMpeg4Param->FrameMap = NV12_LINEAR; - else - pMpeg4Param->FrameMap = NV12_TILE; - } -#endif - -/* - SEC_OSAL_Log(SEC_LOG_TRACE, "pSECPort->eControlRate: 0x%x", pSECOutputPort->eControlRate); - switch (pSECOutputPort->eControlRate) { - case OMX_Video_ControlRateVariable: - SEC_OSAL_Log(SEC_LOG_TRACE, "Video Encode VBR"); - pH264Arg->EnableFRMRateControl = 0; // 0: Disable, 1: Frame level RC - pH264Arg->EnableMBRateControl = 0; // 0: Disable, 1:MB level RC - pH264Arg->CBRPeriodRf = 100; - break; - case OMX_Video_ControlRateConstant: - SEC_OSAL_Log(SEC_LOG_TRACE, "Video Encode CBR"); - pH264Arg->EnableFRMRateControl = 1; // 0: Disable, 1: Frame level RC - pH264Arg->EnableMBRateControl = 1; // 0: Disable, 1:MB level RC - pH264Arg->CBRPeriodRf = 10; - break; - case OMX_Video_ControlRateDisable: - default: //Android default - SEC_OSAL_Log(SEC_LOG_TRACE, "Video Encode VBR"); - pH264Arg->EnableFRMRateControl = 0; - pH264Arg->EnableMBRateControl = 0; - pH264Arg->CBRPeriodRf = 100; - break; - } -*/ - Mpeg4PrintParams(*pMpeg4Param); -} - -void Set_H263Enc_Param(SSBSIP_MFC_ENC_H263_PARAM *pH263Param, SEC_OMX_BASECOMPONENT *pSECComponent) -{ - SEC_OMX_BASEPORT *pSECInputPort = NULL; - SEC_OMX_BASEPORT *pSECOutputPort = NULL; - SEC_MPEG4ENC_HANDLE *pMpeg4Enc = NULL; - - pMpeg4Enc = (SEC_MPEG4ENC_HANDLE *)pSECComponent->hCodecHandle; - pSECInputPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - pSECOutputPort = &pSECComponent->pSECPort[OUTPUT_PORT_INDEX]; - - pH263Param->codecType = H263_ENC; - pH263Param->SourceWidth = pSECOutputPort->portDefinition.format.video.nFrameWidth; - pH263Param->SourceHeight = pSECOutputPort->portDefinition.format.video.nFrameHeight; - pH263Param->IDRPeriod = pMpeg4Enc->h263Component[OUTPUT_PORT_INDEX].nPFrames + 1; - pH263Param->SliceMode = 0; - pH263Param->RandomIntraMBRefresh = 0; - pH263Param->EnableFRMRateControl = 1; /* 0: disable, 1: enable */ - pH263Param->Bitrate = pSECOutputPort->portDefinition.format.video.nBitrate; - pH263Param->FrameQp = 20; - pH263Param->FrameQp_P = 20; - pH263Param->QSCodeMax = 30; - pH263Param->QSCodeMin = 10; - pH263Param->CBRPeriodRf = 10; - pH263Param->PadControlOn = 0; /* 0: Use boundary pixel, 1: Use the below setting value */ - pH263Param->LumaPadVal = 0; - pH263Param->CbPadVal = 0; - pH263Param->CrPadVal = 0; - - pH263Param->FrameRate = (pSECInputPort->portDefinition.format.video.xFramerate) >> 16; - - switch ((SEC_OMX_COLOR_FORMATTYPE)pSECInputPort->portDefinition.format.video.eColorFormat) { - case OMX_COLOR_FormatYUV420SemiPlanar: - pH263Param->FrameMap = NV12_LINEAR; - break; - case OMX_SEC_COLOR_FormatNV12TPhysicalAddress: - default: - pH263Param->FrameMap = NV12_TILE; - break; - } - -#ifdef USE_ANDROID_EXTENSION - if (pSECInputPort->bStoreMetaDataInBuffer != OMX_FALSE) { - SEC_OMX_DATA *pInputData = &pSECComponent->processData[INPUT_PORT_INDEX]; - if(isMetadataBufferTypeGrallocSource(pInputData->dataBuffer) == OMX_TRUE) - pH263Param->FrameMap = NV12_LINEAR; - else - pH263Param->FrameMap = NV12_TILE; - } -#endif - -/* - SEC_OSAL_Log(SEC_LOG_TRACE, "pSECPort->eControlRate: 0x%x", pSECOutputPort->eControlRate); - switch (pSECOutputPort->eControlRate) { - case OMX_Video_ControlRateVariable: - SEC_OSAL_Log(SEC_LOG_TRACE, "Video Encode VBR"); - pH264Arg->EnableFRMRateControl = 0; // 0: Disable, 1: Frame level RC - pH264Arg->EnableMBRateControl = 0; // 0: Disable, 1:MB level RC - pH264Arg->CBRPeriodRf = 100; - break; - case OMX_Video_ControlRateConstant: - SEC_OSAL_Log(SEC_LOG_TRACE, "Video Encode CBR"); - pH264Arg->EnableFRMRateControl = 1; // 0: Disable, 1: Frame level RC - pH264Arg->EnableMBRateControl = 1; // 0: Disable, 1:MB level RC - pH264Arg->CBRPeriodRf = 10; - break; - case OMX_Video_ControlRateDisable: - default: //Android default - SEC_OSAL_Log(SEC_LOG_TRACE, "Video Encode VBR"); - pH264Arg->EnableFRMRateControl = 0; - pH264Arg->EnableMBRateControl = 0; - pH264Arg->CBRPeriodRf = 100; - break; - } -*/ - H263PrintParams(*pH263Param); -} - -OMX_ERRORTYPE SEC_MFC_Mpeg4Enc_GetParameter( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_INDEXTYPE nParamIndex, - OMX_INOUT OMX_PTR pComponentParameterStructure) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - - FunctionIn(); - - if (hComponent == NULL || pComponentParameterStructure == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - if (pSECComponent->currentState == OMX_StateInvalid ) { - ret = OMX_StateInvalid; - goto EXIT; - } - - switch (nParamIndex) { - case OMX_IndexParamVideoMpeg4: - { - OMX_VIDEO_PARAM_MPEG4TYPE *pDstMpeg4Param = (OMX_VIDEO_PARAM_MPEG4TYPE *)pComponentParameterStructure; - OMX_VIDEO_PARAM_MPEG4TYPE *pSrcMpeg4Param = NULL; - SEC_MPEG4ENC_HANDLE *pMpeg4Enc = NULL; - - ret = SEC_OMX_Check_SizeVersion(pDstMpeg4Param, sizeof(OMX_VIDEO_PARAM_MPEG4TYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pDstMpeg4Param->nPortIndex >= ALL_PORT_NUM) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - pMpeg4Enc = (SEC_MPEG4ENC_HANDLE *)pSECComponent->hCodecHandle; - pSrcMpeg4Param = &pMpeg4Enc->mpeg4Component[pDstMpeg4Param->nPortIndex]; - - SEC_OSAL_Memcpy(pDstMpeg4Param, pSrcMpeg4Param, sizeof(OMX_VIDEO_PARAM_MPEG4TYPE)); - } - break; - case OMX_IndexParamVideoH263: - { - OMX_VIDEO_PARAM_H263TYPE *pDstH263Param = (OMX_VIDEO_PARAM_H263TYPE *)pComponentParameterStructure; - OMX_VIDEO_PARAM_H263TYPE *pSrcH263Param = NULL; - SEC_MPEG4ENC_HANDLE *pMpeg4Enc = NULL; - - ret = SEC_OMX_Check_SizeVersion(pDstH263Param, sizeof(OMX_VIDEO_PARAM_H263TYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pDstH263Param->nPortIndex >= ALL_PORT_NUM) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - pMpeg4Enc = (SEC_MPEG4ENC_HANDLE *)pSECComponent->hCodecHandle; - pSrcH263Param = &pMpeg4Enc->h263Component[pDstH263Param->nPortIndex]; - - SEC_OSAL_Memcpy(pDstH263Param, pSrcH263Param, sizeof(OMX_VIDEO_PARAM_H263TYPE)); - } - break; - case OMX_IndexParamStandardComponentRole: - { - OMX_S32 codecType; - OMX_PARAM_COMPONENTROLETYPE *pComponentRole = (OMX_PARAM_COMPONENTROLETYPE *)pComponentParameterStructure; - - ret = SEC_OMX_Check_SizeVersion(pComponentRole, sizeof(OMX_PARAM_COMPONENTROLETYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - codecType = ((SEC_MPEG4ENC_HANDLE *)(pSECComponent->hCodecHandle))->hMFCMpeg4Handle.codecType; - if (codecType == CODEC_TYPE_MPEG4) - SEC_OSAL_Strcpy((char *)pComponentRole->cRole, SEC_OMX_COMPONENT_MPEG4_ENC_ROLE); - else - SEC_OSAL_Strcpy((char *)pComponentRole->cRole, SEC_OMX_COMPONENT_H263_ENC_ROLE); - } - break; - case OMX_IndexParamVideoProfileLevelQuerySupported: - { - OMX_VIDEO_PARAM_PROFILELEVELTYPE *pDstProfileLevel = (OMX_VIDEO_PARAM_PROFILELEVELTYPE *)pComponentParameterStructure; - SEC_OMX_VIDEO_PROFILELEVEL *pProfileLevel = NULL; - OMX_U32 maxProfileLevelNum = 0; - OMX_S32 codecType; - - ret = SEC_OMX_Check_SizeVersion(pDstProfileLevel, sizeof(OMX_VIDEO_PARAM_PROFILELEVELTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pDstProfileLevel->nPortIndex >= ALL_PORT_NUM) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - codecType = ((SEC_MPEG4ENC_HANDLE *)(pSECComponent->hCodecHandle))->hMFCMpeg4Handle.codecType; - if (codecType == CODEC_TYPE_MPEG4) { - pProfileLevel = supportedMPEG4ProfileLevels; - maxProfileLevelNum = sizeof(supportedMPEG4ProfileLevels) / sizeof(SEC_OMX_VIDEO_PROFILELEVEL); - } else { - pProfileLevel = supportedH263ProfileLevels; - maxProfileLevelNum = sizeof(supportedH263ProfileLevels) / sizeof(SEC_OMX_VIDEO_PROFILELEVEL); - } - - if (pDstProfileLevel->nProfileIndex >= maxProfileLevelNum) { - ret = OMX_ErrorNoMore; - goto EXIT; - } - - pProfileLevel += pDstProfileLevel->nProfileIndex; - pDstProfileLevel->eProfile = pProfileLevel->profile; - pDstProfileLevel->eLevel = pProfileLevel->level; - } - break; - case OMX_IndexParamVideoProfileLevelCurrent: - { - OMX_VIDEO_PARAM_PROFILELEVELTYPE *pDstProfileLevel = (OMX_VIDEO_PARAM_PROFILELEVELTYPE *)pComponentParameterStructure; - OMX_VIDEO_PARAM_MPEG4TYPE *pSrcMpeg4Param = NULL; - OMX_VIDEO_PARAM_H263TYPE *pSrcH263Param = NULL; - SEC_MPEG4ENC_HANDLE *pMpeg4Enc = NULL; - OMX_S32 codecType; - - ret = SEC_OMX_Check_SizeVersion(pDstProfileLevel, sizeof(OMX_VIDEO_PARAM_PROFILELEVELTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pDstProfileLevel->nPortIndex >= ALL_PORT_NUM) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - pMpeg4Enc = (SEC_MPEG4ENC_HANDLE *)pSECComponent->hCodecHandle; - codecType = pMpeg4Enc->hMFCMpeg4Handle.codecType; - if (codecType == CODEC_TYPE_MPEG4) { - pSrcMpeg4Param = &pMpeg4Enc->mpeg4Component[pDstProfileLevel->nPortIndex]; - pDstProfileLevel->eProfile = pSrcMpeg4Param->eProfile; - pDstProfileLevel->eLevel = pSrcMpeg4Param->eLevel; - } else { - pSrcH263Param = &pMpeg4Enc->h263Component[pDstProfileLevel->nPortIndex]; - pDstProfileLevel->eProfile = pSrcH263Param->eProfile; - pDstProfileLevel->eLevel = pSrcH263Param->eLevel; - } - } - break; - case OMX_IndexParamVideoErrorCorrection: - { - OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE *pDstErrorCorrectionType = (OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE *)pComponentParameterStructure; - OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE *pSrcErrorCorrectionType = NULL; - SEC_MPEG4ENC_HANDLE *pMpeg4Enc = NULL; - - ret = SEC_OMX_Check_SizeVersion(pDstErrorCorrectionType, sizeof(OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pDstErrorCorrectionType->nPortIndex != OUTPUT_PORT_INDEX) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - pMpeg4Enc = (SEC_MPEG4ENC_HANDLE *)pSECComponent->hCodecHandle; - pSrcErrorCorrectionType = &pMpeg4Enc->errorCorrectionType[OUTPUT_PORT_INDEX]; - - pDstErrorCorrectionType->bEnableHEC = pSrcErrorCorrectionType->bEnableHEC; - pDstErrorCorrectionType->bEnableResync = pSrcErrorCorrectionType->bEnableResync; - pDstErrorCorrectionType->nResynchMarkerSpacing = pSrcErrorCorrectionType->nResynchMarkerSpacing; - pDstErrorCorrectionType->bEnableDataPartitioning = pSrcErrorCorrectionType->bEnableDataPartitioning; - pDstErrorCorrectionType->bEnableRVLC = pSrcErrorCorrectionType->bEnableRVLC; - } - break; - default: - ret = SEC_OMX_VideoEncodeGetParameter(hComponent, nParamIndex, pComponentParameterStructure); - break; - } -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_MFC_Mpeg4Enc_SetParameter( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_INDEXTYPE nIndex, - OMX_IN OMX_PTR pComponentParameterStructure) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - - FunctionIn(); - - if (hComponent == NULL || pComponentParameterStructure == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - if (pSECComponent->currentState == OMX_StateInvalid ) { - ret = OMX_StateInvalid; - goto EXIT; - } - - switch (nIndex) { - case OMX_IndexParamVideoMpeg4: - { - OMX_VIDEO_PARAM_MPEG4TYPE *pDstMpeg4Param = NULL; - OMX_VIDEO_PARAM_MPEG4TYPE *pSrcMpeg4Param = (OMX_VIDEO_PARAM_MPEG4TYPE *)pComponentParameterStructure; - SEC_MPEG4ENC_HANDLE *pMpeg4Enc = NULL; - - ret = SEC_OMX_Check_SizeVersion(pSrcMpeg4Param, sizeof(OMX_VIDEO_PARAM_MPEG4TYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pSrcMpeg4Param->nPortIndex >= ALL_PORT_NUM) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - pMpeg4Enc = (SEC_MPEG4ENC_HANDLE *)pSECComponent->hCodecHandle; - pDstMpeg4Param = &pMpeg4Enc->mpeg4Component[pSrcMpeg4Param->nPortIndex]; - - SEC_OSAL_Memcpy(pDstMpeg4Param, pSrcMpeg4Param, sizeof(OMX_VIDEO_PARAM_MPEG4TYPE)); - } - break; - case OMX_IndexParamVideoH263: - { - OMX_VIDEO_PARAM_H263TYPE *pDstH263Param = NULL; - OMX_VIDEO_PARAM_H263TYPE *pSrcH263Param = (OMX_VIDEO_PARAM_H263TYPE *)pComponentParameterStructure; - SEC_MPEG4ENC_HANDLE *pMpeg4Enc = NULL; - - ret = SEC_OMX_Check_SizeVersion(pSrcH263Param, sizeof(OMX_VIDEO_PARAM_H263TYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pSrcH263Param->nPortIndex >= ALL_PORT_NUM) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - pMpeg4Enc = (SEC_MPEG4ENC_HANDLE *)pSECComponent->hCodecHandle; - pDstH263Param = &pMpeg4Enc->h263Component[pSrcH263Param->nPortIndex]; - - SEC_OSAL_Memcpy(pDstH263Param, pSrcH263Param, sizeof(OMX_VIDEO_PARAM_H263TYPE)); - } - break; - case OMX_IndexParamStandardComponentRole: - { - OMX_PARAM_COMPONENTROLETYPE *pComponentRole = (OMX_PARAM_COMPONENTROLETYPE*)pComponentParameterStructure; - - ret = SEC_OMX_Check_SizeVersion(pComponentRole, sizeof(OMX_PARAM_COMPONENTROLETYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if ((pSECComponent->currentState != OMX_StateLoaded) && (pSECComponent->currentState != OMX_StateWaitForResources)) { - ret = OMX_ErrorIncorrectStateOperation; - goto EXIT; - } - - if (!SEC_OSAL_Strcmp((char*)pComponentRole->cRole, SEC_OMX_COMPONENT_MPEG4_ENC_ROLE)) { - pSECComponent->pSECPort[OUTPUT_PORT_INDEX].portDefinition.format.video.eCompressionFormat = OMX_VIDEO_CodingMPEG4; - //((SEC_MPEG4ENC_HANDLE *)(pSECComponent->hCodecHandle))->hMFCMpeg4Handle.codecType = CODEC_TYPE_MPEG4; - } else if (!SEC_OSAL_Strcmp((char*)pComponentRole->cRole, SEC_OMX_COMPONENT_H263_ENC_ROLE)) { - pSECComponent->pSECPort[OUTPUT_PORT_INDEX].portDefinition.format.video.eCompressionFormat = OMX_VIDEO_CodingH263; - //((SEC_MPEG4ENC_HANDLE *)(pSECComponent->hCodecHandle))->hMFCMpeg4Handle.codecType = CODEC_TYPE_H263; - } else { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - } - break; - case OMX_IndexParamVideoProfileLevelCurrent: - { - OMX_VIDEO_PARAM_PROFILELEVELTYPE *pSrcProfileLevel = (OMX_VIDEO_PARAM_PROFILELEVELTYPE *)pComponentParameterStructure; - OMX_VIDEO_PARAM_MPEG4TYPE *pDstMpeg4Param = NULL; - OMX_VIDEO_PARAM_H263TYPE *pDstH263Param = NULL; - SEC_MPEG4ENC_HANDLE *pMpeg4Enc = NULL; - OMX_S32 codecType; - - ret = SEC_OMX_Check_SizeVersion(pSrcProfileLevel, sizeof(OMX_VIDEO_PARAM_PROFILELEVELTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pSrcProfileLevel->nPortIndex >= ALL_PORT_NUM) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - pMpeg4Enc = (SEC_MPEG4ENC_HANDLE *)pSECComponent->hCodecHandle; - codecType = pMpeg4Enc->hMFCMpeg4Handle.codecType; - if (codecType == CODEC_TYPE_MPEG4) { - /* - * To do: Check validity of profile & level parameters - */ - - pDstMpeg4Param = &pMpeg4Enc->mpeg4Component[pSrcProfileLevel->nPortIndex]; - pDstMpeg4Param->eProfile = pSrcProfileLevel->eProfile; - pDstMpeg4Param->eLevel = pSrcProfileLevel->eLevel; - } else { - /* - * To do: Check validity of profile & level parameters - */ - - pDstH263Param = &pMpeg4Enc->h263Component[pSrcProfileLevel->nPortIndex]; - pDstH263Param->eProfile = pSrcProfileLevel->eProfile; - pDstH263Param->eLevel = pSrcProfileLevel->eLevel; - } - } - break; - case OMX_IndexParamVideoErrorCorrection: - { - OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE *pSrcErrorCorrectionType = (OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE *)pComponentParameterStructure; - OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE *pDstErrorCorrectionType = NULL; - SEC_MPEG4ENC_HANDLE *pMpeg4Enc = NULL; - - ret = SEC_OMX_Check_SizeVersion(pSrcErrorCorrectionType, sizeof(OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pSrcErrorCorrectionType->nPortIndex != OUTPUT_PORT_INDEX) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - pMpeg4Enc = (SEC_MPEG4ENC_HANDLE *)pSECComponent->hCodecHandle; - pDstErrorCorrectionType = &pMpeg4Enc->errorCorrectionType[OUTPUT_PORT_INDEX]; - - pDstErrorCorrectionType->bEnableHEC = pSrcErrorCorrectionType->bEnableHEC; - pDstErrorCorrectionType->bEnableResync = pSrcErrorCorrectionType->bEnableResync; - pDstErrorCorrectionType->nResynchMarkerSpacing = pSrcErrorCorrectionType->nResynchMarkerSpacing; - pDstErrorCorrectionType->bEnableDataPartitioning = pSrcErrorCorrectionType->bEnableDataPartitioning; - pDstErrorCorrectionType->bEnableRVLC = pSrcErrorCorrectionType->bEnableRVLC; - } - break; - default: - ret = SEC_OMX_VideoEncodeSetParameter(hComponent, nIndex, pComponentParameterStructure); - break; - } -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_MFC_Mpeg4Enc_GetConfig( - OMX_HANDLETYPE hComponent, - OMX_INDEXTYPE nIndex, - OMX_PTR pComponentConfigStructure) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - if (pComponentConfigStructure == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - if (pSECComponent->currentState == OMX_StateInvalid) { - ret = OMX_ErrorInvalidState; - goto EXIT; - } - - switch (nIndex) { - default: - ret = SEC_OMX_GetConfig(hComponent, nIndex, pComponentConfigStructure); - break; - } - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_MFC_Mpeg4Enc_SetConfig( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_INDEXTYPE nIndex, - OMX_IN OMX_PTR pComponentConfigStructure) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - - FunctionIn(); - - if (hComponent == NULL || pComponentConfigStructure == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - if (pSECComponent->currentState == OMX_StateInvalid) { - ret = OMX_ErrorInvalidState; - goto EXIT; - } - - switch (nIndex) { - default: - ret = SEC_OMX_SetConfig(hComponent, nIndex, pComponentConfigStructure); - break; - } - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_MFC_Mpeg4Enc_GetExtensionIndex( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_STRING cParameterName, - OMX_OUT OMX_INDEXTYPE *pIndexType) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - if ((cParameterName == NULL) || (pIndexType == NULL)) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - if (pSECComponent->currentState == OMX_StateInvalid) { - ret = OMX_ErrorInvalidState; - goto EXIT; - } - -#ifdef USE_ANDROID_EXTENSION - if (SEC_OSAL_Strcmp(cParameterName, SEC_INDEX_PARAM_STORE_METADATA_BUFFER) == 0) { - *pIndexType = OMX_IndexParamStoreMetaDataBuffer; - ret = OMX_ErrorNone; - } else { - ret = SEC_OMX_GetExtensionIndex(hComponent, cParameterName, pIndexType); - } -#else - ret = SEC_OMX_GetExtensionIndex(hComponent, cParameterName, pIndexType); -#endif - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_MFC_Mpeg4Enc_ComponentRoleEnum( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_OUT OMX_U8 *cRole, - OMX_IN OMX_U32 nIndex) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - OMX_S32 codecType; - - FunctionIn(); - - if ((hComponent == NULL) || (cRole == NULL)) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - if (nIndex != (MAX_COMPONENT_ROLE_NUM - 1)) { - ret = OMX_ErrorNoMore; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - if (pSECComponent->currentState == OMX_StateInvalid ) { - ret = OMX_StateInvalid; - goto EXIT; - } - - codecType = ((SEC_MPEG4ENC_HANDLE *)(pSECComponent->hCodecHandle))->hMFCMpeg4Handle.codecType; - if (codecType == CODEC_TYPE_MPEG4) - SEC_OSAL_Strcpy((char *)cRole, SEC_OMX_COMPONENT_MPEG4_ENC_ROLE); - else - SEC_OSAL_Strcpy((char *)cRole, SEC_OMX_COMPONENT_H263_ENC_ROLE); - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_MFC_EncodeThread(OMX_HANDLETYPE hComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_MPEG4ENC_HANDLE *pMpeg4Enc = NULL; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - pMpeg4Enc = (SEC_MPEG4ENC_HANDLE *)pSECComponent->hCodecHandle; - - while (pMpeg4Enc->NBEncThread.bExitEncodeThread == OMX_FALSE) { - SEC_OSAL_SemaphoreWait(pMpeg4Enc->NBEncThread.hEncFrameStart); - - if (pMpeg4Enc->NBEncThread.bExitEncodeThread == OMX_FALSE) { - pMpeg4Enc->hMFCMpeg4Handle.returnCodec = SsbSipMfcEncExe(pMpeg4Enc->hMFCMpeg4Handle.hMFCHandle); - SEC_OSAL_SemaphorePost(pMpeg4Enc->NBEncThread.hEncFrameEnd); - } - } - -EXIT: - FunctionOut(); - SEC_OSAL_ThreadExit(NULL); - - return ret; -} - -/* MFC Init */ -OMX_ERRORTYPE SEC_MFC_Mpeg4Enc_Init(OMX_COMPONENTTYPE *pOMXComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASECOMPONENT *pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - SEC_OMX_BASEPORT *pSECInputPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - SEC_OMX_BASEPORT *pSECOutputPort = &pSECComponent->pSECPort[OUTPUT_PORT_INDEX]; - SEC_OMX_BASEPORT *pSECPort = NULL; - SEC_MPEG4ENC_HANDLE *pMpeg4Enc = NULL; - OMX_HANDLETYPE hMFCHandle = NULL; - OMX_S32 returnCodec = 0; - - FunctionIn(); - - pMpeg4Enc = (SEC_MPEG4ENC_HANDLE *)pSECComponent->hCodecHandle; - pMpeg4Enc->hMFCMpeg4Handle.bConfiguredMFC = OMX_FALSE; - pSECComponent->bUseFlagEOF = OMX_FALSE; - pSECComponent->bSaveFlagEOS = OMX_FALSE; - - /* MFC(Multi Format Codec) encoder and CMM(Codec Memory Management) driver open */ - SSBIP_MFC_BUFFER_TYPE buf_type = CACHE; - hMFCHandle = (OMX_PTR)SsbSipMfcEncOpen(&buf_type); - if (hMFCHandle == NULL) { - ret = OMX_ErrorInsufficientResources; - goto EXIT; - } - pMpeg4Enc->hMFCMpeg4Handle.hMFCHandle = hMFCHandle; - - /* set MFC ENC VIDEO PARAM and initialize MFC encoder instance */ - if (pMpeg4Enc->hMFCMpeg4Handle.codecType == CODEC_TYPE_MPEG4) { - SsbSipMfcEncSetSize(hMFCHandle, MPEG4_ENC, - pSECOutputPort->portDefinition.format.video.nFrameWidth, - pSECOutputPort->portDefinition.format.video.nFrameHeight); - } else { - SsbSipMfcEncSetSize(hMFCHandle, H263_ENC, - pSECOutputPort->portDefinition.format.video.nFrameWidth, - pSECOutputPort->portDefinition.format.video.nFrameHeight); - } - - /* allocate encoder's input buffer */ - returnCodec = SsbSipMfcEncGetInBuf(hMFCHandle, &(pMpeg4Enc->hMFCMpeg4Handle.inputInfo)); - if (returnCodec != MFC_RET_OK) { - ret = OMX_ErrorInsufficientResources; - goto EXIT; - } - pMpeg4Enc->MFCEncInputBuffer[0].YPhyAddr = pMpeg4Enc->hMFCMpeg4Handle.inputInfo.YPhyAddr; - pMpeg4Enc->MFCEncInputBuffer[0].CPhyAddr = pMpeg4Enc->hMFCMpeg4Handle.inputInfo.CPhyAddr; - pMpeg4Enc->MFCEncInputBuffer[0].YVirAddr = pMpeg4Enc->hMFCMpeg4Handle.inputInfo.YVirAddr; - pMpeg4Enc->MFCEncInputBuffer[0].CVirAddr = pMpeg4Enc->hMFCMpeg4Handle.inputInfo.CVirAddr; - pMpeg4Enc->MFCEncInputBuffer[0].YBufferSize = pMpeg4Enc->hMFCMpeg4Handle.inputInfo.YSize; - pMpeg4Enc->MFCEncInputBuffer[0].CBufferSize = pMpeg4Enc->hMFCMpeg4Handle.inputInfo.CSize; - pMpeg4Enc->MFCEncInputBuffer[0].YDataSize = 0; - pMpeg4Enc->MFCEncInputBuffer[0].CDataSize = 0; - SEC_OSAL_Log(SEC_LOG_TRACE, "pMpeg4Enc->hMFCMpeg4Handle.inputInfo.YVirAddr : 0x%x", pMpeg4Enc->hMFCMpeg4Handle.inputInfo.YVirAddr); - SEC_OSAL_Log(SEC_LOG_TRACE, "pMpeg4Enc->hMFCMpeg4Handle.inputInfo.CVirAddr : 0x%x", pMpeg4Enc->hMFCMpeg4Handle.inputInfo.CVirAddr); - - /* allocate encoder's input buffer */ - returnCodec = SsbSipMfcEncGetInBuf(hMFCHandle, &(pMpeg4Enc->hMFCMpeg4Handle.inputInfo)); - if (returnCodec != MFC_RET_OK) { - ret = OMX_ErrorInsufficientResources; - goto EXIT; - } - pMpeg4Enc->MFCEncInputBuffer[1].YPhyAddr = pMpeg4Enc->hMFCMpeg4Handle.inputInfo.YPhyAddr; - pMpeg4Enc->MFCEncInputBuffer[1].CPhyAddr = pMpeg4Enc->hMFCMpeg4Handle.inputInfo.CPhyAddr; - pMpeg4Enc->MFCEncInputBuffer[1].YVirAddr = pMpeg4Enc->hMFCMpeg4Handle.inputInfo.YVirAddr; - pMpeg4Enc->MFCEncInputBuffer[1].CVirAddr = pMpeg4Enc->hMFCMpeg4Handle.inputInfo.CVirAddr; - pMpeg4Enc->MFCEncInputBuffer[1].YBufferSize = pMpeg4Enc->hMFCMpeg4Handle.inputInfo.YSize; - pMpeg4Enc->MFCEncInputBuffer[1].CBufferSize = pMpeg4Enc->hMFCMpeg4Handle.inputInfo.CSize; - pMpeg4Enc->MFCEncInputBuffer[1].YDataSize = 0; - pMpeg4Enc->MFCEncInputBuffer[1].CDataSize = 0; - SEC_OSAL_Log(SEC_LOG_TRACE, "pMpeg4Enc->hMFCMpeg4Handle.inputInfo.YVirAddr : 0x%x", pMpeg4Enc->hMFCMpeg4Handle.inputInfo.YVirAddr); - SEC_OSAL_Log(SEC_LOG_TRACE, "pMpeg4Enc->hMFCMpeg4Handle.inputInfo.CVirAddr : 0x%x", pMpeg4Enc->hMFCMpeg4Handle.inputInfo.CVirAddr); - - pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.YPhyAddr = pMpeg4Enc->MFCEncInputBuffer[0].YPhyAddr; - pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.CPhyAddr = pMpeg4Enc->MFCEncInputBuffer[0].CPhyAddr; - pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.YVirAddr = pMpeg4Enc->MFCEncInputBuffer[0].YVirAddr; - pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.CVirAddr = pMpeg4Enc->MFCEncInputBuffer[0].CVirAddr; - pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.YSize = pMpeg4Enc->MFCEncInputBuffer[0].YBufferSize; - pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.CSize = pMpeg4Enc->MFCEncInputBuffer[0].CBufferSize; - - pMpeg4Enc->indexInputBuffer = 0; - pMpeg4Enc->bFirstFrame = OMX_TRUE; - - pMpeg4Enc->NBEncThread.bExitEncodeThread = OMX_FALSE; - pMpeg4Enc->NBEncThread.bEncoderRun = OMX_FALSE; - SEC_OSAL_SemaphoreCreate(&(pMpeg4Enc->NBEncThread.hEncFrameStart)); - SEC_OSAL_SemaphoreCreate(&(pMpeg4Enc->NBEncThread.hEncFrameEnd)); - if (OMX_ErrorNone == SEC_OSAL_ThreadCreate(&pMpeg4Enc->NBEncThread.hNBEncodeThread, - SEC_MFC_EncodeThread, - pOMXComponent)) { - pMpeg4Enc->hMFCMpeg4Handle.returnCodec = MFC_RET_OK; - } - - SEC_OSAL_Memset(pSECComponent->timeStamp, -19771003, sizeof(OMX_TICKS) * MAX_TIMESTAMP); - SEC_OSAL_Memset(pSECComponent->nFlags, 0, sizeof(OMX_U32) * MAX_FLAGS); - pMpeg4Enc->hMFCMpeg4Handle.indexTimestamp = 0; - -EXIT: - FunctionOut(); - - return ret; -} - -/* MFC Terminate */ -OMX_ERRORTYPE SEC_MFC_Mpeg4Enc_Terminate(OMX_COMPONENTTYPE *pOMXComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASECOMPONENT *pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - SEC_MPEG4ENC_HANDLE *pMpeg4Enc = NULL; - OMX_HANDLETYPE hMFCHandle = NULL; - - FunctionIn(); - - pMpeg4Enc = (SEC_MPEG4ENC_HANDLE *)pSECComponent->hCodecHandle; - - if (pMpeg4Enc->NBEncThread.hNBEncodeThread != NULL) { - pMpeg4Enc->NBEncThread.bExitEncodeThread = OMX_TRUE; - SEC_OSAL_SemaphorePost(pMpeg4Enc->NBEncThread.hEncFrameStart); - SEC_OSAL_ThreadTerminate(pMpeg4Enc->NBEncThread.hNBEncodeThread); - pMpeg4Enc->NBEncThread.hNBEncodeThread = NULL; - } - - if(pMpeg4Enc->NBEncThread.hEncFrameEnd != NULL) { - SEC_OSAL_SemaphoreTerminate(pMpeg4Enc->NBEncThread.hEncFrameEnd); - pMpeg4Enc->NBEncThread.hEncFrameEnd = NULL; - } - - if(pMpeg4Enc->NBEncThread.hEncFrameStart != NULL) { - SEC_OSAL_SemaphoreTerminate(pMpeg4Enc->NBEncThread.hEncFrameStart); - pMpeg4Enc->NBEncThread.hEncFrameStart = NULL; - } - - hMFCHandle = pMpeg4Enc->hMFCMpeg4Handle.hMFCHandle; - if (hMFCHandle != NULL) { - SsbSipMfcEncClose(hMFCHandle); - pMpeg4Enc->hMFCMpeg4Handle.hMFCHandle = NULL; - } - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_MFC_Mpeg4_Encode(OMX_COMPONENTTYPE *pOMXComponent, SEC_OMX_DATA *pInputData, SEC_OMX_DATA *pOutputData) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASECOMPONENT *pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - SEC_MPEG4ENC_HANDLE *pMpeg4Enc = (SEC_MPEG4ENC_HANDLE *)pSECComponent->hCodecHandle; - OMX_HANDLETYPE hMFCHandle = pMpeg4Enc->hMFCMpeg4Handle.hMFCHandle; - SSBSIP_MFC_ENC_INPUT_INFO *pInputInfo = &(pMpeg4Enc->hMFCMpeg4Handle.inputInfo); - SSBSIP_MFC_ENC_OUTPUT_INFO outputInfo; - SEC_OMX_BASEPORT *pSECPort = NULL; - MFC_ENC_ADDR_INFO addrInfo; - OMX_U32 oneFrameSize = pInputData->dataLen; - - FunctionIn(); - - if (pMpeg4Enc->hMFCMpeg4Handle.bConfiguredMFC == OMX_FALSE) { - /* set MFC ENC VIDEO PARAM and initialize MFC encoder instance */ - if (pMpeg4Enc->hMFCMpeg4Handle.codecType == CODEC_TYPE_MPEG4) { - Set_Mpeg4Enc_Param(&(pMpeg4Enc->hMFCMpeg4Handle.mpeg4MFCParam), pSECComponent); - pMpeg4Enc->hMFCMpeg4Handle.returnCodec = SsbSipMfcEncInit(hMFCHandle, &(pMpeg4Enc->hMFCMpeg4Handle.mpeg4MFCParam)); - } else { - Set_H263Enc_Param(&(pMpeg4Enc->hMFCMpeg4Handle.h263MFCParam), pSECComponent); - pMpeg4Enc->hMFCMpeg4Handle.returnCodec = SsbSipMfcEncInit(hMFCHandle, &(pMpeg4Enc->hMFCMpeg4Handle.h263MFCParam)); - } - if (pMpeg4Enc->hMFCMpeg4Handle.returnCodec != MFC_RET_OK) { - ret = OMX_ErrorInsufficientResources; - goto EXIT; - } - - pMpeg4Enc->hMFCMpeg4Handle.returnCodec = SsbSipMfcEncGetOutBuf(hMFCHandle, &outputInfo); - if (pMpeg4Enc->hMFCMpeg4Handle.returnCodec != MFC_RET_OK) - { - SEC_OSAL_Log(SEC_LOG_ERROR, "%s: SsbSipMfcEncGetOutBuf failed, ret:%d", __FUNCTION__, pMpeg4Enc->hMFCMpeg4Handle.returnCodec); - ret = OMX_ErrorUndefined; - goto EXIT; - } - - pOutputData->dataBuffer = outputInfo.StrmVirAddr; - pOutputData->allocSize = outputInfo.headerSize; - pOutputData->dataLen = outputInfo.headerSize; - pOutputData->timeStamp = 0; - pOutputData->nFlags |= OMX_BUFFERFLAG_CODECCONFIG; - pOutputData->nFlags |= OMX_BUFFERFLAG_ENDOFFRAME; - - pMpeg4Enc->hMFCMpeg4Handle.bConfiguredMFC = OMX_TRUE; - - ret = OMX_ErrorInputDataEncodeYet; - goto EXIT; - } - - if ((pInputData->nFlags & OMX_BUFFERFLAG_ENDOFFRAME) && - (pSECComponent->bUseFlagEOF == OMX_FALSE)) { - pSECComponent->bUseFlagEOF = OMX_TRUE; - } - - if (oneFrameSize <= 0) { - pOutputData->timeStamp = pInputData->timeStamp; - pOutputData->nFlags = pInputData->nFlags; - - ret = OMX_ErrorNone; - goto EXIT; - } - - pSECPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - if (((pInputData->nFlags & OMX_BUFFERFLAG_EOS) == OMX_BUFFERFLAG_EOS) || - (pSECComponent->getAllDelayBuffer == OMX_TRUE)){ - /* Dummy input data for get out encoded last frame */ - pInputInfo->YPhyAddr = pMpeg4Enc->MFCEncInputBuffer[pMpeg4Enc->indexInputBuffer].YPhyAddr; - pInputInfo->CPhyAddr = pMpeg4Enc->MFCEncInputBuffer[pMpeg4Enc->indexInputBuffer].CPhyAddr; - pInputInfo->YVirAddr = pMpeg4Enc->MFCEncInputBuffer[pMpeg4Enc->indexInputBuffer].YVirAddr; - pInputInfo->CVirAddr = pMpeg4Enc->MFCEncInputBuffer[pMpeg4Enc->indexInputBuffer].CVirAddr; - } else if (pSECPort->portDefinition.format.video.eColorFormat == OMX_SEC_COLOR_FormatNV12TPhysicalAddress) { - SEC_OSAL_Memcpy(&addrInfo.pAddrY, pInputData->dataBuffer, sizeof(addrInfo.pAddrY)); - SEC_OSAL_Memcpy(&addrInfo.pAddrC, pInputData->dataBuffer + sizeof(addrInfo.pAddrY), sizeof(addrInfo.pAddrC)); - pInputInfo->YPhyAddr = addrInfo.pAddrY; - pInputInfo->CPhyAddr = addrInfo.pAddrC; -#ifdef USE_ANDROID_EXTENSION - } else if (pSECPort->bStoreMetaDataInBuffer != OMX_FALSE) { - ret = preprocessMetaDataInBuffers(pOMXComponent, pInputData->dataBuffer, pInputInfo); - if (ret != OMX_ErrorNone) - goto EXIT; -#endif - } else { - /* Real input data */ - pInputInfo->YPhyAddr = pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.YPhyAddr; - pInputInfo->CPhyAddr = pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.CPhyAddr; - } - - pSECComponent->timeStamp[pMpeg4Enc->hMFCMpeg4Handle.indexTimestamp] = pInputData->timeStamp; - pSECComponent->nFlags[pMpeg4Enc->hMFCMpeg4Handle.indexTimestamp] = pInputData->nFlags; - - if ((pMpeg4Enc->hMFCMpeg4Handle.returnCodec == MFC_RET_OK) && - (pMpeg4Enc->bFirstFrame == OMX_FALSE)) { - OMX_S32 indexTimestamp = 0; - - /* wait for mfc encode done */ - if (pMpeg4Enc->NBEncThread.bEncoderRun != OMX_FALSE) { - SEC_OSAL_SemaphoreWait(pMpeg4Enc->NBEncThread.hEncFrameEnd); - pMpeg4Enc->NBEncThread.bEncoderRun = OMX_FALSE; - } - - pMpeg4Enc->hMFCMpeg4Handle.returnCodec = SsbSipMfcEncGetOutBuf(hMFCHandle, &outputInfo); - if ((SsbSipMfcEncGetConfig(hMFCHandle, MFC_ENC_GETCONF_FRAME_TAG, &indexTimestamp) != MFC_RET_OK) || - (((indexTimestamp < 0) || (indexTimestamp >= MAX_TIMESTAMP)))) { - pOutputData->timeStamp = pInputData->timeStamp; - pOutputData->nFlags = pInputData->nFlags; - } else { - pOutputData->timeStamp = pSECComponent->timeStamp[indexTimestamp]; - pOutputData->nFlags = pSECComponent->nFlags[indexTimestamp]; - } - - if (pMpeg4Enc->hMFCMpeg4Handle.returnCodec == MFC_RET_OK) { - /** Fill Output Buffer **/ - pOutputData->dataBuffer = outputInfo.StrmVirAddr; - pOutputData->allocSize = outputInfo.dataSize; - pOutputData->dataLen = outputInfo.dataSize; - pOutputData->usedDataLen = 0; - - pOutputData->nFlags |= OMX_BUFFERFLAG_ENDOFFRAME; - if (outputInfo.frameType == MFC_FRAME_TYPE_I_FRAME) - pOutputData->nFlags |= OMX_BUFFERFLAG_SYNCFRAME; - - ret = OMX_ErrorNone; - } else { - SEC_OSAL_Log(SEC_LOG_ERROR, "%s: SsbSipMfcEncGetOutBuf failed, ret:%d", __FUNCTION__, pMpeg4Enc->hMFCMpeg4Handle.returnCodec); - ret = OMX_ErrorUndefined; - goto EXIT; - } - - if (pSECComponent->getAllDelayBuffer == OMX_TRUE) { - ret = OMX_ErrorInputDataEncodeYet; - } - if ((pInputData->nFlags & OMX_BUFFERFLAG_EOS) == OMX_BUFFERFLAG_EOS) { - pInputData->nFlags = (pOutputData->nFlags & (~OMX_BUFFERFLAG_EOS)); - pSECComponent->getAllDelayBuffer = OMX_TRUE; - ret = OMX_ErrorInputDataEncodeYet; - } - if ((pOutputData->nFlags & OMX_BUFFERFLAG_EOS) == OMX_BUFFERFLAG_EOS) { - pSECComponent->getAllDelayBuffer = OMX_FALSE; - pOutputData->dataLen = 0; - pOutputData->usedDataLen = 0; - SEC_OSAL_Log(SEC_LOG_TRACE, "OMX_BUFFERFLAG_EOS!!!"); - ret = OMX_ErrorNone; - } - } - if (pMpeg4Enc->hMFCMpeg4Handle.returnCodec != MFC_RET_OK) { - SEC_OSAL_Log(SEC_LOG_ERROR, "%s: SsbSipMfcEncExe failed, ret:%d", __FUNCTION__, pMpeg4Enc->hMFCMpeg4Handle.returnCodec); - ret = OMX_ErrorUndefined; - } - - pMpeg4Enc->hMFCMpeg4Handle.returnCodec = SsbSipMfcEncSetInBuf(hMFCHandle, pInputInfo); - if (pMpeg4Enc->hMFCMpeg4Handle.returnCodec != MFC_RET_OK) { - SEC_OSAL_Log(SEC_LOG_ERROR, "%s: SsbSipMfcEncSetInBuf failed, ret:%d", __FUNCTION__, pMpeg4Enc->hMFCMpeg4Handle.returnCodec); - ret = OMX_ErrorUndefined; - goto EXIT; - } else { - pMpeg4Enc->indexInputBuffer++; - pMpeg4Enc->indexInputBuffer %= MFC_INPUT_BUFFER_NUM_MAX; - pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.YPhyAddr = pMpeg4Enc->MFCEncInputBuffer[pMpeg4Enc->indexInputBuffer].YPhyAddr; - pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.CPhyAddr = pMpeg4Enc->MFCEncInputBuffer[pMpeg4Enc->indexInputBuffer].CPhyAddr; - pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.YVirAddr = pMpeg4Enc->MFCEncInputBuffer[pMpeg4Enc->indexInputBuffer].YVirAddr; - pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.CVirAddr = pMpeg4Enc->MFCEncInputBuffer[pMpeg4Enc->indexInputBuffer].CVirAddr; - pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.YSize = pMpeg4Enc->MFCEncInputBuffer[pMpeg4Enc->indexInputBuffer].YBufferSize; - pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.CSize = pMpeg4Enc->MFCEncInputBuffer[pMpeg4Enc->indexInputBuffer].CBufferSize; - } - - SsbSipMfcEncSetConfig(hMFCHandle, MFC_ENC_SETCONF_FRAME_TAG, &(pMpeg4Enc->hMFCMpeg4Handle.indexTimestamp)); - - /* mfc encode start */ - SEC_OSAL_SemaphorePost(pMpeg4Enc->NBEncThread.hEncFrameStart); - pMpeg4Enc->NBEncThread.bEncoderRun = OMX_TRUE; - pMpeg4Enc->hMFCMpeg4Handle.indexTimestamp++; - pMpeg4Enc->hMFCMpeg4Handle.indexTimestamp %= MAX_TIMESTAMP; - pMpeg4Enc->bFirstFrame = OMX_FALSE; - -EXIT: - FunctionOut(); - - return ret; -} - -/* MFC Encode */ -OMX_ERRORTYPE SEC_MFC_Mpeg4Enc_bufferProcess(OMX_COMPONENTTYPE *pOMXComponent, SEC_OMX_DATA *pInputData, SEC_OMX_DATA *pOutputData) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_BASECOMPONENT *pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - SEC_OMX_BASEPORT *pInputPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - SEC_OMX_BASEPORT *pOutputPort = &pSECComponent->pSECPort[OUTPUT_PORT_INDEX]; - - FunctionIn(); - - if ((!CHECK_PORT_ENABLED(pInputPort)) || (!CHECK_PORT_ENABLED(pOutputPort)) || - (!CHECK_PORT_POPULATED(pInputPort)) || (!CHECK_PORT_POPULATED(pOutputPort))) { - goto EXIT; - } - if (OMX_FALSE == SEC_Check_BufferProcess_State(pSECComponent)) { - goto EXIT; - } - - ret = SEC_MFC_Mpeg4_Encode(pOMXComponent, pInputData, pOutputData); - if (ret != OMX_ErrorNone) { - if (ret == OMX_ErrorInputDataEncodeYet) { - pOutputData->usedDataLen = 0; - pOutputData->remainDataLen = pOutputData->dataLen; - } else { - pSECComponent->pCallbacks->EventHandler((OMX_HANDLETYPE)pOMXComponent, - pSECComponent->callbackData, - OMX_EventError, ret, 0, NULL); - } - } else { - pInputData->usedDataLen += pInputData->dataLen; - pInputData->remainDataLen = pInputData->dataLen - pInputData->usedDataLen; - pInputData->dataLen -= pInputData->usedDataLen; - pInputData->usedDataLen = 0; - - pOutputData->usedDataLen = 0; - pOutputData->remainDataLen = pOutputData->dataLen; - } - -EXIT: - FunctionOut(); - - return ret; -} - -OSCL_EXPORT_REF OMX_ERRORTYPE SEC_OMX_ComponentInit(OMX_HANDLETYPE hComponent, OMX_STRING componentName) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_OMX_BASEPORT *pSECPort = NULL; - SEC_MPEG4ENC_HANDLE *pMpeg4Enc = NULL; - OMX_S32 codecType = -1; - int i = 0; - - FunctionIn(); - - if ((hComponent == NULL) || (componentName == NULL)) { - ret = OMX_ErrorBadParameter; - SEC_OSAL_Log(SEC_LOG_ERROR, "%s: parameters are null, ret: %X", __FUNCTION__, ret); - goto EXIT; - } - if (SEC_OSAL_Strcmp(SEC_OMX_COMPONENT_MPEG4_ENC, componentName) == 0) { - codecType = CODEC_TYPE_MPEG4; - } else if (SEC_OSAL_Strcmp(SEC_OMX_COMPONENT_H263_ENC, componentName) == 0) { - codecType = CODEC_TYPE_H263; - } else { - ret = OMX_ErrorBadParameter; - SEC_OSAL_Log(SEC_LOG_ERROR, "%s: componentName(%s) error, ret: %X", __FUNCTION__, componentName, ret); - goto EXIT; - } - - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - ret = SEC_OMX_VideoEncodeComponentInit(pOMXComponent); - if (ret != OMX_ErrorNone) { - SEC_OSAL_Log(SEC_LOG_ERROR, "%s: SEC_OMX_VideoDecodeComponentInit error, ret: %X", __FUNCTION__, ret); - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - pSECComponent->codecType = HW_VIDEO_CODEC; - - pSECComponent->componentName = (OMX_STRING)SEC_OSAL_Malloc(MAX_OMX_COMPONENT_NAME_SIZE); - if (pSECComponent->componentName == NULL) { - SEC_OMX_VideoEncodeComponentDeinit(pOMXComponent); - ret = OMX_ErrorInsufficientResources; - SEC_OSAL_Log(SEC_LOG_ERROR, "%s: componentName alloc error, ret: %X", __FUNCTION__, ret); - goto EXIT; - } - SEC_OSAL_Memset(pSECComponent->componentName, 0, MAX_OMX_COMPONENT_NAME_SIZE); - - pMpeg4Enc = SEC_OSAL_Malloc(sizeof(SEC_MPEG4ENC_HANDLE)); - if (pMpeg4Enc == NULL) { - SEC_OMX_VideoEncodeComponentDeinit(pOMXComponent); - ret = OMX_ErrorInsufficientResources; - SEC_OSAL_Log(SEC_LOG_ERROR, "%s: SEC_MPEG4ENC_HANDLE alloc error, ret: %X", __FUNCTION__, ret); - goto EXIT; - } - SEC_OSAL_Memset(pMpeg4Enc, 0, sizeof(SEC_MPEG4ENC_HANDLE)); - pSECComponent->hCodecHandle = (OMX_HANDLETYPE)pMpeg4Enc; - pMpeg4Enc->hMFCMpeg4Handle.codecType = codecType; - - if (codecType == CODEC_TYPE_MPEG4) - SEC_OSAL_Strcpy(pSECComponent->componentName, SEC_OMX_COMPONENT_MPEG4_ENC); - else - SEC_OSAL_Strcpy(pSECComponent->componentName, SEC_OMX_COMPONENT_H263_ENC); - - /* Set componentVersion */ - pSECComponent->componentVersion.s.nVersionMajor = VERSIONMAJOR_NUMBER; - pSECComponent->componentVersion.s.nVersionMinor = VERSIONMINOR_NUMBER; - pSECComponent->componentVersion.s.nRevision = REVISION_NUMBER; - pSECComponent->componentVersion.s.nStep = STEP_NUMBER; - /* Set specVersion */ - pSECComponent->specVersion.s.nVersionMajor = VERSIONMAJOR_NUMBER; - pSECComponent->specVersion.s.nVersionMinor = VERSIONMINOR_NUMBER; - pSECComponent->specVersion.s.nRevision = REVISION_NUMBER; - pSECComponent->specVersion.s.nStep = STEP_NUMBER; - - /* Android CapabilityFlags */ - pSECComponent->capabilityFlags.iIsOMXComponentMultiThreaded = OMX_TRUE; - pSECComponent->capabilityFlags.iOMXComponentSupportsExternalInputBufferAlloc = OMX_TRUE; - pSECComponent->capabilityFlags.iOMXComponentSupportsExternalOutputBufferAlloc = OMX_TRUE; - pSECComponent->capabilityFlags.iOMXComponentSupportsMovableInputBuffers = OMX_FALSE; - pSECComponent->capabilityFlags.iOMXComponentSupportsPartialFrames = OMX_FALSE; - pSECComponent->capabilityFlags.iOMXComponentUsesNALStartCodes = OMX_TRUE; - pSECComponent->capabilityFlags.iOMXComponentCanHandleIncompleteFrames = OMX_TRUE; - pSECComponent->capabilityFlags.iOMXComponentUsesFullAVCFrames = OMX_TRUE; - - /* Input port */ - pSECPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - pSECPort->portDefinition.format.video.nFrameWidth = DEFAULT_FRAME_WIDTH; - pSECPort->portDefinition.format.video.nFrameHeight= DEFAULT_FRAME_HEIGHT; - pSECPort->portDefinition.format.video.nBitrate = 64000; - pSECPort->portDefinition.format.video.xFramerate= (15 << 16); - pSECPort->portDefinition.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused; - pSECPort->portDefinition.format.video.pNativeRender = 0; - pSECPort->portDefinition.format.video.bFlagErrorConcealment = OMX_FALSE; - SEC_OSAL_Memset(pSECPort->portDefinition.format.video.cMIMEType, 0, MAX_OMX_MIMETYPE_SIZE); - SEC_OSAL_Strcpy(pSECPort->portDefinition.format.video.cMIMEType, "raw/video"); - pSECPort->portDefinition.format.video.eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar; - pSECPort->portDefinition.nBufferSize = DEFAULT_VIDEO_INPUT_BUFFER_SIZE; - pSECPort->portDefinition.bEnabled = OMX_TRUE; - - /* Output port */ - pSECPort = &pSECComponent->pSECPort[OUTPUT_PORT_INDEX]; - pSECPort->portDefinition.format.video.nFrameWidth = DEFAULT_FRAME_WIDTH; - pSECPort->portDefinition.format.video.nFrameHeight= DEFAULT_FRAME_HEIGHT; - pSECPort->portDefinition.format.video.nBitrate = 64000; - pSECPort->portDefinition.format.video.xFramerate= (15 << 16); - if (codecType == CODEC_TYPE_MPEG4) { - pSECPort->portDefinition.format.video.eCompressionFormat = OMX_VIDEO_CodingMPEG4; - SEC_OSAL_Memset(pSECPort->portDefinition.format.video.cMIMEType, 0, MAX_OMX_MIMETYPE_SIZE); - SEC_OSAL_Strcpy(pSECPort->portDefinition.format.video.cMIMEType, "video/mpeg4"); - } else { - pSECPort->portDefinition.format.video.eCompressionFormat = OMX_VIDEO_CodingH263; - SEC_OSAL_Memset(pSECPort->portDefinition.format.video.cMIMEType, 0, MAX_OMX_MIMETYPE_SIZE); - SEC_OSAL_Strcpy(pSECPort->portDefinition.format.video.cMIMEType, "video/h263"); - } - pSECPort->portDefinition.format.video.pNativeRender = 0; - pSECPort->portDefinition.format.video.bFlagErrorConcealment = OMX_FALSE; - pSECPort->portDefinition.format.video.eColorFormat = OMX_COLOR_FormatUnused; - pSECPort->portDefinition.nBufferSize = DEFAULT_VIDEO_OUTPUT_BUFFER_SIZE; - pSECPort->portDefinition.bEnabled = OMX_TRUE; - - if (codecType == CODEC_TYPE_MPEG4) { - for(i = 0; i < ALL_PORT_NUM; i++) { - INIT_SET_SIZE_VERSION(&pMpeg4Enc->mpeg4Component[i], OMX_VIDEO_PARAM_MPEG4TYPE); - pMpeg4Enc->mpeg4Component[i].nPortIndex = i; - pMpeg4Enc->mpeg4Component[i].eProfile = OMX_VIDEO_MPEG4ProfileSimple; - pMpeg4Enc->mpeg4Component[i].eLevel = OMX_VIDEO_MPEG4Level4; - - pMpeg4Enc->mpeg4Component[i].nPFrames = 10; - pMpeg4Enc->mpeg4Component[i].nBFrames = 0; /* No support for B frames */ - pMpeg4Enc->mpeg4Component[i].nMaxPacketSize = 256; /* Default value */ - pMpeg4Enc->mpeg4Component[i].nAllowedPictureTypes = OMX_VIDEO_PictureTypeI | OMX_VIDEO_PictureTypeP; - pMpeg4Enc->mpeg4Component[i].bGov = OMX_FALSE; - - } - } else { - for(i = 0; i < ALL_PORT_NUM; i++) { - INIT_SET_SIZE_VERSION(&pMpeg4Enc->h263Component[i], OMX_VIDEO_PARAM_H263TYPE); - pMpeg4Enc->h263Component[i].nPortIndex = i; - pMpeg4Enc->h263Component[i].eProfile = OMX_VIDEO_H263ProfileBaseline; - pMpeg4Enc->h263Component[i].eLevel = OMX_VIDEO_H263Level45; - - pMpeg4Enc->h263Component[i].nPFrames = 20; - pMpeg4Enc->h263Component[i].nBFrames = 0; /* No support for B frames */ - pMpeg4Enc->h263Component[i].bPLUSPTYPEAllowed = OMX_FALSE; - pMpeg4Enc->h263Component[i].nAllowedPictureTypes = OMX_VIDEO_PictureTypeI | OMX_VIDEO_PictureTypeP; - pMpeg4Enc->h263Component[i].bForceRoundingTypeToZero = OMX_TRUE; - pMpeg4Enc->h263Component[i].nPictureHeaderRepetition = 0; - pMpeg4Enc->h263Component[i].nGOBHeaderInterval = 0; - } - } - - pOMXComponent->GetParameter = &SEC_MFC_Mpeg4Enc_GetParameter; - pOMXComponent->SetParameter = &SEC_MFC_Mpeg4Enc_SetParameter; - pOMXComponent->GetConfig = &SEC_MFC_Mpeg4Enc_GetConfig; - pOMXComponent->SetConfig = &SEC_MFC_Mpeg4Enc_SetConfig; - pOMXComponent->GetExtensionIndex = &SEC_MFC_Mpeg4Enc_GetExtensionIndex; - pOMXComponent->ComponentRoleEnum = &SEC_MFC_Mpeg4Enc_ComponentRoleEnum; - pOMXComponent->ComponentDeInit = &SEC_OMX_ComponentDeinit; - - pSECComponent->sec_mfc_componentInit = &SEC_MFC_Mpeg4Enc_Init; - pSECComponent->sec_mfc_componentTerminate = &SEC_MFC_Mpeg4Enc_Terminate; - pSECComponent->sec_mfc_bufferProcess = &SEC_MFC_Mpeg4Enc_bufferProcess; - pSECComponent->sec_checkInputFrame = NULL; - - pSECComponent->currentState = OMX_StateLoaded; - - ret = OMX_ErrorNone; - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_ComponentDeinit(OMX_HANDLETYPE hComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_MPEG4ENC_HANDLE *pMpeg4Enc = NULL; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - SEC_OSAL_Free(pSECComponent->componentName); - pSECComponent->componentName = NULL; - - pMpeg4Enc = (SEC_MPEG4ENC_HANDLE *)pSECComponent->hCodecHandle; - if (pMpeg4Enc != NULL) { - SEC_OSAL_Free(pMpeg4Enc); - pMpeg4Enc = pSECComponent->hCodecHandle = NULL; - } - - ret = SEC_OMX_VideoEncodeComponentDeinit(pOMXComponent); - if (ret != OMX_ErrorNone) { - goto EXIT; - } - - ret = OMX_ErrorNone; - -EXIT: - FunctionOut(); - - return ret; -} diff --git a/sec_mm/sec_omx/sec_omx_component/video/enc/mpeg4enc/SEC_OMX_Mpeg4enc.h b/sec_mm/sec_omx/sec_omx_component/video/enc/mpeg4enc/SEC_OMX_Mpeg4enc.h deleted file mode 100644 index 36e02d8..0000000 --- a/sec_mm/sec_omx/sec_omx_component/video/enc/mpeg4enc/SEC_OMX_Mpeg4enc.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OMX_Mpeg4enc.h - * @brief - * @author Yunji Kim (yunji.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#ifndef SEC_OMX_MPEG4_ENC_COMPONENT -#define SEC_OMX_MPEG4_ENC_COMPONENT - -#include "SEC_OMX_Def.h" -#include "OMX_Component.h" -#include "SsbSipMfcApi.h" - - -typedef enum _CODEC_TYPE -{ - CODEC_TYPE_H263, - CODEC_TYPE_MPEG4 -} CODEC_TYPE; - -typedef struct _SEC_MFC_MPEG4ENC_HANDLE -{ - OMX_HANDLETYPE hMFCHandle; - SSBSIP_MFC_ENC_MPEG4_PARAM mpeg4MFCParam; - SSBSIP_MFC_ENC_H263_PARAM h263MFCParam; - SSBSIP_MFC_ENC_INPUT_INFO inputInfo; - OMX_U32 indexTimestamp; - OMX_BOOL bConfiguredMFC; - CODEC_TYPE codecType; - OMX_S32 returnCodec; -} SEC_MFC_MPEG4ENC_HANDLE; - -typedef struct _SEC_MPEG4ENC_HANDLE -{ - /* OMX Codec specific */ - OMX_VIDEO_PARAM_H263TYPE h263Component[ALL_PORT_NUM]; - OMX_VIDEO_PARAM_MPEG4TYPE mpeg4Component[ALL_PORT_NUM]; - OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE errorCorrectionType[ALL_PORT_NUM]; - - /* SEC MFC Codec specific */ - SEC_MFC_MPEG4ENC_HANDLE hMFCMpeg4Handle; - - /* For Non-Block mode */ - SEC_MFC_NBENC_THREAD NBEncThread; - OMX_BOOL bFirstFrame; - MFC_ENC_INPUT_BUFFER MFCEncInputBuffer[MFC_INPUT_BUFFER_NUM_MAX]; - OMX_U32 indexInputBuffer; -} SEC_MPEG4ENC_HANDLE; - - -#ifdef __cplusplus -extern "C" { -#endif - - -OSCL_EXPORT_REF OMX_ERRORTYPE SEC_OMX_ComponentInit(OMX_HANDLETYPE hComponent, OMX_STRING componentName); - OMX_ERRORTYPE SEC_OMX_ComponentDeinit(OMX_HANDLETYPE hComponent); - -#ifdef __cplusplus -}; -#endif - -#endif diff --git a/sec_mm/sec_omx/sec_omx_component/video/enc/mpeg4enc/library_register.c b/sec_mm/sec_omx/sec_omx_component/video/enc/mpeg4enc/library_register.c deleted file mode 100644 index 467eba2..0000000 --- a/sec_mm/sec_omx/sec_omx_component/video/enc/mpeg4enc/library_register.c +++ /dev/null @@ -1,64 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file library_register.c - * @brief - * @author Yunji Kim (yunji.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - - -#include -#include -#include -#include - -#include "SEC_OSAL_Memory.h" -#include "SEC_OSAL_ETC.h" -#include "library_register.h" - -#undef SEC_LOG_TAG -#define SEC_LOG_TAG "SEC_MPEG4_ENC" -#define SEC_LOG_OFF -#include "SEC_OSAL_Log.h" - - -OSCL_EXPORT_REF int SEC_OMX_COMPONENT_Library_Register(SECRegisterComponentType **ppSECComponent) -{ - FunctionIn(); - - if (ppSECComponent == NULL) - goto EXIT; - - /* component 1 - video encoder MPEG4 */ - SEC_OSAL_Strcpy(ppSECComponent[0]->componentName, SEC_OMX_COMPONENT_MPEG4_ENC); - SEC_OSAL_Strcpy(ppSECComponent[0]->roles[0], SEC_OMX_COMPONENT_MPEG4_ENC_ROLE); - ppSECComponent[0]->totalRoleNum = MAX_COMPONENT_ROLE_NUM; - - /* component 2 - video encoder H.263 */ - SEC_OSAL_Strcpy(ppSECComponent[1]->componentName, SEC_OMX_COMPONENT_H263_ENC); - SEC_OSAL_Strcpy(ppSECComponent[1]->roles[0], SEC_OMX_COMPONENT_H263_ENC_ROLE); - ppSECComponent[1]->totalRoleNum = MAX_COMPONENT_ROLE_NUM; - -EXIT: - FunctionOut(); - return MAX_COMPONENT_NUM; -} - diff --git a/sec_mm/sec_omx/sec_omx_component/video/enc/mpeg4enc/library_register.h b/sec_mm/sec_omx/sec_omx_component/video/enc/mpeg4enc/library_register.h deleted file mode 100644 index e172d51..0000000 --- a/sec_mm/sec_omx/sec_omx_component/video/enc/mpeg4enc/library_register.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file library_register.h - * @brief - * @author Yunji Kim (yunji.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#ifndef SEC_OMX_MPEG4_ENC_REG -#define SEC_OMX_MPEG4_ENC_REG - -#include "SEC_OMX_Def.h" -#include "OMX_Component.h" -#include "SEC_OMX_Component_Register.h" - - -#define OSCL_EXPORT_REF __attribute__((visibility("default"))) -#define MAX_COMPONENT_NUM 2 -#define MAX_COMPONENT_ROLE_NUM 1 - -/* MPEG4 */ -#define SEC_OMX_COMPONENT_MPEG4_ENC "OMX.SEC.MPEG4.Encoder" -#define SEC_OMX_COMPONENT_MPEG4_ENC_ROLE "video_encoder.mpeg4" - -/* H.263 */ -#define SEC_OMX_COMPONENT_H263_ENC "OMX.SEC.H263.Encoder" -#define SEC_OMX_COMPONENT_H263_ENC_ROLE "video_encoder.h263" - - -#ifdef __cplusplus -extern "C" { -#endif - -OSCL_EXPORT_REF int SEC_OMX_COMPONENT_Library_Register(SECRegisterComponentType **ppSECComponent); - -#ifdef __cplusplus -}; -#endif - -#endif - diff --git a/sec_mm/sec_omx/sec_omx_core/Android.mk b/sec_mm/sec_omx/sec_omx_core/Android.mk deleted file mode 100644 index ddc3c4d..0000000 --- a/sec_mm/sec_omx/sec_omx_core/Android.mk +++ /dev/null @@ -1,25 +0,0 @@ -LOCAL_PATH := $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := optional - -LOCAL_SRC_FILES := SEC_OMX_Component_Register.c \ - SEC_OMX_Core.c - - -LOCAL_MODULE := libSEC_OMX_Core.aries - -LOCAL_CFLAGS := - -LOCAL_ARM_MODE := arm - -LOCAL_STATIC_LIBRARIES := libsecosal.aries libsecbasecomponent.aries -LOCAL_SHARED_LIBRARIES := libc libdl libcutils libutils - -LOCAL_C_INCLUDES := $(SEC_OMX_INC)/khronos \ - $(SEC_OMX_INC)/sec \ - $(SEC_OMX_TOP)/sec_osal \ - $(SEC_OMX_TOP)/sec_omx_component/common - -include $(BUILD_SHARED_LIBRARY) - diff --git a/sec_mm/sec_omx/sec_omx_core/SEC_OMX_Component_Register.c b/sec_mm/sec_omx/sec_omx_core/SEC_OMX_Component_Register.c deleted file mode 100644 index 1464397..0000000 --- a/sec_mm/sec_omx/sec_omx_core/SEC_OMX_Component_Register.c +++ /dev/null @@ -1,269 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OMX_Component_Register.c - * @brief SEC OpenMAX IL Component Register - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ -#include -#include -#include -#include -#include -#include -#include -#include - -#include "OMX_Component.h" -#include "SEC_OSAL_Memory.h" -#include "SEC_OSAL_ETC.h" -#include "SEC_OSAL_Library.h" -#include "SEC_OMX_Component_Register.h" -#include "SEC_OMX_Macros.h" - -#undef SEC_LOG_TAG -#define SEC_LOG_TAG "SEC_COMP_REGS" -#define SEC_LOG_OFF -#include "SEC_OSAL_Log.h" - - -#define REGISTRY_FILENAME "secomxregistry" - - -OMX_ERRORTYPE SEC_OMX_Component_Register(SEC_OMX_COMPONENT_REGLIST **compList, OMX_U32 *compNum) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - int componentNum = 0, roleNum = 0, totalCompNum = 0; - int read; - char *omxregistryfile = NULL; - char *line = NULL; - char *libName; - FILE *omxregistryfp; - size_t len; - OMX_HANDLETYPE soHandle; - const char *errorMsg; - int (*SEC_OMX_COMPONENT_Library_Register)(SECRegisterComponentType **secComponents); - SECRegisterComponentType **secComponentsTemp; - SEC_OMX_COMPONENT_REGLIST *componentList; - - FunctionIn(); - - omxregistryfile = SEC_OSAL_Malloc(strlen("/system/etc/") + strlen(REGISTRY_FILENAME) + 2); - SEC_OSAL_Strcpy(omxregistryfile, "/system/etc/"); - SEC_OSAL_Strcat(omxregistryfile, REGISTRY_FILENAME); - - omxregistryfp = fopen(omxregistryfile, "r"); - if (omxregistryfp == NULL) { - ret = OMX_ErrorUndefined; - goto EXIT; - } - SEC_OSAL_Free(omxregistryfile); - - fseek(omxregistryfp, 0, 0); - componentList = (SEC_OMX_COMPONENT_REGLIST *)SEC_OSAL_Malloc(sizeof(SEC_OMX_COMPONENT_REGLIST) * MAX_OMX_COMPONENT_NUM); - SEC_OSAL_Memset(componentList, 0, sizeof(SEC_OMX_COMPONENT_REGLIST) * MAX_OMX_COMPONENT_NUM); - libName = SEC_OSAL_Malloc(MAX_OMX_COMPONENT_LIBNAME_SIZE); - - while ((read = getline(&line, &len, omxregistryfp)) != -1) { - if ((*line == 'l') && (*(line + 1) == 'i') && (*(line + 2) == 'b') && - (*(line + 3) == 'O') && (*(line + 4) == 'M') && (*(line + 5) == 'X')) { - SEC_OSAL_Memset(libName, 0, MAX_OMX_COMPONENT_LIBNAME_SIZE); - SEC_OSAL_Strncpy(libName, line, SEC_OSAL_Strlen(line)-1); - SEC_OSAL_Log(SEC_LOG_TRACE, "libName : %s", libName); - - if ((soHandle = SEC_OSAL_dlopen(libName, RTLD_NOW)) != NULL) { - SEC_OSAL_dlerror(); /* clear error*/ - if ((SEC_OMX_COMPONENT_Library_Register = SEC_OSAL_dlsym(soHandle, "SEC_OMX_COMPONENT_Library_Register")) != NULL) { - int i = 0, j = 0; - - componentNum = (*SEC_OMX_COMPONENT_Library_Register)(NULL); - secComponentsTemp = (SECRegisterComponentType **)SEC_OSAL_Malloc(sizeof(SECRegisterComponentType*) * componentNum); - for (i = 0; i < componentNum; i++) { - secComponentsTemp[i] = SEC_OSAL_Malloc(sizeof(SECRegisterComponentType)); - SEC_OSAL_Memset(secComponentsTemp[i], 0, sizeof(SECRegisterComponentType)); - } - (*SEC_OMX_COMPONENT_Library_Register)(secComponentsTemp); - - for (i = 0; i < componentNum; i++) { - SEC_OSAL_Strcpy(componentList[totalCompNum].component.componentName, secComponentsTemp[i]->componentName); - for (j = 0; j < secComponentsTemp[i]->totalRoleNum; j++) - SEC_OSAL_Strcpy(componentList[totalCompNum].component.roles[j], secComponentsTemp[i]->roles[j]); - componentList[totalCompNum].component.totalRoleNum = secComponentsTemp[i]->totalRoleNum; - - SEC_OSAL_Strcpy(componentList[totalCompNum].libName, libName); - - totalCompNum++; - } - for (i = 0; i < componentNum; i++) { - SEC_OSAL_Free(secComponentsTemp[i]); - } - - SEC_OSAL_Free(secComponentsTemp); - } else { - if ((errorMsg = SEC_OSAL_dlerror()) != NULL) - SEC_OSAL_Log(SEC_LOG_WARNING, "dlsym failed: %s", errorMsg); - } - SEC_OSAL_dlclose(soHandle); - } else { - SEC_OSAL_Log(SEC_LOG_WARNING, "dlopen failed: %s", SEC_OSAL_dlerror()); - } - } else { - /* not a component name line. skip */ - continue; - } - } - - SEC_OSAL_Free(libName); - fclose(omxregistryfp); - - *compList = componentList; - *compNum = totalCompNum; - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_Component_Unregister(SEC_OMX_COMPONENT_REGLIST *componentList) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - - SEC_OSAL_Memset(componentList, 0, sizeof(SEC_OMX_COMPONENT_REGLIST) * MAX_OMX_COMPONENT_NUM); - SEC_OSAL_Free(componentList); - -EXIT: - return ret; -} - -OMX_ERRORTYPE SEC_OMX_ComponentAPICheck(OMX_COMPONENTTYPE component) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - - if ((NULL == component.GetComponentVersion) || - (NULL == component.SendCommand) || - (NULL == component.GetParameter) || - (NULL == component.SetParameter) || - (NULL == component.GetConfig) || - (NULL == component.SetConfig) || - (NULL == component.GetExtensionIndex) || - (NULL == component.GetState) || - (NULL == component.ComponentTunnelRequest) || - (NULL == component.UseBuffer) || - (NULL == component.AllocateBuffer) || - (NULL == component.FreeBuffer) || - (NULL == component.EmptyThisBuffer) || - (NULL == component.FillThisBuffer) || - (NULL == component.SetCallbacks) || - (NULL == component.ComponentDeInit) || - (NULL == component.UseEGLImage) || - (NULL == component.ComponentRoleEnum)) - ret = OMX_ErrorInvalidComponent; - else - ret = OMX_ErrorNone; - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_ComponentLoad(SEC_OMX_COMPONENT *sec_component) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_HANDLETYPE libHandle; - OMX_COMPONENTTYPE *pOMXComponent; - - FunctionIn(); - - OMX_ERRORTYPE (*SEC_OMX_ComponentInit)(OMX_HANDLETYPE hComponent, OMX_STRING componentName); - - libHandle = SEC_OSAL_dlopen(sec_component->libName, RTLD_NOW); - if (!libHandle) { - ret = OMX_ErrorInvalidComponentName; - SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorInvalidComponentName, Line:%d", __LINE__); - goto EXIT; - } - - SEC_OMX_ComponentInit = SEC_OSAL_dlsym(libHandle, "SEC_OMX_ComponentInit"); - if (!SEC_OMX_ComponentInit) { - SEC_OSAL_dlclose(libHandle); - ret = OMX_ErrorInvalidComponent; - SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorInvalidComponent, Line:%d", __LINE__); - goto EXIT; - } - - pOMXComponent = (OMX_COMPONENTTYPE *)SEC_OSAL_Malloc(sizeof(OMX_COMPONENTTYPE)); - INIT_SET_SIZE_VERSION(pOMXComponent, OMX_COMPONENTTYPE); - ret = (*SEC_OMX_ComponentInit)((OMX_HANDLETYPE)pOMXComponent, sec_component->componentName); - if (ret != OMX_ErrorNone) { - SEC_OSAL_Free(pOMXComponent); - SEC_OSAL_dlclose(libHandle); - ret = OMX_ErrorInvalidComponent; - SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorInvalidComponent, Line:%d", __LINE__); - goto EXIT; - } else { - if (SEC_OMX_ComponentAPICheck(*pOMXComponent) != OMX_ErrorNone) { - SEC_OSAL_Free(pOMXComponent); - SEC_OSAL_dlclose(libHandle); - if (NULL != pOMXComponent->ComponentDeInit) - pOMXComponent->ComponentDeInit(pOMXComponent); - ret = OMX_ErrorInvalidComponent; - SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorInvalidComponent, Line:%d", __LINE__); - goto EXIT; - } - sec_component->libHandle = libHandle; - sec_component->pOMXComponent = pOMXComponent; - ret = OMX_ErrorNone; - } - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OMX_ComponentUnload(SEC_OMX_COMPONENT *sec_component) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - - FunctionIn(); - - if (!sec_component) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - - pOMXComponent = sec_component->pOMXComponent; - if (pOMXComponent != NULL) { - pOMXComponent->ComponentDeInit(pOMXComponent); - SEC_OSAL_Free(pOMXComponent); - sec_component->pOMXComponent = NULL; - } - - if (sec_component->libHandle != NULL) { - SEC_OSAL_dlclose(sec_component->libHandle); - sec_component->libHandle = NULL; - } - -EXIT: - FunctionOut(); - - return ret; -} diff --git a/sec_mm/sec_omx/sec_omx_core/SEC_OMX_Component_Register.h b/sec_mm/sec_omx/sec_omx_core/SEC_OMX_Component_Register.h deleted file mode 100644 index 66580bd..0000000 --- a/sec_mm/sec_omx/sec_omx_core/SEC_OMX_Component_Register.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OMX_Component_Register.h - * @brief SEC OpenMAX IL Component Register - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#ifndef SEC_OMX_COMPONENT_REG -#define SEC_OMX_COMPONENT_REG - -#include "SEC_OMX_Def.h" -#include "OMX_Types.h" -#include "OMX_Core.h" -#include "OMX_Component.h" - - -typedef struct _SECRegisterComponentType -{ - OMX_U8 componentName[MAX_OMX_COMPONENT_NAME_SIZE]; - OMX_U8 roles[MAX_OMX_COMPONENT_ROLE_NUM][MAX_OMX_COMPONENT_ROLE_SIZE]; - OMX_U32 totalRoleNum; -} SECRegisterComponentType; - -typedef struct _SEC_OMX_COMPONENT_REGLIST -{ - SECRegisterComponentType component; - OMX_U8 libName[MAX_OMX_COMPONENT_LIBNAME_SIZE]; -} SEC_OMX_COMPONENT_REGLIST; - -struct SEC_OMX_COMPONENT; -typedef struct _SEC_OMX_COMPONENT -{ - OMX_U8 componentName[MAX_OMX_COMPONENT_NAME_SIZE]; - OMX_U8 libName[MAX_OMX_COMPONENT_LIBNAME_SIZE]; - OMX_HANDLETYPE libHandle; - OMX_COMPONENTTYPE *pOMXComponent; - struct SEC_OMX_COMPONENT *nextOMXComp; -} SEC_OMX_COMPONENT; - - -#ifdef __cplusplus -extern "C" { -#endif - - -OMX_ERRORTYPE SEC_OMX_Component_Register(SEC_OMX_COMPONENT_REGLIST **compList, OMX_U32 *compNum); -OMX_ERRORTYPE SEC_OMX_Component_Unregister(SEC_OMX_COMPONENT_REGLIST *componentList); -OMX_ERRORTYPE SEC_OMX_ComponentLoad(SEC_OMX_COMPONENT *sec_component); -OMX_ERRORTYPE SEC_OMX_ComponentUnload(SEC_OMX_COMPONENT *sec_component); - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/sec_mm/sec_omx/sec_omx_core/SEC_OMX_Core.c b/sec_mm/sec_omx/sec_omx_core/SEC_OMX_Core.c deleted file mode 100644 index fb2875d..0000000 --- a/sec_mm/sec_omx/sec_omx_core/SEC_OMX_Core.c +++ /dev/null @@ -1,363 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OMX_Core.c - * @brief SEC OpenMAX IL Core - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * HyeYeon Chung (hyeon.chung@samsung.com) - * Yunji Kim (yunji.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#include -#include -#include -#include // for pthread related functions - -#include "SEC_OMX_Core.h" -#include "SEC_OSAL_Mutex.h" // for mutext related functions -#include "SEC_OSAL_ETC.h" // for SEC_OSAL_Strcmp, etc -#include "SEC_OMX_Component_Register.h" -#include "SEC_OSAL_Memory.h" -#include "SEC_OMX_Resourcemanager.h" - -#undef SEC_LOG_TAG -#define SEC_LOG_TAG "SEC_OMX_CORE" -#define SEC_LOG_OFF -#include "SEC_OSAL_Log.h" - - -static int gInitialized = 0; -static OMX_U32 gComponentNum = 0; - -static SEC_OMX_COMPONENT_REGLIST *gComponentList = NULL; -static SEC_OMX_COMPONENT *gLoadComponentList = NULL; -static pthread_mutex_t ghLoadComponentListMutex = PTHREAD_MUTEX_INITIALIZER; - - -OMX_API OMX_ERRORTYPE OMX_APIENTRY SEC_OMX_Init(void) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - - FunctionIn(); - - SEC_OSAL_MutexLock(&ghLoadComponentListMutex); - if (gInitialized == 0) { - if (SEC_OMX_Component_Register(&gComponentList, &gComponentNum)) { - ret = OMX_ErrorInsufficientResources; - SEC_OSAL_Log(SEC_LOG_ERROR, "SEC_OMX_Init : %s", "OMX_ErrorInsufficientResources"); - goto EXIT; - } - - SEC_OMX_ResourceManager_Init(); - SEC_OSAL_Log(SEC_LOG_TRACE, "SEC_OMX_Init : %s", "OMX_ErrorNone"); - } - ++gInitialized; - -EXIT: - SEC_OSAL_MutexUnlock(&ghLoadComponentListMutex); - FunctionOut(); - - return ret; -} - -OMX_API OMX_ERRORTYPE OMX_APIENTRY SEC_OMX_Deinit(void) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - - FunctionIn(); - - SEC_OSAL_MutexLock(&ghLoadComponentListMutex); - if (gInitialized > 0) { - --gInitialized; - } - - if (gInitialized != 0) { - // Some component still uses the core. - // Nothing needs to be done - goto EXIT; - } - - SEC_OMX_ResourceManager_Deinit(); - - if (OMX_ErrorNone != SEC_OMX_Component_Unregister(gComponentList)) { - ret = OMX_ErrorUndefined; - goto EXIT; - } - gComponentList = NULL; - gComponentNum = 0; - -EXIT: - SEC_OSAL_MutexUnlock(&ghLoadComponentListMutex); - FunctionOut(); - - return ret; -} - -OMX_API OMX_ERRORTYPE OMX_APIENTRY SEC_OMX_ComponentNameEnum( - OMX_OUT OMX_STRING cComponentName, - OMX_IN OMX_U32 nNameLength, - OMX_IN OMX_U32 nIndex) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - - FunctionIn(); - - if (nIndex >= gComponentNum) { - ret = OMX_ErrorNoMore; - goto EXIT; - } - - sprintf(cComponentName, "%s", gComponentList[nIndex].component.componentName); - ret = OMX_ErrorNone; - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_API OMX_ERRORTYPE OMX_APIENTRY SEC_OMX_GetHandle( - OMX_OUT OMX_HANDLETYPE *pHandle, - OMX_IN OMX_STRING cComponentName, - OMX_IN OMX_PTR pAppData, - OMX_IN OMX_CALLBACKTYPE *pCallBacks) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_COMPONENT *loadComponent; - SEC_OMX_COMPONENT *currentComponent; - - FunctionIn(); - - if (gInitialized != 1) { - ret = OMX_ErrorNotReady; - goto EXIT; - } - - if ((pHandle == NULL) || (cComponentName == NULL) || (pCallBacks == NULL)) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - SEC_OSAL_Log(SEC_LOG_TRACE, "ComponentName : %s", cComponentName); - - OMX_U32 i = 0; - for (i = 0; i < gComponentNum; i++) { - if (SEC_OSAL_Strcmp(cComponentName, gComponentList[i].component.componentName) == 0) { - loadComponent = SEC_OSAL_Malloc(sizeof(SEC_OMX_COMPONENT)); - SEC_OSAL_Memset(loadComponent, 0, sizeof(SEC_OMX_COMPONENT)); - - SEC_OSAL_Strcpy(loadComponent->libName, gComponentList[i].libName); - SEC_OSAL_Strcpy(loadComponent->componentName, gComponentList[i].component.componentName); - ret = SEC_OMX_ComponentLoad(loadComponent); - if (ret != OMX_ErrorNone) { - SEC_OSAL_Free(loadComponent); - SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_Error, Line:%d", __LINE__); - goto EXIT; - } - - ret = loadComponent->pOMXComponent->SetCallbacks(loadComponent->pOMXComponent, pCallBacks, pAppData); - if (ret != OMX_ErrorNone) { - SEC_OMX_ComponentUnload(loadComponent); - SEC_OSAL_Free(loadComponent); - SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_Error, Line:%d", __LINE__); - goto EXIT; - } - - SEC_OSAL_MutexLock(&ghLoadComponentListMutex); - if (gLoadComponentList == NULL) { - gLoadComponentList = loadComponent; - } else { - currentComponent = gLoadComponentList; - while (currentComponent->nextOMXComp != NULL) { - currentComponent = currentComponent->nextOMXComp; - } - currentComponent->nextOMXComp = loadComponent; - } - SEC_OSAL_MutexUnlock(&ghLoadComponentListMutex); - - *pHandle = loadComponent->pOMXComponent; - ret = OMX_ErrorNone; - SEC_OSAL_Log(SEC_LOG_TRACE, "SEC_OMX_GetHandle : %s", "OMX_ErrorNone"); - goto EXIT; - } - } - - ret = OMX_ErrorComponentNotFound; - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_API OMX_ERRORTYPE OMX_APIENTRY SEC_OMX_FreeHandle(OMX_IN OMX_HANDLETYPE hComponent) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_OMX_COMPONENT *currentComponent; - SEC_OMX_COMPONENT *deleteComponent; - - FunctionIn(); - - if (gInitialized != 1) { - ret = OMX_ErrorNotReady; - goto EXIT; - } - - if (!hComponent) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - - SEC_OSAL_MutexLock(&ghLoadComponentListMutex); - currentComponent = gLoadComponentList; - if (gLoadComponentList->pOMXComponent == hComponent) { - deleteComponent = gLoadComponentList; - gLoadComponentList = gLoadComponentList->nextOMXComp; - } else { - while ((currentComponent != NULL) && (((SEC_OMX_COMPONENT *)(currentComponent->nextOMXComp))->pOMXComponent != hComponent)) - currentComponent = currentComponent->nextOMXComp; - - if (((SEC_OMX_COMPONENT *)(currentComponent->nextOMXComp))->pOMXComponent == hComponent) { - deleteComponent = currentComponent->nextOMXComp; - currentComponent->nextOMXComp = deleteComponent->nextOMXComp; - } else if (currentComponent == NULL) { - ret = OMX_ErrorComponentNotFound; - goto EXIT; - } - } - - SEC_OMX_ComponentUnload(deleteComponent); - SEC_OSAL_Free(deleteComponent); - -EXIT: - SEC_OSAL_MutexUnlock(&ghLoadComponentListMutex); - FunctionOut(); - - return ret; -} - -OMX_API OMX_ERRORTYPE OMX_APIENTRY SEC_OMX_SetupTunnel( - OMX_IN OMX_HANDLETYPE hOutput, - OMX_IN OMX_U32 nPortOutput, - OMX_IN OMX_HANDLETYPE hInput, - OMX_IN OMX_U32 nPortInput) -{ - OMX_ERRORTYPE ret = OMX_ErrorNotImplemented; - -EXIT: - return ret; -} - -OMX_API OMX_ERRORTYPE SEC_OMX_GetContentPipe( - OMX_OUT OMX_HANDLETYPE *hPipe, - OMX_IN OMX_STRING szURI) -{ - OMX_ERRORTYPE ret = OMX_ErrorNotImplemented; - -EXIT: - return ret; -} - -OMX_API OMX_ERRORTYPE SEC_OMX_GetComponentsOfRole ( - OMX_IN OMX_STRING role, - OMX_INOUT OMX_U32 *pNumComps, - OMX_INOUT OMX_U8 **compNames) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - int max_role_num = 0; - OMX_STRING RoleString[MAX_OMX_COMPONENT_ROLE_SIZE]; - int i = 0, j = 0; - - FunctionIn(); - - if (gInitialized != 1) { - ret = OMX_ErrorNotReady; - goto EXIT; - } - - *pNumComps = 0; - - for (i = 0; i < MAX_OMX_COMPONENT_NUM; i++) { - max_role_num = gComponentList[i].component.totalRoleNum; - - for (j = 0; j < max_role_num; j++) { - if (SEC_OSAL_Strcmp(gComponentList[i].component.roles[j], role) == 0) { - if (compNames != NULL) { - SEC_OSAL_Strcpy((OMX_STRING)compNames[*pNumComps], gComponentList[i].component.componentName); - } - *pNumComps = (*pNumComps + 1); - } - } - } - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_API OMX_ERRORTYPE SEC_OMX_GetRolesOfComponent ( - OMX_IN OMX_STRING compName, - OMX_INOUT OMX_U32 *pNumRoles, - OMX_OUT OMX_U8 **roles) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_BOOL detectComp = OMX_FALSE; - int compNum = 0, totalRoleNum = 0; - int i = 0; - - FunctionIn(); - - if (gInitialized != 1) { - ret = OMX_ErrorNotReady; - goto EXIT; - } - - for (i = 0; i < MAX_OMX_COMPONENT_NUM; i++) { - if (gComponentList != NULL) { - if (SEC_OSAL_Strcmp(gComponentList[i].component.componentName, compName) == 0) { - *pNumRoles = totalRoleNum = gComponentList[i].component.totalRoleNum; - compNum = i; - detectComp = OMX_TRUE; - break; - } - } else { - ret = OMX_ErrorUndefined; - goto EXIT; - } - } - - if (detectComp == OMX_FALSE) { - *pNumRoles = 0; - ret = OMX_ErrorComponentNotFound; - goto EXIT; - } - - if (roles != NULL) { - for (i = 0; i < totalRoleNum; i++) { - SEC_OSAL_Strcpy(roles[i], gComponentList[compNum].component.roles[i]); - } - } - -EXIT: - FunctionOut(); - - return ret; -} diff --git a/sec_mm/sec_omx/sec_omx_core/SEC_OMX_Core.h b/sec_mm/sec_omx/sec_omx_core/SEC_OMX_Core.h deleted file mode 100644 index 87f561c..0000000 --- a/sec_mm/sec_omx/sec_omx_core/SEC_OMX_Core.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OMX_Core.h - * @brief SEC OpenMAX IL Core - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * HyeYeon Chung (hyeon.chung@samsung.com) - * Yunji Kim (yunji.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#ifndef SEC_OMX_CORE -#define SEC_OMX_CORE - -#include "SEC_OMX_Def.h" -#include "OMX_Types.h" -#include "OMX_Core.h" - - -#ifdef __cplusplus -extern "C" { -#endif - - -SEC_EXPORT_REF OMX_API OMX_ERRORTYPE OMX_APIENTRY SEC_OMX_Init(void); -SEC_EXPORT_REF OMX_API OMX_ERRORTYPE OMX_APIENTRY SEC_OMX_Deinit(void); -SEC_EXPORT_REF OMX_API OMX_ERRORTYPE OMX_APIENTRY SEC_OMX_ComponentNameEnum( - OMX_OUT OMX_STRING cComponentName, - OMX_IN OMX_U32 nNameLength, - OMX_IN OMX_U32 nIndex); -SEC_EXPORT_REF OMX_API OMX_ERRORTYPE OMX_APIENTRY SEC_OMX_GetHandle( - OMX_OUT OMX_HANDLETYPE *pHandle, - OMX_IN OMX_STRING cComponentName, - OMX_IN OMX_PTR pAppData, - OMX_IN OMX_CALLBACKTYPE *pCallBacks); -SEC_EXPORT_REF OMX_API OMX_ERRORTYPE OMX_APIENTRY SEC_OMX_FreeHandle( - OMX_IN OMX_HANDLETYPE hComponent); -SEC_EXPORT_REF OMX_API OMX_ERRORTYPE OMX_APIENTRY SEC_OMX_SetupTunnel( - OMX_IN OMX_HANDLETYPE hOutput, - OMX_IN OMX_U32 nPortOutput, - OMX_IN OMX_HANDLETYPE hInput, - OMX_IN OMX_U32 nPortInput); -SEC_EXPORT_REF OMX_API OMX_ERRORTYPE SEC_OMX_GetContentPipe( - OMX_OUT OMX_HANDLETYPE *hPipe, - OMX_IN OMX_STRING szURI); -SEC_EXPORT_REF OMX_API OMX_ERRORTYPE SEC_OMX_GetComponentsOfRole( - OMX_IN OMX_STRING role, - OMX_INOUT OMX_U32 *pNumComps, - OMX_INOUT OMX_U8 **compNames); -SEC_EXPORT_REF OMX_API OMX_ERRORTYPE SEC_OMX_GetRolesOfComponent( - OMX_IN OMX_STRING compName, - OMX_INOUT OMX_U32 *pNumRoles, - OMX_OUT OMX_U8 **roles); - - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/sec_mm/sec_omx/sec_omx_core/secomxregistry b/sec_mm/sec_omx/sec_omx_core/secomxregistry deleted file mode 100644 index cc762e6..0000000 --- a/sec_mm/sec_omx/sec_omx_core/secomxregistry +++ /dev/null @@ -1,4 +0,0 @@ -libOMX.SEC.AVC.Decoder.aries.so -libOMX.SEC.M4V.Decoder.aries.so -libOMX.SEC.AVC.Encoder.aries.so -libOMX.SEC.M4V.Encoder.aries.so diff --git a/sec_mm/sec_omx/sec_omx_include/khronos/OMX_Audio.h b/sec_mm/sec_omx/sec_omx_include/khronos/OMX_Audio.h deleted file mode 100644 index 04f1a99..0000000 --- a/sec_mm/sec_omx/sec_omx_include/khronos/OMX_Audio.h +++ /dev/null @@ -1,1311 +0,0 @@ -/* - * Copyright (c) 2008 The Khronos Group Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject - * to the following conditions: - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - */ - -/** @file OMX_Audio.h - OpenMax IL version 1.1.2 - * The structures needed by Audio components to exchange - * parameters and configuration data with the componenmilts. - */ - -#ifndef OMX_Audio_h -#define OMX_Audio_h - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - - -/* Each OMX header must include all required header files to allow the - * header to compile without errors. The includes below are required - * for this header file to compile successfully - */ - -#include - -/** @defgroup midi MIDI - * @ingroup audio - */ - -/** @defgroup effects Audio effects - * @ingroup audio - */ - -/** @defgroup audio OpenMAX IL Audio Domain - * Structures for OpenMAX IL Audio domain - * @{ - */ - -/** Enumeration used to define the possible audio codings. - * If "OMX_AUDIO_CodingUnused" is selected, the coding selection must - * be done in a vendor specific way. Since this is for an audio - * processing element this enum is relevant. However, for another - * type of component other enums would be in this area. - */ -typedef enum OMX_AUDIO_CODINGTYPE { - OMX_AUDIO_CodingUnused = 0, /**< Placeholder value when coding is N/A */ - OMX_AUDIO_CodingAutoDetect, /**< auto detection of audio format */ - OMX_AUDIO_CodingPCM, /**< Any variant of PCM coding */ - OMX_AUDIO_CodingADPCM, /**< Any variant of ADPCM encoded data */ - OMX_AUDIO_CodingAMR, /**< Any variant of AMR encoded data */ - OMX_AUDIO_CodingGSMFR, /**< Any variant of GSM fullrate (i.e. GSM610) */ - OMX_AUDIO_CodingGSMEFR, /**< Any variant of GSM Enhanced Fullrate encoded data*/ - OMX_AUDIO_CodingGSMHR, /**< Any variant of GSM Halfrate encoded data */ - OMX_AUDIO_CodingPDCFR, /**< Any variant of PDC Fullrate encoded data */ - OMX_AUDIO_CodingPDCEFR, /**< Any variant of PDC Enhanced Fullrate encoded data */ - OMX_AUDIO_CodingPDCHR, /**< Any variant of PDC Halfrate encoded data */ - OMX_AUDIO_CodingTDMAFR, /**< Any variant of TDMA Fullrate encoded data (TIA/EIA-136-420) */ - OMX_AUDIO_CodingTDMAEFR, /**< Any variant of TDMA Enhanced Fullrate encoded data (TIA/EIA-136-410) */ - OMX_AUDIO_CodingQCELP8, /**< Any variant of QCELP 8kbps encoded data */ - OMX_AUDIO_CodingQCELP13, /**< Any variant of QCELP 13kbps encoded data */ - OMX_AUDIO_CodingEVRC, /**< Any variant of EVRC encoded data */ - OMX_AUDIO_CodingSMV, /**< Any variant of SMV encoded data */ - OMX_AUDIO_CodingG711, /**< Any variant of G.711 encoded data */ - OMX_AUDIO_CodingG723, /**< Any variant of G.723 dot 1 encoded data */ - OMX_AUDIO_CodingG726, /**< Any variant of G.726 encoded data */ - OMX_AUDIO_CodingG729, /**< Any variant of G.729 encoded data */ - OMX_AUDIO_CodingAAC, /**< Any variant of AAC encoded data */ - OMX_AUDIO_CodingMP3, /**< Any variant of MP3 encoded data */ - OMX_AUDIO_CodingSBC, /**< Any variant of SBC encoded data */ - OMX_AUDIO_CodingVORBIS, /**< Any variant of VORBIS encoded data */ - OMX_AUDIO_CodingWMA, /**< Any variant of WMA encoded data */ - OMX_AUDIO_CodingRA, /**< Any variant of RA encoded data */ - OMX_AUDIO_CodingMIDI, /**< Any variant of MIDI encoded data */ - OMX_AUDIO_CodingKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_AUDIO_CodingVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_AUDIO_CodingMax = 0x7FFFFFFF -} OMX_AUDIO_CODINGTYPE; - - -/** The PortDefinition structure is used to define all of the parameters - * necessary for the compliant component to setup an input or an output audio - * path. If additional information is needed to define the parameters of the - * port (such as frequency), additional structures must be sent such as the - * OMX_AUDIO_PARAM_PCMMODETYPE structure to supply the extra parameters for the port. - */ -typedef struct OMX_AUDIO_PORTDEFINITIONTYPE { - OMX_STRING cMIMEType; /**< MIME type of data for the port */ - OMX_NATIVE_DEVICETYPE pNativeRender; /** < platform specific reference - for an output device, - otherwise this field is 0 */ - OMX_BOOL bFlagErrorConcealment; /**< Turns on error concealment if it is - supported by the OMX component */ - OMX_AUDIO_CODINGTYPE eEncoding; /**< Type of data expected for this - port (e.g. PCM, AMR, MP3, etc) */ -} OMX_AUDIO_PORTDEFINITIONTYPE; - - -/** Port format parameter. This structure is used to enumerate - * the various data input/output format supported by the port. - */ -typedef struct OMX_AUDIO_PARAM_PORTFORMATTYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< Indicates which port to set */ - OMX_U32 nIndex; /**< Indicates the enumeration index for the format from 0x0 to N-1 */ - OMX_AUDIO_CODINGTYPE eEncoding; /**< Type of data expected for this port (e.g. PCM, AMR, MP3, etc) */ -} OMX_AUDIO_PARAM_PORTFORMATTYPE; - - -/** PCM mode type */ -typedef enum OMX_AUDIO_PCMMODETYPE { - OMX_AUDIO_PCMModeLinear = 0, /**< Linear PCM encoded data */ - OMX_AUDIO_PCMModeALaw, /**< A law PCM encoded data (G.711) */ - OMX_AUDIO_PCMModeMULaw, /**< Mu law PCM encoded data (G.711) */ - OMX_AUDIO_PCMModeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_AUDIO_PCMModeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_AUDIO_PCMModeMax = 0x7FFFFFFF -} OMX_AUDIO_PCMMODETYPE; - - -typedef enum OMX_AUDIO_CHANNELTYPE { - OMX_AUDIO_ChannelNone = 0x0, /**< Unused or empty */ - OMX_AUDIO_ChannelLF = 0x1, /**< Left front */ - OMX_AUDIO_ChannelRF = 0x2, /**< Right front */ - OMX_AUDIO_ChannelCF = 0x3, /**< Center front */ - OMX_AUDIO_ChannelLS = 0x4, /**< Left surround */ - OMX_AUDIO_ChannelRS = 0x5, /**< Right surround */ - OMX_AUDIO_ChannelLFE = 0x6, /**< Low frequency effects */ - OMX_AUDIO_ChannelCS = 0x7, /**< Back surround */ - OMX_AUDIO_ChannelLR = 0x8, /**< Left rear. */ - OMX_AUDIO_ChannelRR = 0x9, /**< Right rear. */ - OMX_AUDIO_ChannelKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_AUDIO_ChannelVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_AUDIO_ChannelMax = 0x7FFFFFFF -} OMX_AUDIO_CHANNELTYPE; - -#define OMX_AUDIO_MAXCHANNELS 16 /**< maximum number distinct audio channels that a buffer may contain */ -#define OMX_MIN_PCMPAYLOAD_MSEC 5 /**< Minimum audio buffer payload size for uncompressed (PCM) audio */ - -/** PCM format description */ -typedef struct OMX_AUDIO_PARAM_PCMMODETYPE { - OMX_U32 nSize; /**< Size of this structure, in Bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_U32 nChannels; /**< Number of channels (e.g. 2 for stereo) */ - OMX_NUMERICALDATATYPE eNumData; /**< indicates PCM data as signed or unsigned */ - OMX_ENDIANTYPE eEndian; /**< indicates PCM data as little or big endian */ - OMX_BOOL bInterleaved; /**< True for normal interleaved data; false for - non-interleaved data (e.g. block data) */ - OMX_U32 nBitPerSample; /**< Bit per sample */ - OMX_U32 nSamplingRate; /**< Sampling rate of the source data. Use 0 for - variable or unknown sampling rate. */ - OMX_AUDIO_PCMMODETYPE ePCMMode; /**< PCM mode enumeration */ - OMX_AUDIO_CHANNELTYPE eChannelMapping[OMX_AUDIO_MAXCHANNELS]; /**< Slot i contains channel defined by eChannelMap[i] */ - -} OMX_AUDIO_PARAM_PCMMODETYPE; - - -/** Audio channel mode. This is used by both AAC and MP3, although the names are more appropriate - * for the MP3. For example, JointStereo for MP3 is CouplingChannels for AAC. - */ -typedef enum OMX_AUDIO_CHANNELMODETYPE { - OMX_AUDIO_ChannelModeStereo = 0, /**< 2 channels, the bitrate allocation between those - two channels changes accordingly to each channel information */ - OMX_AUDIO_ChannelModeJointStereo, /**< mode that takes advantage of what is common between - 2 channels for higher compression gain */ - OMX_AUDIO_ChannelModeDual, /**< 2 mono-channels, each channel is encoded with half - the bitrate of the overall bitrate */ - OMX_AUDIO_ChannelModeMono, /**< Mono channel mode */ - OMX_AUDIO_ChannelModeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_AUDIO_ChannelModeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_AUDIO_ChannelModeMax = 0x7FFFFFFF -} OMX_AUDIO_CHANNELMODETYPE; - - -typedef enum OMX_AUDIO_MP3STREAMFORMATTYPE { - OMX_AUDIO_MP3StreamFormatMP1Layer3 = 0, /**< MP3 Audio MPEG 1 Layer 3 Stream format */ - OMX_AUDIO_MP3StreamFormatMP2Layer3, /**< MP3 Audio MPEG 2 Layer 3 Stream format */ - OMX_AUDIO_MP3StreamFormatMP2_5Layer3, /**< MP3 Audio MPEG2.5 Layer 3 Stream format */ - OMX_AUDIO_MP3StreamFormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_AUDIO_MP3StreamFormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_AUDIO_MP3StreamFormatMax = 0x7FFFFFFF -} OMX_AUDIO_MP3STREAMFORMATTYPE; - -/** MP3 params */ -typedef struct OMX_AUDIO_PARAM_MP3TYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_U32 nChannels; /**< Number of channels */ - OMX_U32 nBitRate; /**< Bit rate of the input data. Use 0 for variable - rate or unknown bit rates */ - OMX_U32 nSampleRate; /**< Sampling rate of the source data. Use 0 for - variable or unknown sampling rate. */ - OMX_U32 nAudioBandWidth; /**< Audio band width (in Hz) to which an encoder should - limit the audio signal. Use 0 to let encoder decide */ - OMX_AUDIO_CHANNELMODETYPE eChannelMode; /**< Channel mode enumeration */ - OMX_AUDIO_MP3STREAMFORMATTYPE eFormat; /**< MP3 stream format */ -} OMX_AUDIO_PARAM_MP3TYPE; - - -typedef enum OMX_AUDIO_AACSTREAMFORMATTYPE { - OMX_AUDIO_AACStreamFormatMP2ADTS = 0, /**< AAC Audio Data Transport Stream 2 format */ - OMX_AUDIO_AACStreamFormatMP4ADTS, /**< AAC Audio Data Transport Stream 4 format */ - OMX_AUDIO_AACStreamFormatMP4LOAS, /**< AAC Low Overhead Audio Stream format */ - OMX_AUDIO_AACStreamFormatMP4LATM, /**< AAC Low overhead Audio Transport Multiplex */ - OMX_AUDIO_AACStreamFormatADIF, /**< AAC Audio Data Interchange Format */ - OMX_AUDIO_AACStreamFormatMP4FF, /**< AAC inside MPEG-4/ISO File Format */ - OMX_AUDIO_AACStreamFormatRAW, /**< AAC Raw Format */ - OMX_AUDIO_AACStreamFormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_AUDIO_AACStreamFormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_AUDIO_AACStreamFormatMax = 0x7FFFFFFF -} OMX_AUDIO_AACSTREAMFORMATTYPE; - - -/** AAC mode type. Note that the term profile is used with the MPEG-2 - * standard and the term object type and profile is used with MPEG-4 */ -typedef enum OMX_AUDIO_AACPROFILETYPE{ - OMX_AUDIO_AACObjectNull = 0, /**< Null, not used */ - OMX_AUDIO_AACObjectMain = 1, /**< AAC Main object */ - OMX_AUDIO_AACObjectLC, /**< AAC Low Complexity object (AAC profile) */ - OMX_AUDIO_AACObjectSSR, /**< AAC Scalable Sample Rate object */ - OMX_AUDIO_AACObjectLTP, /**< AAC Long Term Prediction object */ - OMX_AUDIO_AACObjectHE, /**< AAC High Efficiency (object type SBR, HE-AAC profile) */ - OMX_AUDIO_AACObjectScalable, /**< AAC Scalable object */ - OMX_AUDIO_AACObjectERLC = 17, /**< ER AAC Low Complexity object (Error Resilient AAC-LC) */ - OMX_AUDIO_AACObjectLD = 23, /**< AAC Low Delay object (Error Resilient) */ - OMX_AUDIO_AACObjectHE_PS = 29, /**< AAC High Efficiency with Parametric Stereo coding (HE-AAC v2, object type PS) */ - OMX_AUDIO_AACObjectKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_AUDIO_AACObjectVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_AUDIO_AACObjectMax = 0x7FFFFFFF -} OMX_AUDIO_AACPROFILETYPE; - - -/** AAC tool usage (for nAACtools in OMX_AUDIO_PARAM_AACPROFILETYPE). - * Required for encoder configuration and optional as decoder info output. - * For MP3, OMX_AUDIO_CHANNELMODETYPE is sufficient. */ -#define OMX_AUDIO_AACToolNone 0x00000000 /**< no AAC tools allowed (encoder config) or active (decoder info output) */ -#define OMX_AUDIO_AACToolMS 0x00000001 /**< MS: Mid/side joint coding tool allowed or active */ -#define OMX_AUDIO_AACToolIS 0x00000002 /**< IS: Intensity stereo tool allowed or active */ -#define OMX_AUDIO_AACToolTNS 0x00000004 /**< TNS: Temporal Noise Shaping tool allowed or active */ -#define OMX_AUDIO_AACToolPNS 0x00000008 /**< PNS: MPEG-4 Perceptual Noise substitution tool allowed or active */ -#define OMX_AUDIO_AACToolLTP 0x00000010 /**< LTP: MPEG-4 Long Term Prediction tool allowed or active */ -#define OMX_AUDIO_AACToolAll 0x7FFFFFFF /**< all AAC tools allowed or active (*/ - -/** MPEG-4 AAC error resilience (ER) tool usage (for nAACERtools in OMX_AUDIO_PARAM_AACPROFILETYPE). - * Required for ER encoder configuration and optional as decoder info output */ -#define OMX_AUDIO_AACERNone 0x00000000 /**< no AAC ER tools allowed/used */ -#define OMX_AUDIO_AACERVCB11 0x00000001 /**< VCB11: Virtual Code Books for AAC section data */ -#define OMX_AUDIO_AACERRVLC 0x00000002 /**< RVLC: Reversible Variable Length Coding */ -#define OMX_AUDIO_AACERHCR 0x00000004 /**< HCR: Huffman Codeword Reordering */ -#define OMX_AUDIO_AACERAll 0x7FFFFFFF /**< all AAC ER tools allowed/used */ - - -/** AAC params */ -typedef struct OMX_AUDIO_PARAM_AACPROFILETYPE { - OMX_U32 nSize; /**< Size of this structure, in Bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< Port that this structure applies to */ - OMX_U32 nChannels; /**< Number of channels */ - OMX_U32 nSampleRate; /**< Sampling rate of the source data. Use 0 for - variable or unknown sampling rate. */ - OMX_U32 nBitRate; /**< Bit rate of the input data. Use 0 for variable - rate or unknown bit rates */ - OMX_U32 nAudioBandWidth; /**< Audio band width (in Hz) to which an encoder should - limit the audio signal. Use 0 to let encoder decide */ - OMX_U32 nFrameLength; /**< Frame length (in audio samples per channel) of the codec. - Can be 1024 or 960 (AAC-LC), 2048 (HE-AAC), 480 or 512 (AAC-LD). - Use 0 to let encoder decide */ - OMX_U32 nAACtools; /**< AAC tool usage */ - OMX_U32 nAACERtools; /**< MPEG-4 AAC error resilience tool usage */ - OMX_AUDIO_AACPROFILETYPE eAACProfile; /**< AAC profile enumeration */ - OMX_AUDIO_AACSTREAMFORMATTYPE eAACStreamFormat; /**< AAC stream format enumeration */ - OMX_AUDIO_CHANNELMODETYPE eChannelMode; /**< Channel mode enumeration */ -} OMX_AUDIO_PARAM_AACPROFILETYPE; - - -/** VORBIS params */ -typedef struct OMX_AUDIO_PARAM_VORBISTYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_U32 nChannels; /**< Number of channels */ - OMX_U32 nBitRate; /**< Bit rate of the encoded data data. Use 0 for variable - rate or unknown bit rates. Encoding is set to the - bitrate closest to specified value (in bps) */ - OMX_U32 nMinBitRate; /**< Sets minimum bitrate (in bps). */ - OMX_U32 nMaxBitRate; /**< Sets maximum bitrate (in bps). */ - - OMX_U32 nSampleRate; /**< Sampling rate of the source data. Use 0 for - variable or unknown sampling rate. */ - OMX_U32 nAudioBandWidth; /**< Audio band width (in Hz) to which an encoder should - limit the audio signal. Use 0 to let encoder decide */ - OMX_S32 nQuality; /**< Sets encoding quality to n, between -1 (low) and 10 (high). - In the default mode of operation, teh quality level is 3. - Normal quality range is 0 - 10. */ - OMX_BOOL bManaged; /**< Set bitrate management mode. This turns off the - normal VBR encoding, but allows hard or soft bitrate - constraints to be enforced by the encoder. This mode can - be slower, and may also be lower quality. It is - primarily useful for streaming. */ - OMX_BOOL bDownmix; /**< Downmix input from stereo to mono (has no effect on - non-stereo streams). Useful for lower-bitrate encoding. */ -} OMX_AUDIO_PARAM_VORBISTYPE; - - -/** WMA Version */ -typedef enum OMX_AUDIO_WMAFORMATTYPE { - OMX_AUDIO_WMAFormatUnused = 0, /**< format unused or unknown */ - OMX_AUDIO_WMAFormat7, /**< Windows Media Audio format 7 */ - OMX_AUDIO_WMAFormat8, /**< Windows Media Audio format 8 */ - OMX_AUDIO_WMAFormat9, /**< Windows Media Audio format 9 */ - OMX_AUDIO_WMAFormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_AUDIO_WMAFormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_AUDIO_WMAFormatMax = 0x7FFFFFFF -} OMX_AUDIO_WMAFORMATTYPE; - - -/** WMA Profile */ -typedef enum OMX_AUDIO_WMAPROFILETYPE { - OMX_AUDIO_WMAProfileUnused = 0, /**< profile unused or unknown */ - OMX_AUDIO_WMAProfileL1, /**< Windows Media audio version 9 profile L1 */ - OMX_AUDIO_WMAProfileL2, /**< Windows Media audio version 9 profile L2 */ - OMX_AUDIO_WMAProfileL3, /**< Windows Media audio version 9 profile L3 */ - OMX_AUDIO_WMAProfileKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_AUDIO_WMAProfileVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_AUDIO_WMAProfileMax = 0x7FFFFFFF -} OMX_AUDIO_WMAPROFILETYPE; - - -/** WMA params */ -typedef struct OMX_AUDIO_PARAM_WMATYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_U16 nChannels; /**< Number of channels */ - OMX_U32 nBitRate; /**< Bit rate of the input data. Use 0 for variable - rate or unknown bit rates */ - OMX_AUDIO_WMAFORMATTYPE eFormat; /**< Version of WMA stream / data */ - OMX_AUDIO_WMAPROFILETYPE eProfile; /**< Profile of WMA stream / data */ - OMX_U32 nSamplingRate; /**< Sampling rate of the source data */ - OMX_U16 nBlockAlign; /**< is the block alignment, or block size, in bytes of the audio codec */ - OMX_U16 nEncodeOptions; /**< WMA Type-specific data */ - OMX_U32 nSuperBlockAlign; /**< WMA Type-specific data */ -} OMX_AUDIO_PARAM_WMATYPE; - -/** - * RealAudio format - */ -typedef enum OMX_AUDIO_RAFORMATTYPE { - OMX_AUDIO_RAFormatUnused = 0, /**< Format unused or unknown */ - OMX_AUDIO_RA8, /**< RealAudio 8 codec */ - OMX_AUDIO_RA9, /**< RealAudio 9 codec */ - OMX_AUDIO_RA10_AAC, /**< MPEG-4 AAC codec for bitrates of more than 128kbps */ - OMX_AUDIO_RA10_CODEC, /**< RealAudio codec for bitrates less than 128 kbps */ - OMX_AUDIO_RA10_LOSSLESS, /**< RealAudio Lossless */ - OMX_AUDIO_RA10_MULTICHANNEL, /**< RealAudio Multichannel */ - OMX_AUDIO_RA10_VOICE, /**< RealAudio Voice for bitrates below 15 kbps */ - OMX_AUDIO_RAFormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_AUDIO_RAFormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_VIDEO_RAFormatMax = 0x7FFFFFFF -} OMX_AUDIO_RAFORMATTYPE; - -/** RA (Real Audio) params */ -typedef struct OMX_AUDIO_PARAM_RATYPE { - OMX_U32 nSize; /**< Size of this structure, in Bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< Port that this structure applies to */ - OMX_U32 nChannels; /**< Number of channels */ - OMX_U32 nSamplingRate; /**< is the sampling rate of the source data */ - OMX_U32 nBitsPerFrame; /**< is the value for bits per frame */ - OMX_U32 nSamplePerFrame; /**< is the value for samples per frame */ - OMX_U32 nCouplingQuantBits; /**< is the number of coupling quantization bits in the stream */ - OMX_U32 nCouplingStartRegion; /**< is the coupling start region in the stream */ - OMX_U32 nNumRegions; /**< is the number of regions value */ - OMX_AUDIO_RAFORMATTYPE eFormat; /**< is the RealAudio audio format */ -} OMX_AUDIO_PARAM_RATYPE; - - -/** SBC Allocation Method Type */ -typedef enum OMX_AUDIO_SBCALLOCMETHODTYPE { - OMX_AUDIO_SBCAllocMethodLoudness, /**< Loudness allocation method */ - OMX_AUDIO_SBCAllocMethodSNR, /**< SNR allocation method */ - OMX_AUDIO_SBCAllocMethodKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_AUDIO_SBCAllocMethodVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_AUDIO_SBCAllocMethodMax = 0x7FFFFFFF -} OMX_AUDIO_SBCALLOCMETHODTYPE; - - -/** SBC params */ -typedef struct OMX_AUDIO_PARAM_SBCTYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_U32 nChannels; /**< Number of channels */ - OMX_U32 nBitRate; /**< Bit rate of the input data. Use 0 for variable - rate or unknown bit rates */ - OMX_U32 nSampleRate; /**< Sampling rate of the source data. Use 0 for - variable or unknown sampling rate. */ - OMX_U32 nBlocks; /**< Number of blocks */ - OMX_U32 nSubbands; /**< Number of subbands */ - OMX_U32 nBitPool; /**< Bitpool value */ - OMX_BOOL bEnableBitrate; /**< Use bitrate value instead of bitpool */ - OMX_AUDIO_CHANNELMODETYPE eChannelMode; /**< Channel mode enumeration */ - OMX_AUDIO_SBCALLOCMETHODTYPE eSBCAllocType; /**< SBC Allocation method type */ -} OMX_AUDIO_PARAM_SBCTYPE; - - -/** ADPCM stream format parameters */ -typedef struct OMX_AUDIO_PARAM_ADPCMTYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_U32 nChannels; /**< Number of channels in the data stream (not - necessarily the same as the number of channels - to be rendered. */ - OMX_U32 nBitsPerSample; /**< Number of bits in each sample */ - OMX_U32 nSampleRate; /**< Sampling rate of the source data. Use 0 for - variable or unknown sampling rate. */ -} OMX_AUDIO_PARAM_ADPCMTYPE; - - -/** G723 rate */ -typedef enum OMX_AUDIO_G723RATE { - OMX_AUDIO_G723ModeUnused = 0, /**< AMRNB Mode unused / unknown */ - OMX_AUDIO_G723ModeLow, /**< 5300 bps */ - OMX_AUDIO_G723ModeHigh, /**< 6300 bps */ - OMX_AUDIO_G723ModeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_AUDIO_G723ModeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_AUDIO_G723ModeMax = 0x7FFFFFFF -} OMX_AUDIO_G723RATE; - - -/** G723 - Sample rate must be 8 KHz */ -typedef struct OMX_AUDIO_PARAM_G723TYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_U32 nChannels; /**< Number of channels in the data stream (not - necessarily the same as the number of channels - to be rendered. */ - OMX_BOOL bDTX; /**< Enable Discontinuous Transmisssion */ - OMX_AUDIO_G723RATE eBitRate; /**< todo: Should this be moved to a config? */ - OMX_BOOL bHiPassFilter; /**< Enable High Pass Filter */ - OMX_BOOL bPostFilter; /**< Enable Post Filter */ -} OMX_AUDIO_PARAM_G723TYPE; - - -/** ITU G726 (ADPCM) rate */ -typedef enum OMX_AUDIO_G726MODE { - OMX_AUDIO_G726ModeUnused = 0, /**< G726 Mode unused / unknown */ - OMX_AUDIO_G726Mode16, /**< 16 kbps */ - OMX_AUDIO_G726Mode24, /**< 24 kbps */ - OMX_AUDIO_G726Mode32, /**< 32 kbps, most common rate, also G721 */ - OMX_AUDIO_G726Mode40, /**< 40 kbps */ - OMX_AUDIO_G726ModeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_AUDIO_G726ModeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_AUDIO_G726ModeMax = 0x7FFFFFFF -} OMX_AUDIO_G726MODE; - - -/** G.726 stream format parameters - must be at 8KHz */ -typedef struct OMX_AUDIO_PARAM_G726TYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_U32 nChannels; /**< Number of channels in the data stream (not - necessarily the same as the number of channels - to be rendered. */ - OMX_AUDIO_G726MODE eG726Mode; -} OMX_AUDIO_PARAM_G726TYPE; - - -/** G729 coder type */ -typedef enum OMX_AUDIO_G729TYPE { - OMX_AUDIO_G729 = 0, /**< ITU G.729 encoded data */ - OMX_AUDIO_G729A, /**< ITU G.729 annex A encoded data */ - OMX_AUDIO_G729B, /**< ITU G.729 with annex B encoded data */ - OMX_AUDIO_G729AB, /**< ITU G.729 annexes A and B encoded data */ - OMX_AUDIO_G729KhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_AUDIO_G729VendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_AUDIO_G729Max = 0x7FFFFFFF -} OMX_AUDIO_G729TYPE; - - -/** G729 stream format parameters - fixed 6KHz sample rate */ -typedef struct OMX_AUDIO_PARAM_G729TYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_U32 nChannels; /**< Number of channels in the data stream (not - necessarily the same as the number of channels - to be rendered. */ - OMX_BOOL bDTX; /**< Enable Discontinuous Transmisssion */ - OMX_AUDIO_G729TYPE eBitType; -} OMX_AUDIO_PARAM_G729TYPE; - - -/** AMR Frame format */ -typedef enum OMX_AUDIO_AMRFRAMEFORMATTYPE { - OMX_AUDIO_AMRFrameFormatConformance = 0, /**< Frame Format is AMR Conformance - (Standard) Format */ - OMX_AUDIO_AMRFrameFormatIF1, /**< Frame Format is AMR Interface - Format 1 */ - OMX_AUDIO_AMRFrameFormatIF2, /**< Frame Format is AMR Interface - Format 2*/ - OMX_AUDIO_AMRFrameFormatFSF, /**< Frame Format is AMR File Storage - Format */ - OMX_AUDIO_AMRFrameFormatRTPPayload, /**< Frame Format is AMR Real-Time - Transport Protocol Payload Format */ - OMX_AUDIO_AMRFrameFormatITU, /**< Frame Format is ITU Format (added at Motorola request) */ - OMX_AUDIO_AMRFrameFormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_AUDIO_AMRFrameFormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_AUDIO_AMRFrameFormatMax = 0x7FFFFFFF -} OMX_AUDIO_AMRFRAMEFORMATTYPE; - - -/** AMR band mode */ -typedef enum OMX_AUDIO_AMRBANDMODETYPE { - OMX_AUDIO_AMRBandModeUnused = 0, /**< AMRNB Mode unused / unknown */ - OMX_AUDIO_AMRBandModeNB0, /**< AMRNB Mode 0 = 4750 bps */ - OMX_AUDIO_AMRBandModeNB1, /**< AMRNB Mode 1 = 5150 bps */ - OMX_AUDIO_AMRBandModeNB2, /**< AMRNB Mode 2 = 5900 bps */ - OMX_AUDIO_AMRBandModeNB3, /**< AMRNB Mode 3 = 6700 bps */ - OMX_AUDIO_AMRBandModeNB4, /**< AMRNB Mode 4 = 7400 bps */ - OMX_AUDIO_AMRBandModeNB5, /**< AMRNB Mode 5 = 7950 bps */ - OMX_AUDIO_AMRBandModeNB6, /**< AMRNB Mode 6 = 10200 bps */ - OMX_AUDIO_AMRBandModeNB7, /**< AMRNB Mode 7 = 12200 bps */ - OMX_AUDIO_AMRBandModeWB0, /**< AMRWB Mode 0 = 6600 bps */ - OMX_AUDIO_AMRBandModeWB1, /**< AMRWB Mode 1 = 8850 bps */ - OMX_AUDIO_AMRBandModeWB2, /**< AMRWB Mode 2 = 12650 bps */ - OMX_AUDIO_AMRBandModeWB3, /**< AMRWB Mode 3 = 14250 bps */ - OMX_AUDIO_AMRBandModeWB4, /**< AMRWB Mode 4 = 15850 bps */ - OMX_AUDIO_AMRBandModeWB5, /**< AMRWB Mode 5 = 18250 bps */ - OMX_AUDIO_AMRBandModeWB6, /**< AMRWB Mode 6 = 19850 bps */ - OMX_AUDIO_AMRBandModeWB7, /**< AMRWB Mode 7 = 23050 bps */ - OMX_AUDIO_AMRBandModeWB8, /**< AMRWB Mode 8 = 23850 bps */ - OMX_AUDIO_AMRBandModeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_AUDIO_AMRBandModeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_AUDIO_AMRBandModeMax = 0x7FFFFFFF -} OMX_AUDIO_AMRBANDMODETYPE; - - -/** AMR Discontinuous Transmission mode */ -typedef enum OMX_AUDIO_AMRDTXMODETYPE { - OMX_AUDIO_AMRDTXModeOff = 0, /**< AMR Discontinuous Transmission Mode is disabled */ - OMX_AUDIO_AMRDTXModeOnVAD1, /**< AMR Discontinuous Transmission Mode using - Voice Activity Detector 1 (VAD1) is enabled */ - OMX_AUDIO_AMRDTXModeOnVAD2, /**< AMR Discontinuous Transmission Mode using - Voice Activity Detector 2 (VAD2) is enabled */ - OMX_AUDIO_AMRDTXModeOnAuto, /**< The codec will automatically select between - Off, VAD1 or VAD2 modes */ - - OMX_AUDIO_AMRDTXasEFR, /**< DTX as EFR instead of AMR standard (3GPP 26.101, frame type =8,9,10) */ - - OMX_AUDIO_AMRDTXModeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_AUDIO_AMRDTXModeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_AUDIO_AMRDTXModeMax = 0x7FFFFFFF -} OMX_AUDIO_AMRDTXMODETYPE; - - -/** AMR params */ -typedef struct OMX_AUDIO_PARAM_AMRTYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_U32 nChannels; /**< Number of channels */ - OMX_U32 nBitRate; /**< Bit rate read only field */ - OMX_AUDIO_AMRBANDMODETYPE eAMRBandMode; /**< AMR Band Mode enumeration */ - OMX_AUDIO_AMRDTXMODETYPE eAMRDTXMode; /**< AMR DTX Mode enumeration */ - OMX_AUDIO_AMRFRAMEFORMATTYPE eAMRFrameFormat; /**< AMR frame format enumeration */ -} OMX_AUDIO_PARAM_AMRTYPE; - - -/** GSM_FR (ETSI 06.10, 3GPP 46.010) stream format parameters */ -typedef struct OMX_AUDIO_PARAM_GSMFRTYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_BOOL bDTX; /**< Enable Discontinuous Transmisssion */ - OMX_BOOL bHiPassFilter; /**< Enable High Pass Filter */ -} OMX_AUDIO_PARAM_GSMFRTYPE; - - -/** GSM-HR (ETSI 06.20, 3GPP 46.020) stream format parameters */ -typedef struct OMX_AUDIO_PARAM_GSMHRTYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_BOOL bDTX; /**< Enable Discontinuous Transmisssion */ - OMX_BOOL bHiPassFilter; /**< Enable High Pass Filter */ -} OMX_AUDIO_PARAM_GSMHRTYPE; - - -/** GSM-EFR (ETSI 06.60, 3GPP 46.060) stream format parameters */ -typedef struct OMX_AUDIO_PARAM_GSMEFRTYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_BOOL bDTX; /**< Enable Discontinuous Transmisssion */ - OMX_BOOL bHiPassFilter; /**< Enable High Pass Filter */ -} OMX_AUDIO_PARAM_GSMEFRTYPE; - - -/** TDMA FR (TIA/EIA-136-420, VSELP 7.95kbps coder) stream format parameters */ -typedef struct OMX_AUDIO_PARAM_TDMAFRTYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_U32 nChannels; /**< Number of channels in the data stream (not - necessarily the same as the number of channels - to be rendered. */ - OMX_BOOL bDTX; /**< Enable Discontinuous Transmisssion */ - OMX_BOOL bHiPassFilter; /**< Enable High Pass Filter */ -} OMX_AUDIO_PARAM_TDMAFRTYPE; - - -/** TDMA EFR (TIA/EIA-136-410, ACELP 7.4kbps coder) stream format parameters */ -typedef struct OMX_AUDIO_PARAM_TDMAEFRTYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_U32 nChannels; /**< Number of channels in the data stream (not - necessarily the same as the number of channels - to be rendered. */ - OMX_BOOL bDTX; /**< Enable Discontinuous Transmisssion */ - OMX_BOOL bHiPassFilter; /**< Enable High Pass Filter */ -} OMX_AUDIO_PARAM_TDMAEFRTYPE; - - -/** PDC FR ( RCR-27, VSELP 6.7kbps coder) stream format parameters */ -typedef struct OMX_AUDIO_PARAM_PDCFRTYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_U32 nChannels; /**< Number of channels in the data stream (not - necessarily the same as the number of channels - to be rendered. */ - OMX_BOOL bDTX; /**< Enable Discontinuous Transmisssion */ - OMX_BOOL bHiPassFilter; /**< Enable High Pass Filter */ -} OMX_AUDIO_PARAM_PDCFRTYPE; - - -/** PDC EFR ( RCR-27, ACELP 6.7kbps coder) stream format parameters */ -typedef struct OMX_AUDIO_PARAM_PDCEFRTYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_U32 nChannels; /**< Number of channels in the data stream (not - necessarily the same as the number of channels - to be rendered. */ - OMX_BOOL bDTX; /**< Enable Discontinuous Transmisssion */ - OMX_BOOL bHiPassFilter; /**< Enable High Pass Filter */ -} OMX_AUDIO_PARAM_PDCEFRTYPE; - -/** PDC HR ( RCR-27, PSI-CELP 3.45kbps coder) stream format parameters */ -typedef struct OMX_AUDIO_PARAM_PDCHRTYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_U32 nChannels; /**< Number of channels in the data stream (not - necessarily the same as the number of channels - to be rendered. */ - OMX_BOOL bDTX; /**< Enable Discontinuous Transmisssion */ - OMX_BOOL bHiPassFilter; /**< Enable High Pass Filter */ -} OMX_AUDIO_PARAM_PDCHRTYPE; - - -/** CDMA Rate types */ -typedef enum OMX_AUDIO_CDMARATETYPE { - OMX_AUDIO_CDMARateBlank = 0, /**< CDMA encoded frame is blank */ - OMX_AUDIO_CDMARateFull, /**< CDMA encoded frame in full rate */ - OMX_AUDIO_CDMARateHalf, /**< CDMA encoded frame in half rate */ - OMX_AUDIO_CDMARateQuarter, /**< CDMA encoded frame in quarter rate */ - OMX_AUDIO_CDMARateEighth, /**< CDMA encoded frame in eighth rate (DTX)*/ - OMX_AUDIO_CDMARateErasure, /**< CDMA erasure frame */ - OMX_AUDIO_CDMARateKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_AUDIO_CDMARateVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_AUDIO_CDMARateMax = 0x7FFFFFFF -} OMX_AUDIO_CDMARATETYPE; - - -/** QCELP8 (TIA/EIA-96, up to 8kbps coder) stream format parameters */ -typedef struct OMX_AUDIO_PARAM_QCELP8TYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_U32 nChannels; /**< Number of channels in the data stream (not - necessarily the same as the number of channels - to be rendered. */ - OMX_U32 nBitRate; /**< Bit rate of the input data. Use 0 for variable - rate or unknown bit rates */ - OMX_AUDIO_CDMARATETYPE eCDMARate; /**< Frame rate */ - OMX_U32 nMinBitRate; /**< minmal rate for the encoder = 1,2,3,4, default = 1 */ - OMX_U32 nMaxBitRate; /**< maximal rate for the encoder = 1,2,3,4, default = 4 */ -} OMX_AUDIO_PARAM_QCELP8TYPE; - - -/** QCELP13 ( CDMA, EIA/TIA-733, 13.3kbps coder) stream format parameters */ -typedef struct OMX_AUDIO_PARAM_QCELP13TYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_U32 nChannels; /**< Number of channels in the data stream (not - necessarily the same as the number of channels - to be rendered. */ - OMX_AUDIO_CDMARATETYPE eCDMARate; /**< Frame rate */ - OMX_U32 nMinBitRate; /**< minmal rate for the encoder = 1,2,3,4, default = 1 */ - OMX_U32 nMaxBitRate; /**< maximal rate for the encoder = 1,2,3,4, default = 4 */ -} OMX_AUDIO_PARAM_QCELP13TYPE; - - -/** EVRC ( CDMA, EIA/TIA-127, RCELP up to 8.55kbps coder) stream format parameters */ -typedef struct OMX_AUDIO_PARAM_EVRCTYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_U32 nChannels; /**< Number of channels in the data stream (not - necessarily the same as the number of channels - to be rendered. */ - OMX_AUDIO_CDMARATETYPE eCDMARate; /**< actual Frame rate */ - OMX_BOOL bRATE_REDUCon; /**< RATE_REDUCtion is requested for this frame */ - OMX_U32 nMinBitRate; /**< minmal rate for the encoder = 1,2,3,4, default = 1 */ - OMX_U32 nMaxBitRate; /**< maximal rate for the encoder = 1,2,3,4, default = 4 */ - OMX_BOOL bHiPassFilter; /**< Enable encoder's High Pass Filter */ - OMX_BOOL bNoiseSuppressor; /**< Enable encoder's noise suppressor pre-processing */ - OMX_BOOL bPostFilter; /**< Enable decoder's post Filter */ -} OMX_AUDIO_PARAM_EVRCTYPE; - - -/** SMV ( up to 8.55kbps coder) stream format parameters */ -typedef struct OMX_AUDIO_PARAM_SMVTYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_U32 nChannels; /**< Number of channels in the data stream (not - necessarily the same as the number of channels - to be rendered. */ - OMX_AUDIO_CDMARATETYPE eCDMARate; /**< Frame rate */ - OMX_BOOL bRATE_REDUCon; /**< RATE_REDUCtion is requested for this frame */ - OMX_U32 nMinBitRate; /**< minmal rate for the encoder = 1,2,3,4, default = 1 ??*/ - OMX_U32 nMaxBitRate; /**< maximal rate for the encoder = 1,2,3,4, default = 4 ??*/ - OMX_BOOL bHiPassFilter; /**< Enable encoder's High Pass Filter ??*/ - OMX_BOOL bNoiseSuppressor; /**< Enable encoder's noise suppressor pre-processing */ - OMX_BOOL bPostFilter; /**< Enable decoder's post Filter ??*/ -} OMX_AUDIO_PARAM_SMVTYPE; - - -/** MIDI Format - * @ingroup midi - */ -typedef enum OMX_AUDIO_MIDIFORMATTYPE -{ - OMX_AUDIO_MIDIFormatUnknown = 0, /**< MIDI Format unknown or don't care */ - OMX_AUDIO_MIDIFormatSMF0, /**< Standard MIDI File Type 0 */ - OMX_AUDIO_MIDIFormatSMF1, /**< Standard MIDI File Type 1 */ - OMX_AUDIO_MIDIFormatSMF2, /**< Standard MIDI File Type 2 */ - OMX_AUDIO_MIDIFormatSPMIDI, /**< SP-MIDI */ - OMX_AUDIO_MIDIFormatXMF0, /**< eXtensible Music Format type 0 */ - OMX_AUDIO_MIDIFormatXMF1, /**< eXtensible Music Format type 1 */ - OMX_AUDIO_MIDIFormatMobileXMF, /**< Mobile XMF (eXtensible Music Format type 2) */ - OMX_AUDIO_MIDIFormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_AUDIO_MIDIFormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_AUDIO_MIDIFormatMax = 0x7FFFFFFF -} OMX_AUDIO_MIDIFORMATTYPE; - - -/** MIDI params - * @ingroup midi - */ -typedef struct OMX_AUDIO_PARAM_MIDITYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_U32 nFileSize; /**< size of the MIDI file in bytes, where the entire - MIDI file passed in, otherwise if 0x0, the MIDI data - is merged and streamed (instead of passed as an - entire MIDI file) */ - OMX_BU32 sMaxPolyphony; /**< Specifies the maximum simultaneous polyphonic - voices. A value of zero indicates that the default - polyphony of the device is used */ - OMX_BOOL bLoadDefaultSound; /**< Whether to load default sound - bank at initialization */ - OMX_AUDIO_MIDIFORMATTYPE eMidiFormat; /**< Version of the MIDI file */ -} OMX_AUDIO_PARAM_MIDITYPE; - - -/** Type of the MIDI sound bank - * @ingroup midi - */ -typedef enum OMX_AUDIO_MIDISOUNDBANKTYPE { - OMX_AUDIO_MIDISoundBankUnused = 0, /**< unused/unknown soundbank type */ - OMX_AUDIO_MIDISoundBankDLS1, /**< DLS version 1 */ - OMX_AUDIO_MIDISoundBankDLS2, /**< DLS version 2 */ - OMX_AUDIO_MIDISoundBankMobileDLSBase, /**< Mobile DLS, using the base functionality */ - OMX_AUDIO_MIDISoundBankMobileDLSPlusOptions, /**< Mobile DLS, using the specification-defined optional feature set */ - OMX_AUDIO_MIDISoundBankKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_AUDIO_MIDISoundBankVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_AUDIO_MIDISoundBankMax = 0x7FFFFFFF -} OMX_AUDIO_MIDISOUNDBANKTYPE; - - -/** Bank Layout describes how bank MSB & LSB are used in the DLS instrument definitions sound bank - * @ingroup midi - */ -typedef enum OMX_AUDIO_MIDISOUNDBANKLAYOUTTYPE { - OMX_AUDIO_MIDISoundBankLayoutUnused = 0, /**< unused/unknown soundbank type */ - OMX_AUDIO_MIDISoundBankLayoutGM, /**< GS layout (based on bank MSB 0x00) */ - OMX_AUDIO_MIDISoundBankLayoutGM2, /**< General MIDI 2 layout (using MSB 0x78/0x79, LSB 0x00) */ - OMX_AUDIO_MIDISoundBankLayoutUser, /**< Does not conform to any bank numbering standards */ - OMX_AUDIO_MIDISoundBankLayoutKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_AUDIO_MIDISoundBankLayoutVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_AUDIO_MIDISoundBankLayoutMax = 0x7FFFFFFF -} OMX_AUDIO_MIDISOUNDBANKLAYOUTTYPE; - - -/** MIDI params to load/unload user soundbank - * @ingroup midi - */ -typedef struct OMX_AUDIO_PARAM_MIDILOADUSERSOUNDTYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_U32 nDLSIndex; /**< DLS file index to be loaded */ - OMX_U32 nDLSSize; /**< Size in bytes */ - OMX_PTR pDLSData; /**< Pointer to DLS file data */ - OMX_AUDIO_MIDISOUNDBANKTYPE eMidiSoundBank; /**< Midi sound bank type enumeration */ - OMX_AUDIO_MIDISOUNDBANKLAYOUTTYPE eMidiSoundBankLayout; /**< Midi sound bank layout enumeration */ -} OMX_AUDIO_PARAM_MIDILOADUSERSOUNDTYPE; - - -/** Structure for Live MIDI events and MIP messages. - * (MIP = Maximum Instantaneous Polyphony; part of the SP-MIDI standard.) - * @ingroup midi - */ -typedef struct OMX_AUDIO_CONFIG_MIDIIMMEDIATEEVENTTYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< Port that this structure applies to */ - OMX_U32 nMidiEventSize; /**< Size of immediate MIDI events or MIP message in bytes */ - OMX_U8 nMidiEvents[1]; /**< MIDI event array to be rendered immediately, or an - array for the MIP message buffer, where the size is - indicated by nMidiEventSize */ -} OMX_AUDIO_CONFIG_MIDIIMMEDIATEEVENTTYPE; - - -/** MIDI sound bank/ program pair in a given channel - * @ingroup midi - */ -typedef struct OMX_AUDIO_CONFIG_MIDISOUNDBANKPROGRAMTYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< Port that this structure applies to */ - OMX_U32 nChannel; /**< Valid channel values range from 1 to 16 */ - OMX_U16 nIDProgram; /**< Valid program ID range is 1 to 128 */ - OMX_U16 nIDSoundBank; /**< Sound bank ID */ - OMX_U32 nUserSoundBankIndex;/**< User soundbank index, easier to access soundbanks - by index if multiple banks are present */ -} OMX_AUDIO_CONFIG_MIDISOUNDBANKPROGRAMTYPE; - - -/** MIDI control - * @ingroup midi - */ -typedef struct OMX_AUDIO_CONFIG_MIDICONTROLTYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_BS32 sPitchTransposition; /**< Pitch transposition in semitones, stored as Q22.10 - format based on JAVA MMAPI (JSR-135) requirement */ - OMX_BU32 sPlayBackRate; /**< Relative playback rate, stored as Q14.17 fixed-point - number based on JSR-135 requirement */ - OMX_BU32 sTempo ; /**< Tempo in beats per minute (BPM), stored as Q22.10 - fixed-point number based on JSR-135 requirement */ - OMX_U32 nMaxPolyphony; /**< Specifies the maximum simultaneous polyphonic - voices. A value of zero indicates that the default - polyphony of the device is used */ - OMX_U32 nNumRepeat; /**< Number of times to repeat playback */ - OMX_U32 nStopTime; /**< Time in milliseconds to indicate when playback - will stop automatically. Set to zero if not used */ - OMX_U16 nChannelMuteMask; /**< 16 bit mask for channel mute status */ - OMX_U16 nChannelSoloMask; /**< 16 bit mask for channel solo status */ - OMX_U32 nTrack0031MuteMask; /**< 32 bit mask for track mute status. Note: This is for tracks 0-31 */ - OMX_U32 nTrack3263MuteMask; /**< 32 bit mask for track mute status. Note: This is for tracks 32-63 */ - OMX_U32 nTrack0031SoloMask; /**< 32 bit mask for track solo status. Note: This is for tracks 0-31 */ - OMX_U32 nTrack3263SoloMask; /**< 32 bit mask for track solo status. Note: This is for tracks 32-63 */ - -} OMX_AUDIO_CONFIG_MIDICONTROLTYPE; - - -/** MIDI Playback States - * @ingroup midi - */ -typedef enum OMX_AUDIO_MIDIPLAYBACKSTATETYPE { - OMX_AUDIO_MIDIPlayBackStateUnknown = 0, /**< Unknown state or state does not map to - other defined states */ - OMX_AUDIO_MIDIPlayBackStateClosedEngaged, /**< No MIDI resource is currently open. - The MIDI engine is currently processing - MIDI events. */ - OMX_AUDIO_MIDIPlayBackStateParsing, /**< A MIDI resource is open and is being - primed. The MIDI engine is currently - processing MIDI events. */ - OMX_AUDIO_MIDIPlayBackStateOpenEngaged, /**< A MIDI resource is open and primed but - not playing. The MIDI engine is currently - processing MIDI events. The transition to - this state is only possible from the - OMX_AUDIO_MIDIPlayBackStatePlaying state, - when the 'playback head' reaches the end - of media data or the playback stops due - to stop time set.*/ - OMX_AUDIO_MIDIPlayBackStatePlaying, /**< A MIDI resource is open and currently - playing. The MIDI engine is currently - processing MIDI events.*/ - OMX_AUDIO_MIDIPlayBackStatePlayingPartially, /**< Best-effort playback due to SP-MIDI/DLS - resource constraints */ - OMX_AUDIO_MIDIPlayBackStatePlayingSilently, /**< Due to system resource constraints and - SP-MIDI content constraints, there is - no audible MIDI content during playback - currently. The situation may change if - resources are freed later.*/ - OMX_AUDIO_MIDIPlayBackStateKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_AUDIO_MIDIPlayBackStateVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_AUDIO_MIDIPlayBackStateMax = 0x7FFFFFFF -} OMX_AUDIO_MIDIPLAYBACKSTATETYPE; - - -/** MIDI status - * @ingroup midi - */ -typedef struct OMX_AUDIO_CONFIG_MIDISTATUSTYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_U16 nNumTracks; /**< Number of MIDI tracks in the file, read only field. - NOTE: May not return a meaningful value until the entire - file is parsed and buffered. */ - OMX_U32 nDuration; /**< The length of the currently open MIDI resource - in milliseconds. NOTE: May not return a meaningful value - until the entire file is parsed and buffered. */ - OMX_U32 nPosition; /**< Current Position of the MIDI resource being played - in milliseconds */ - OMX_BOOL bVibra; /**< Does Vibra track exist? NOTE: May not return a meaningful - value until the entire file is parsed and buffered. */ - OMX_U32 nNumMetaEvents; /**< Total number of MIDI Meta Events in the currently - open MIDI resource. NOTE: May not return a meaningful value - until the entire file is parsed and buffered. */ - OMX_U32 nNumActiveVoices; /**< Number of active voices in the currently playing - MIDI resource. NOTE: May not return a meaningful value until - the entire file is parsed and buffered. */ - OMX_AUDIO_MIDIPLAYBACKSTATETYPE eMIDIPlayBackState; /**< MIDI playback state enumeration, read only field */ -} OMX_AUDIO_CONFIG_MIDISTATUSTYPE; - - -/** MIDI Meta Event structure one per Meta Event. - * MIDI Meta Events are like audio metadata, except that they are interspersed - * with the MIDI content throughout the file and are not localized in the header. - * As such, it is necessary to retrieve information about these Meta Events from - * the engine, as it encounters these Meta Events within the MIDI content. - * For example, SMF files can have up to 14 types of MIDI Meta Events (copyright, - * author, default tempo, etc.) scattered throughout the file. - * @ingroup midi - */ -typedef struct OMX_AUDIO_CONFIG_MIDIMETAEVENTTYPE{ - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_U32 nIndex; /**< Index of Meta Event */ - OMX_U8 nMetaEventType; /**< Meta Event Type, 7bits (i.e. 0 - 127) */ - OMX_U32 nMetaEventSize; /**< size of the Meta Event in bytes */ - OMX_U32 nTrack; /**< track number for the meta event */ - OMX_U32 nPosition; /**< Position of the meta-event in milliseconds */ -} OMX_AUDIO_CONFIG_MIDIMETAEVENTTYPE; - - -/** MIDI Meta Event Data structure - one per Meta Event. - * @ingroup midi - */ -typedef struct OMX_AUDIO_CONFIG_MIDIMETAEVENTDATATYPE{ - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_U32 nIndex; /**< Index of Meta Event */ - OMX_U32 nMetaEventSize; /**< size of the Meta Event in bytes */ - OMX_U8 nData[1]; /**< array of one or more bytes of meta data - as indicated by the nMetaEventSize field */ -} OMX_AUDIO_CONFIG__MIDIMETAEVENTDATATYPE; - - -/** Audio Volume adjustment for a port */ -typedef struct OMX_AUDIO_CONFIG_VOLUMETYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< Port index indicating which port to - set. Select the input port to set - just that port's volume. Select the - output port to adjust the master - volume. */ - OMX_BOOL bLinear; /**< Is the volume to be set in linear (0.100) - or logarithmic scale (mB) */ - OMX_BS32 sVolume; /**< Volume linear setting in the 0..100 range, OR - Volume logarithmic setting for this port. The values - for volume are in mB (millibels = 1/100 dB) relative - to a gain of 1 (e.g. the output is the same as the - input level). Values are in mB from nMax - (maximum volume) to nMin mB (typically negative). - Since the volume is "voltage" - and not a "power", it takes a setting of - -600 mB to decrease the volume by 1/2. If - a component cannot accurately set the - volume to the requested value, it must - set the volume to the closest value BELOW - the requested value. When getting the - volume setting, the current actual volume - must be returned. */ -} OMX_AUDIO_CONFIG_VOLUMETYPE; - - -/** Audio Volume adjustment for a channel */ -typedef struct OMX_AUDIO_CONFIG_CHANNELVOLUMETYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< Port index indicating which port to - set. Select the input port to set - just that port's volume. Select the - output port to adjust the master - volume. */ - OMX_U32 nChannel; /**< channel to select from 0 to N-1, - using OMX_ALL to apply volume settings - to all channels */ - OMX_BOOL bLinear; /**< Is the volume to be set in linear (0.100) or - logarithmic scale (mB) */ - OMX_BS32 sVolume; /**< Volume linear setting in the 0..100 range, OR - Volume logarithmic setting for this port. - The values for volume are in mB - (millibels = 1/100 dB) relative to a gain - of 1 (e.g. the output is the same as the - input level). Values are in mB from nMax - (maximum volume) to nMin mB (typically negative). - Since the volume is "voltage" - and not a "power", it takes a setting of - -600 mB to decrease the volume by 1/2. If - a component cannot accurately set the - volume to the requested value, it must - set the volume to the closest value BELOW - the requested value. When getting the - volume setting, the current actual volume - must be returned. */ - OMX_BOOL bIsMIDI; /**< TRUE if nChannel refers to a MIDI channel, - FALSE otherwise */ -} OMX_AUDIO_CONFIG_CHANNELVOLUMETYPE; - - -/** Audio balance setting */ -typedef struct OMX_AUDIO_CONFIG_BALANCETYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< Port index indicating which port to - set. Select the input port to set - just that port's balance. Select the - output port to adjust the master - balance. */ - OMX_S32 nBalance; /**< balance setting for this port - (-100 to 100, where -100 indicates - all left, and no right */ -} OMX_AUDIO_CONFIG_BALANCETYPE; - - -/** Audio Port mute */ -typedef struct OMX_AUDIO_CONFIG_MUTETYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< Port index indicating which port to - set. Select the input port to set - just that port's mute. Select the - output port to adjust the master - mute. */ - OMX_BOOL bMute; /**< Mute setting for this port */ -} OMX_AUDIO_CONFIG_MUTETYPE; - - -/** Audio Channel mute */ -typedef struct OMX_AUDIO_CONFIG_CHANNELMUTETYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_U32 nChannel; /**< channel to select from 0 to N-1, - using OMX_ALL to apply mute settings - to all channels */ - OMX_BOOL bMute; /**< Mute setting for this channel */ - OMX_BOOL bIsMIDI; /**< TRUE if nChannel refers to a MIDI channel, - FALSE otherwise */ -} OMX_AUDIO_CONFIG_CHANNELMUTETYPE; - - - -/** Enable / Disable for loudness control, which boosts bass and to a - * smaller extent high end frequencies to compensate for hearing - * ability at the extreme ends of the audio spectrum - */ -typedef struct OMX_AUDIO_CONFIG_LOUDNESSTYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_BOOL bLoudness; /**< Enable/disable for loudness */ -} OMX_AUDIO_CONFIG_LOUDNESSTYPE; - - -/** Enable / Disable for bass, which controls low frequencies - */ -typedef struct OMX_AUDIO_CONFIG_BASSTYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_BOOL bEnable; /**< Enable/disable for bass control */ - OMX_S32 nBass; /**< bass setting for the port, as a - continuous value from -100 to 100 - (0 means no change in bass level)*/ -} OMX_AUDIO_CONFIG_BASSTYPE; - - -/** Enable / Disable for treble, which controls high frequencies tones - */ -typedef struct OMX_AUDIO_CONFIG_TREBLETYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_BOOL bEnable; /**< Enable/disable for treble control */ - OMX_S32 nTreble; /**< treble setting for the port, as a - continuous value from -100 to 100 - (0 means no change in treble level) */ -} OMX_AUDIO_CONFIG_TREBLETYPE; - - -/** An equalizer is typically used for two reasons: to compensate for an - * sub-optimal frequency response of a system to make it sound more natural - * or to create intentionally some unnatural coloring to the sound to create - * an effect. - * @ingroup effects - */ -typedef struct OMX_AUDIO_CONFIG_EQUALIZERTYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_BOOL bEnable; /**< Enable/disable for equalizer */ - OMX_BU32 sBandIndex; /**< Band number to be set. Upper Limit is - N-1, where N is the number of bands, lower limit is 0 */ - OMX_BU32 sCenterFreq; /**< Center frequecies in Hz. This is a - read only element and is used to determine - the lower, center and upper frequency of - this band. */ - OMX_BS32 sBandLevel; /**< band level in millibels */ -} OMX_AUDIO_CONFIG_EQUALIZERTYPE; - - -/** Stereo widening mode type - * @ingroup effects - */ -typedef enum OMX_AUDIO_STEREOWIDENINGTYPE { - OMX_AUDIO_StereoWideningHeadphones, /**< Stereo widening for loudspeakers */ - OMX_AUDIO_StereoWideningLoudspeakers, /**< Stereo widening for closely spaced loudspeakers */ - OMX_AUDIO_StereoWideningKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_AUDIO_StereoWideningVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_AUDIO_StereoWideningMax = 0x7FFFFFFF -} OMX_AUDIO_STEREOWIDENINGTYPE; - - -/** Control for stereo widening, which is a special 2-channel - * case of the audio virtualizer effect. For example, for 5.1-channel - * output, it translates to virtual surround sound. - * @ingroup effects - */ -typedef struct OMX_AUDIO_CONFIG_STEREOWIDENINGTYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_BOOL bEnable; /**< Enable/disable for stereo widening control */ - OMX_AUDIO_STEREOWIDENINGTYPE eWideningType; /**< Stereo widening algorithm type */ - OMX_U32 nStereoWidening; /**< stereo widening setting for the port, - as a continuous value from 0 to 100 */ -} OMX_AUDIO_CONFIG_STEREOWIDENINGTYPE; - - -/** The chorus effect (or ``choralizer'') is any signal processor which makes - * one sound source (such as a voice) sound like many such sources singing - * (or playing) in unison. Since performance in unison is never exact, chorus - * effects simulate this by making independently modified copies of the input - * signal. Modifications may include (1) delay, (2) frequency shift, and - * (3) amplitude modulation. - * @ingroup effects - */ -typedef struct OMX_AUDIO_CONFIG_CHORUSTYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_BOOL bEnable; /**< Enable/disable for chorus */ - OMX_BU32 sDelay; /**< average delay in milliseconds */ - OMX_BU32 sModulationRate; /**< rate of modulation in millihertz */ - OMX_U32 nModulationDepth; /**< depth of modulation as a percentage of - delay (i.e. 0 to 100) */ - OMX_BU32 nFeedback; /**< Feedback from chorus output to input in percentage */ -} OMX_AUDIO_CONFIG_CHORUSTYPE; - - -/** Reverberation is part of the reflected sound that follows the early - * reflections. In a typical room, this consists of a dense succession of - * echoes whose energy decays exponentially. The reverberation effect structure - * as defined here includes both (early) reflections as well as (late) reverberations. - * @ingroup effects - */ -typedef struct OMX_AUDIO_CONFIG_REVERBERATIONTYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_BOOL bEnable; /**< Enable/disable for reverberation control */ - OMX_BS32 sRoomLevel; /**< Intensity level for the whole room effect - (i.e. both early reflections and late - reverberation) in millibels */ - OMX_BS32 sRoomHighFreqLevel; /**< Attenuation at high frequencies - relative to the intensity at low - frequencies in millibels */ - OMX_BS32 sReflectionsLevel; /**< Intensity level of early reflections - (relative to room value), in millibels */ - OMX_BU32 sReflectionsDelay; /**< Delay time of the first reflection relative - to the direct path, in milliseconds */ - OMX_BS32 sReverbLevel; /**< Intensity level of late reverberation - relative to room level, in millibels */ - OMX_BU32 sReverbDelay; /**< Time delay from the first early reflection - to the beginning of the late reverberation - section, in milliseconds */ - OMX_BU32 sDecayTime; /**< Late reverberation decay time at low - frequencies, in milliseconds */ - OMX_BU32 nDecayHighFreqRatio; /**< Ratio of high frequency decay time relative - to low frequency decay time in percent */ - OMX_U32 nDensity; /**< Modal density in the late reverberation decay, - in percent (i.e. 0 - 100) */ - OMX_U32 nDiffusion; /**< Echo density in the late reverberation decay, - in percent (i.e. 0 - 100) */ - OMX_BU32 sReferenceHighFreq; /**< Reference high frequency in Hertz. This is - the frequency used as the reference for all - the high-frequency settings above */ - -} OMX_AUDIO_CONFIG_REVERBERATIONTYPE; - - -/** Possible settings for the Echo Cancelation structure to use - * @ingroup effects - */ -typedef enum OMX_AUDIO_ECHOCANTYPE { - OMX_AUDIO_EchoCanOff = 0, /**< Echo Cancellation is disabled */ - OMX_AUDIO_EchoCanNormal, /**< Echo Cancellation normal operation - - echo from plastics and face */ - OMX_AUDIO_EchoCanHFree, /**< Echo Cancellation optimized for - Hands Free operation */ - OMX_AUDIO_EchoCanCarKit, /**< Echo Cancellation optimized for - Car Kit (longer echo) */ - OMX_AUDIO_EchoCanKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_AUDIO_EchoCanVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_AUDIO_EchoCanMax = 0x7FFFFFFF -} OMX_AUDIO_ECHOCANTYPE; - - -/** Enable / Disable for echo cancelation, which removes undesired echo's - * from the audio - * @ingroup effects - */ -typedef struct OMX_AUDIO_CONFIG_ECHOCANCELATIONTYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_AUDIO_ECHOCANTYPE eEchoCancelation; /**< Echo cancelation settings */ -} OMX_AUDIO_CONFIG_ECHOCANCELATIONTYPE; - - -/** Enable / Disable for noise reduction, which undesired noise from - * the audio - * @ingroup effects - */ -typedef struct OMX_AUDIO_CONFIG_NOISEREDUCTIONTYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_BOOL bNoiseReduction; /**< Enable/disable for noise reduction */ -} OMX_AUDIO_CONFIG_NOISEREDUCTIONTYPE; - -/** @} */ - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif -/* File EOF */ - diff --git a/sec_mm/sec_omx/sec_omx_include/khronos/OMX_Component.h b/sec_mm/sec_omx/sec_omx_include/khronos/OMX_Component.h deleted file mode 100644 index d595640..0000000 --- a/sec_mm/sec_omx/sec_omx_include/khronos/OMX_Component.h +++ /dev/null @@ -1,579 +0,0 @@ -/* - * Copyright (c) 2008 The Khronos Group Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject - * to the following conditions: - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - */ - -/** OMX_Component.h - OpenMax IL version 1.1.2 - * The OMX_Component header file contains the definitions used to define - * the public interface of a component. This header file is intended to - * be used by both the application and the component. - */ - -#ifndef OMX_Component_h -#define OMX_Component_h - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - - - -/* Each OMX header must include all required header files to allow the - * header to compile without errors. The includes below are required - * for this header file to compile successfully - */ - -#include -#include -#include -#include - -/** @ingroup comp */ -typedef enum OMX_PORTDOMAINTYPE { - OMX_PortDomainAudio, - OMX_PortDomainVideo, - OMX_PortDomainImage, - OMX_PortDomainOther, - OMX_PortDomainKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_PortDomainVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_PortDomainMax = 0x7ffffff -} OMX_PORTDOMAINTYPE; - -/** @ingroup comp */ -typedef struct OMX_PARAM_PORTDEFINITIONTYPE { - OMX_U32 nSize; /**< Size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< Port number the structure applies to */ - OMX_DIRTYPE eDir; /**< Direction (input or output) of this port */ - OMX_U32 nBufferCountActual; /**< The actual number of buffers allocated on this port */ - OMX_U32 nBufferCountMin; /**< The minimum number of buffers this port requires */ - OMX_U32 nBufferSize; /**< Size, in bytes, for buffers to be used for this channel */ - OMX_BOOL bEnabled; /**< Ports default to enabled and are enabled/disabled by - OMX_CommandPortEnable/OMX_CommandPortDisable. - When disabled a port is unpopulated. A disabled port - is not populated with buffers on a transition to IDLE. */ - OMX_BOOL bPopulated; /**< Port is populated with all of its buffers as indicated by - nBufferCountActual. A disabled port is always unpopulated. - An enabled port is populated on a transition to OMX_StateIdle - and unpopulated on a transition to loaded. */ - OMX_PORTDOMAINTYPE eDomain; /**< Domain of the port. Determines the contents of metadata below. */ - union { - OMX_AUDIO_PORTDEFINITIONTYPE audio; - OMX_VIDEO_PORTDEFINITIONTYPE video; - OMX_IMAGE_PORTDEFINITIONTYPE image; - OMX_OTHER_PORTDEFINITIONTYPE other; - } format; - OMX_BOOL bBuffersContiguous; - OMX_U32 nBufferAlignment; -} OMX_PARAM_PORTDEFINITIONTYPE; - -/** @ingroup comp */ -typedef struct OMX_PARAM_U32TYPE { - OMX_U32 nSize; /**< Size of this structure, in Bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_U32 nU32; /**< U32 value */ -} OMX_PARAM_U32TYPE; - -/** @ingroup rpm */ -typedef enum OMX_SUSPENSIONPOLICYTYPE { - OMX_SuspensionDisabled, /**< No suspension; v1.0 behavior */ - OMX_SuspensionEnabled, /**< Suspension allowed */ - OMX_SuspensionPolicyKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_SuspensionPolicyStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_SuspensionPolicyMax = 0x7fffffff -} OMX_SUSPENSIONPOLICYTYPE; - -/** @ingroup rpm */ -typedef struct OMX_PARAM_SUSPENSIONPOLICYTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_SUSPENSIONPOLICYTYPE ePolicy; -} OMX_PARAM_SUSPENSIONPOLICYTYPE; - -/** @ingroup rpm */ -typedef enum OMX_SUSPENSIONTYPE { - OMX_NotSuspended, /**< component is not suspended */ - OMX_Suspended, /**< component is suspended */ - OMX_SuspensionKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_SuspensionVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_SuspendMax = 0x7FFFFFFF -} OMX_SUSPENSIONTYPE; - -/** @ingroup rpm */ -typedef struct OMX_PARAM_SUSPENSIONTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_SUSPENSIONTYPE eType; -} OMX_PARAM_SUSPENSIONTYPE ; - -typedef struct OMX_CONFIG_BOOLEANTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_BOOL bEnabled; -} OMX_CONFIG_BOOLEANTYPE; - -/* Parameter specifying the content uri to use. */ -/** @ingroup cp */ -typedef struct OMX_PARAM_CONTENTURITYPE -{ - OMX_U32 nSize; /**< size of the structure in bytes, including - actual URI name */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U8 contentURI[1]; /**< The URI name */ -} OMX_PARAM_CONTENTURITYPE; - -/* Parameter specifying the pipe to use. */ -/** @ingroup cp */ -typedef struct OMX_PARAM_CONTENTPIPETYPE -{ - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_HANDLETYPE hPipe; /**< The pipe handle*/ -} OMX_PARAM_CONTENTPIPETYPE; - -/** @ingroup rpm */ -typedef struct OMX_RESOURCECONCEALMENTTYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_BOOL bResourceConcealmentForbidden; /**< disallow the use of resource concealment - methods (like degrading algorithm quality to - lower resource consumption or functional bypass) - on a component as a resolution to resource conflicts. */ -} OMX_RESOURCECONCEALMENTTYPE; - - -/** @ingroup metadata */ -typedef enum OMX_METADATACHARSETTYPE { - OMX_MetadataCharsetUnknown = 0, - OMX_MetadataCharsetASCII, - OMX_MetadataCharsetBinary, - OMX_MetadataCharsetCodePage1252, - OMX_MetadataCharsetUTF8, - OMX_MetadataCharsetJavaConformantUTF8, - OMX_MetadataCharsetUTF7, - OMX_MetadataCharsetImapUTF7, - OMX_MetadataCharsetUTF16LE, - OMX_MetadataCharsetUTF16BE, - OMX_MetadataCharsetGB12345, - OMX_MetadataCharsetHZGB2312, - OMX_MetadataCharsetGB2312, - OMX_MetadataCharsetGB18030, - OMX_MetadataCharsetGBK, - OMX_MetadataCharsetBig5, - OMX_MetadataCharsetISO88591, - OMX_MetadataCharsetISO88592, - OMX_MetadataCharsetISO88593, - OMX_MetadataCharsetISO88594, - OMX_MetadataCharsetISO88595, - OMX_MetadataCharsetISO88596, - OMX_MetadataCharsetISO88597, - OMX_MetadataCharsetISO88598, - OMX_MetadataCharsetISO88599, - OMX_MetadataCharsetISO885910, - OMX_MetadataCharsetISO885913, - OMX_MetadataCharsetISO885914, - OMX_MetadataCharsetISO885915, - OMX_MetadataCharsetShiftJIS, - OMX_MetadataCharsetISO2022JP, - OMX_MetadataCharsetISO2022JP1, - OMX_MetadataCharsetISOEUCJP, - OMX_MetadataCharsetSMS7Bit, - OMX_MetadataCharsetKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_MetadataCharsetVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_MetadataCharsetTypeMax= 0x7FFFFFFF -} OMX_METADATACHARSETTYPE; - -/** @ingroup metadata */ -typedef enum OMX_METADATASCOPETYPE -{ - OMX_MetadataScopeAllLevels, - OMX_MetadataScopeTopLevel, - OMX_MetadataScopePortLevel, - OMX_MetadataScopeNodeLevel, - OMX_MetadataScopeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_MetadataScopeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_MetadataScopeTypeMax = 0x7fffffff -} OMX_METADATASCOPETYPE; - -/** @ingroup metadata */ -typedef enum OMX_METADATASEARCHMODETYPE -{ - OMX_MetadataSearchValueSizeByIndex, - OMX_MetadataSearchItemByIndex, - OMX_MetadataSearchNextItemByKey, - OMX_MetadataSearchKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_MetadataSearchVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_MetadataSearchTypeMax = 0x7fffffff -} OMX_METADATASEARCHMODETYPE; -/** @ingroup metadata */ -typedef struct OMX_CONFIG_METADATAITEMCOUNTTYPE -{ - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_METADATASCOPETYPE eScopeMode; - OMX_U32 nScopeSpecifier; - OMX_U32 nMetadataItemCount; -} OMX_CONFIG_METADATAITEMCOUNTTYPE; - -/** @ingroup metadata */ -typedef struct OMX_CONFIG_METADATAITEMTYPE -{ - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_METADATASCOPETYPE eScopeMode; - OMX_U32 nScopeSpecifier; - OMX_U32 nMetadataItemIndex; - OMX_METADATASEARCHMODETYPE eSearchMode; - OMX_METADATACHARSETTYPE eKeyCharset; - OMX_U8 nKeySizeUsed; - OMX_U8 nKey[128]; - OMX_METADATACHARSETTYPE eValueCharset; - OMX_STRING sLanguageCountry; - OMX_U32 nValueMaxSize; - OMX_U32 nValueSizeUsed; - OMX_U8 nValue[1]; -} OMX_CONFIG_METADATAITEMTYPE; - -/* @ingroup metadata */ -typedef struct OMX_CONFIG_CONTAINERNODECOUNTTYPE -{ - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_BOOL bAllKeys; - OMX_U32 nParentNodeID; - OMX_U32 nNumNodes; -} OMX_CONFIG_CONTAINERNODECOUNTTYPE; - -/** @ingroup metadata */ -typedef struct OMX_CONFIG_CONTAINERNODEIDTYPE -{ - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_BOOL bAllKeys; - OMX_U32 nParentNodeID; - OMX_U32 nNodeIndex; - OMX_U32 nNodeID; - OMX_STRING cNodeName; - OMX_BOOL bIsLeafType; -} OMX_CONFIG_CONTAINERNODEIDTYPE; - -/** @ingroup metadata */ -typedef struct OMX_PARAM_METADATAFILTERTYPE -{ - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_BOOL bAllKeys; /* if true then this structure refers to all keys and - * the three key fields below are ignored */ - OMX_METADATACHARSETTYPE eKeyCharset; - OMX_U32 nKeySizeUsed; - OMX_U8 nKey [128]; - OMX_U32 nLanguageCountrySizeUsed; - OMX_U8 nLanguageCountry[128]; - OMX_BOOL bEnabled; /* if true then key is part of filter (e.g. - * retained for query later). If false then - * key is not part of filter */ -} OMX_PARAM_METADATAFILTERTYPE; - -/** The OMX_HANDLETYPE structure defines the component handle. The component - * handle is used to access all of the component's public methods and also - * contains pointers to the component's private data area. The component - * handle is initialized by the OMX core (with help from the component) - * during the process of loading the component. After the component is - * successfully loaded, the application can safely access any of the - * component's public functions (although some may return an error because - * the state is inappropriate for the access). - * - * @ingroup comp - */ -typedef struct OMX_COMPONENTTYPE -{ - /** The size of this structure, in bytes. It is the responsibility - of the allocator of this structure to fill in this value. Since - this structure is allocated by the GetHandle function, this - function will fill in this value. */ - OMX_U32 nSize; - - /** nVersion is the version of the OMX specification that the structure - is built against. It is the responsibility of the creator of this - structure to initialize this value and every user of this structure - should verify that it knows how to use the exact version of - this structure found herein. */ - OMX_VERSIONTYPE nVersion; - - /** pComponentPrivate is a pointer to the component private data area. - This member is allocated and initialized by the component when the - component is first loaded. The application should not access this - data area. */ - OMX_PTR pComponentPrivate; - - /** pApplicationPrivate is a pointer that is a parameter to the - OMX_GetHandle method, and contains an application private value - provided by the IL client. This application private data is - returned to the IL Client by OMX in all callbacks */ - OMX_PTR pApplicationPrivate; - - /** refer to OMX_GetComponentVersion in OMX_core.h or the OMX IL - specification for details on the GetComponentVersion method. - */ - OMX_ERRORTYPE (*GetComponentVersion)( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_OUT OMX_STRING pComponentName, - OMX_OUT OMX_VERSIONTYPE* pComponentVersion, - OMX_OUT OMX_VERSIONTYPE* pSpecVersion, - OMX_OUT OMX_UUIDTYPE* pComponentUUID); - - /** refer to OMX_SendCommand in OMX_core.h or the OMX IL - specification for details on the SendCommand method. - */ - OMX_ERRORTYPE (*SendCommand)( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_COMMANDTYPE Cmd, - OMX_IN OMX_U32 nParam1, - OMX_IN OMX_PTR pCmdData); - - /** refer to OMX_GetParameter in OMX_core.h or the OMX IL - specification for details on the GetParameter method. - */ - OMX_ERRORTYPE (*GetParameter)( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_INDEXTYPE nParamIndex, - OMX_INOUT OMX_PTR pComponentParameterStructure); - - - /** refer to OMX_SetParameter in OMX_core.h or the OMX IL - specification for details on the SetParameter method. - */ - OMX_ERRORTYPE (*SetParameter)( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_INDEXTYPE nIndex, - OMX_IN OMX_PTR pComponentParameterStructure); - - - /** refer to OMX_GetConfig in OMX_core.h or the OMX IL - specification for details on the GetConfig method. - */ - OMX_ERRORTYPE (*GetConfig)( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_INDEXTYPE nIndex, - OMX_INOUT OMX_PTR pComponentConfigStructure); - - - /** refer to OMX_SetConfig in OMX_core.h or the OMX IL - specification for details on the SetConfig method. - */ - OMX_ERRORTYPE (*SetConfig)( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_INDEXTYPE nIndex, - OMX_IN OMX_PTR pComponentConfigStructure); - - - /** refer to OMX_GetExtensionIndex in OMX_core.h or the OMX IL - specification for details on the GetExtensionIndex method. - */ - OMX_ERRORTYPE (*GetExtensionIndex)( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_STRING cParameterName, - OMX_OUT OMX_INDEXTYPE* pIndexType); - - - /** refer to OMX_GetState in OMX_core.h or the OMX IL - specification for details on the GetState method. - */ - OMX_ERRORTYPE (*GetState)( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_OUT OMX_STATETYPE* pState); - - - /** The ComponentTunnelRequest method will interact with another OMX - component to determine if tunneling is possible and to setup the - tunneling. The return codes for this method can be used to - determine if tunneling is not possible, or if tunneling is not - supported. - - Base profile components (i.e. non-interop) do not support this - method and should return OMX_ErrorNotImplemented - - The interop profile component MUST support tunneling to another - interop profile component with a compatible port parameters. - A component may also support proprietary communication. - - If proprietary communication is supported the negotiation of - proprietary communication is done outside of OMX in a vendor - specific way. It is only required that the proper result be - returned and the details of how the setup is done is left - to the component implementation. - - When this method is invoked when nPort in an output port, the - component will: - 1. Populate the pTunnelSetup structure with the output port's - requirements and constraints for the tunnel. - - When this method is invoked when nPort in an input port, the - component will: - 1. Query the necessary parameters from the output port to - determine if the ports are compatible for tunneling - 2. If the ports are compatible, the component should store - the tunnel step provided by the output port - 3. Determine which port (either input or output) is the buffer - supplier, and call OMX_SetParameter on the output port to - indicate this selection. - - The component will return from this call within 5 msec. - - @param [in] hComp - Handle of the component to be accessed. This is the component - handle returned by the call to the OMX_GetHandle method. - @param [in] nPort - nPort is used to select the port on the component to be used - for tunneling. - @param [in] hTunneledComp - Handle of the component to tunnel with. This is the component - handle returned by the call to the OMX_GetHandle method. When - this parameter is 0x0 the component should setup the port for - communication with the application / IL Client. - @param [in] nPortOutput - nPortOutput is used indicate the port the component should - tunnel with. - @param [in] pTunnelSetup - Pointer to the tunnel setup structure. When nPort is an output port - the component should populate the fields of this structure. When - When nPort is an input port the component should review the setup - provided by the component with the output port. - @return OMX_ERRORTYPE - If the command successfully executes, the return code will be - OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. - @ingroup tun - */ - - OMX_ERRORTYPE (*ComponentTunnelRequest)( - OMX_IN OMX_HANDLETYPE hComp, - OMX_IN OMX_U32 nPort, - OMX_IN OMX_HANDLETYPE hTunneledComp, - OMX_IN OMX_U32 nTunneledPort, - OMX_INOUT OMX_TUNNELSETUPTYPE* pTunnelSetup); - - /** refer to OMX_UseBuffer in OMX_core.h or the OMX IL - specification for details on the UseBuffer method. - @ingroup buf - */ - OMX_ERRORTYPE (*UseBuffer)( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr, - OMX_IN OMX_U32 nPortIndex, - OMX_IN OMX_PTR pAppPrivate, - OMX_IN OMX_U32 nSizeBytes, - OMX_IN OMX_U8* pBuffer); - - /** refer to OMX_AllocateBuffer in OMX_core.h or the OMX IL - specification for details on the AllocateBuffer method. - @ingroup buf - */ - OMX_ERRORTYPE (*AllocateBuffer)( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_INOUT OMX_BUFFERHEADERTYPE** ppBuffer, - OMX_IN OMX_U32 nPortIndex, - OMX_IN OMX_PTR pAppPrivate, - OMX_IN OMX_U32 nSizeBytes); - - /** refer to OMX_FreeBuffer in OMX_core.h or the OMX IL - specification for details on the FreeBuffer method. - @ingroup buf - */ - OMX_ERRORTYPE (*FreeBuffer)( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_U32 nPortIndex, - OMX_IN OMX_BUFFERHEADERTYPE* pBuffer); - - /** refer to OMX_EmptyThisBuffer in OMX_core.h or the OMX IL - specification for details on the EmptyThisBuffer method. - @ingroup buf - */ - OMX_ERRORTYPE (*EmptyThisBuffer)( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_BUFFERHEADERTYPE* pBuffer); - - /** refer to OMX_FillThisBuffer in OMX_core.h or the OMX IL - specification for details on the FillThisBuffer method. - @ingroup buf - */ - OMX_ERRORTYPE (*FillThisBuffer)( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_BUFFERHEADERTYPE* pBuffer); - - /** The SetCallbacks method is used by the core to specify the callback - structure from the application to the component. This is a blocking - call. The component will return from this call within 5 msec. - @param [in] hComponent - Handle of the component to be accessed. This is the component - handle returned by the call to the GetHandle function. - @param [in] pCallbacks - pointer to an OMX_CALLBACKTYPE structure used to provide the - callback information to the component - @param [in] pAppData - pointer to an application defined value. It is anticipated that - the application will pass a pointer to a data structure or a "this - pointer" in this area to allow the callback (in the application) - to determine the context of the call - @return OMX_ERRORTYPE - If the command successfully executes, the return code will be - OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. - */ - OMX_ERRORTYPE (*SetCallbacks)( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_CALLBACKTYPE* pCallbacks, - OMX_IN OMX_PTR pAppData); - - /** ComponentDeInit method is used to deinitialize the component - providing a means to free any resources allocated at component - initialization. NOTE: After this call the component handle is - not valid for further use. - @param [in] hComponent - Handle of the component to be accessed. This is the component - handle returned by the call to the GetHandle function. - @return OMX_ERRORTYPE - If the command successfully executes, the return code will be - OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. - */ - OMX_ERRORTYPE (*ComponentDeInit)( - OMX_IN OMX_HANDLETYPE hComponent); - - /** @ingroup buf */ - OMX_ERRORTYPE (*UseEGLImage)( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr, - OMX_IN OMX_U32 nPortIndex, - OMX_IN OMX_PTR pAppPrivate, - OMX_IN void* eglImage); - - OMX_ERRORTYPE (*ComponentRoleEnum)( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_OUT OMX_U8 *cRole, - OMX_IN OMX_U32 nIndex); - -} OMX_COMPONENTTYPE; - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif -/* File EOF */ diff --git a/sec_mm/sec_omx/sec_omx_include/khronos/OMX_ContentPipe.h b/sec_mm/sec_omx/sec_omx_include/khronos/OMX_ContentPipe.h deleted file mode 100644 index 5f6310c..0000000 --- a/sec_mm/sec_omx/sec_omx_include/khronos/OMX_ContentPipe.h +++ /dev/null @@ -1,195 +0,0 @@ -/* - * Copyright (c) 2008 The Khronos Group Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject - * to the following conditions: - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - */ - -/** OMX_ContentPipe.h - OpenMax IL version 1.1.2 - * The OMX_ContentPipe header file contains the definitions used to define - * the public interface for content piples. This header file is intended to - * be used by the component. - */ - -#ifndef OMX_CONTENTPIPE_H -#define OMX_CONTENTPIPE_H - -#ifndef KD_EACCES -/* OpenKODE error codes. CPResult values may be zero (indicating success - or one of the following values) */ -#define KD_EACCES (1) -#define KD_EADDRINUSE (2) -#define KD_EAGAIN (5) -#define KD_EBADF (7) -#define KD_EBUSY (8) -#define KD_ECONNREFUSED (9) -#define KD_ECONNRESET (10) -#define KD_EDEADLK (11) -#define KD_EDESTADDRREQ (12) -#define KD_ERANGE (35) -#define KD_EEXIST (13) -#define KD_EFBIG (14) -#define KD_EHOSTUNREACH (15) -#define KD_EINVAL (17) -#define KD_EIO (18) -#define KD_EISCONN (20) -#define KD_EISDIR (21) -#define KD_EMFILE (22) -#define KD_ENAMETOOLONG (23) -#define KD_ENOENT (24) -#define KD_ENOMEM (25) -#define KD_ENOSPC (26) -#define KD_ENOSYS (27) -#define KD_ENOTCONN (28) -#define KD_EPERM (33) -#define KD_ETIMEDOUT (36) -#define KD_EILSEQ (19) -#endif - -/** Map types from OMX standard types only here so interface is as generic as possible. */ -typedef OMX_U32 CPresult; -typedef char * CPstring; -typedef void * CPhandle; -typedef OMX_U32 CPuint; -typedef OMX_S32 CPint; -typedef char CPbyte; -typedef OMX_BOOL CPbool; - -/** enumeration of origin types used in the CP_PIPETYPE's Seek function - * @ingroup cp - */ -typedef enum CP_ORIGINTYPE { - CP_OriginBegin, - CP_OriginCur, - CP_OriginEnd, - CP_OriginKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - CP_OriginVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - CP_OriginMax = 0X7FFFFFFF -} CP_ORIGINTYPE; - -/** enumeration of contact access types used in the CP_PIPETYPE's Open function - * @ingroup cp - */ -typedef enum CP_ACCESSTYPE { - CP_AccessRead, - CP_AccessWrite, - CP_AccessReadWrite , - CP_AccessKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - CP_AccessVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - CP_AccessMax = 0X7FFFFFFF -} CP_ACCESSTYPE; - -/** enumeration of results returned by the CP_PIPETYPE's CheckAvailableBytes function - * @ingroup cp - */ -typedef enum CP_CHECKBYTESRESULTTYPE -{ - CP_CheckBytesOk, /**< There are at least the request number - of bytes available */ - CP_CheckBytesNotReady, /**< The pipe is still retrieving bytes - and presently lacks sufficient bytes. - Client will be called when they are - sufficient bytes are available. */ - CP_CheckBytesInsufficientBytes , /**< The pipe has retrieved all bytes - but those available are less than those - requested */ - CP_CheckBytesAtEndOfStream, /**< The pipe has reached the end of stream - and no more bytes are available. */ - CP_CheckBytesOutOfBuffers, /**< All read/write buffers are currently in use. */ - CP_CheckBytesKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - CP_CheckBytesVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - CP_CheckBytesMax = 0X7FFFFFFF -} CP_CHECKBYTESRESULTTYPE; - -/** enumeration of content pipe events sent to the client callback. - * @ingroup cp - */ -typedef enum CP_EVENTTYPE{ - CP_BytesAvailable, /** bytes requested in a CheckAvailableBytes call are now available*/ - CP_Overflow, /** enumeration of content pipe events sent to the client callback*/ - CP_PipeDisconnected , /** enumeration of content pipe events sent to the client callback*/ - CP_EventKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - CP_EventVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - CP_EventMax = 0X7FFFFFFF -} CP_EVENTTYPE; - -/** content pipe definition - * @ingroup cp - */ -typedef struct CP_PIPETYPE -{ - /** Open a content stream for reading or writing. */ - CPresult (*Open)( CPhandle* hContent, CPstring szURI, CP_ACCESSTYPE eAccess ); - - /** Close a content stream. */ - CPresult (*Close)( CPhandle hContent ); - - /** Create a content source and open it for writing. */ - CPresult (*Create)( CPhandle *hContent, CPstring szURI ); - - /** Check the that specified number of bytes are available for reading or writing (depending on access type).*/ - CPresult (*CheckAvailableBytes)( CPhandle hContent, CPuint nBytesRequested, CP_CHECKBYTESRESULTTYPE *eResult ); - - /** Seek to certain position in the content relative to the specified origin. */ - CPresult (*SetPosition)( CPhandle hContent, CPint nOffset, CP_ORIGINTYPE eOrigin); - - /** Retrieve the current position relative to the start of the content. */ - CPresult (*GetPosition)( CPhandle hContent, CPuint *pPosition); - - /** Retrieve data of the specified size from the content stream (advance content pointer by size of data). - Note: pipe client provides pointer. This function is appropriate for small high frequency reads. */ - CPresult (*Read)( CPhandle hContent, CPbyte *pData, CPuint nSize); - - /** Retrieve a buffer allocated by the pipe that contains the requested number of bytes. - Buffer contains the next block of bytes, as specified by nSize, of the content. nSize also - returns the size of the block actually read. Content pointer advances the by the returned size. - Note: pipe provides pointer. This function is appropriate for large reads. The client must call - ReleaseReadBuffer when done with buffer. - - In some cases the requested block may not reside in contiguous memory within the - pipe implementation. For instance if the pipe leverages a circular buffer then the requested - block may straddle the boundary of the circular buffer. By default a pipe implementation - performs a copy in this case to provide the block to the pipe client in one contiguous buffer. - If, however, the client sets bForbidCopy, then the pipe returns only those bytes preceding the memory - boundary. Here the client may retrieve the data in segments over successive calls. */ - CPresult (*ReadBuffer)( CPhandle hContent, CPbyte **ppBuffer, CPuint *nSize, CPbool bForbidCopy); - - /** Release a buffer obtained by ReadBuffer back to the pipe. */ - CPresult (*ReleaseReadBuffer)(CPhandle hContent, CPbyte *pBuffer); - - /** Write data of the specified size to the content (advance content pointer by size of data). - Note: pipe client provides pointer. This function is appropriate for small high frequency writes. */ - CPresult (*Write)( CPhandle hContent, CPbyte *data, CPuint nSize); - - /** Retrieve a buffer allocated by the pipe used to write data to the content. - Client will fill buffer with output data. Note: pipe provides pointer. This function is appropriate - for large writes. The client must call WriteBuffer when done it has filled the buffer with data.*/ - CPresult (*GetWriteBuffer)( CPhandle hContent, CPbyte **ppBuffer, CPuint nSize); - - /** Deliver a buffer obtained via GetWriteBuffer to the pipe. Pipe will write the - the contents of the buffer to content and advance content pointer by the size of the buffer */ - CPresult (*WriteBuffer)( CPhandle hContent, CPbyte *pBuffer, CPuint nFilledSize); - - /** Register a per-handle client callback with the content pipe. */ - CPresult (*RegisterCallback)( CPhandle hContent, CPresult (*ClientCallback)(CP_EVENTTYPE eEvent, CPuint iParam)); - -} CP_PIPETYPE; - -#endif - diff --git a/sec_mm/sec_omx/sec_omx_include/khronos/OMX_Core.h b/sec_mm/sec_omx/sec_omx_include/khronos/OMX_Core.h deleted file mode 100644 index a076f2f..0000000 --- a/sec_mm/sec_omx/sec_omx_include/khronos/OMX_Core.h +++ /dev/null @@ -1,1431 +0,0 @@ -/* - * Copyright (c) 2008 The Khronos Group Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject - * to the following conditions: - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - */ - -/** OMX_Core.h - OpenMax IL version 1.1.2 - * The OMX_Core header file contains the definitions used by both the - * application and the component to access common items. - */ - -#ifndef OMX_Core_h -#define OMX_Core_h - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - - -/* Each OMX header shall include all required header files to allow the - * header to compile without errors. The includes below are required - * for this header file to compile successfully - */ - -#include - - -/** The OMX_COMMANDTYPE enumeration is used to specify the action in the - * OMX_SendCommand macro. - * @ingroup core - */ -typedef enum OMX_COMMANDTYPE -{ - OMX_CommandStateSet, /**< Change the component state */ - OMX_CommandFlush, /**< Flush the data queue(s) of a component */ - OMX_CommandPortDisable, /**< Disable a port on a component. */ - OMX_CommandPortEnable, /**< Enable a port on a component. */ - OMX_CommandMarkBuffer, /**< Mark a component/buffer for observation */ - OMX_CommandKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_CommandVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_CommandMax = 0X7FFFFFFF -} OMX_COMMANDTYPE; - - - -/** The OMX_STATETYPE enumeration is used to indicate or change the component - * state. This enumeration reflects the current state of the component when - * used with the OMX_GetState macro or becomes the parameter in a state change - * command when used with the OMX_SendCommand macro. - * - * The component will be in the Loaded state after the component is initially - * loaded into memory. In the Loaded state, the component is not allowed to - * allocate or hold resources other than to build it's internal parameter - * and configuration tables. The application will send one or more - * SetParameters/GetParameters and SetConfig/GetConfig commands to the - * component and the component will record each of these parameter and - * configuration changes for use later. When the application sends the - * Idle command, the component will acquire the resources needed for the - * specified configuration and will transition to the idle state if the - * allocation is successful. If the component cannot successfully - * transition to the idle state for any reason, the state of the component - * shall be fully rolled back to the Loaded state (e.g. all allocated - * resources shall be released). When the component receives the command - * to go to the Executing state, it shall begin processing buffers by - * sending all input buffers it holds to the application. While - * the component is in the Idle state, the application may also send the - * Pause command. If the component receives the pause command while in the - * Idle state, the component shall send all input buffers it holds to the - * application, but shall not begin processing buffers. This will allow the - * application to prefill buffers. - * - * @ingroup comp - */ - -typedef enum OMX_STATETYPE -{ - OMX_StateInvalid, /**< component has detected that it's internal data - structures are corrupted to the point that - it cannot determine it's state properly */ - OMX_StateLoaded, /**< component has been loaded but has not completed - initialization. The OMX_SetParameter macro - and the OMX_GetParameter macro are the only - valid macros allowed to be sent to the - component in this state. */ - OMX_StateIdle, /**< component initialization has been completed - successfully and the component is ready to - to start. */ - OMX_StateExecuting, /**< component has accepted the start command and - is processing data (if data is available) */ - OMX_StatePause, /**< component has received pause command */ - OMX_StateWaitForResources, /**< component is waiting for resources, either after - preemption or before it gets the resources requested. - See specification for complete details. */ - OMX_StateKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_StateVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_StateMax = 0X7FFFFFFF -} OMX_STATETYPE; - -/** The OMX_ERRORTYPE enumeration defines the standard OMX Errors. These - * errors should cover most of the common failure cases. However, - * vendors are free to add additional error messages of their own as - * long as they follow these rules: - * 1. Vendor error messages shall be in the range of 0x90000000 to - * 0x9000FFFF. - * 2. Vendor error messages shall be defined in a header file provided - * with the component. No error messages are allowed that are - * not defined. - */ -typedef enum OMX_ERRORTYPE -{ - OMX_ErrorNone = 0, - - /** There were insufficient resources to perform the requested operation */ - OMX_ErrorInsufficientResources = (OMX_S32) 0x80001000, - - /** There was an error, but the cause of the error could not be determined */ - OMX_ErrorUndefined = (OMX_S32) 0x80001001, - - /** The component name string was not valid */ - OMX_ErrorInvalidComponentName = (OMX_S32) 0x80001002, - - /** No component with the specified name string was found */ - OMX_ErrorComponentNotFound = (OMX_S32) 0x80001003, - - /** The component specified did not have a "OMX_ComponentInit" or - "OMX_ComponentDeInit entry point */ - OMX_ErrorInvalidComponent = (OMX_S32) 0x80001004, - - /** One or more parameters were not valid */ - OMX_ErrorBadParameter = (OMX_S32) 0x80001005, - - /** The requested function is not implemented */ - OMX_ErrorNotImplemented = (OMX_S32) 0x80001006, - - /** The buffer was emptied before the next buffer was ready */ - OMX_ErrorUnderflow = (OMX_S32) 0x80001007, - - /** The buffer was not available when it was needed */ - OMX_ErrorOverflow = (OMX_S32) 0x80001008, - - /** The hardware failed to respond as expected */ - OMX_ErrorHardware = (OMX_S32) 0x80001009, - - /** The component is in the state OMX_StateInvalid */ - OMX_ErrorInvalidState = (OMX_S32) 0x8000100A, - - /** Stream is found to be corrupt */ - OMX_ErrorStreamCorrupt = (OMX_S32) 0x8000100B, - - /** Ports being connected are not compatible */ - OMX_ErrorPortsNotCompatible = (OMX_S32) 0x8000100C, - - /** Resources allocated to an idle component have been - lost resulting in the component returning to the loaded state */ - OMX_ErrorResourcesLost = (OMX_S32) 0x8000100D, - - /** No more indicies can be enumerated */ - OMX_ErrorNoMore = (OMX_S32) 0x8000100E, - - /** The component detected a version mismatch */ - OMX_ErrorVersionMismatch = (OMX_S32) 0x8000100F, - - /** The component is not ready to return data at this time */ - OMX_ErrorNotReady = (OMX_S32) 0x80001010, - - /** There was a timeout that occurred */ - OMX_ErrorTimeout = (OMX_S32) 0x80001011, - - /** This error occurs when trying to transition into the state you are already in */ - OMX_ErrorSameState = (OMX_S32) 0x80001012, - - /** Resources allocated to an executing or paused component have been - preempted, causing the component to return to the idle state */ - OMX_ErrorResourcesPreempted = (OMX_S32) 0x80001013, - - /** A non-supplier port sends this error to the IL client (via the EventHandler callback) - during the allocation of buffers (on a transition from the LOADED to the IDLE state or - on a port restart) when it deems that it has waited an unusually long time for the supplier - to send it an allocated buffer via a UseBuffer call. */ - OMX_ErrorPortUnresponsiveDuringAllocation = (OMX_S32) 0x80001014, - - /** A non-supplier port sends this error to the IL client (via the EventHandler callback) - during the deallocation of buffers (on a transition from the IDLE to LOADED state or - on a port stop) when it deems that it has waited an unusually long time for the supplier - to request the deallocation of a buffer header via a FreeBuffer call. */ - OMX_ErrorPortUnresponsiveDuringDeallocation = (OMX_S32) 0x80001015, - - /** A supplier port sends this error to the IL client (via the EventHandler callback) - during the stopping of a port (either on a transition from the IDLE to LOADED - state or a port stop) when it deems that it has waited an unusually long time for - the non-supplier to return a buffer via an EmptyThisBuffer or FillThisBuffer call. */ - OMX_ErrorPortUnresponsiveDuringStop = (OMX_S32) 0x80001016, - - /** Attempting a state transtion that is not allowed */ - OMX_ErrorIncorrectStateTransition = (OMX_S32) 0x80001017, - - /* Attempting a command that is not allowed during the present state. */ - OMX_ErrorIncorrectStateOperation = (OMX_S32) 0x80001018, - - /** The values encapsulated in the parameter or config structure are not supported. */ - OMX_ErrorUnsupportedSetting = (OMX_S32) 0x80001019, - - /** The parameter or config indicated by the given index is not supported. */ - OMX_ErrorUnsupportedIndex = (OMX_S32) 0x8000101A, - - /** The port index supplied is incorrect. */ - OMX_ErrorBadPortIndex = (OMX_S32) 0x8000101B, - - /** The port has lost one or more of its buffers and it thus unpopulated. */ - OMX_ErrorPortUnpopulated = (OMX_S32) 0x8000101C, - - /** Component suspended due to temporary loss of resources */ - OMX_ErrorComponentSuspended = (OMX_S32) 0x8000101D, - - /** Component suspended due to an inability to acquire dynamic resources */ - OMX_ErrorDynamicResourcesUnavailable = (OMX_S32) 0x8000101E, - - /** When the macroblock error reporting is enabled the component returns new error - for every frame that has errors */ - OMX_ErrorMbErrorsInFrame = (OMX_S32) 0x8000101F, - - /** A component reports this error when it cannot parse or determine the format of an input stream. */ - OMX_ErrorFormatNotDetected = (OMX_S32) 0x80001020, - - /** The content open operation failed. */ - OMX_ErrorContentPipeOpenFailed = (OMX_S32) 0x80001021, - - /** The content creation operation failed. */ - OMX_ErrorContentPipeCreationFailed = (OMX_S32) 0x80001022, - - /** Separate table information is being used */ - OMX_ErrorSeperateTablesUsed = (OMX_S32) 0x80001023, - - /** Tunneling is unsupported by the component*/ - OMX_ErrorTunnelingUnsupported = (OMX_S32) 0x80001024, - - OMX_ErrorKhronosExtensions = (OMX_S32)0x8F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_ErrorVendorStartUnused = (OMX_S32)0x90000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_ErrorMax = 0x7FFFFFFF -} OMX_ERRORTYPE; - -/** @ingroup core */ -typedef OMX_ERRORTYPE (* OMX_COMPONENTINITTYPE)(OMX_IN OMX_HANDLETYPE hComponent); - -/** @ingroup core */ -typedef struct OMX_COMPONENTREGISTERTYPE -{ - const char * pName; /* Component name, 128 byte limit (including '\0') applies */ - OMX_COMPONENTINITTYPE pInitialize; /* Component instance initialization function */ -} OMX_COMPONENTREGISTERTYPE; - -/** @ingroup core */ -extern OMX_COMPONENTREGISTERTYPE OMX_ComponentRegistered[]; - -/** @ingroup rpm */ -typedef struct OMX_PRIORITYMGMTTYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nGroupPriority; /**< Priority of the component group */ - OMX_U32 nGroupID; /**< ID of the component group */ -} OMX_PRIORITYMGMTTYPE; - -/* Component name and Role names are limited to 128 characters including the terminating '\0'. */ -#define OMX_MAX_STRINGNAME_SIZE 128 - -/** @ingroup comp */ -typedef struct OMX_PARAM_COMPONENTROLETYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U8 cRole[OMX_MAX_STRINGNAME_SIZE]; /**< name of standard component which defines component role */ -} OMX_PARAM_COMPONENTROLETYPE; - -/** End of Stream Buffer Flag: - * - * A component sets EOS when it has no more data to emit on a particular - * output port. Thus an output port shall set EOS on the last buffer it - * emits. A component's determination of when an output port should - * cease sending data is implemenation specific. - * @ingroup buf - */ - -#define OMX_BUFFERFLAG_EOS 0x00000001 - -/** Start Time Buffer Flag: - * - * The source of a stream (e.g. a demux component) sets the STARTTIME - * flag on the buffer that contains the starting timestamp for the - * stream. The starting timestamp corresponds to the first data that - * should be displayed at startup or after a seek. - * The first timestamp of the stream is not necessarily the start time. - * For instance, in the case of a seek to a particular video frame, - * the target frame may be an interframe. Thus the first buffer of - * the stream will be the intra-frame preceding the target frame and - * the starttime will occur with the target frame (with any other - * required frames required to reconstruct the target intervening). - * - * The STARTTIME flag is directly associated with the buffer's - * timestamp ' thus its association to buffer data and its - * propagation is identical to the timestamp's. - * - * When a Sync Component client receives a buffer with the - * STARTTIME flag it shall perform a SetConfig on its sync port - * using OMX_ConfigTimeClientStartTime and passing the buffer's - * timestamp. - * - * @ingroup buf - */ - -#define OMX_BUFFERFLAG_STARTTIME 0x00000002 - - - -/** Decode Only Buffer Flag: - * - * The source of a stream (e.g. a demux component) sets the DECODEONLY - * flag on any buffer that should shall be decoded but should not be - * displayed. This flag is used, for instance, when a source seeks to - * a target interframe that requires the decode of frames preceding the - * target to facilitate the target's reconstruction. In this case the - * source would emit the frames preceding the target downstream - * but mark them as decode only. - * - * The DECODEONLY is associated with buffer data and propagated in a - * manner identical to the buffer timestamp. - * - * A component that renders data should ignore all buffers with - * the DECODEONLY flag set. - * - * @ingroup buf - */ - -#define OMX_BUFFERFLAG_DECODEONLY 0x00000004 - - -/* Data Corrupt Flag: This flag is set when the IL client believes the data in the associated buffer is corrupt - * @ingroup buf - */ - -#define OMX_BUFFERFLAG_DATACORRUPT 0x00000008 - -/* End of Frame: The buffer contains exactly one end of frame and no data - * occurs after the end of frame. This flag is an optional hint. The absence - * of this flag does not imply the absence of an end of frame within the buffer. - * @ingroup buf -*/ -#define OMX_BUFFERFLAG_ENDOFFRAME 0x00000010 - -/* Sync Frame Flag: This flag is set when the buffer content contains a coded sync frame ' - * a frame that has no dependency on any other frame information - * @ingroup buf - */ -#define OMX_BUFFERFLAG_SYNCFRAME 0x00000020 - -/* Extra data present flag: there is extra data appended to the data stream - * residing in the buffer - * @ingroup buf - */ -#define OMX_BUFFERFLAG_EXTRADATA 0x00000040 - -/** Codec Config Buffer Flag: -* OMX_BUFFERFLAG_CODECCONFIG is an optional flag that is set by an -* output port when all bytes in the buffer form part or all of a set of -* codec specific configuration data. Examples include SPS/PPS nal units -* for OMX_VIDEO_CodingAVC or AudioSpecificConfig data for -* OMX_AUDIO_CodingAAC. Any component that for a given stream sets -* OMX_BUFFERFLAG_CODECCONFIG shall not mix codec configuration bytes -* with frame data in the same buffer, and shall send all buffers -* containing codec configuration bytes before any buffers containing -* frame data that those configurations bytes describe. -* If the stream format for a particular codec has a frame specific -* header at the start of each frame, for example OMX_AUDIO_CodingMP3 or -* OMX_AUDIO_CodingAAC in ADTS mode, then these shall be presented as -* normal without setting OMX_BUFFERFLAG_CODECCONFIG. - * @ingroup buf - */ -#define OMX_BUFFERFLAG_CODECCONFIG 0x00000080 - - - -/** @ingroup buf */ -typedef struct OMX_BUFFERHEADERTYPE -{ - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U8* pBuffer; /**< Pointer to actual block of memory - that is acting as the buffer */ - OMX_U32 nAllocLen; /**< size of the buffer allocated, in bytes */ - OMX_U32 nFilledLen; /**< number of bytes currently in the - buffer */ - OMX_U32 nOffset; /**< start offset of valid data in bytes from - the start of the buffer */ - OMX_PTR pAppPrivate; /**< pointer to any data the application - wants to associate with this buffer */ - OMX_PTR pPlatformPrivate; /**< pointer to any data the platform - wants to associate with this buffer */ - OMX_PTR pInputPortPrivate; /**< pointer to any data the input port - wants to associate with this buffer */ - OMX_PTR pOutputPortPrivate; /**< pointer to any data the output port - wants to associate with this buffer */ - OMX_HANDLETYPE hMarkTargetComponent; /**< The component that will generate a - mark event upon processing this buffer. */ - OMX_PTR pMarkData; /**< Application specific data associated with - the mark sent on a mark event to disambiguate - this mark from others. */ - OMX_U32 nTickCount; /**< Optional entry that the component and - application can update with a tick count - when they access the component. This - value should be in microseconds. Since - this is a value relative to an arbitrary - starting point, this value cannot be used - to determine absolute time. This is an - optional entry and not all components - will update it.*/ - OMX_TICKS nTimeStamp; /**< Timestamp corresponding to the sample - starting at the first logical sample - boundary in the buffer. Timestamps of - successive samples within the buffer may - be inferred by adding the duration of the - of the preceding buffer to the timestamp - of the preceding buffer.*/ - OMX_U32 nFlags; /**< buffer specific flags */ - OMX_U32 nOutputPortIndex; /**< The index of the output port (if any) using - this buffer */ - OMX_U32 nInputPortIndex; /**< The index of the input port (if any) using - this buffer */ -} OMX_BUFFERHEADERTYPE; - -/** The OMX_EXTRADATATYPE enumeration is used to define the - * possible extra data payload types. - * NB: this enum is binary backwards compatible with the previous - * OMX_EXTRADATA_QUANT define. This should be replaced with - * OMX_ExtraDataQuantization. - */ -typedef enum OMX_EXTRADATATYPE -{ - OMX_ExtraDataNone = 0, /**< Indicates that no more extra data sections follow */ - OMX_ExtraDataQuantization, /**< The data payload contains quantization data */ - OMX_ExtraDataKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_ExtraDataVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_ExtraDataMax = 0x7FFFFFFF -} OMX_EXTRADATATYPE; - - -typedef struct OMX_OTHER_EXTRADATATYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_EXTRADATATYPE eType; /* Extra Data type */ - OMX_U32 nDataSize; /* Size of the supporting data to follow */ - OMX_U8 data[1]; /* Supporting data hint */ -} OMX_OTHER_EXTRADATATYPE; - -/** @ingroup comp */ -typedef struct OMX_PORT_PARAM_TYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPorts; /**< The number of ports for this component */ - OMX_U32 nStartPortNumber; /** first port number for this type of port */ -} OMX_PORT_PARAM_TYPE; - -/** @ingroup comp */ -typedef enum OMX_EVENTTYPE -{ - OMX_EventCmdComplete, /**< component has sucessfully completed a command */ - OMX_EventError, /**< component has detected an error condition */ - OMX_EventMark, /**< component has detected a buffer mark */ - OMX_EventPortSettingsChanged, /**< component is reported a port settings change */ - OMX_EventBufferFlag, /**< component has detected an EOS */ - OMX_EventResourcesAcquired, /**< component has been granted resources and is - automatically starting the state change from - OMX_StateWaitForResources to OMX_StateIdle. */ - OMX_EventComponentResumed, /**< Component resumed due to reacquisition of resources */ - OMX_EventDynamicResourcesAvailable, /**< Component has acquired previously unavailable dynamic resources */ - OMX_EventPortFormatDetected, /**< Component has detected a supported format. */ - OMX_EventKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_EventVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_EventMax = 0x7FFFFFFF -} OMX_EVENTTYPE; - -typedef struct OMX_CALLBACKTYPE -{ - /** The EventHandler method is used to notify the application when an - event of interest occurs. Events are defined in the OMX_EVENTTYPE - enumeration. Please see that enumeration for details of what will - be returned for each type of event. Callbacks should not return - an error to the component, so if an error occurs, the application - shall handle it internally. This is a blocking call. - - The application should return from this call within 5 msec to avoid - blocking the component for an excessively long period of time. - - @param hComponent - handle of the component to access. This is the component - handle returned by the call to the GetHandle function. - @param pAppData - pointer to an application defined value that was provided in the - pAppData parameter to the OMX_GetHandle method for the component. - This application defined value is provided so that the application - can have a component specific context when receiving the callback. - @param eEvent - Event that the component wants to notify the application about. - @param nData1 - nData will be the OMX_ERRORTYPE for an error event and will be - an OMX_COMMANDTYPE for a command complete event and OMX_INDEXTYPE for a OMX_PortSettingsChanged event. - @param nData2 - nData2 will hold further information related to the event. Can be OMX_STATETYPE for - a OMX_CommandStateSet command or port index for a OMX_PortSettingsChanged event. - Default value is 0 if not used. ) - @param pEventData - Pointer to additional event-specific data (see spec for meaning). - */ - - OMX_ERRORTYPE (*EventHandler)( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_PTR pAppData, - OMX_IN OMX_EVENTTYPE eEvent, - OMX_IN OMX_U32 nData1, - OMX_IN OMX_U32 nData2, - OMX_IN OMX_PTR pEventData); - - /** The EmptyBufferDone method is used to return emptied buffers from an - input port back to the application for reuse. This is a blocking call - so the application should not attempt to refill the buffers during this - call, but should queue them and refill them in another thread. There - is no error return, so the application shall handle any errors generated - internally. - - The application should return from this call within 5 msec. - - @param hComponent - handle of the component to access. This is the component - handle returned by the call to the GetHandle function. - @param pAppData - pointer to an application defined value that was provided in the - pAppData parameter to the OMX_GetHandle method for the component. - This application defined value is provided so that the application - can have a component specific context when receiving the callback. - @param pBuffer - pointer to an OMX_BUFFERHEADERTYPE structure allocated with UseBuffer - or AllocateBuffer indicating the buffer that was emptied. - @ingroup buf - */ - OMX_ERRORTYPE (*EmptyBufferDone)( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_PTR pAppData, - OMX_IN OMX_BUFFERHEADERTYPE* pBuffer); - - /** The FillBufferDone method is used to return filled buffers from an - output port back to the application for emptying and then reuse. - This is a blocking call so the application should not attempt to - empty the buffers during this call, but should queue the buffers - and empty them in another thread. There is no error return, so - the application shall handle any errors generated internally. The - application shall also update the buffer header to indicate the - number of bytes placed into the buffer. - - The application should return from this call within 5 msec. - - @param hComponent - handle of the component to access. This is the component - handle returned by the call to the GetHandle function. - @param pAppData - pointer to an application defined value that was provided in the - pAppData parameter to the OMX_GetHandle method for the component. - This application defined value is provided so that the application - can have a component specific context when receiving the callback. - @param pBuffer - pointer to an OMX_BUFFERHEADERTYPE structure allocated with UseBuffer - or AllocateBuffer indicating the buffer that was filled. - @ingroup buf - */ - OMX_ERRORTYPE (*FillBufferDone)( - OMX_OUT OMX_HANDLETYPE hComponent, - OMX_OUT OMX_PTR pAppData, - OMX_OUT OMX_BUFFERHEADERTYPE* pBuffer); - -} OMX_CALLBACKTYPE; - -/** The OMX_BUFFERSUPPLIERTYPE enumeration is used to dictate port supplier - preference when tunneling between two ports. - @ingroup tun buf -*/ -typedef enum OMX_BUFFERSUPPLIERTYPE -{ - OMX_BufferSupplyUnspecified = 0x0, /**< port supplying the buffers is unspecified, - or don't care */ - OMX_BufferSupplyInput, /**< input port supplies the buffers */ - OMX_BufferSupplyOutput, /**< output port supplies the buffers */ - OMX_BufferSupplyKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_BufferSupplyVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_BufferSupplyMax = 0x7FFFFFFF -} OMX_BUFFERSUPPLIERTYPE; - - -/** buffer supplier parameter - * @ingroup tun - */ -typedef struct OMX_PARAM_BUFFERSUPPLIERTYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_BUFFERSUPPLIERTYPE eBufferSupplier; /**< buffer supplier */ -} OMX_PARAM_BUFFERSUPPLIERTYPE; - - -/**< indicates that buffers received by an input port of a tunnel - may not modify the data in the buffers - @ingroup tun - */ -#define OMX_PORTTUNNELFLAG_READONLY 0x00000001 - - -/** The OMX_TUNNELSETUPTYPE structure is used to pass data from an output - port to an input port as part the two ComponentTunnelRequest calls - resulting from a OMX_SetupTunnel call from the IL Client. - @ingroup tun - */ -typedef struct OMX_TUNNELSETUPTYPE -{ - OMX_U32 nTunnelFlags; /**< bit flags for tunneling */ - OMX_BUFFERSUPPLIERTYPE eSupplier; /**< supplier preference */ -} OMX_TUNNELSETUPTYPE; - -/* OMX Component headers is included to enable the core to use - macros for functions into the component for OMX release 1.0. - Developers should not access any structures or data from within - the component header directly */ -/* TO BE REMOVED - #include */ - -/** GetComponentVersion will return information about the component. - This is a blocking call. This macro will go directly from the - application to the component (via a core macro). The - component will return from this call within 5 msec. - @param [in] hComponent - handle of component to execute the command - @param [out] pComponentName - pointer to an empty string of length 128 bytes. The component - will write its name into this string. The name will be - terminated by a single zero byte. The name of a component will - be 127 bytes or less to leave room for the trailing zero byte. - An example of a valid component name is "OMX.ABC.ChannelMixer\0". - @param [out] pComponentVersion - pointer to an OMX Version structure that the component will fill - in. The component will fill in a value that indicates the - component version. NOTE: the component version is NOT the same - as the OMX Specification version (found in all structures). The - component version is defined by the vendor of the component and - its value is entirely up to the component vendor. - @param [out] pSpecVersion - pointer to an OMX Version structure that the component will fill - in. The SpecVersion is the version of the specification that the - component was built against. Please note that this value may or - may not match the structure's version. For example, if the - component was built against the 2.0 specification, but the - application (which creates the structure is built against the - 1.0 specification the versions would be different. - @param [out] pComponentUUID - pointer to the UUID of the component which will be filled in by - the component. The UUID is a unique identifier that is set at - RUN time for the component and is unique to each instantion of - the component. - @return OMX_ERRORTYPE - If the command successfully executes, the return code will be - OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. - @ingroup comp - */ -#define OMX_GetComponentVersion( \ - hComponent, \ - pComponentName, \ - pComponentVersion, \ - pSpecVersion, \ - pComponentUUID) \ - ((OMX_COMPONENTTYPE*)hComponent)->GetComponentVersion( \ - hComponent, \ - pComponentName, \ - pComponentVersion, \ - pSpecVersion, \ - pComponentUUID) /* Macro End */ - - -/** Send a command to the component. This call is a non-blocking call. - The component should check the parameters and then queue the command - to the component thread to be executed. The component thread shall - send the EventHandler() callback at the conclusion of the command. - This macro will go directly from the application to the component (via - a core macro). The component will return from this call within 5 msec. - - When the command is "OMX_CommandStateSet" the component will queue a - state transition to the new state idenfied in nParam. - - When the command is "OMX_CommandFlush", to flush a port's buffer queues, - the command will force the component to return all buffers NOT CURRENTLY - BEING PROCESSED to the application, in the order in which the buffers - were received. - - When the command is "OMX_CommandPortDisable" or - "OMX_CommandPortEnable", the component's port (given by the value of - nParam) will be stopped or restarted. - - When the command "OMX_CommandMarkBuffer" is used to mark a buffer, the - pCmdData will point to a OMX_MARKTYPE structure containing the component - handle of the component to examine the buffer chain for the mark. nParam1 - contains the index of the port on which the buffer mark is applied. - - Specification text for more details. - - @param [in] hComponent - handle of component to execute the command - @param [in] Cmd - Command for the component to execute - @param [in] nParam - Parameter for the command to be executed. When Cmd has the value - OMX_CommandStateSet, value is a member of OMX_STATETYPE. When Cmd has - the value OMX_CommandFlush, value of nParam indicates which port(s) - to flush. -1 is used to flush all ports a single port index will - only flush that port. When Cmd has the value "OMX_CommandPortDisable" - or "OMX_CommandPortEnable", the component's port is given by - the value of nParam. When Cmd has the value "OMX_CommandMarkBuffer" - the components pot is given by the value of nParam. - @param [in] pCmdData - Parameter pointing to the OMX_MARKTYPE structure when Cmd has the value - "OMX_CommandMarkBuffer". - @return OMX_ERRORTYPE - If the command successfully executes, the return code will be - OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. - @ingroup comp - */ -#define OMX_SendCommand( \ - hComponent, \ - Cmd, \ - nParam, \ - pCmdData) \ - ((OMX_COMPONENTTYPE*)hComponent)->SendCommand( \ - hComponent, \ - Cmd, \ - nParam, \ - pCmdData) /* Macro End */ - - -/** The OMX_GetParameter macro will get one of the current parameter - settings from the component. This macro cannot only be invoked when - the component is in the OMX_StateInvalid state. The nParamIndex - parameter is used to indicate which structure is being requested from - the component. The application shall allocate the correct structure - and shall fill in the structure size and version information before - invoking this macro. When the parameter applies to a port, the - caller shall fill in the appropriate nPortIndex value indicating the - port on which the parameter applies. If the component has not had - any settings changed, then the component should return a set of - valid DEFAULT parameters for the component. This is a blocking - call. - - The component should return from this call within 20 msec. - - @param [in] hComponent - Handle of the component to be accessed. This is the component - handle returned by the call to the OMX_GetHandle function. - @param [in] nParamIndex - Index of the structure to be filled. This value is from the - OMX_INDEXTYPE enumeration. - @param [in,out] pComponentParameterStructure - Pointer to application allocated structure to be filled by the - component. - @return OMX_ERRORTYPE - If the command successfully executes, the return code will be - OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. - @ingroup comp - */ -#define OMX_GetParameter( \ - hComponent, \ - nParamIndex, \ - pComponentParameterStructure) \ - ((OMX_COMPONENTTYPE*)hComponent)->GetParameter( \ - hComponent, \ - nParamIndex, \ - pComponentParameterStructure) /* Macro End */ - - -/** The OMX_SetParameter macro will send an initialization parameter - structure to a component. Each structure shall be sent one at a time, - in a separate invocation of the macro. This macro can only be - invoked when the component is in the OMX_StateLoaded state, or the - port is disabled (when the parameter applies to a port). The - nParamIndex parameter is used to indicate which structure is being - passed to the component. The application shall allocate the - correct structure and shall fill in the structure size and version - information (as well as the actual data) before invoking this macro. - The application is free to dispose of this structure after the call - as the component is required to copy any data it shall retain. This - is a blocking call. - - The component should return from this call within 20 msec. - - @param [in] hComponent - Handle of the component to be accessed. This is the component - handle returned by the call to the OMX_GetHandle function. - @param [in] nIndex - Index of the structure to be sent. This value is from the - OMX_INDEXTYPE enumeration. - @param [in] pComponentParameterStructure - pointer to application allocated structure to be used for - initialization by the component. - @return OMX_ERRORTYPE - If the command successfully executes, the return code will be - OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. - @ingroup comp - */ -#define OMX_SetParameter( \ - hComponent, \ - nParamIndex, \ - pComponentParameterStructure) \ - ((OMX_COMPONENTTYPE*)hComponent)->SetParameter( \ - hComponent, \ - nParamIndex, \ - pComponentParameterStructure) /* Macro End */ - - -/** The OMX_GetConfig macro will get one of the configuration structures - from a component. This macro can be invoked anytime after the - component has been loaded. The nParamIndex call parameter is used to - indicate which structure is being requested from the component. The - application shall allocate the correct structure and shall fill in the - structure size and version information before invoking this macro. - If the component has not had this configuration parameter sent before, - then the component should return a set of valid DEFAULT values for the - component. This is a blocking call. - - The component should return from this call within 5 msec. - - @param [in] hComponent - Handle of the component to be accessed. This is the component - handle returned by the call to the OMX_GetHandle function. - @param [in] nIndex - Index of the structure to be filled. This value is from the - OMX_INDEXTYPE enumeration. - @param [in,out] pComponentConfigStructure - pointer to application allocated structure to be filled by the - component. - @return OMX_ERRORTYPE - If the command successfully executes, the return code will be - OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. - @ingroup comp -*/ -#define OMX_GetConfig( \ - hComponent, \ - nConfigIndex, \ - pComponentConfigStructure) \ - ((OMX_COMPONENTTYPE*)hComponent)->GetConfig( \ - hComponent, \ - nConfigIndex, \ - pComponentConfigStructure) /* Macro End */ - - -/** The OMX_SetConfig macro will send one of the configuration - structures to a component. Each structure shall be sent one at a time, - each in a separate invocation of the macro. This macro can be invoked - anytime after the component has been loaded. The application shall - allocate the correct structure and shall fill in the structure size - and version information (as well as the actual data) before invoking - this macro. The application is free to dispose of this structure after - the call as the component is required to copy any data it shall retain. - This is a blocking call. - - The component should return from this call within 5 msec. - - @param [in] hComponent - Handle of the component to be accessed. This is the component - handle returned by the call to the OMX_GetHandle function. - @param [in] nConfigIndex - Index of the structure to be sent. This value is from the - OMX_INDEXTYPE enumeration above. - @param [in] pComponentConfigStructure - pointer to application allocated structure to be used for - initialization by the component. - @return OMX_ERRORTYPE - If the command successfully executes, the return code will be - OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. - @ingroup comp - */ -#define OMX_SetConfig( \ - hComponent, \ - nConfigIndex, \ - pComponentConfigStructure) \ - ((OMX_COMPONENTTYPE*)hComponent)->SetConfig( \ - hComponent, \ - nConfigIndex, \ - pComponentConfigStructure) /* Macro End */ - - -/** The OMX_GetExtensionIndex macro will invoke a component to translate - a vendor specific configuration or parameter string into an OMX - structure index. There is no requirement for the vendor to support - this command for the indexes already found in the OMX_INDEXTYPE - enumeration (this is done to save space in small components). The - component shall support all vendor supplied extension indexes not found - in the master OMX_INDEXTYPE enumeration. This is a blocking call. - - The component should return from this call within 5 msec. - - @param [in] hComponent - Handle of the component to be accessed. This is the component - handle returned by the call to the GetHandle function. - @param [in] cParameterName - OMX_STRING that shall be less than 128 characters long including - the trailing null byte. This is the string that will get - translated by the component into a configuration index. - @param [out] pIndexType - a pointer to a OMX_INDEXTYPE to receive the index value. - @return OMX_ERRORTYPE - If the command successfully executes, the return code will be - OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. - @ingroup comp - */ -#define OMX_GetExtensionIndex( \ - hComponent, \ - cParameterName, \ - pIndexType) \ - ((OMX_COMPONENTTYPE*)hComponent)->GetExtensionIndex( \ - hComponent, \ - cParameterName, \ - pIndexType) /* Macro End */ - - -/** The OMX_GetState macro will invoke the component to get the current - state of the component and place the state value into the location - pointed to by pState. - - The component should return from this call within 5 msec. - - @param [in] hComponent - Handle of the component to be accessed. This is the component - handle returned by the call to the OMX_GetHandle function. - @param [out] pState - pointer to the location to receive the state. The value returned - is one of the OMX_STATETYPE members - @return OMX_ERRORTYPE - If the command successfully executes, the return code will be - OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. - @ingroup comp - */ -#define OMX_GetState( \ - hComponent, \ - pState) \ - ((OMX_COMPONENTTYPE*)hComponent)->GetState( \ - hComponent, \ - pState) /* Macro End */ - - -/** The OMX_UseBuffer macro will request that the component use - a buffer (and allocate its own buffer header) already allocated - by another component, or by the IL Client. This is a blocking - call. - - The component should return from this call within 20 msec. - - @param [in] hComponent - Handle of the component to be accessed. This is the component - handle returned by the call to the OMX_GetHandle function. - @param [out] ppBuffer - pointer to an OMX_BUFFERHEADERTYPE structure used to receive the - pointer to the buffer header - @return OMX_ERRORTYPE - If the command successfully executes, the return code will be - OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. - @ingroup comp buf - */ - -#define OMX_UseBuffer( \ - hComponent, \ - ppBufferHdr, \ - nPortIndex, \ - pAppPrivate, \ - nSizeBytes, \ - pBuffer) \ - ((OMX_COMPONENTTYPE*)hComponent)->UseBuffer( \ - hComponent, \ - ppBufferHdr, \ - nPortIndex, \ - pAppPrivate, \ - nSizeBytes, \ - pBuffer) - - -/** The OMX_AllocateBuffer macro will request that the component allocate - a new buffer and buffer header. The component will allocate the - buffer and the buffer header and return a pointer to the buffer - header. This is a blocking call. - - The component should return from this call within 5 msec. - - @param [in] hComponent - Handle of the component to be accessed. This is the component - handle returned by the call to the OMX_GetHandle function. - @param [out] ppBuffer - pointer to an OMX_BUFFERHEADERTYPE structure used to receive - the pointer to the buffer header - @param [in] nPortIndex - nPortIndex is used to select the port on the component the buffer will - be used with. The port can be found by using the nPortIndex - value as an index into the Port Definition array of the component. - @param [in] pAppPrivate - pAppPrivate is used to initialize the pAppPrivate member of the - buffer header structure. - @param [in] nSizeBytes - size of the buffer to allocate. Used when bAllocateNew is true. - @return OMX_ERRORTYPE - If the command successfully executes, the return code will be - OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. - @ingroup comp buf - */ -#define OMX_AllocateBuffer( \ - hComponent, \ - ppBuffer, \ - nPortIndex, \ - pAppPrivate, \ - nSizeBytes) \ - ((OMX_COMPONENTTYPE*)hComponent)->AllocateBuffer( \ - hComponent, \ - ppBuffer, \ - nPortIndex, \ - pAppPrivate, \ - nSizeBytes) /* Macro End */ - - -/** The OMX_FreeBuffer macro will release a buffer header from the component - which was allocated using either OMX_AllocateBuffer or OMX_UseBuffer. If - the component allocated the buffer (see the OMX_UseBuffer macro) then - the component shall free the buffer and buffer header. This is a - blocking call. - - The component should return from this call within 20 msec. - - @param [in] hComponent - Handle of the component to be accessed. This is the component - handle returned by the call to the OMX_GetHandle function. - @param [in] nPortIndex - nPortIndex is used to select the port on the component the buffer will - be used with. - @param [in] pBuffer - pointer to an OMX_BUFFERHEADERTYPE structure allocated with UseBuffer - or AllocateBuffer. - @return OMX_ERRORTYPE - If the command successfully executes, the return code will be - OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. - @ingroup comp buf - */ -#define OMX_FreeBuffer( \ - hComponent, \ - nPortIndex, \ - pBuffer) \ - ((OMX_COMPONENTTYPE*)hComponent)->FreeBuffer( \ - hComponent, \ - nPortIndex, \ - pBuffer) /* Macro End */ - - -/** The OMX_EmptyThisBuffer macro will send a buffer full of data to an - input port of a component. The buffer will be emptied by the component - and returned to the application via the EmptyBufferDone call back. - This is a non-blocking call in that the component will record the buffer - and return immediately and then empty the buffer, later, at the proper - time. As expected, this macro may be invoked only while the component - is in the OMX_StateExecuting. If nPortIndex does not specify an input - port, the component shall return an error. - - The component should return from this call within 5 msec. - - @param [in] hComponent - Handle of the component to be accessed. This is the component - handle returned by the call to the OMX_GetHandle function. - @param [in] pBuffer - pointer to an OMX_BUFFERHEADERTYPE structure allocated with UseBuffer - or AllocateBuffer. - @return OMX_ERRORTYPE - If the command successfully executes, the return code will be - OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. - @ingroup comp buf - */ -#define OMX_EmptyThisBuffer( \ - hComponent, \ - pBuffer) \ - ((OMX_COMPONENTTYPE*)hComponent)->EmptyThisBuffer( \ - hComponent, \ - pBuffer) /* Macro End */ - - -/** The OMX_FillThisBuffer macro will send an empty buffer to an - output port of a component. The buffer will be filled by the component - and returned to the application via the FillBufferDone call back. - This is a non-blocking call in that the component will record the buffer - and return immediately and then fill the buffer, later, at the proper - time. As expected, this macro may be invoked only while the component - is in the OMX_ExecutingState. If nPortIndex does not specify an output - port, the component shall return an error. - - The component should return from this call within 5 msec. - - @param [in] hComponent - Handle of the component to be accessed. This is the component - handle returned by the call to the OMX_GetHandle function. - @param [in] pBuffer - pointer to an OMX_BUFFERHEADERTYPE structure allocated with UseBuffer - or AllocateBuffer. - @return OMX_ERRORTYPE - If the command successfully executes, the return code will be - OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. - @ingroup comp buf - */ -#define OMX_FillThisBuffer( \ - hComponent, \ - pBuffer) \ - ((OMX_COMPONENTTYPE*)hComponent)->FillThisBuffer( \ - hComponent, \ - pBuffer) /* Macro End */ - - - -/** The OMX_UseEGLImage macro will request that the component use - a EGLImage provided by EGL (and allocate its own buffer header) - This is a blocking call. - - The component should return from this call within 20 msec. - - @param [in] hComponent - Handle of the component to be accessed. This is the component - handle returned by the call to the OMX_GetHandle function. - @param [out] ppBuffer - pointer to an OMX_BUFFERHEADERTYPE structure used to receive the - pointer to the buffer header. Note that the memory location used - for this buffer is NOT visible to the IL Client. - @param [in] nPortIndex - nPortIndex is used to select the port on the component the buffer will - be used with. The port can be found by using the nPortIndex - value as an index into the Port Definition array of the component. - @param [in] pAppPrivate - pAppPrivate is used to initialize the pAppPrivate member of the - buffer header structure. - @param [in] eglImage - eglImage contains the handle of the EGLImage to use as a buffer on the - specified port. The component is expected to validate properties of - the EGLImage against the configuration of the port to ensure the component - can use the EGLImage as a buffer. - @return OMX_ERRORTYPE - If the command successfully executes, the return code will be - OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. - @ingroup comp buf - */ -#define OMX_UseEGLImage( \ - hComponent, \ - ppBufferHdr, \ - nPortIndex, \ - pAppPrivate, \ - eglImage) \ - ((OMX_COMPONENTTYPE*)hComponent)->UseEGLImage( \ - hComponent, \ - ppBufferHdr, \ - nPortIndex, \ - pAppPrivate, \ - eglImage) - -/** The OMX_Init method is used to initialize the OMX core. It shall be the - first call made into OMX and it should only be executed one time without - an interviening OMX_Deinit call. - - The core should return from this call within 20 msec. - - @return OMX_ERRORTYPE - If the command successfully executes, the return code will be - OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. - @ingroup core - */ -OMX_API OMX_ERRORTYPE OMX_APIENTRY OMX_Init(void); - - -/** The OMX_Deinit method is used to deinitialize the OMX core. It shall be - the last call made into OMX. In the event that the core determines that - thare are components loaded when this call is made, the core may return - with an error rather than try to unload the components. - - The core should return from this call within 20 msec. - - @return OMX_ERRORTYPE - If the command successfully executes, the return code will be - OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. - @ingroup core - */ -OMX_API OMX_ERRORTYPE OMX_APIENTRY OMX_Deinit(void); - - -/** The OMX_ComponentNameEnum method will enumerate through all the names of - recognised valid components in the system. This function is provided - as a means to detect all the components in the system run-time. There is - no strict ordering to the enumeration order of component names, although - each name will only be enumerated once. If the OMX core supports run-time - installation of new components, it is only requried to detect newly - installed components when the first call to enumerate component names - is made (i.e. when nIndex is 0x0). - - The core should return from this call in 20 msec. - - @param [out] cComponentName - pointer to a null terminated string with the component name. The - names of the components are strings less than 127 bytes in length - plus the trailing null for a maximum size of 128 bytes. An example - of a valid component name is "OMX.TI.AUDIO.DSP.MIXER\0". Names are - assigned by the vendor, but shall start with "OMX." and then have - the Vendor designation next. - @param [in] nNameLength - number of characters in the cComponentName string. With all - component name strings restricted to less than 128 characters - (including the trailing null) it is recomended that the caller - provide a input string for the cComponentName of 128 characters. - @param [in] nIndex - number containing the enumeration index for the component. - Multiple calls to OMX_ComponentNameEnum with increasing values - of nIndex will enumerate through the component names in the - system until OMX_ErrorNoMore is returned. The value of nIndex - is 0 to (N-1), where N is the number of valid installed components - in the system. - @return OMX_ERRORTYPE - If the command successfully executes, the return code will be - OMX_ErrorNone. When the value of nIndex exceeds the number of - components in the system minus 1, OMX_ErrorNoMore will be - returned. Otherwise the appropriate OMX error will be returned. - @ingroup core - */ -OMX_API OMX_ERRORTYPE OMX_APIENTRY OMX_ComponentNameEnum( - OMX_OUT OMX_STRING cComponentName, - OMX_IN OMX_U32 nNameLength, - OMX_IN OMX_U32 nIndex); - - -/** The OMX_GetHandle method will locate the component specified by the - component name given, load that component into memory and then invoke - the component's methods to create an instance of the component. - - The core should return from this call within 20 msec. - - @param [out] pHandle - pointer to an OMX_HANDLETYPE pointer to be filled in by this method. - @param [in] cComponentName - pointer to a null terminated string with the component name. The - names of the components are strings less than 127 bytes in length - plus the trailing null for a maximum size of 128 bytes. An example - of a valid component name is "OMX.TI.AUDIO.DSP.MIXER\0". Names are - assigned by the vendor, but shall start with "OMX." and then have - the Vendor designation next. - @param [in] pAppData - pointer to an application defined value that will be returned - during callbacks so that the application can identify the source - of the callback. - @param [in] pCallBacks - pointer to a OMX_CALLBACKTYPE structure that will be passed to the - component to initialize it with. - @return OMX_ERRORTYPE - If the command successfully executes, the return code will be - OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. - @ingroup core - */ -OMX_API OMX_ERRORTYPE OMX_APIENTRY OMX_GetHandle( - OMX_OUT OMX_HANDLETYPE* pHandle, - OMX_IN OMX_STRING cComponentName, - OMX_IN OMX_PTR pAppData, - OMX_IN OMX_CALLBACKTYPE* pCallBacks); - - -/** The OMX_FreeHandle method will free a handle allocated by the OMX_GetHandle - method. If the component reference count goes to zero, the component will - be unloaded from memory. - - The core should return from this call within 20 msec when the component is - in the OMX_StateLoaded state. - - @param [in] hComponent - Handle of the component to be accessed. This is the component - handle returned by the call to the GetHandle function. - @return OMX_ERRORTYPE - If the command successfully executes, the return code will be - OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. - @ingroup core - */ -OMX_API OMX_ERRORTYPE OMX_APIENTRY OMX_FreeHandle( - OMX_IN OMX_HANDLETYPE hComponent); - - - -/** The OMX_SetupTunnel method will handle the necessary calls to the components - to setup the specified tunnel the two components. NOTE: This is - an actual method (not a #define macro). This method will make calls into - the component ComponentTunnelRequest method to do the actual tunnel - connection. - - The ComponentTunnelRequest method on both components will be called. - This method shall not be called unless the component is in the - OMX_StateLoaded state except when the ports used for the tunnel are - disabled. In this case, the component may be in the OMX_StateExecuting, - OMX_StatePause, or OMX_StateIdle states. - - The core should return from this call within 20 msec. - - @param [in] hOutput - Handle of the component to be accessed. Also this is the handle - of the component whose port, specified in the nPortOutput parameter - will be used the source for the tunnel. This is the component handle - returned by the call to the OMX_GetHandle function. There is a - requirement that hOutput be the source for the data when - tunelling (i.e. nPortOutput is an output port). If 0x0, the component - specified in hInput will have it's port specified in nPortInput - setup for communication with the application / IL client. - @param [in] nPortOutput - nPortOutput is used to select the source port on component to be - used in the tunnel. - @param [in] hInput - This is the component to setup the tunnel with. This is the handle - of the component whose port, specified in the nPortInput parameter - will be used the destination for the tunnel. This is the component handle - returned by the call to the OMX_GetHandle function. There is a - requirement that hInput be the destination for the data when - tunelling (i.e. nPortInut is an input port). If 0x0, the component - specified in hOutput will have it's port specified in nPortPOutput - setup for communication with the application / IL client. - @param [in] nPortInput - nPortInput is used to select the destination port on component to be - used in the tunnel. - @return OMX_ERRORTYPE - If the command successfully executes, the return code will be - OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. - When OMX_ErrorNotImplemented is returned, one or both components is - a non-interop component and does not support tunneling. - - On failure, the ports of both components are setup for communication - with the application / IL Client. - @ingroup core tun - */ -OMX_API OMX_ERRORTYPE OMX_APIENTRY OMX_SetupTunnel( - OMX_IN OMX_HANDLETYPE hOutput, - OMX_IN OMX_U32 nPortOutput, - OMX_IN OMX_HANDLETYPE hInput, - OMX_IN OMX_U32 nPortInput); - -/** @ingroup cp */ -OMX_API OMX_ERRORTYPE OMX_GetContentPipe( - OMX_OUT OMX_HANDLETYPE *hPipe, - OMX_IN OMX_STRING szURI); - -/** The OMX_GetComponentsOfRole method will return the number of components that support the given - role and (if the compNames field is non-NULL) the names of those components. The call will fail if - an insufficiently sized array of names is supplied. To ensure the array is sufficiently sized the - client should: - * first call this function with the compNames field NULL to determine the number of component names - * second call this function with the compNames field pointing to an array of names allocated - according to the number returned by the first call. - - The core should return from this call within 5 msec. - - @param [in] role - This is generic standard component name consisting only of component class - name and the type within that class (e.g. 'audio_decoder.aac'). - @param [inout] pNumComps - This is used both as input and output. - - If compNames is NULL, the input is ignored and the output specifies how many components support - the given role. - - If compNames is not NULL, on input it bounds the size of the input structure and - on output, it specifies the number of components string names listed within the compNames parameter. - @param [inout] compNames - If NULL this field is ignored. If non-NULL this points to an array of 128-byte strings which accepts - a list of the names of all physical components that implement the specified standard component name. - Each name is NULL terminated. numComps indicates the number of names. - @ingroup core - */ -OMX_API OMX_ERRORTYPE OMX_GetComponentsOfRole ( - OMX_IN OMX_STRING role, - OMX_INOUT OMX_U32 *pNumComps, - OMX_INOUT OMX_U8 **compNames); - -/** The OMX_GetRolesOfComponent method will return the number of roles supported by the given - component and (if the roles field is non-NULL) the names of those roles. The call will fail if - an insufficiently sized array of names is supplied. To ensure the array is sufficiently sized the - client should: - * first call this function with the roles field NULL to determine the number of role names - * second call this function with the roles field pointing to an array of names allocated - according to the number returned by the first call. - - The core should return from this call within 5 msec. - - @param [in] compName - This is the name of the component being queried about. - @param [inout] pNumRoles - This is used both as input and output. - - If roles is NULL, the input is ignored and the output specifies how many roles the component supports. - - If compNames is not NULL, on input it bounds the size of the input structure and - on output, it specifies the number of roles string names listed within the roles parameter. - @param [out] roles - If NULL this field is ignored. If non-NULL this points to an array of 128-byte strings - which accepts a list of the names of all standard components roles implemented on the - specified component name. numComps indicates the number of names. - @ingroup core - */ -OMX_API OMX_ERRORTYPE OMX_GetRolesOfComponent ( - OMX_IN OMX_STRING compName, - OMX_INOUT OMX_U32 *pNumRoles, - OMX_OUT OMX_U8 **roles); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif -/* File EOF */ - diff --git a/sec_mm/sec_omx/sec_omx_include/khronos/OMX_IVCommon.h b/sec_mm/sec_omx/sec_omx_include/khronos/OMX_IVCommon.h deleted file mode 100644 index 4c4995c..0000000 --- a/sec_mm/sec_omx/sec_omx_include/khronos/OMX_IVCommon.h +++ /dev/null @@ -1,920 +0,0 @@ -/** - * Copyright (c) 2008 The Khronos Group Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject - * to the following conditions: - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - */ - -/** - * @file OMX_IVCommon.h - OpenMax IL version 1.1.2 - * The structures needed by Video and Image components to exchange - * parameters and configuration data with the components. - */ -#ifndef OMX_IVCommon_h -#define OMX_IVCommon_h - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/** - * Each OMX header must include all required header files to allow the header - * to compile without errors. The includes below are required for this header - * file to compile successfully - */ - -#include - -/** @defgroup iv OpenMAX IL Imaging and Video Domain - * Common structures for OpenMAX IL Imaging and Video domains - * @{ - */ - - -/** - * Enumeration defining possible uncompressed image/video formats. - * - * ENUMS: - * Unused : Placeholder value when format is N/A - * Monochrome : black and white - * 8bitRGB332 : Red 7:5, Green 4:2, Blue 1:0 - * 12bitRGB444 : Red 11:8, Green 7:4, Blue 3:0 - * 16bitARGB4444 : Alpha 15:12, Red 11:8, Green 7:4, Blue 3:0 - * 16bitARGB1555 : Alpha 15, Red 14:10, Green 9:5, Blue 4:0 - * 16bitRGB565 : Red 15:11, Green 10:5, Blue 4:0 - * 16bitBGR565 : Blue 15:11, Green 10:5, Red 4:0 - * 18bitRGB666 : Red 17:12, Green 11:6, Blue 5:0 - * 18bitARGB1665 : Alpha 17, Red 16:11, Green 10:5, Blue 4:0 - * 19bitARGB1666 : Alpha 18, Red 17:12, Green 11:6, Blue 5:0 - * 24bitRGB888 : Red 24:16, Green 15:8, Blue 7:0 - * 24bitBGR888 : Blue 24:16, Green 15:8, Red 7:0 - * 24bitARGB1887 : Alpha 23, Red 22:15, Green 14:7, Blue 6:0 - * 25bitARGB1888 : Alpha 24, Red 23:16, Green 15:8, Blue 7:0 - * 32bitBGRA8888 : Blue 31:24, Green 23:16, Red 15:8, Alpha 7:0 - * 32bitARGB8888 : Alpha 31:24, Red 23:16, Green 15:8, Blue 7:0 - * YUV411Planar : U,Y are subsampled by a factor of 4 horizontally - * YUV411PackedPlanar : packed per payload in planar slices - * YUV420Planar : Three arrays Y,U,V. - * YUV420PackedPlanar : packed per payload in planar slices - * YUV420SemiPlanar : Two arrays, one is all Y, the other is U and V - * YUV422Planar : Three arrays Y,U,V. - * YUV422PackedPlanar : packed per payload in planar slices - * YUV422SemiPlanar : Two arrays, one is all Y, the other is U and V - * YCbYCr : Organized as 16bit YUYV (i.e. YCbYCr) - * YCrYCb : Organized as 16bit YVYU (i.e. YCrYCb) - * CbYCrY : Organized as 16bit UYVY (i.e. CbYCrY) - * CrYCbY : Organized as 16bit VYUY (i.e. CrYCbY) - * YUV444Interleaved : Each pixel contains equal parts YUV - * RawBayer8bit : SMIA camera output format - * RawBayer10bit : SMIA camera output format - * RawBayer8bitcompressed : SMIA camera output format - */ -typedef enum OMX_COLOR_FORMATTYPE { - OMX_COLOR_FormatUnused, - OMX_COLOR_FormatMonochrome, - OMX_COLOR_Format8bitRGB332, - OMX_COLOR_Format12bitRGB444, - OMX_COLOR_Format16bitARGB4444, - OMX_COLOR_Format16bitARGB1555, - OMX_COLOR_Format16bitRGB565, - OMX_COLOR_Format16bitBGR565, - OMX_COLOR_Format18bitRGB666, - OMX_COLOR_Format18bitARGB1665, - OMX_COLOR_Format19bitARGB1666, - OMX_COLOR_Format24bitRGB888, - OMX_COLOR_Format24bitBGR888, - OMX_COLOR_Format24bitARGB1887, - OMX_COLOR_Format25bitARGB1888, - OMX_COLOR_Format32bitBGRA8888, - OMX_COLOR_Format32bitARGB8888, - OMX_COLOR_FormatYUV411Planar, - OMX_COLOR_FormatYUV411PackedPlanar, - OMX_COLOR_FormatYUV420Planar, - OMX_COLOR_FormatYUV420PackedPlanar, - OMX_COLOR_FormatYUV420SemiPlanar, - OMX_COLOR_FormatYUV422Planar, - OMX_COLOR_FormatYUV422PackedPlanar, - OMX_COLOR_FormatYUV422SemiPlanar, - OMX_COLOR_FormatYCbYCr, - OMX_COLOR_FormatYCrYCb, - OMX_COLOR_FormatCbYCrY, - OMX_COLOR_FormatCrYCbY, - OMX_COLOR_FormatYUV444Interleaved, - OMX_COLOR_FormatRawBayer8bit, - OMX_COLOR_FormatRawBayer10bit, - OMX_COLOR_FormatRawBayer8bitcompressed, - OMX_COLOR_FormatL2, - OMX_COLOR_FormatL4, - OMX_COLOR_FormatL8, - OMX_COLOR_FormatL16, - OMX_COLOR_FormatL24, - OMX_COLOR_FormatL32, - OMX_COLOR_FormatYUV420PackedSemiPlanar, - OMX_COLOR_FormatYUV422PackedSemiPlanar, - OMX_COLOR_Format18BitBGR666, - OMX_COLOR_Format24BitARGB6666, - OMX_COLOR_Format24BitABGR6666, - OMX_COLOR_FormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_COLOR_FormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_COLOR_FormatMax = 0x7FFFFFFF -} OMX_COLOR_FORMATTYPE; - - -/** - * Defines the matrix for conversion from RGB to YUV or vice versa. - * iColorMatrix should be initialized with the fixed point values - * used in converting between formats. - */ -typedef struct OMX_CONFIG_COLORCONVERSIONTYPE { - OMX_U32 nSize; /**< Size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version info */ - OMX_U32 nPortIndex; /**< Port that this struct applies to */ - OMX_S32 xColorMatrix[3][3]; /**< Stored in signed Q16 format */ - OMX_S32 xColorOffset[4]; /**< Stored in signed Q16 format */ -}OMX_CONFIG_COLORCONVERSIONTYPE; - - -/** - * Structure defining percent to scale each frame dimension. For example: - * To make the width 50% larger, use fWidth = 1.5 and to make the width - * 1/2 the original size, use fWidth = 0.5 - */ -typedef struct OMX_CONFIG_SCALEFACTORTYPE { - OMX_U32 nSize; /**< Size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version info */ - OMX_U32 nPortIndex; /**< Port that this struct applies to */ - OMX_S32 xWidth; /**< Fixed point value stored as Q16 */ - OMX_S32 xHeight; /**< Fixed point value stored as Q16 */ -}OMX_CONFIG_SCALEFACTORTYPE; - - -/** - * Enumeration of possible image filter types - */ -typedef enum OMX_IMAGEFILTERTYPE { - OMX_ImageFilterNone, - OMX_ImageFilterNoise, - OMX_ImageFilterEmboss, - OMX_ImageFilterNegative, - OMX_ImageFilterSketch, - OMX_ImageFilterOilPaint, - OMX_ImageFilterHatch, - OMX_ImageFilterGpen, - OMX_ImageFilterAntialias, - OMX_ImageFilterDeRing, - OMX_ImageFilterSolarize, - OMX_ImageFilterKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_ImageFilterVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_ImageFilterMax = 0x7FFFFFFF -} OMX_IMAGEFILTERTYPE; - - -/** - * Image filter configuration - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * eImageFilter : Image filter type enumeration - */ -typedef struct OMX_CONFIG_IMAGEFILTERTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_IMAGEFILTERTYPE eImageFilter; -} OMX_CONFIG_IMAGEFILTERTYPE; - - -/** - * Customized U and V for color enhancement - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * bColorEnhancement : Enable/disable color enhancement - * nCustomizedU : Practical values: 16-240, range: 0-255, value set for - * U component - * nCustomizedV : Practical values: 16-240, range: 0-255, value set for - * V component - */ -typedef struct OMX_CONFIG_COLORENHANCEMENTTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_BOOL bColorEnhancement; - OMX_U8 nCustomizedU; - OMX_U8 nCustomizedV; -} OMX_CONFIG_COLORENHANCEMENTTYPE; - - -/** - * Define color key and color key mask - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * nARGBColor : 32bit Alpha, Red, Green, Blue Color - * nARGBMask : 32bit Mask for Alpha, Red, Green, Blue channels - */ -typedef struct OMX_CONFIG_COLORKEYTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_U32 nARGBColor; - OMX_U32 nARGBMask; -} OMX_CONFIG_COLORKEYTYPE; - - -/** - * List of color blend types for pre/post processing - * - * ENUMS: - * None : No color blending present - * AlphaConstant : Function is (alpha_constant * src) + - * (1 - alpha_constant) * dst) - * AlphaPerPixel : Function is (alpha * src) + (1 - alpha) * dst) - * Alternate : Function is alternating pixels from src and dst - * And : Function is (src & dst) - * Or : Function is (src | dst) - * Invert : Function is ~src - */ -typedef enum OMX_COLORBLENDTYPE { - OMX_ColorBlendNone, - OMX_ColorBlendAlphaConstant, - OMX_ColorBlendAlphaPerPixel, - OMX_ColorBlendAlternate, - OMX_ColorBlendAnd, - OMX_ColorBlendOr, - OMX_ColorBlendInvert, - OMX_ColorBlendKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_ColorBlendVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_ColorBlendMax = 0x7FFFFFFF -} OMX_COLORBLENDTYPE; - - -/** - * Color blend configuration - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * nRGBAlphaConstant : Constant global alpha values when global alpha is used - * eColorBlend : Color blend type enumeration - */ -typedef struct OMX_CONFIG_COLORBLENDTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_U32 nRGBAlphaConstant; - OMX_COLORBLENDTYPE eColorBlend; -} OMX_CONFIG_COLORBLENDTYPE; - - -/** - * Hold frame dimension - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * nWidth : Frame width in pixels - * nHeight : Frame height in pixels - */ -typedef struct OMX_FRAMESIZETYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_U32 nWidth; - OMX_U32 nHeight; -} OMX_FRAMESIZETYPE; - - -/** - * Rotation configuration - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * nRotation : +/- integer rotation value - */ -typedef struct OMX_CONFIG_ROTATIONTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_S32 nRotation; -} OMX_CONFIG_ROTATIONTYPE; - - -/** - * Possible mirroring directions for pre/post processing - * - * ENUMS: - * None : No mirroring - * Vertical : Vertical mirroring, flip on X axis - * Horizontal : Horizontal mirroring, flip on Y axis - * Both : Both vertical and horizontal mirroring - */ -typedef enum OMX_MIRRORTYPE { - OMX_MirrorNone = 0, - OMX_MirrorVertical, - OMX_MirrorHorizontal, - OMX_MirrorBoth, - OMX_MirrorKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_MirrorVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_MirrorMax = 0x7FFFFFFF -} OMX_MIRRORTYPE; - - -/** - * Mirroring configuration - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * eMirror : Mirror type enumeration - */ -typedef struct OMX_CONFIG_MIRRORTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_MIRRORTYPE eMirror; -} OMX_CONFIG_MIRRORTYPE; - - -/** - * Position information only - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * nX : X coordinate for the point - * nY : Y coordinate for the point - */ -typedef struct OMX_CONFIG_POINTTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_S32 nX; - OMX_S32 nY; -} OMX_CONFIG_POINTTYPE; - - -/** - * Frame size plus position - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * nLeft : X Coordinate of the top left corner of the rectangle - * nTop : Y Coordinate of the top left corner of the rectangle - * nWidth : Width of the rectangle - * nHeight : Height of the rectangle - */ -typedef struct OMX_CONFIG_RECTTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_S32 nLeft; - OMX_S32 nTop; - OMX_U32 nWidth; - OMX_U32 nHeight; -} OMX_CONFIG_RECTTYPE; - - -/** - * Deblocking state; it is required to be set up before starting the codec - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * bDeblocking : Enable/disable deblocking mode - */ -typedef struct OMX_PARAM_DEBLOCKINGTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_BOOL bDeblocking; -} OMX_PARAM_DEBLOCKINGTYPE; - - -/** - * Stabilization state - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * bStab : Enable/disable frame stabilization state - */ -typedef struct OMX_CONFIG_FRAMESTABTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_BOOL bStab; -} OMX_CONFIG_FRAMESTABTYPE; - - -/** - * White Balance control type - * - * STRUCT MEMBERS: - * SunLight : Referenced in JSR-234 - * Flash : Optimal for device's integrated flash - */ -typedef enum OMX_WHITEBALCONTROLTYPE { - OMX_WhiteBalControlOff = 0, - OMX_WhiteBalControlAuto, - OMX_WhiteBalControlSunLight, - OMX_WhiteBalControlCloudy, - OMX_WhiteBalControlShade, - OMX_WhiteBalControlTungsten, - OMX_WhiteBalControlFluorescent, - OMX_WhiteBalControlIncandescent, - OMX_WhiteBalControlFlash, - OMX_WhiteBalControlHorizon, - OMX_WhiteBalControlKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_WhiteBalControlVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_WhiteBalControlMax = 0x7FFFFFFF -} OMX_WHITEBALCONTROLTYPE; - - -/** - * White Balance control configuration - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * eWhiteBalControl : White balance enumeration - */ -typedef struct OMX_CONFIG_WHITEBALCONTROLTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_WHITEBALCONTROLTYPE eWhiteBalControl; -} OMX_CONFIG_WHITEBALCONTROLTYPE; - - -/** - * Exposure control type - */ -typedef enum OMX_EXPOSURECONTROLTYPE { - OMX_ExposureControlOff = 0, - OMX_ExposureControlAuto, - OMX_ExposureControlNight, - OMX_ExposureControlBackLight, - OMX_ExposureControlSpotLight, - OMX_ExposureControlSports, - OMX_ExposureControlSnow, - OMX_ExposureControlBeach, - OMX_ExposureControlLargeAperture, - OMX_ExposureControlSmallApperture, - OMX_ExposureControlKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_ExposureControlVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_ExposureControlMax = 0x7FFFFFFF -} OMX_EXPOSURECONTROLTYPE; - - -/** - * White Balance control configuration - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * eExposureControl : Exposure control enumeration - */ -typedef struct OMX_CONFIG_EXPOSURECONTROLTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_EXPOSURECONTROLTYPE eExposureControl; -} OMX_CONFIG_EXPOSURECONTROLTYPE; - - -/** - * Defines sensor supported mode. - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * nFrameRate : Single shot mode is indicated by a 0 - * bOneShot : Enable for single shot, disable for streaming - * sFrameSize : Framesize - */ -typedef struct OMX_PARAM_SENSORMODETYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_U32 nFrameRate; - OMX_BOOL bOneShot; - OMX_FRAMESIZETYPE sFrameSize; -} OMX_PARAM_SENSORMODETYPE; - - -/** - * Defines contrast level - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * nContrast : Values allowed for contrast -100 to 100, zero means no change - */ -typedef struct OMX_CONFIG_CONTRASTTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_S32 nContrast; -} OMX_CONFIG_CONTRASTTYPE; - - -/** - * Defines brightness level - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * nBrightness : 0-100% - */ -typedef struct OMX_CONFIG_BRIGHTNESSTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_U32 nBrightness; -} OMX_CONFIG_BRIGHTNESSTYPE; - - -/** - * Defines backlight level configuration for a video sink, e.g. LCD panel - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * nBacklight : Values allowed for backlight 0-100% - * nTimeout : Number of milliseconds before backlight automatically turns - * off. A value of 0x0 disables backight timeout - */ -typedef struct OMX_CONFIG_BACKLIGHTTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_U32 nBacklight; - OMX_U32 nTimeout; -} OMX_CONFIG_BACKLIGHTTYPE; - - -/** - * Defines setting for Gamma - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * nGamma : Values allowed for gamma -100 to 100, zero means no change - */ -typedef struct OMX_CONFIG_GAMMATYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_S32 nGamma; -} OMX_CONFIG_GAMMATYPE; - - -/** - * Define for setting saturation - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * nSaturation : Values allowed for saturation -100 to 100, zero means - * no change - */ -typedef struct OMX_CONFIG_SATURATIONTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_S32 nSaturation; -} OMX_CONFIG_SATURATIONTYPE; - - -/** - * Define for setting Lightness - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * nLightness : Values allowed for lightness -100 to 100, zero means no - * change - */ -typedef struct OMX_CONFIG_LIGHTNESSTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_S32 nLightness; -} OMX_CONFIG_LIGHTNESSTYPE; - - -/** - * Plane blend configuration - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Index of input port associated with the plane. - * nDepth : Depth of the plane in relation to the screen. Higher - * numbered depths are "behind" lower number depths. - * This number defaults to the Port Index number. - * nAlpha : Transparency blending component for the entire plane. - * See blending modes for more detail. - */ -typedef struct OMX_CONFIG_PLANEBLENDTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_U32 nDepth; - OMX_U32 nAlpha; -} OMX_CONFIG_PLANEBLENDTYPE; - - -/** - * Define interlace type - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * bEnable : Enable control variable for this functionality - * (see below) - * nInterleavePortIndex : Index of input or output port associated with - * the interleaved plane. - * pPlanarPortIndexes[4] : Index of input or output planar ports. - */ -typedef struct OMX_PARAM_INTERLEAVETYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_BOOL bEnable; - OMX_U32 nInterleavePortIndex; -} OMX_PARAM_INTERLEAVETYPE; - - -/** - * Defines the picture effect used for an input picture - */ -typedef enum OMX_TRANSITIONEFFECTTYPE { - OMX_EffectNone, - OMX_EffectFadeFromBlack, - OMX_EffectFadeToBlack, - OMX_EffectUnspecifiedThroughConstantColor, - OMX_EffectDissolve, - OMX_EffectWipe, - OMX_EffectUnspecifiedMixOfTwoScenes, - OMX_EffectKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_EffectVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_EffectMax = 0x7FFFFFFF -} OMX_TRANSITIONEFFECTTYPE; - - -/** - * Structure used to configure current transition effect - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * eEffect : Effect to enable - */ -typedef struct OMX_CONFIG_TRANSITIONEFFECTTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_TRANSITIONEFFECTTYPE eEffect; -} OMX_CONFIG_TRANSITIONEFFECTTYPE; - - -/** - * Defines possible data unit types for encoded video data. The data unit - * types are used both for encoded video input for playback as well as - * encoded video output from recording. - */ -typedef enum OMX_DATAUNITTYPE { - OMX_DataUnitCodedPicture, - OMX_DataUnitVideoSegment, - OMX_DataUnitSeveralSegments, - OMX_DataUnitArbitraryStreamSection, - OMX_DataUnitKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_DataUnitVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_DataUnitMax = 0x7FFFFFFF -} OMX_DATAUNITTYPE; - - -/** - * Defines possible encapsulation types for coded video data unit. The - * encapsulation information is used both for encoded video input for - * playback as well as encoded video output from recording. - */ -typedef enum OMX_DATAUNITENCAPSULATIONTYPE { - OMX_DataEncapsulationElementaryStream, - OMX_DataEncapsulationGenericPayload, - OMX_DataEncapsulationRtpPayload, - OMX_DataEncapsulationKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_DataEncapsulationVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_DataEncapsulationMax = 0x7FFFFFFF -} OMX_DATAUNITENCAPSULATIONTYPE; - - -/** - * Structure used to configure the type of being decoded/encoded - */ -typedef struct OMX_PARAM_DATAUNITTYPE { - OMX_U32 nSize; /**< Size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< Port that this structure applies to */ - OMX_DATAUNITTYPE eUnitType; - OMX_DATAUNITENCAPSULATIONTYPE eEncapsulationType; -} OMX_PARAM_DATAUNITTYPE; - - -/** - * Defines dither types - */ -typedef enum OMX_DITHERTYPE { - OMX_DitherNone, - OMX_DitherOrdered, - OMX_DitherErrorDiffusion, - OMX_DitherOther, - OMX_DitherKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_DitherVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_DitherMax = 0x7FFFFFFF -} OMX_DITHERTYPE; - - -/** - * Structure used to configure current type of dithering - */ -typedef struct OMX_CONFIG_DITHERTYPE { - OMX_U32 nSize; /**< Size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< Port that this structure applies to */ - OMX_DITHERTYPE eDither; /**< Type of dithering to use */ -} OMX_CONFIG_DITHERTYPE; - -typedef struct OMX_CONFIG_CAPTUREMODETYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; /**< Port that this structure applies to */ - OMX_BOOL bContinuous; /**< If true then ignore frame rate and emit capture - * data as fast as possible (otherwise obey port's frame rate). */ - OMX_BOOL bFrameLimited; /**< If true then terminate capture after the port emits the - * specified number of frames (otherwise the port does not - * terminate the capture until instructed to do so by the client). - * Even if set, the client may manually terminate the capture prior - * to reaching the limit. */ - OMX_U32 nFrameLimit; /**< Limit on number of frames emitted during a capture (only - * valid if bFrameLimited is set). */ -} OMX_CONFIG_CAPTUREMODETYPE; - -typedef enum OMX_METERINGTYPE { - - OMX_MeteringModeAverage, /**< Center-weighted average metering. */ - OMX_MeteringModeSpot, /**< Spot (partial) metering. */ - OMX_MeteringModeMatrix, /**< Matrix or evaluative metering. */ - - OMX_MeteringKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_MeteringVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_EVModeMax = 0x7fffffff -} OMX_METERINGTYPE; - -typedef struct OMX_CONFIG_EXPOSUREVALUETYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_METERINGTYPE eMetering; - OMX_S32 xEVCompensation; /**< Fixed point value stored as Q16 */ - OMX_U32 nApertureFNumber; /**< e.g. nApertureFNumber = 2 implies "f/2" - Q16 format */ - OMX_BOOL bAutoAperture; /**< Whether aperture number is defined automatically */ - OMX_U32 nShutterSpeedMsec; /**< Shutterspeed in milliseconds */ - OMX_BOOL bAutoShutterSpeed; /**< Whether shutter speed is defined automatically */ - OMX_U32 nSensitivity; /**< e.g. nSensitivity = 100 implies "ISO 100" */ - OMX_BOOL bAutoSensitivity; /**< Whether sensitivity is defined automatically */ -} OMX_CONFIG_EXPOSUREVALUETYPE; - -/** - * Focus region configuration - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * bCenter : Use center region as focus region of interest - * bLeft : Use left region as focus region of interest - * bRight : Use right region as focus region of interest - * bTop : Use top region as focus region of interest - * bBottom : Use bottom region as focus region of interest - * bTopLeft : Use top left region as focus region of interest - * bTopRight : Use top right region as focus region of interest - * bBottomLeft : Use bottom left region as focus region of interest - * bBottomRight : Use bottom right region as focus region of interest - */ -typedef struct OMX_CONFIG_FOCUSREGIONTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_BOOL bCenter; - OMX_BOOL bLeft; - OMX_BOOL bRight; - OMX_BOOL bTop; - OMX_BOOL bBottom; - OMX_BOOL bTopLeft; - OMX_BOOL bTopRight; - OMX_BOOL bBottomLeft; - OMX_BOOL bBottomRight; -} OMX_CONFIG_FOCUSREGIONTYPE; - -/** - * Focus Status type - */ -typedef enum OMX_FOCUSSTATUSTYPE { - OMX_FocusStatusOff = 0, - OMX_FocusStatusRequest, - OMX_FocusStatusReached, - OMX_FocusStatusUnableToReach, - OMX_FocusStatusLost, - OMX_FocusStatusKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_FocusStatusVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_FocusStatusMax = 0x7FFFFFFF -} OMX_FOCUSSTATUSTYPE; - -/** - * Focus status configuration - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * eFocusStatus : Specifies the focus status - * bCenterStatus : Use center region as focus region of interest - * bLeftStatus : Use left region as focus region of interest - * bRightStatus : Use right region as focus region of interest - * bTopStatus : Use top region as focus region of interest - * bBottomStatus : Use bottom region as focus region of interest - * bTopLeftStatus : Use top left region as focus region of interest - * bTopRightStatus : Use top right region as focus region of interest - * bBottomLeftStatus : Use bottom left region as focus region of interest - * bBottomRightStatus : Use bottom right region as focus region of interest - */ -typedef struct OMX_PARAM_FOCUSSTATUSTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_FOCUSSTATUSTYPE eFocusStatus; - OMX_BOOL bCenterStatus; - OMX_BOOL bLeftStatus; - OMX_BOOL bRightStatus; - OMX_BOOL bTopStatus; - OMX_BOOL bBottomStatus; - OMX_BOOL bTopLeftStatus; - OMX_BOOL bTopRightStatus; - OMX_BOOL bBottomLeftStatus; - OMX_BOOL bBottomRightStatus; -} OMX_PARAM_FOCUSSTATUSTYPE; - -/** @} */ - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif -/* File EOF */ diff --git a/sec_mm/sec_omx/sec_omx_include/khronos/OMX_Image.h b/sec_mm/sec_omx/sec_omx_include/khronos/OMX_Image.h deleted file mode 100644 index a6d4666..0000000 --- a/sec_mm/sec_omx/sec_omx_include/khronos/OMX_Image.h +++ /dev/null @@ -1,328 +0,0 @@ -/** - * Copyright (c) 2008 The Khronos Group Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject - * to the following conditions: - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * @file OMX_Image.h - OpenMax IL version 1.1.2 - * The structures needed by Image components to exchange parameters and - * configuration data with the components. - */ -#ifndef OMX_Image_h -#define OMX_Image_h - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - - -/** - * Each OMX header must include all required header files to allow the - * header to compile without errors. The includes below are required - * for this header file to compile successfully - */ - -#include - -/** @defgroup imaging OpenMAX IL Imaging Domain - * @ingroup iv - * Structures for OpenMAX IL Imaging domain - * @{ - */ - -/** - * Enumeration used to define the possible image compression coding. - */ -typedef enum OMX_IMAGE_CODINGTYPE { - OMX_IMAGE_CodingUnused, /**< Value when format is N/A */ - OMX_IMAGE_CodingAutoDetect, /**< Auto detection of image format */ - OMX_IMAGE_CodingJPEG, /**< JPEG/JFIF image format */ - OMX_IMAGE_CodingJPEG2K, /**< JPEG 2000 image format */ - OMX_IMAGE_CodingEXIF, /**< EXIF image format */ - OMX_IMAGE_CodingTIFF, /**< TIFF image format */ - OMX_IMAGE_CodingGIF, /**< Graphics image format */ - OMX_IMAGE_CodingPNG, /**< PNG image format */ - OMX_IMAGE_CodingLZW, /**< LZW image format */ - OMX_IMAGE_CodingBMP, /**< Windows Bitmap format */ - OMX_IMAGE_CodingKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_IMAGE_CodingVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_IMAGE_CodingMax = 0x7FFFFFFF -} OMX_IMAGE_CODINGTYPE; - - -/** - * Data structure used to define an image path. The number of image paths - * for input and output will vary by type of the image component. - * - * Input (aka Source) : Zero Inputs, one Output, - * Splitter : One Input, 2 or more Outputs, - * Processing Element : One Input, one output, - * Mixer : 2 or more inputs, one output, - * Output (aka Sink) : One Input, zero outputs. - * - * The PortDefinition structure is used to define all of the parameters - * necessary for the compliant component to setup an input or an output - * image path. If additional vendor specific data is required, it should - * be transmitted to the component using the CustomCommand function. - * Compliant components will prepopulate this structure with optimal - * values during the OMX_GetParameter() command. - * - * STRUCT MEMBERS: - * cMIMEType : MIME type of data for the port - * pNativeRender : Platform specific reference for a display if a - * sync, otherwise this field is 0 - * nFrameWidth : Width of frame to be used on port if - * uncompressed format is used. Use 0 for - * unknown, don't care or variable - * nFrameHeight : Height of frame to be used on port if - * uncompressed format is used. Use 0 for - * unknown, don't care or variable - * nStride : Number of bytes per span of an image (i.e. - * indicates the number of bytes to get from - * span N to span N+1, where negative stride - * indicates the image is bottom up - * nSliceHeight : Height used when encoding in slices - * bFlagErrorConcealment : Turns on error concealment if it is supported by - * the OMX component - * eCompressionFormat : Compression format used in this instance of - * the component. When OMX_IMAGE_CodingUnused is - * specified, eColorFormat is valid - * eColorFormat : Decompressed format used by this component - * pNativeWindow : Platform specific reference for a window object if a - * display sink , otherwise this field is 0x0. - */ -typedef struct OMX_IMAGE_PORTDEFINITIONTYPE { - OMX_STRING cMIMEType; - OMX_NATIVE_DEVICETYPE pNativeRender; - OMX_U32 nFrameWidth; - OMX_U32 nFrameHeight; - OMX_S32 nStride; - OMX_U32 nSliceHeight; - OMX_BOOL bFlagErrorConcealment; - OMX_IMAGE_CODINGTYPE eCompressionFormat; - OMX_COLOR_FORMATTYPE eColorFormat; - OMX_NATIVE_WINDOWTYPE pNativeWindow; -} OMX_IMAGE_PORTDEFINITIONTYPE; - - -/** - * Port format parameter. This structure is used to enumerate the various - * data input/output format supported by the port. - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Indicates which port to set - * nIndex : Indicates the enumeration index for the format from - * 0x0 to N-1 - * eCompressionFormat : Compression format used in this instance of the - * component. When OMX_IMAGE_CodingUnused is specified, - * eColorFormat is valid - * eColorFormat : Decompressed format used by this component - */ -typedef struct OMX_IMAGE_PARAM_PORTFORMATTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_U32 nIndex; - OMX_IMAGE_CODINGTYPE eCompressionFormat; - OMX_COLOR_FORMATTYPE eColorFormat; -} OMX_IMAGE_PARAM_PORTFORMATTYPE; - - -/** - * Flash control type - * - * ENUMS - * Torch : Flash forced constantly on - */ -typedef enum OMX_IMAGE_FLASHCONTROLTYPE { - OMX_IMAGE_FlashControlOn = 0, - OMX_IMAGE_FlashControlOff, - OMX_IMAGE_FlashControlAuto, - OMX_IMAGE_FlashControlRedEyeReduction, - OMX_IMAGE_FlashControlFillin, - OMX_IMAGE_FlashControlTorch, - OMX_IMAGE_FlashControlKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_IMAGE_FlashControlVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_IMAGE_FlashControlMax = 0x7FFFFFFF -} OMX_IMAGE_FLASHCONTROLTYPE; - - -/** - * Flash control configuration - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * eFlashControl : Flash control type - */ -typedef struct OMX_IMAGE_PARAM_FLASHCONTROLTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_IMAGE_FLASHCONTROLTYPE eFlashControl; -} OMX_IMAGE_PARAM_FLASHCONTROLTYPE; - - -/** - * Focus control type - */ -typedef enum OMX_IMAGE_FOCUSCONTROLTYPE { - OMX_IMAGE_FocusControlOn = 0, - OMX_IMAGE_FocusControlOff, - OMX_IMAGE_FocusControlAuto, - OMX_IMAGE_FocusControlAutoLock, - OMX_IMAGE_FocusControlKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_IMAGE_FocusControlVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_IMAGE_FocusControlMax = 0x7FFFFFFF -} OMX_IMAGE_FOCUSCONTROLTYPE; - - -/** - * Focus control configuration - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * eFocusControl : Focus control - * nFocusSteps : Focus can take on values from 0 mm to infinity. - * Interest is only in number of steps over this range. - * nFocusStepIndex : Current focus step index - */ -typedef struct OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_IMAGE_FOCUSCONTROLTYPE eFocusControl; - OMX_U32 nFocusSteps; - OMX_U32 nFocusStepIndex; -} OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE; - - -/** - * Q Factor for JPEG compression, which controls the tradeoff between image - * quality and size. Q Factor provides a more simple means of controlling - * JPEG compression quality, without directly programming Quantization - * tables for chroma and luma - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * nQFactor : JPEG Q factor value in the range of 1-100. A factor of 1 - * produces the smallest, worst quality images, and a factor - * of 100 produces the largest, best quality images. A - * typical default is 75 for small good quality images - */ -typedef struct OMX_IMAGE_PARAM_QFACTORTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_U32 nQFactor; -} OMX_IMAGE_PARAM_QFACTORTYPE; - -/** - * Quantization table type - */ - -typedef enum OMX_IMAGE_QUANTIZATIONTABLETYPE { - OMX_IMAGE_QuantizationTableLuma = 0, - OMX_IMAGE_QuantizationTableChroma, - OMX_IMAGE_QuantizationTableChromaCb, - OMX_IMAGE_QuantizationTableChromaCr, - OMX_IMAGE_QuantizationTableKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_IMAGE_QuantizationTableVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_IMAGE_QuantizationTableMax = 0x7FFFFFFF -} OMX_IMAGE_QUANTIZATIONTABLETYPE; - -/** - * JPEG quantization tables are used to determine DCT compression for - * YUV data, as an alternative to specifying Q factor, providing exact - * control of compression - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * eQuantizationTable : Quantization table type - * nQuantizationMatrix[64] : JPEG quantization table of coefficients stored - * in increasing columns then by rows of data (i.e. - * row 1, ... row 8). Quantization values are in - * the range 0-255 and stored in linear order - * (i.e. the component will zig-zag the - * quantization table data if required internally) - */ -typedef struct OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_IMAGE_QUANTIZATIONTABLETYPE eQuantizationTable; - OMX_U8 nQuantizationMatrix[64]; -} OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE; - - -/** - * Huffman table type, the same Huffman table is applied for chroma and - * luma component - */ -typedef enum OMX_IMAGE_HUFFMANTABLETYPE { - OMX_IMAGE_HuffmanTableAC = 0, - OMX_IMAGE_HuffmanTableDC, - OMX_IMAGE_HuffmanTableACLuma, - OMX_IMAGE_HuffmanTableACChroma, - OMX_IMAGE_HuffmanTableDCLuma, - OMX_IMAGE_HuffmanTableDCChroma, - OMX_IMAGE_HuffmanTableKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_IMAGE_HuffmanTableVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_IMAGE_HuffmanTableMax = 0x7FFFFFFF -} OMX_IMAGE_HUFFMANTABLETYPE; - -/** - * JPEG Huffman table - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * eHuffmanTable : Huffman table type - * nNumberOfHuffmanCodeOfLength[16] : 0-16, number of Huffman codes of each - * possible length - * nHuffmanTable[256] : 0-255, the size used for AC and DC - * HuffmanTable are 16 and 162 - */ -typedef struct OMX_IMAGE_PARAM_HUFFMANTTABLETYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_IMAGE_HUFFMANTABLETYPE eHuffmanTable; - OMX_U8 nNumberOfHuffmanCodeOfLength[16]; - OMX_U8 nHuffmanTable[256]; -}OMX_IMAGE_PARAM_HUFFMANTTABLETYPE; - -/** @} */ -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif -/* File EOF */ diff --git a/sec_mm/sec_omx/sec_omx_include/khronos/OMX_Index.h b/sec_mm/sec_omx/sec_omx_include/khronos/OMX_Index.h deleted file mode 100644 index 44d4ea7..0000000 --- a/sec_mm/sec_omx/sec_omx_include/khronos/OMX_Index.h +++ /dev/null @@ -1,258 +0,0 @@ -/* - * Copyright (c) 2008 The Khronos Group Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject - * to the following conditions: - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - */ - -/** @file OMX_Index.h - OpenMax IL version 1.1.2 - * The OMX_Index header file contains the definitions for both applications - * and components . - */ - - -#ifndef OMX_Index_h -#define OMX_Index_h - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - - -/* Each OMX header must include all required header files to allow the - * header to compile without errors. The includes below are required - * for this header file to compile successfully - */ -#include - - -/** The OMX_INDEXTYPE enumeration is used to select a structure when either - * getting or setting parameters and/or configuration data. Each entry in - * this enumeration maps to an OMX specified structure. When the - * OMX_GetParameter, OMX_SetParameter, OMX_GetConfig or OMX_SetConfig methods - * are used, the second parameter will always be an entry from this enumeration - * and the third entry will be the structure shown in the comments for the entry. - * For example, if the application is initializing a cropping function, the - * OMX_SetConfig command would have OMX_IndexConfigCommonInputCrop as the second parameter - * and would send a pointer to an initialized OMX_RECTTYPE structure as the - * third parameter. - * - * The enumeration entries named with the OMX_Config prefix are sent using - * the OMX_SetConfig command and the enumeration entries named with the - * OMX_PARAM_ prefix are sent using the OMX_SetParameter command. - */ -typedef enum OMX_INDEXTYPE { - - OMX_IndexComponentStartUnused = 0x01000000, - OMX_IndexParamPriorityMgmt, /**< reference: OMX_PRIORITYMGMTTYPE */ - OMX_IndexParamAudioInit, /**< reference: OMX_PORT_PARAM_TYPE */ - OMX_IndexParamImageInit, /**< reference: OMX_PORT_PARAM_TYPE */ - OMX_IndexParamVideoInit, /**< reference: OMX_PORT_PARAM_TYPE */ - OMX_IndexParamOtherInit, /**< reference: OMX_PORT_PARAM_TYPE */ - OMX_IndexParamNumAvailableStreams, /**< reference: OMX_PARAM_U32TYPE */ - OMX_IndexParamActiveStream, /**< reference: OMX_PARAM_U32TYPE */ - OMX_IndexParamSuspensionPolicy, /**< reference: OMX_PARAM_SUSPENSIONPOLICYTYPE */ - OMX_IndexParamComponentSuspended, /**< reference: OMX_PARAM_SUSPENSIONTYPE */ - OMX_IndexConfigCapturing, /**< reference: OMX_CONFIG_BOOLEANTYPE */ - OMX_IndexConfigCaptureMode, /**< reference: OMX_CONFIG_CAPTUREMODETYPE */ - OMX_IndexAutoPauseAfterCapture, /**< reference: OMX_CONFIG_BOOLEANTYPE */ - OMX_IndexParamContentURI, /**< reference: OMX_PARAM_CONTENTURITYPE */ - OMX_IndexParamCustomContentPipe, /**< reference: OMX_PARAM_CONTENTPIPETYPE */ - OMX_IndexParamDisableResourceConcealment, /**< reference: OMX_RESOURCECONCEALMENTTYPE */ - OMX_IndexConfigMetadataItemCount, /**< reference: OMX_CONFIG_METADATAITEMCOUNTTYPE */ - OMX_IndexConfigContainerNodeCount, /**< reference: OMX_CONFIG_CONTAINERNODECOUNTTYPE */ - OMX_IndexConfigMetadataItem, /**< reference: OMX_CONFIG_METADATAITEMTYPE */ - OMX_IndexConfigCounterNodeID, /**< reference: OMX_CONFIG_CONTAINERNODEIDTYPE */ - OMX_IndexParamMetadataFilterType, /**< reference: OMX_PARAM_METADATAFILTERTYPE */ - OMX_IndexParamMetadataKeyFilter, /**< reference: OMX_PARAM_METADATAFILTERTYPE */ - OMX_IndexConfigPriorityMgmt, /**< reference: OMX_PRIORITYMGMTTYPE */ - OMX_IndexParamStandardComponentRole, /**< reference: OMX_PARAM_COMPONENTROLETYPE */ - - OMX_IndexPortStartUnused = 0x02000000, - OMX_IndexParamPortDefinition, /**< reference: OMX_PARAM_PORTDEFINITIONTYPE */ - OMX_IndexParamCompBufferSupplier, /**< reference: OMX_PARAM_BUFFERSUPPLIERTYPE */ - OMX_IndexReservedStartUnused = 0x03000000, - - /* Audio parameters and configurations */ - OMX_IndexAudioStartUnused = 0x04000000, - OMX_IndexParamAudioPortFormat, /**< reference: OMX_AUDIO_PARAM_PORTFORMATTYPE */ - OMX_IndexParamAudioPcm, /**< reference: OMX_AUDIO_PARAM_PCMMODETYPE */ - OMX_IndexParamAudioAac, /**< reference: OMX_AUDIO_PARAM_AACPROFILETYPE */ - OMX_IndexParamAudioRa, /**< reference: OMX_AUDIO_PARAM_RATYPE */ - OMX_IndexParamAudioMp3, /**< reference: OMX_AUDIO_PARAM_MP3TYPE */ - OMX_IndexParamAudioAdpcm, /**< reference: OMX_AUDIO_PARAM_ADPCMTYPE */ - OMX_IndexParamAudioG723, /**< reference: OMX_AUDIO_PARAM_G723TYPE */ - OMX_IndexParamAudioG729, /**< reference: OMX_AUDIO_PARAM_G729TYPE */ - OMX_IndexParamAudioAmr, /**< reference: OMX_AUDIO_PARAM_AMRTYPE */ - OMX_IndexParamAudioWma, /**< reference: OMX_AUDIO_PARAM_WMATYPE */ - OMX_IndexParamAudioSbc, /**< reference: OMX_AUDIO_PARAM_SBCTYPE */ - OMX_IndexParamAudioMidi, /**< reference: OMX_AUDIO_PARAM_MIDITYPE */ - OMX_IndexParamAudioGsm_FR, /**< reference: OMX_AUDIO_PARAM_GSMFRTYPE */ - OMX_IndexParamAudioMidiLoadUserSound, /**< reference: OMX_AUDIO_PARAM_MIDILOADUSERSOUNDTYPE */ - OMX_IndexParamAudioG726, /**< reference: OMX_AUDIO_PARAM_G726TYPE */ - OMX_IndexParamAudioGsm_EFR, /**< reference: OMX_AUDIO_PARAM_GSMEFRTYPE */ - OMX_IndexParamAudioGsm_HR, /**< reference: OMX_AUDIO_PARAM_GSMHRTYPE */ - OMX_IndexParamAudioPdc_FR, /**< reference: OMX_AUDIO_PARAM_PDCFRTYPE */ - OMX_IndexParamAudioPdc_EFR, /**< reference: OMX_AUDIO_PARAM_PDCEFRTYPE */ - OMX_IndexParamAudioPdc_HR, /**< reference: OMX_AUDIO_PARAM_PDCHRTYPE */ - OMX_IndexParamAudioTdma_FR, /**< reference: OMX_AUDIO_PARAM_TDMAFRTYPE */ - OMX_IndexParamAudioTdma_EFR, /**< reference: OMX_AUDIO_PARAM_TDMAEFRTYPE */ - OMX_IndexParamAudioQcelp8, /**< reference: OMX_AUDIO_PARAM_QCELP8TYPE */ - OMX_IndexParamAudioQcelp13, /**< reference: OMX_AUDIO_PARAM_QCELP13TYPE */ - OMX_IndexParamAudioEvrc, /**< reference: OMX_AUDIO_PARAM_EVRCTYPE */ - OMX_IndexParamAudioSmv, /**< reference: OMX_AUDIO_PARAM_SMVTYPE */ - OMX_IndexParamAudioVorbis, /**< reference: OMX_AUDIO_PARAM_VORBISTYPE */ - - OMX_IndexConfigAudioMidiImmediateEvent, /**< reference: OMX_AUDIO_CONFIG_MIDIIMMEDIATEEVENTTYPE */ - OMX_IndexConfigAudioMidiControl, /**< reference: OMX_AUDIO_CONFIG_MIDICONTROLTYPE */ - OMX_IndexConfigAudioMidiSoundBankProgram, /**< reference: OMX_AUDIO_CONFIG_MIDISOUNDBANKPROGRAMTYPE */ - OMX_IndexConfigAudioMidiStatus, /**< reference: OMX_AUDIO_CONFIG_MIDISTATUSTYPE */ - OMX_IndexConfigAudioMidiMetaEvent, /**< reference: OMX_AUDIO_CONFIG_MIDIMETAEVENTTYPE */ - OMX_IndexConfigAudioMidiMetaEventData, /**< reference: OMX_AUDIO_CONFIG_MIDIMETAEVENTDATATYPE */ - OMX_IndexConfigAudioVolume, /**< reference: OMX_AUDIO_CONFIG_VOLUMETYPE */ - OMX_IndexConfigAudioBalance, /**< reference: OMX_AUDIO_CONFIG_BALANCETYPE */ - OMX_IndexConfigAudioChannelMute, /**< reference: OMX_AUDIO_CONFIG_CHANNELMUTETYPE */ - OMX_IndexConfigAudioMute, /**< reference: OMX_AUDIO_CONFIG_MUTETYPE */ - OMX_IndexConfigAudioLoudness, /**< reference: OMX_AUDIO_CONFIG_LOUDNESSTYPE */ - OMX_IndexConfigAudioEchoCancelation, /**< reference: OMX_AUDIO_CONFIG_ECHOCANCELATIONTYPE */ - OMX_IndexConfigAudioNoiseReduction, /**< reference: OMX_AUDIO_CONFIG_NOISEREDUCTIONTYPE */ - OMX_IndexConfigAudioBass, /**< reference: OMX_AUDIO_CONFIG_BASSTYPE */ - OMX_IndexConfigAudioTreble, /**< reference: OMX_AUDIO_CONFIG_TREBLETYPE */ - OMX_IndexConfigAudioStereoWidening, /**< reference: OMX_AUDIO_CONFIG_STEREOWIDENINGTYPE */ - OMX_IndexConfigAudioChorus, /**< reference: OMX_AUDIO_CONFIG_CHORUSTYPE */ - OMX_IndexConfigAudioEqualizer, /**< reference: OMX_AUDIO_CONFIG_EQUALIZERTYPE */ - OMX_IndexConfigAudioReverberation, /**< reference: OMX_AUDIO_CONFIG_REVERBERATIONTYPE */ - OMX_IndexConfigAudioChannelVolume, /**< reference: OMX_AUDIO_CONFIG_CHANNELVOLUMETYPE */ - - /* Image specific parameters and configurations */ - OMX_IndexImageStartUnused = 0x05000000, - OMX_IndexParamImagePortFormat, /**< reference: OMX_IMAGE_PARAM_PORTFORMATTYPE */ - OMX_IndexParamFlashControl, /**< reference: OMX_IMAGE_PARAM_FLASHCONTROLTYPE */ - OMX_IndexConfigFocusControl, /**< reference: OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE */ - OMX_IndexParamQFactor, /**< reference: OMX_IMAGE_PARAM_QFACTORTYPE */ - OMX_IndexParamQuantizationTable, /**< reference: OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE */ - OMX_IndexParamHuffmanTable, /**< reference: OMX_IMAGE_PARAM_HUFFMANTTABLETYPE */ - OMX_IndexConfigFlashControl, /**< reference: OMX_IMAGE_PARAM_FLASHCONTROLTYPE */ - - /* Video specific parameters and configurations */ - OMX_IndexVideoStartUnused = 0x06000000, - OMX_IndexParamVideoPortFormat, /**< reference: OMX_VIDEO_PARAM_PORTFORMATTYPE */ - OMX_IndexParamVideoQuantization, /**< reference: OMX_VIDEO_PARAM_QUANTIZATIONTYPE */ - OMX_IndexParamVideoFastUpdate, /**< reference: OMX_VIDEO_PARAM_VIDEOFASTUPDATETYPE */ - OMX_IndexParamVideoBitrate, /**< reference: OMX_VIDEO_PARAM_BITRATETYPE */ - OMX_IndexParamVideoMotionVector, /**< reference: OMX_VIDEO_PARAM_MOTIONVECTORTYPE */ - OMX_IndexParamVideoIntraRefresh, /**< reference: OMX_VIDEO_PARAM_INTRAREFRESHTYPE */ - OMX_IndexParamVideoErrorCorrection, /**< reference: OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE */ - OMX_IndexParamVideoVBSMC, /**< reference: OMX_VIDEO_PARAM_VBSMCTYPE */ - OMX_IndexParamVideoMpeg2, /**< reference: OMX_VIDEO_PARAM_MPEG2TYPE */ - OMX_IndexParamVideoMpeg4, /**< reference: OMX_VIDEO_PARAM_MPEG4TYPE */ - OMX_IndexParamVideoWmv, /**< reference: OMX_VIDEO_PARAM_WMVTYPE */ - OMX_IndexParamVideoRv, /**< reference: OMX_VIDEO_PARAM_RVTYPE */ - OMX_IndexParamVideoAvc, /**< reference: OMX_VIDEO_PARAM_AVCTYPE */ - OMX_IndexParamVideoH263, /**< reference: OMX_VIDEO_PARAM_H263TYPE */ - OMX_IndexParamVideoProfileLevelQuerySupported, /**< reference: OMX_VIDEO_PARAM_PROFILELEVELTYPE */ - OMX_IndexParamVideoProfileLevelCurrent, /**< reference: OMX_VIDEO_PARAM_PROFILELEVELTYPE */ - OMX_IndexConfigVideoBitrate, /**< reference: OMX_VIDEO_CONFIG_BITRATETYPE */ - OMX_IndexConfigVideoFramerate, /**< reference: OMX_CONFIG_FRAMERATETYPE */ - OMX_IndexConfigVideoIntraVOPRefresh, /**< reference: OMX_CONFIG_INTRAREFRESHVOPTYPE */ - OMX_IndexConfigVideoIntraMBRefresh, /**< reference: OMX_CONFIG_MACROBLOCKERRORMAPTYPE */ - OMX_IndexConfigVideoMBErrorReporting, /**< reference: OMX_CONFIG_MBERRORREPORTINGTYPE */ - OMX_IndexParamVideoMacroblocksPerFrame, /**< reference: OMX_PARAM_MACROBLOCKSTYPE */ - OMX_IndexConfigVideoMacroBlockErrorMap, /**< reference: OMX_CONFIG_MACROBLOCKERRORMAPTYPE */ - OMX_IndexParamVideoSliceFMO, /**< reference: OMX_VIDEO_PARAM_AVCSLICEFMO */ - OMX_IndexConfigVideoAVCIntraPeriod, /**< reference: OMX_VIDEO_CONFIG_AVCINTRAPERIOD */ - OMX_IndexConfigVideoNalSize, /**< reference: OMX_VIDEO_CONFIG_NALSIZE */ - - /* Image & Video common Configurations */ - OMX_IndexCommonStartUnused = 0x07000000, - OMX_IndexParamCommonDeblocking, /**< reference: OMX_PARAM_DEBLOCKINGTYPE */ - OMX_IndexParamCommonSensorMode, /**< reference: OMX_PARAM_SENSORMODETYPE */ - OMX_IndexParamCommonInterleave, /**< reference: OMX_PARAM_INTERLEAVETYPE */ - OMX_IndexConfigCommonColorFormatConversion, /**< reference: OMX_CONFIG_COLORCONVERSIONTYPE */ - OMX_IndexConfigCommonScale, /**< reference: OMX_CONFIG_SCALEFACTORTYPE */ - OMX_IndexConfigCommonImageFilter, /**< reference: OMX_CONFIG_IMAGEFILTERTYPE */ - OMX_IndexConfigCommonColorEnhancement, /**< reference: OMX_CONFIG_COLORENHANCEMENTTYPE */ - OMX_IndexConfigCommonColorKey, /**< reference: OMX_CONFIG_COLORKEYTYPE */ - OMX_IndexConfigCommonColorBlend, /**< reference: OMX_CONFIG_COLORBLENDTYPE */ - OMX_IndexConfigCommonFrameStabilisation,/**< reference: OMX_CONFIG_FRAMESTABTYPE */ - OMX_IndexConfigCommonRotate, /**< reference: OMX_CONFIG_ROTATIONTYPE */ - OMX_IndexConfigCommonMirror, /**< reference: OMX_CONFIG_MIRRORTYPE */ - OMX_IndexConfigCommonOutputPosition, /**< reference: OMX_CONFIG_POINTTYPE */ - OMX_IndexConfigCommonInputCrop, /**< reference: OMX_CONFIG_RECTTYPE */ - OMX_IndexConfigCommonOutputCrop, /**< reference: OMX_CONFIG_RECTTYPE */ - OMX_IndexConfigCommonDigitalZoom, /**< reference: OMX_CONFIG_SCALEFACTORTYPE */ - OMX_IndexConfigCommonOpticalZoom, /**< reference: OMX_CONFIG_SCALEFACTORTYPE*/ - OMX_IndexConfigCommonWhiteBalance, /**< reference: OMX_CONFIG_WHITEBALCONTROLTYPE */ - OMX_IndexConfigCommonExposure, /**< reference: OMX_CONFIG_EXPOSURECONTROLTYPE */ - OMX_IndexConfigCommonContrast, /**< reference: OMX_CONFIG_CONTRASTTYPE */ - OMX_IndexConfigCommonBrightness, /**< reference: OMX_CONFIG_BRIGHTNESSTYPE */ - OMX_IndexConfigCommonBacklight, /**< reference: OMX_CONFIG_BACKLIGHTTYPE */ - OMX_IndexConfigCommonGamma, /**< reference: OMX_CONFIG_GAMMATYPE */ - OMX_IndexConfigCommonSaturation, /**< reference: OMX_CONFIG_SATURATIONTYPE */ - OMX_IndexConfigCommonLightness, /**< reference: OMX_CONFIG_LIGHTNESSTYPE */ - OMX_IndexConfigCommonExclusionRect, /**< reference: OMX_CONFIG_RECTTYPE */ - OMX_IndexConfigCommonDithering, /**< reference: OMX_CONFIG_DITHERTYPE */ - OMX_IndexConfigCommonPlaneBlend, /**< reference: OMX_CONFIG_PLANEBLENDTYPE */ - OMX_IndexConfigCommonExposureValue, /**< reference: OMX_CONFIG_EXPOSUREVALUETYPE */ - OMX_IndexConfigCommonOutputSize, /**< reference: OMX_FRAMESIZETYPE */ - OMX_IndexParamCommonExtraQuantData, /**< reference: OMX_OTHER_EXTRADATATYPE */ - OMX_IndexConfigCommonFocusRegion, /**< reference: OMX_CONFIG_FOCUSREGIONTYPE */ - OMX_IndexConfigCommonFocusStatus, /**< reference: OMX_PARAM_FOCUSSTATUSTYPE */ - OMX_IndexConfigCommonTransitionEffect, /**< reference: OMX_CONFIG_TRANSITIONEFFECTTYPE */ - - /* Reserved Configuration range */ - OMX_IndexOtherStartUnused = 0x08000000, - OMX_IndexParamOtherPortFormat, /**< reference: OMX_OTHER_PARAM_PORTFORMATTYPE */ - OMX_IndexConfigOtherPower, /**< reference: OMX_OTHER_CONFIG_POWERTYPE */ - OMX_IndexConfigOtherStats, /**< reference: OMX_OTHER_CONFIG_STATSTYPE */ - - - /* Reserved Time range */ - OMX_IndexTimeStartUnused = 0x09000000, - OMX_IndexConfigTimeScale, /**< reference: OMX_TIME_CONFIG_SCALETYPE */ - OMX_IndexConfigTimeClockState, /**< reference: OMX_TIME_CONFIG_CLOCKSTATETYPE */ - OMX_IndexConfigTimeActiveRefClock, /**< reference: OMX_TIME_CONFIG_ACTIVEREFCLOCKTYPE */ - OMX_IndexConfigTimeCurrentMediaTime, /**< reference: OMX_TIME_CONFIG_TIMESTAMPTYPE (read only) */ - OMX_IndexConfigTimeCurrentWallTime, /**< reference: OMX_TIME_CONFIG_TIMESTAMPTYPE (read only) */ - OMX_IndexConfigTimeCurrentAudioReference, /**< reference: OMX_TIME_CONFIG_TIMESTAMPTYPE (write only) */ - OMX_IndexConfigTimeCurrentVideoReference, /**< reference: OMX_TIME_CONFIG_TIMESTAMPTYPE (write only) */ - OMX_IndexConfigTimeMediaTimeRequest, /**< reference: OMX_TIME_CONFIG_MEDIATIMEREQUESTTYPE (write only) */ - OMX_IndexConfigTimeClientStartTime, /** - - -/** - * Enumeration of possible data types which match to multiple domains or no - * domain at all. For types which are vendor specific, a value above - * OMX_OTHER_VENDORTSTART should be used. - */ -typedef enum OMX_OTHER_FORMATTYPE { - OMX_OTHER_FormatTime = 0, /**< Transmission of various timestamps, elapsed time, - time deltas, etc */ - OMX_OTHER_FormatPower, /**< Perhaps used for enabling/disabling power - management, setting clocks? */ - OMX_OTHER_FormatStats, /**< Could be things such as frame rate, frames - dropped, etc */ - OMX_OTHER_FormatBinary, /**< Arbitrary binary data */ - OMX_OTHER_FormatVendorReserved = 1000, /**< Starting value for vendor specific - formats */ - - OMX_OTHER_FormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_OTHER_FormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_OTHER_FormatMax = 0x7FFFFFFF -} OMX_OTHER_FORMATTYPE; - -/** - * Enumeration of seek modes. - */ -typedef enum OMX_TIME_SEEKMODETYPE { - OMX_TIME_SeekModeFast = 0, /**< Prefer seeking to an approximation - * of the requested seek position over - * the actual seek position if it - * results in a faster seek. */ - OMX_TIME_SeekModeAccurate, /**< Prefer seeking to the actual seek - * position over an approximation - * of the requested seek position even - * if it results in a slower seek. */ - OMX_TIME_SeekModeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_TIME_SeekModeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_TIME_SeekModeMax = 0x7FFFFFFF -} OMX_TIME_SEEKMODETYPE; - -/* Structure representing the seekmode of the component */ -typedef struct OMX_TIME_CONFIG_SEEKMODETYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_TIME_SEEKMODETYPE eType; /**< The seek mode */ -} OMX_TIME_CONFIG_SEEKMODETYPE; - -/** Structure representing a time stamp used with the following configs - * on the Clock Component (CC): - * - * OMX_IndexConfigTimeCurrentWallTime: query of the CC’s current wall - * time - * OMX_IndexConfigTimeCurrentMediaTime: query of the CC’s current media - * time - * OMX_IndexConfigTimeCurrentAudioReference and - * OMX_IndexConfigTimeCurrentVideoReference: audio/video reference - * clock sending SC its reference time - * OMX_IndexConfigTimeClientStartTime: a Clock Component client sends - * this structure to the Clock Component via a SetConfig on its - * client port when it receives a buffer with - * OMX_BUFFERFLAG_STARTTIME set. It must use the timestamp - * specified by that buffer for nStartTimestamp. - * - * It’s also used with the following config on components in general: - * - * OMX_IndexConfigTimePosition: IL client querying component position - * (GetConfig) or commanding a component to seek to the given location - * (SetConfig) - */ -typedef struct OMX_TIME_CONFIG_TIMESTAMPTYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version - * information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_TICKS nTimestamp; /**< timestamp .*/ -} OMX_TIME_CONFIG_TIMESTAMPTYPE; - -/** Enumeration of possible reference clocks to the media time. */ -typedef enum OMX_TIME_UPDATETYPE { - OMX_TIME_UpdateRequestFulfillment, /**< Update is the fulfillment of a media time request. */ - OMX_TIME_UpdateScaleChanged, /**< Update was generated because the scale chagned. */ - OMX_TIME_UpdateClockStateChanged, /**< Update was generated because the clock state changed. */ - OMX_TIME_UpdateKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_TIME_UpdateVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_TIME_UpdateMax = 0x7FFFFFFF -} OMX_TIME_UPDATETYPE; - -/** Enumeration of possible reference clocks to the media time. */ -typedef enum OMX_TIME_REFCLOCKTYPE { - OMX_TIME_RefClockNone, /**< Use no references. */ - OMX_TIME_RefClockAudio, /**< Use references sent through OMX_IndexConfigTimeCurrentAudioReference */ - OMX_TIME_RefClockVideo, /**< Use references sent through OMX_IndexConfigTimeCurrentVideoReference */ - OMX_TIME_RefClockKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_TIME_RefClockVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_TIME_RefClockMax = 0x7FFFFFFF -} OMX_TIME_REFCLOCKTYPE; - -/** Enumeration of clock states. */ -typedef enum OMX_TIME_CLOCKSTATE { - OMX_TIME_ClockStateRunning, /**< Clock running. */ - OMX_TIME_ClockStateWaitingForStartTime, /**< Clock waiting until the - * prescribed clients emit their - * start time. */ - OMX_TIME_ClockStateStopped, /**< Clock stopped. */ - OMX_TIME_ClockStateKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_TIME_ClockStateVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_TIME_ClockStateMax = 0x7FFFFFFF -} OMX_TIME_CLOCKSTATE; - -/** Structure representing a media time request to the clock component. - * - * A client component sends this structure to the Clock Component via a SetConfig - * on its client port to specify a media timestamp the Clock Component - * should emit. The Clock Component should fulfill the request by sending a - * OMX_TIME_MEDIATIMETYPE when its media clock matches the requested - * timestamp. - * - * The client may require a media time request be fulfilled slightly - * earlier than the media time specified. In this case the client specifies - * an offset which is equal to the difference between wall time corresponding - * to the requested media time and the wall time when it will be - * fulfilled. - * - * A client component may uses these requests and the OMX_TIME_MEDIATIMETYPE to - * time events according to timestamps. If a client must perform an operation O at - * a time T (e.g. deliver a video frame at its corresponding timestamp), it makes a - * media time request at T (perhaps specifying an offset to ensure the request fulfillment - * is a little early). When the clock component passes the resulting OMX_TIME_MEDIATIMETYPE - * structure back to the client component, the client may perform operation O (perhaps having - * to wait a slight amount more time itself as specified by the return values). - */ - -typedef struct OMX_TIME_CONFIG_MEDIATIMEREQUESTTYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< port that this structure applies to */ - OMX_PTR pClientPrivate; /**< Client private data to disabiguate this media time - * from others (e.g. the number of the frame to deliver). - * Duplicated in the media time structure that fulfills - * this request. A value of zero is reserved for time scale - * updates. */ - OMX_TICKS nMediaTimestamp; /**< Media timestamp requested.*/ - OMX_TICKS nOffset; /**< Amount of wall clock time by which this - * request should be fulfilled early */ -} OMX_TIME_CONFIG_MEDIATIMEREQUESTTYPE; - -/**< Structure sent from the clock component client either when fulfilling - * a media time request or when the time scale has changed. - * - * In the former case the Clock Component fills this structure and times its emission - * to a client component (via the client port) according to the corresponding media - * time request sent by the client. The Clock Component should time the emission to occur - * when the requested timestamp matches the Clock Component's media time but also the - * prescribed offset early. - * - * Upon scale changes the clock component clears the nClientPrivate data, sends the current - * media time and sets the nScale to the new scale via the client port. It emits a - * OMX_TIME_MEDIATIMETYPE to all clients independent of any requests. This allows clients to - * alter processing to accomodate scaling. For instance a video component might skip inter-frames - * in the case of extreme fastforward. Likewise an audio component might add or remove samples - * from an audio frame to scale audio data. - * - * It is expected that some clock components may not be able to fulfill requests - * at exactly the prescribed time. This is acceptable so long as the request is - * fulfilled at least as early as described and not later. This structure provides - * fields the client may use to wait for the remaining time. - * - * The client may use either the nOffset or nWallTimeAtMedia fields to determine the - * wall time until the nMediaTimestamp actually occurs. In the latter case the - * client can get a more accurate value for offset by getting the current wall - * from the cloc component and subtracting it from nWallTimeAtMedia. - */ - -typedef struct OMX_TIME_MEDIATIMETYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nClientPrivate; /**< Client private data to disabiguate this media time - * from others. Copied from the media time request. - * A value of zero is reserved for time scale updates. */ - OMX_TIME_UPDATETYPE eUpdateType; /**< Reason for the update */ - OMX_TICKS nMediaTimestamp; /**< Media time requested. If no media time was - * requested then this is the current media time. */ - OMX_TICKS nOffset; /**< Amount of wall clock time by which this - * request was actually fulfilled early */ - - OMX_TICKS nWallTimeAtMediaTime; /**< Wall time corresponding to nMediaTimeStamp. - * A client may compare this value to current - * media time obtained from the Clock Component to determine - * the wall time until the media timestamp is really - * current. */ - OMX_S32 xScale; /**< Current media time scale in Q16 format. */ - OMX_TIME_CLOCKSTATE eState; /* Seeking Change. Added 7/12.*/ - /**< State of the media time. */ -} OMX_TIME_MEDIATIMETYPE; - -/** Structure representing the current media time scale factor. Applicable only to clock - * component, other components see scale changes via OMX_TIME_MEDIATIMETYPE buffers sent via - * the clock component client ports. Upon recieving this config the clock component changes - * the rate by which the media time increases or decreases effectively implementing trick modes. - */ -typedef struct OMX_TIME_CONFIG_SCALETYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_S32 xScale; /**< This is a value in Q16 format which is used for - * scaling the media time */ -} OMX_TIME_CONFIG_SCALETYPE; - -/** Bits used to identify a clock port. Used in OMX_TIME_CONFIG_CLOCKSTATETYPE’s nWaitMask field */ -#define OMX_CLOCKPORT0 0x00000001 -#define OMX_CLOCKPORT1 0x00000002 -#define OMX_CLOCKPORT2 0x00000004 -#define OMX_CLOCKPORT3 0x00000008 -#define OMX_CLOCKPORT4 0x00000010 -#define OMX_CLOCKPORT5 0x00000020 -#define OMX_CLOCKPORT6 0x00000040 -#define OMX_CLOCKPORT7 0x00000080 - -/** Structure representing the current mode of the media clock. - * IL Client uses this config to change or query the mode of the - * media clock of the clock component. Applicable only to clock - * component. - * - * On a SetConfig if eState is OMX_TIME_ClockStateRunning media time - * starts immediately at the prescribed start time. If - * OMX_TIME_ClockStateWaitingForStartTime the Clock Component ignores - * the given nStartTime and waits for all clients specified in the - * nWaitMask to send starttimes (via - * OMX_IndexConfigTimeClientStartTime). The Clock Component then starts - * the media clock using the earliest start time supplied. */ -typedef struct OMX_TIME_CONFIG_CLOCKSTATETYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version - * information */ - OMX_TIME_CLOCKSTATE eState; /**< State of the media time. */ - OMX_TICKS nStartTime; /**< Start time of the media time. */ - OMX_TICKS nOffset; /**< Time to offset the media time by - * (e.g. preroll). Media time will be - * reported to be nOffset ticks earlier. - */ - OMX_U32 nWaitMask; /**< Mask of OMX_CLOCKPORT values. */ -} OMX_TIME_CONFIG_CLOCKSTATETYPE; - -/** Structure representing the reference clock currently being used to - * compute media time. IL client uses this config to change or query the - * clock component's active reference clock */ -typedef struct OMX_TIME_CONFIG_ACTIVEREFCLOCKTYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_TIME_REFCLOCKTYPE eClock; /**< Reference clock used to compute media time */ -} OMX_TIME_CONFIG_ACTIVEREFCLOCKTYPE; - -/** Descriptor for setting specifics of power type. - * Note: this structure is listed for backwards compatibility. */ -typedef struct OMX_OTHER_CONFIG_POWERTYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_BOOL bEnablePM; /**< Flag to enable Power Management */ -} OMX_OTHER_CONFIG_POWERTYPE; - - -/** Descriptor for setting specifics of stats type. - * Note: this structure is listed for backwards compatibility. */ -typedef struct OMX_OTHER_CONFIG_STATSTYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - /* what goes here */ -} OMX_OTHER_CONFIG_STATSTYPE; - - -/** - * The PortDefinition structure is used to define all of the parameters - * necessary for the compliant component to setup an input or an output other - * path. - */ -typedef struct OMX_OTHER_PORTDEFINITIONTYPE { - OMX_OTHER_FORMATTYPE eFormat; /**< Type of data expected for this channel */ -} OMX_OTHER_PORTDEFINITIONTYPE; - -/** Port format parameter. This structure is used to enumerate - * the various data input/output format supported by the port. - */ -typedef struct OMX_OTHER_PARAM_PORTFORMATTYPE { - OMX_U32 nSize; /**< size of the structure in bytes */ - OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ - OMX_U32 nPortIndex; /**< Indicates which port to set */ - OMX_U32 nIndex; /**< Indicates the enumeration index for the format from 0x0 to N-1 */ - OMX_OTHER_FORMATTYPE eFormat; /**< Type of data expected for this channel */ -} OMX_OTHER_PARAM_PORTFORMATTYPE; - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif -/* File EOF */ diff --git a/sec_mm/sec_omx/sec_omx_include/khronos/OMX_Types.h b/sec_mm/sec_omx/sec_omx_include/khronos/OMX_Types.h deleted file mode 100644 index 31be916..0000000 --- a/sec_mm/sec_omx/sec_omx_include/khronos/OMX_Types.h +++ /dev/null @@ -1,347 +0,0 @@ -/* - * Copyright (c) 2008 The Khronos Group Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject - * to the following conditions: - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - */ - -/** OMX_Types.h - OpenMax IL version 1.1.2 - * The OMX_Types header file contains the primitive type definitions used by - * the core, the application and the component. This file may need to be - * modified to be used on systems that do not have "char" set to 8 bits, - * "short" set to 16 bits and "long" set to 32 bits. - */ - -#ifndef OMX_Types_h -#define OMX_Types_h - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/** The OMX_API and OMX_APIENTRY are platform specific definitions used - * to declare OMX function prototypes. They are modified to meet the - * requirements for a particular platform */ -#ifdef __SYMBIAN32__ -# ifdef __OMX_EXPORTS -# define OMX_API __declspec(dllexport) -# else -# ifdef _WIN32 -# define OMX_API __declspec(dllexport) -# else -# define OMX_API __declspec(dllimport) -# endif -# endif -#else -# ifdef _WIN32 -# ifdef __OMX_EXPORTS -# define OMX_API __declspec(dllexport) -# else -# define OMX_API __declspec(dllimport) -# endif -# else -# ifdef __OMX_EXPORTS -# define OMX_API -# else -# define OMX_API extern -# endif -# endif -#endif - -#ifndef OMX_APIENTRY -#define OMX_APIENTRY -#endif - -/** OMX_IN is used to identify inputs to an OMX function. This designation - will also be used in the case of a pointer that points to a parameter - that is used as an output. */ -#ifndef OMX_IN -#define OMX_IN -#endif - -/** OMX_OUT is used to identify outputs from an OMX function. This - designation will also be used in the case of a pointer that points - to a parameter that is used as an input. */ -#ifndef OMX_OUT -#define OMX_OUT -#endif - - -/** OMX_INOUT is used to identify parameters that may be either inputs or - outputs from an OMX function at the same time. This designation will - also be used in the case of a pointer that points to a parameter that - is used both as an input and an output. */ -#ifndef OMX_INOUT -#define OMX_INOUT -#endif - -/** OMX_ALL is used to as a wildcard to select all entities of the same type - * when specifying the index, or referring to a object by an index. (i.e. - * use OMX_ALL to indicate all N channels). When used as a port index - * for a config or parameter this OMX_ALL denotes that the config or - * parameter applies to the entire component not just one port. */ -#define OMX_ALL 0xFFFFFFFF - -/** In the following we define groups that help building doxygen documentation */ - -/** @defgroup core OpenMAX IL core - * Functions and structure related to the OMX IL core - */ - - /** @defgroup comp OpenMAX IL component - * Functions and structure related to the OMX IL component - */ - -/** @defgroup rpm Resource and Policy Management - * Structures for resource and policy management of components - */ - -/** @defgroup buf Buffer Management - * Buffer handling functions and structures - */ - -/** @defgroup tun Tunneling - * @ingroup core comp - * Structures and functions to manage tunnels among component ports - */ - -/** @defgroup cp Content Pipes - * @ingroup core - */ - - /** @defgroup metadata Metadata handling - * - */ - -/** OMX_U8 is an 8 bit unsigned quantity that is byte aligned */ -typedef unsigned char OMX_U8; - -/** OMX_S8 is an 8 bit signed quantity that is byte aligned */ -typedef signed char OMX_S8; - -/** OMX_U16 is a 16 bit unsigned quantity that is 16 bit word aligned */ -typedef unsigned short OMX_U16; - -/** OMX_S16 is a 16 bit signed quantity that is 16 bit word aligned */ -typedef signed short OMX_S16; - -/** OMX_U32 is a 32 bit unsigned quantity that is 32 bit word aligned */ -typedef unsigned long OMX_U32; - -/** OMX_S32 is a 32 bit signed quantity that is 32 bit word aligned */ -typedef signed long OMX_S32; - - -/* Users with compilers that cannot accept the "long long" designation should - define the OMX_SKIP64BIT macro. It should be noted that this may cause - some components to fail to compile if the component was written to require - 64 bit integral types. However, these components would NOT compile anyway - since the compiler does not support the way the component was written. -*/ -#ifndef OMX_SKIP64BIT -#ifdef __SYMBIAN32__ -/** OMX_U64 is a 64 bit unsigned quantity that is 64 bit word aligned */ -typedef unsigned long long OMX_U64; - -/** OMX_S64 is a 64 bit signed quantity that is 64 bit word aligned */ -typedef signed long long OMX_S64; - -#elif defined(WIN32) - -/** OMX_U64 is a 64 bit unsigned quantity that is 64 bit word aligned */ -typedef unsigned __int64 OMX_U64; - -/** OMX_S64 is a 64 bit signed quantity that is 64 bit word aligned */ -typedef signed __int64 OMX_S64; - -#else /* WIN32 */ - -/** OMX_U64 is a 64 bit unsigned quantity that is 64 bit word aligned */ -typedef unsigned long long OMX_U64; - -/** OMX_S64 is a 64 bit signed quantity that is 64 bit word aligned */ -typedef signed long long OMX_S64; - -#endif /* WIN32 */ -#endif - - -/** The OMX_BOOL type is intended to be used to represent a true or a false - value when passing parameters to and from the OMX core and components. The - OMX_BOOL is a 32 bit quantity and is aligned on a 32 bit word boundary. - */ -typedef enum OMX_BOOL { - OMX_FALSE = 0, - OMX_TRUE = !OMX_FALSE, - OMX_BOOL_MAX = 0x7FFFFFFF -} OMX_BOOL; - -/** The OMX_PTR type is intended to be used to pass pointers between the OMX - applications and the OMX Core and components. This is a 32 bit pointer and - is aligned on a 32 bit boundary. - */ -typedef void* OMX_PTR; - -/** The OMX_STRING type is intended to be used to pass "C" type strings between - the application and the core and component. The OMX_STRING type is a 32 - bit pointer to a zero terminated string. The pointer is word aligned and - the string is byte aligned. - */ -typedef char* OMX_STRING; - -/** The OMX_BYTE type is intended to be used to pass arrays of bytes such as - buffers between the application and the component and core. The OMX_BYTE - type is a 32 bit pointer to a zero terminated string. The pointer is word - aligned and the string is byte aligned. - */ -typedef unsigned char* OMX_BYTE; - -/** OMX_UUIDTYPE is a very long unique identifier to uniquely identify - at runtime. This identifier should be generated by a component in a way - that guarantees that every instance of the identifier running on the system - is unique. */ -typedef unsigned char OMX_UUIDTYPE[128]; - -/** The OMX_DIRTYPE enumeration is used to indicate if a port is an input or - an output port. This enumeration is common across all component types. - */ -typedef enum OMX_DIRTYPE -{ - OMX_DirInput, /**< Port is an input port */ - OMX_DirOutput, /**< Port is an output port */ - OMX_DirMax = 0x7FFFFFFF -} OMX_DIRTYPE; - -/** The OMX_ENDIANTYPE enumeration is used to indicate the bit ordering - for numerical data (i.e. big endian, or little endian). - */ -typedef enum OMX_ENDIANTYPE -{ - OMX_EndianBig, /**< big endian */ - OMX_EndianLittle, /**< little endian */ - OMX_EndianMax = 0x7FFFFFFF -} OMX_ENDIANTYPE; - - -/** The OMX_NUMERICALDATATYPE enumeration is used to indicate if data - is signed or unsigned - */ -typedef enum OMX_NUMERICALDATATYPE -{ - OMX_NumericalDataSigned, /**< signed data */ - OMX_NumericalDataUnsigned, /**< unsigned data */ - OMX_NumercialDataMax = 0x7FFFFFFF -} OMX_NUMERICALDATATYPE; - - -/** Unsigned bounded value type */ -typedef struct OMX_BU32 { - OMX_U32 nValue; /**< actual value */ - OMX_U32 nMin; /**< minimum for value (i.e. nValue >= nMin) */ - OMX_U32 nMax; /**< maximum for value (i.e. nValue <= nMax) */ -} OMX_BU32; - - -/** Signed bounded value type */ -typedef struct OMX_BS32 { - OMX_S32 nValue; /**< actual value */ - OMX_S32 nMin; /**< minimum for value (i.e. nValue >= nMin) */ - OMX_S32 nMax; /**< maximum for value (i.e. nValue <= nMax) */ -} OMX_BS32; - - -/** Structure representing some time or duration in microseconds. This structure - * must be interpreted as a signed 64 bit value. The quantity is signed to accommodate - * negative deltas and preroll scenarios. The quantity is represented in microseconds - * to accomodate high resolution timestamps (e.g. DVD presentation timestamps based - * on a 90kHz clock) and to allow more accurate and synchronized delivery (e.g. - * individual audio samples delivered at 192 kHz). The quantity is 64 bit to - * accommodate a large dynamic range (signed 32 bit values would allow only for plus - * or minus 35 minutes). - * - * Implementations with limited precision may convert the signed 64 bit value to - * a signed 32 bit value internally but risk loss of precision. - */ -#ifndef OMX_SKIP64BIT -typedef OMX_S64 OMX_TICKS; -#else -typedef struct OMX_TICKS -{ - OMX_U32 nLowPart; /** low bits of the signed 64 bit tick value */ - OMX_U32 nHighPart; /** high bits of the signed 64 bit tick value */ -} OMX_TICKS; -#endif -#define OMX_TICKS_PER_SECOND 1000000 - -/** Define the public interface for the OMX Handle. The core will not use - this value internally, but the application should only use this value. - */ -typedef void* OMX_HANDLETYPE; - -typedef struct OMX_MARKTYPE -{ - OMX_HANDLETYPE hMarkTargetComponent; /**< The component that will - generate a mark event upon - processing the mark. */ - OMX_PTR pMarkData; /**< Application specific data associated with - the mark sent on a mark event to disambiguate - this mark from others. */ -} OMX_MARKTYPE; - - -/** OMX_NATIVE_DEVICETYPE is used to map a OMX video port to the - * platform & operating specific object used to reference the display - * or can be used by a audio port for native audio rendering */ -typedef void* OMX_NATIVE_DEVICETYPE; - -/** OMX_NATIVE_WINDOWTYPE is used to map a OMX video port to the - * platform & operating specific object used to reference the window */ -typedef void* OMX_NATIVE_WINDOWTYPE; - -/** The OMX_VERSIONTYPE union is used to specify the version for - a structure or component. For a component, the version is entirely - specified by the component vendor. Components doing the same function - from different vendors may or may not have the same version. For - structures, the version shall be set by the entity that allocates the - structure. For structures specified in the OMX 1.1 specification, the - value of the version shall be set to 1.1.0.0 in all cases. Access to the - OMX_VERSIONTYPE can be by a single 32 bit access (e.g. by nVersion) or - by accessing one of the structure elements to, for example, check only - the Major revision. - */ -typedef union OMX_VERSIONTYPE -{ - struct - { - OMX_U8 nVersionMajor; /**< Major version accessor element */ - OMX_U8 nVersionMinor; /**< Minor version accessor element */ - OMX_U8 nRevision; /**< Revision version accessor element */ - OMX_U8 nStep; /**< Step version accessor element */ - } s; - OMX_U32 nVersion; /**< 32 bit value to make accessing the - version easily done in a single word - size copy/compare operation */ -} OMX_VERSIONTYPE; - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif -/* File EOF */ diff --git a/sec_mm/sec_omx/sec_omx_include/khronos/OMX_Video.h b/sec_mm/sec_omx/sec_omx_include/khronos/OMX_Video.h deleted file mode 100644 index 163e450..0000000 --- a/sec_mm/sec_omx/sec_omx_include/khronos/OMX_Video.h +++ /dev/null @@ -1,1060 +0,0 @@ -/** - * Copyright (c) 2008 The Khronos Group Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject - * to the following conditions: - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - */ - -/** - * @file OMX_Video.h - OpenMax IL version 1.1.2 - * The structures is needed by Video components to exchange parameters - * and configuration data with OMX components. - */ -#ifndef OMX_Video_h -#define OMX_Video_h - -/** @defgroup video OpenMAX IL Video Domain - * @ingroup iv - * Structures for OpenMAX IL Video domain - * @{ - */ - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - - -/** - * Each OMX header must include all required header files to allow the - * header to compile without errors. The includes below are required - * for this header file to compile successfully - */ - -#include - - -/** - * Enumeration used to define the possible video compression codings. - * NOTE: This essentially refers to file extensions. If the coding is - * being used to specify the ENCODE type, then additional work - * must be done to configure the exact flavor of the compression - * to be used. For decode cases where the user application can - * not differentiate between MPEG-4 and H.264 bit streams, it is - * up to the codec to handle this. - */ -typedef enum OMX_VIDEO_CODINGTYPE { - OMX_VIDEO_CodingUnused, /**< Value when coding is N/A */ - OMX_VIDEO_CodingAutoDetect, /**< Autodetection of coding type */ - OMX_VIDEO_CodingMPEG2, /**< AKA: H.262 */ - OMX_VIDEO_CodingH263, /**< H.263 */ - OMX_VIDEO_CodingMPEG4, /**< MPEG-4 */ - OMX_VIDEO_CodingWMV, /**< all versions of Windows Media Video */ - OMX_VIDEO_CodingRV, /**< all versions of Real Video */ - OMX_VIDEO_CodingAVC, /**< H.264/AVC */ - OMX_VIDEO_CodingMJPEG, /**< Motion JPEG */ - OMX_VIDEO_CodingKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_VIDEO_CodingVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_VIDEO_CodingMax = 0x7FFFFFFF -} OMX_VIDEO_CODINGTYPE; - - -/** - * Data structure used to define a video path. The number of Video paths for - * input and output will vary by type of the Video component. - * - * Input (aka Source) : zero Inputs, one Output, - * Splitter : one Input, 2 or more Outputs, - * Processing Element : one Input, one output, - * Mixer : 2 or more inputs, one output, - * Output (aka Sink) : one Input, zero outputs. - * - * The PortDefinition structure is used to define all of the parameters - * necessary for the compliant component to setup an input or an output video - * path. If additional vendor specific data is required, it should be - * transmitted to the component using the CustomCommand function. Compliant - * components will prepopulate this structure with optimal values during the - * GetDefaultInitParams command. - * - * STRUCT MEMBERS: - * cMIMEType : MIME type of data for the port - * pNativeRender : Platform specific reference for a display if a - * sync, otherwise this field is 0 - * nFrameWidth : Width of frame to be used on channel if - * uncompressed format is used. Use 0 for unknown, - * don't care or variable - * nFrameHeight : Height of frame to be used on channel if - * uncompressed format is used. Use 0 for unknown, - * don't care or variable - * nStride : Number of bytes per span of an image - * (i.e. indicates the number of bytes to get - * from span N to span N+1, where negative stride - * indicates the image is bottom up - * nSliceHeight : Height used when encoding in slices - * nBitrate : Bit rate of frame to be used on channel if - * compressed format is used. Use 0 for unknown, - * don't care or variable - * xFramerate : Frame rate to be used on channel if uncompressed - * format is used. Use 0 for unknown, don't care or - * variable. Units are Q16 frames per second. - * bFlagErrorConcealment : Turns on error concealment if it is supported by - * the OMX component - * eCompressionFormat : Compression format used in this instance of the - * component. When OMX_VIDEO_CodingUnused is - * specified, eColorFormat is used - * eColorFormat : Decompressed format used by this component - * pNativeWindow : Platform specific reference for a window object if a - * display sink , otherwise this field is 0x0. - */ -typedef struct OMX_VIDEO_PORTDEFINITIONTYPE { - OMX_STRING cMIMEType; - OMX_NATIVE_DEVICETYPE pNativeRender; - OMX_U32 nFrameWidth; - OMX_U32 nFrameHeight; - OMX_S32 nStride; - OMX_U32 nSliceHeight; - OMX_U32 nBitrate; - OMX_U32 xFramerate; - OMX_BOOL bFlagErrorConcealment; - OMX_VIDEO_CODINGTYPE eCompressionFormat; - OMX_COLOR_FORMATTYPE eColorFormat; - OMX_NATIVE_WINDOWTYPE pNativeWindow; -} OMX_VIDEO_PORTDEFINITIONTYPE; - -/** - * Port format parameter. This structure is used to enumerate the various - * data input/output format supported by the port. - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Indicates which port to set - * nIndex : Indicates the enumeration index for the format from - * 0x0 to N-1 - * eCompressionFormat : Compression format used in this instance of the - * component. When OMX_VIDEO_CodingUnused is specified, - * eColorFormat is used - * eColorFormat : Decompressed format used by this component - * xFrameRate : Indicates the video frame rate in Q16 format - */ -typedef struct OMX_VIDEO_PARAM_PORTFORMATTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_U32 nIndex; - OMX_VIDEO_CODINGTYPE eCompressionFormat; - OMX_COLOR_FORMATTYPE eColorFormat; - OMX_U32 xFramerate; -} OMX_VIDEO_PARAM_PORTFORMATTYPE; - - -/** - * This is a structure for configuring video compression quantization - * parameter values. Codecs may support different QP values for different - * frame types. - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version info - * nPortIndex : Port that this structure applies to - * nQpI : QP value to use for index frames - * nQpP : QP value to use for P frames - * nQpB : QP values to use for bidirectional frames - */ -typedef struct OMX_VIDEO_PARAM_QUANTIZATIONTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_U32 nQpI; - OMX_U32 nQpP; - OMX_U32 nQpB; -} OMX_VIDEO_PARAM_QUANTIZATIONTYPE; - - -/** - * Structure for configuration of video fast update parameters. - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version info - * nPortIndex : Port that this structure applies to - * bEnableVFU : Enable/Disable video fast update - * nFirstGOB : Specifies the number of the first macroblock row - * nFirstMB : specifies the first MB relative to the specified first GOB - * nNumMBs : Specifies the number of MBs to be refreshed from nFirstGOB - * and nFirstMB - */ -typedef struct OMX_VIDEO_PARAM_VIDEOFASTUPDATETYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_BOOL bEnableVFU; - OMX_U32 nFirstGOB; - OMX_U32 nFirstMB; - OMX_U32 nNumMBs; -} OMX_VIDEO_PARAM_VIDEOFASTUPDATETYPE; - - -/** - * Enumeration of possible bitrate control types - */ -typedef enum OMX_VIDEO_CONTROLRATETYPE { - OMX_Video_ControlRateDisable, - OMX_Video_ControlRateVariable, - OMX_Video_ControlRateConstant, - OMX_Video_ControlRateVariableSkipFrames, - OMX_Video_ControlRateConstantSkipFrames, - OMX_Video_ControlRateKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_Video_ControlRateVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_Video_ControlRateMax = 0x7FFFFFFF -} OMX_VIDEO_CONTROLRATETYPE; - - -/** - * Structure for configuring bitrate mode of a codec. - * - * STRUCT MEMBERS: - * nSize : Size of the struct in bytes - * nVersion : OMX spec version info - * nPortIndex : Port that this struct applies to - * eControlRate : Control rate type enum - * nTargetBitrate : Target bitrate to encode with - */ -typedef struct OMX_VIDEO_PARAM_BITRATETYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_VIDEO_CONTROLRATETYPE eControlRate; - OMX_U32 nTargetBitrate; -} OMX_VIDEO_PARAM_BITRATETYPE; - - -/** - * Enumeration of possible motion vector (MV) types - */ -typedef enum OMX_VIDEO_MOTIONVECTORTYPE { - OMX_Video_MotionVectorPixel, - OMX_Video_MotionVectorHalfPel, - OMX_Video_MotionVectorQuarterPel, - OMX_Video_MotionVectorEighthPel, - OMX_Video_MotionVectorKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_Video_MotionVectorVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_Video_MotionVectorMax = 0x7FFFFFFF -} OMX_VIDEO_MOTIONVECTORTYPE; - - -/** - * Structure for configuring the number of motion vectors used as well - * as their accuracy. - * - * STRUCT MEMBERS: - * nSize : Size of the struct in bytes - * nVersion : OMX spec version info - * nPortIndex : port that this structure applies to - * eAccuracy : Enumerated MV accuracy - * bUnrestrictedMVs : Allow unrestricted MVs - * bFourMV : Allow use of 4 MVs - * sXSearchRange : Search range in horizontal direction for MVs - * sYSearchRange : Search range in vertical direction for MVs - */ -typedef struct OMX_VIDEO_PARAM_MOTIONVECTORTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_VIDEO_MOTIONVECTORTYPE eAccuracy; - OMX_BOOL bUnrestrictedMVs; - OMX_BOOL bFourMV; - OMX_S32 sXSearchRange; - OMX_S32 sYSearchRange; -} OMX_VIDEO_PARAM_MOTIONVECTORTYPE; - - -/** - * Enumeration of possible methods to use for Intra Refresh - */ -typedef enum OMX_VIDEO_INTRAREFRESHTYPE { - OMX_VIDEO_IntraRefreshCyclic, - OMX_VIDEO_IntraRefreshAdaptive, - OMX_VIDEO_IntraRefreshBoth, - OMX_VIDEO_IntraRefreshKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_VIDEO_IntraRefreshVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_VIDEO_IntraRefreshMax = 0x7FFFFFFF -} OMX_VIDEO_INTRAREFRESHTYPE; - - -/** - * Structure for configuring intra refresh mode - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * eRefreshMode : Cyclic, Adaptive, or Both - * nAirMBs : Number of intra macroblocks to refresh in a frame when - * AIR is enabled - * nAirRef : Number of times a motion marked macroblock has to be - * intra coded - * nCirMBs : Number of consecutive macroblocks to be coded as "intra" - * when CIR is enabled - */ -typedef struct OMX_VIDEO_PARAM_INTRAREFRESHTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_VIDEO_INTRAREFRESHTYPE eRefreshMode; - OMX_U32 nAirMBs; - OMX_U32 nAirRef; - OMX_U32 nCirMBs; -} OMX_VIDEO_PARAM_INTRAREFRESHTYPE; - - -/** - * Structure for enabling various error correction methods for video - * compression. - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * bEnableHEC : Enable/disable header extension codes (HEC) - * bEnableResync : Enable/disable resynchronization markers - * nResynchMarkerSpacing : Resynch markers interval (in bits) to be - * applied in the stream - * bEnableDataPartitioning : Enable/disable data partitioning - * bEnableRVLC : Enable/disable reversible variable length - * coding - */ -typedef struct OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_BOOL bEnableHEC; - OMX_BOOL bEnableResync; - OMX_U32 nResynchMarkerSpacing; - OMX_BOOL bEnableDataPartitioning; - OMX_BOOL bEnableRVLC; -} OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE; - - -/** - * Configuration of variable block-size motion compensation (VBSMC) - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * b16x16 : Enable inter block search 16x16 - * b16x8 : Enable inter block search 16x8 - * b8x16 : Enable inter block search 8x16 - * b8x8 : Enable inter block search 8x8 - * b8x4 : Enable inter block search 8x4 - * b4x8 : Enable inter block search 4x8 - * b4x4 : Enable inter block search 4x4 - */ -typedef struct OMX_VIDEO_PARAM_VBSMCTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_BOOL b16x16; - OMX_BOOL b16x8; - OMX_BOOL b8x16; - OMX_BOOL b8x8; - OMX_BOOL b8x4; - OMX_BOOL b4x8; - OMX_BOOL b4x4; -} OMX_VIDEO_PARAM_VBSMCTYPE; - - -/** - * H.263 profile types, each profile indicates support for various - * performance bounds and different annexes. - * - * ENUMS: - * Baseline : Baseline Profile: H.263 (V1), no optional modes - * H320 Coding : H.320 Coding Efficiency Backward Compatibility - * Profile: H.263+ (V2), includes annexes I, J, L.4 - * and T - * BackwardCompatible : Backward Compatibility Profile: H.263 (V1), - * includes annex F - * ISWV2 : Interactive Streaming Wireless Profile: H.263+ - * (V2), includes annexes I, J, K and T - * ISWV3 : Interactive Streaming Wireless Profile: H.263++ - * (V3), includes profile 3 and annexes V and W.6.3.8 - * HighCompression : Conversational High Compression Profile: H.263++ - * (V3), includes profiles 1 & 2 and annexes D and U - * Internet : Conversational Internet Profile: H.263++ (V3), - * includes profile 5 and annex K - * Interlace : Conversational Interlace Profile: H.263++ (V3), - * includes profile 5 and annex W.6.3.11 - * HighLatency : High Latency Profile: H.263++ (V3), includes - * profile 6 and annexes O.1 and P.5 - */ -typedef enum OMX_VIDEO_H263PROFILETYPE { - OMX_VIDEO_H263ProfileBaseline = 0x01, - OMX_VIDEO_H263ProfileH320Coding = 0x02, - OMX_VIDEO_H263ProfileBackwardCompatible = 0x04, - OMX_VIDEO_H263ProfileISWV2 = 0x08, - OMX_VIDEO_H263ProfileISWV3 = 0x10, - OMX_VIDEO_H263ProfileHighCompression = 0x20, - OMX_VIDEO_H263ProfileInternet = 0x40, - OMX_VIDEO_H263ProfileInterlace = 0x80, - OMX_VIDEO_H263ProfileHighLatency = 0x100, - OMX_VIDEO_H263ProfileKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_VIDEO_H263ProfileVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_VIDEO_H263ProfileMax = 0x7FFFFFFF -} OMX_VIDEO_H263PROFILETYPE; - - -/** - * H.263 level types, each level indicates support for various frame sizes, - * bit rates, decoder frame rates. - */ -typedef enum OMX_VIDEO_H263LEVELTYPE { - OMX_VIDEO_H263Level10 = 0x01, - OMX_VIDEO_H263Level20 = 0x02, - OMX_VIDEO_H263Level30 = 0x04, - OMX_VIDEO_H263Level40 = 0x08, - OMX_VIDEO_H263Level45 = 0x10, - OMX_VIDEO_H263Level50 = 0x20, - OMX_VIDEO_H263Level60 = 0x40, - OMX_VIDEO_H263Level70 = 0x80, - OMX_VIDEO_H263LevelKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_VIDEO_H263LevelVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_VIDEO_H263LevelMax = 0x7FFFFFFF -} OMX_VIDEO_H263LEVELTYPE; - - -/** - * Specifies the picture type. These values should be OR'd to signal all - * pictures types which are allowed. - * - * ENUMS: - * Generic Picture Types: I, P and B - * H.263 Specific Picture Types: SI and SP - * H.264 Specific Picture Types: EI and EP - * MPEG-4 Specific Picture Types: S - */ -typedef enum OMX_VIDEO_PICTURETYPE { - OMX_VIDEO_PictureTypeI = 0x01, - OMX_VIDEO_PictureTypeP = 0x02, - OMX_VIDEO_PictureTypeB = 0x04, - OMX_VIDEO_PictureTypeSI = 0x08, - OMX_VIDEO_PictureTypeSP = 0x10, - OMX_VIDEO_PictureTypeEI = 0x11, - OMX_VIDEO_PictureTypeEP = 0x12, - OMX_VIDEO_PictureTypeS = 0x14, - OMX_VIDEO_PictureTypeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_VIDEO_PictureTypeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_VIDEO_PictureTypeMax = 0x7FFFFFFF -} OMX_VIDEO_PICTURETYPE; - - -/** - * H.263 Params - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * nPFrames : Number of P frames between each I frame - * nBFrames : Number of B frames between each I frame - * eProfile : H.263 profile(s) to use - * eLevel : H.263 level(s) to use - * bPLUSPTYPEAllowed : Indicating that it is allowed to use PLUSPTYPE - * (specified in the 1998 version of H.263) to - * indicate custom picture sizes or clock - * frequencies - * nAllowedPictureTypes : Specifies the picture types allowed in the - * bitstream - * bForceRoundingTypeToZero : value of the RTYPE bit (bit 6 of MPPTYPE) is - * not constrained. It is recommended to change - * the value of the RTYPE bit for each reference - * picture in error-free communication - * nPictureHeaderRepetition : Specifies the frequency of picture header - * repetition - * nGOBHeaderInterval : Specifies the interval of non-empty GOB - * headers in units of GOBs - */ -typedef struct OMX_VIDEO_PARAM_H263TYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_U32 nPFrames; - OMX_U32 nBFrames; - OMX_VIDEO_H263PROFILETYPE eProfile; - OMX_VIDEO_H263LEVELTYPE eLevel; - OMX_BOOL bPLUSPTYPEAllowed; - OMX_U32 nAllowedPictureTypes; - OMX_BOOL bForceRoundingTypeToZero; - OMX_U32 nPictureHeaderRepetition; - OMX_U32 nGOBHeaderInterval; -} OMX_VIDEO_PARAM_H263TYPE; - - -/** - * MPEG-2 profile types, each profile indicates support for various - * performance bounds and different annexes. - */ -typedef enum OMX_VIDEO_MPEG2PROFILETYPE { - OMX_VIDEO_MPEG2ProfileSimple = 0, /**< Simple Profile */ - OMX_VIDEO_MPEG2ProfileMain, /**< Main Profile */ - OMX_VIDEO_MPEG2Profile422, /**< 4:2:2 Profile */ - OMX_VIDEO_MPEG2ProfileSNR, /**< SNR Profile */ - OMX_VIDEO_MPEG2ProfileSpatial, /**< Spatial Profile */ - OMX_VIDEO_MPEG2ProfileHigh, /**< High Profile */ - OMX_VIDEO_MPEG2ProfileKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_VIDEO_MPEG2ProfileVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_VIDEO_MPEG2ProfileMax = 0x7FFFFFFF -} OMX_VIDEO_MPEG2PROFILETYPE; - - -/** - * MPEG-2 level types, each level indicates support for various frame - * sizes, bit rates, decoder frame rates. No need - */ -typedef enum OMX_VIDEO_MPEG2LEVELTYPE { - OMX_VIDEO_MPEG2LevelLL = 0, /**< Low Level */ - OMX_VIDEO_MPEG2LevelML, /**< Main Level */ - OMX_VIDEO_MPEG2LevelH14, /**< High 1440 */ - OMX_VIDEO_MPEG2LevelHL, /**< High Level */ - OMX_VIDEO_MPEG2LevelKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_VIDEO_MPEG2LevelVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_VIDEO_MPEG2LevelMax = 0x7FFFFFFF -} OMX_VIDEO_MPEG2LEVELTYPE; - - -/** - * MPEG-2 params - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * nPFrames : Number of P frames between each I frame - * nBFrames : Number of B frames between each I frame - * eProfile : MPEG-2 profile(s) to use - * eLevel : MPEG-2 levels(s) to use - */ -typedef struct OMX_VIDEO_PARAM_MPEG2TYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_U32 nPFrames; - OMX_U32 nBFrames; - OMX_VIDEO_MPEG2PROFILETYPE eProfile; - OMX_VIDEO_MPEG2LEVELTYPE eLevel; -} OMX_VIDEO_PARAM_MPEG2TYPE; - - -/** - * MPEG-4 profile types, each profile indicates support for various - * performance bounds and different annexes. - * - * ENUMS: - * - Simple Profile, Levels 1-3 - * - Simple Scalable Profile, Levels 1-2 - * - Core Profile, Levels 1-2 - * - Main Profile, Levels 2-4 - * - N-bit Profile, Level 2 - * - Scalable Texture Profile, Level 1 - * - Simple Face Animation Profile, Levels 1-2 - * - Simple Face and Body Animation (FBA) Profile, Levels 1-2 - * - Basic Animated Texture Profile, Levels 1-2 - * - Hybrid Profile, Levels 1-2 - * - Advanced Real Time Simple Profiles, Levels 1-4 - * - Core Scalable Profile, Levels 1-3 - * - Advanced Coding Efficiency Profile, Levels 1-4 - * - Advanced Core Profile, Levels 1-2 - * - Advanced Scalable Texture, Levels 2-3 - */ -typedef enum OMX_VIDEO_MPEG4PROFILETYPE { - OMX_VIDEO_MPEG4ProfileSimple = 0x01, - OMX_VIDEO_MPEG4ProfileSimpleScalable = 0x02, - OMX_VIDEO_MPEG4ProfileCore = 0x04, - OMX_VIDEO_MPEG4ProfileMain = 0x08, - OMX_VIDEO_MPEG4ProfileNbit = 0x10, - OMX_VIDEO_MPEG4ProfileScalableTexture = 0x20, - OMX_VIDEO_MPEG4ProfileSimpleFace = 0x40, - OMX_VIDEO_MPEG4ProfileSimpleFBA = 0x80, - OMX_VIDEO_MPEG4ProfileBasicAnimated = 0x100, - OMX_VIDEO_MPEG4ProfileHybrid = 0x200, - OMX_VIDEO_MPEG4ProfileAdvancedRealTime = 0x400, - OMX_VIDEO_MPEG4ProfileCoreScalable = 0x800, - OMX_VIDEO_MPEG4ProfileAdvancedCoding = 0x1000, - OMX_VIDEO_MPEG4ProfileAdvancedCore = 0x2000, - OMX_VIDEO_MPEG4ProfileAdvancedScalable = 0x4000, - OMX_VIDEO_MPEG4ProfileAdvancedSimple = 0x8000, - OMX_VIDEO_MPEG4ProfileKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_VIDEO_MPEG4ProfileVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_VIDEO_MPEG4ProfileMax = 0x7FFFFFFF -} OMX_VIDEO_MPEG4PROFILETYPE; - - -/** - * MPEG-4 level types, each level indicates support for various frame - * sizes, bit rates, decoder frame rates. No need - */ -typedef enum OMX_VIDEO_MPEG4LEVELTYPE { - OMX_VIDEO_MPEG4Level0 = 0x01, /**< Level 0 */ - OMX_VIDEO_MPEG4Level0b = 0x02, /**< Level 0b */ - OMX_VIDEO_MPEG4Level1 = 0x04, /**< Level 1 */ - OMX_VIDEO_MPEG4Level2 = 0x08, /**< Level 2 */ - OMX_VIDEO_MPEG4Level3 = 0x10, /**< Level 3 */ - OMX_VIDEO_MPEG4Level4 = 0x20, /**< Level 4 */ - OMX_VIDEO_MPEG4Level4a = 0x40, /**< Level 4a */ - OMX_VIDEO_MPEG4Level5 = 0x80, /**< Level 5 */ - OMX_VIDEO_MPEG4LevelKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_VIDEO_MPEG4LevelVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_VIDEO_MPEG4LevelMax = 0x7FFFFFFF -} OMX_VIDEO_MPEG4LEVELTYPE; - - -/** - * MPEG-4 configuration. This structure handles configuration options - * which are specific to MPEG4 algorithms - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * nSliceHeaderSpacing : Number of macroblocks between slice header (H263+ - * Annex K). Put zero if not used - * bSVH : Enable Short Video Header mode - * bGov : Flag to enable GOV - * nPFrames : Number of P frames between each I frame (also called - * GOV period) - * nBFrames : Number of B frames between each I frame - * nIDCVLCThreshold : Value of intra DC VLC threshold - * bACPred : Flag to use ac prediction - * nMaxPacketSize : Maximum size of packet in bytes. - * nTimeIncRes : Used to pass VOP time increment resolution for MPEG4. - * Interpreted as described in MPEG4 standard. - * eProfile : MPEG-4 profile(s) to use. - * eLevel : MPEG-4 level(s) to use. - * nAllowedPictureTypes : Specifies the picture types allowed in the bitstream - * nHeaderExtension : Specifies the number of consecutive video packet - * headers within a VOP - * bReversibleVLC : Specifies whether reversible variable length coding - * is in use - */ -typedef struct OMX_VIDEO_PARAM_MPEG4TYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_U32 nSliceHeaderSpacing; - OMX_BOOL bSVH; - OMX_BOOL bGov; - OMX_U32 nPFrames; - OMX_U32 nBFrames; - OMX_U32 nIDCVLCThreshold; - OMX_BOOL bACPred; - OMX_U32 nMaxPacketSize; - OMX_U32 nTimeIncRes; - OMX_VIDEO_MPEG4PROFILETYPE eProfile; - OMX_VIDEO_MPEG4LEVELTYPE eLevel; - OMX_U32 nAllowedPictureTypes; - OMX_U32 nHeaderExtension; - OMX_BOOL bReversibleVLC; -} OMX_VIDEO_PARAM_MPEG4TYPE; - - -/** - * WMV Versions - */ -typedef enum OMX_VIDEO_WMVFORMATTYPE { - OMX_VIDEO_WMVFormatUnused = 0x01, /**< Format unused or unknown */ - OMX_VIDEO_WMVFormat7 = 0x02, /**< Windows Media Video format 7 */ - OMX_VIDEO_WMVFormat8 = 0x04, /**< Windows Media Video format 8 */ - OMX_VIDEO_WMVFormat9 = 0x08, /**< Windows Media Video format 9 */ - OMX_VIDEO_WMFFormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_VIDEO_WMFFormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_VIDEO_WMVFormatMax = 0x7FFFFFFF -} OMX_VIDEO_WMVFORMATTYPE; - - -/** - * WMV Params - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * eFormat : Version of WMV stream / data - */ -typedef struct OMX_VIDEO_PARAM_WMVTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_VIDEO_WMVFORMATTYPE eFormat; -} OMX_VIDEO_PARAM_WMVTYPE; - - -/** - * Real Video Version - */ -typedef enum OMX_VIDEO_RVFORMATTYPE { - OMX_VIDEO_RVFormatUnused = 0, /**< Format unused or unknown */ - OMX_VIDEO_RVFormat8, /**< Real Video format 8 */ - OMX_VIDEO_RVFormat9, /**< Real Video format 9 */ - OMX_VIDEO_RVFormatG2, /**< Real Video Format G2 */ - OMX_VIDEO_RVFormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_VIDEO_RVFormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_VIDEO_RVFormatMax = 0x7FFFFFFF -} OMX_VIDEO_RVFORMATTYPE; - - -/** - * Real Video Params - * - * STUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * eFormat : Version of RV stream / data - * nBitsPerPixel : Bits per pixel coded in the frame - * nPaddedWidth : Padded width in pixel of a video frame - * nPaddedHeight : Padded Height in pixels of a video frame - * nFrameRate : Rate of video in frames per second - * nBitstreamFlags : Flags which internal information about the bitstream - * nBitstreamVersion : Bitstream version - * nMaxEncodeFrameSize: Max encoded frame size - * bEnablePostFilter : Turn on/off post filter - * bEnableTemporalInterpolation : Turn on/off temporal interpolation - * bEnableLatencyMode : When enabled, the decoder does not display a decoded - * frame until it has detected that no enhancement layer - * frames or dependent B frames will be coming. This - * detection usually occurs when a subsequent non-B - * frame is encountered - */ -typedef struct OMX_VIDEO_PARAM_RVTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_VIDEO_RVFORMATTYPE eFormat; - OMX_U16 nBitsPerPixel; - OMX_U16 nPaddedWidth; - OMX_U16 nPaddedHeight; - OMX_U32 nFrameRate; - OMX_U32 nBitstreamFlags; - OMX_U32 nBitstreamVersion; - OMX_U32 nMaxEncodeFrameSize; - OMX_BOOL bEnablePostFilter; - OMX_BOOL bEnableTemporalInterpolation; - OMX_BOOL bEnableLatencyMode; -} OMX_VIDEO_PARAM_RVTYPE; - - -/** - * AVC profile types, each profile indicates support for various - * performance bounds and different annexes. - */ -typedef enum OMX_VIDEO_AVCPROFILETYPE { - OMX_VIDEO_AVCProfileBaseline = 0x01, /**< Baseline profile */ - OMX_VIDEO_AVCProfileMain = 0x02, /**< Main profile */ - OMX_VIDEO_AVCProfileExtended = 0x04, /**< Extended profile */ - OMX_VIDEO_AVCProfileHigh = 0x08, /**< High profile */ - OMX_VIDEO_AVCProfileHigh10 = 0x10, /**< High 10 profile */ - OMX_VIDEO_AVCProfileHigh422 = 0x20, /**< High 4:2:2 profile */ - OMX_VIDEO_AVCProfileHigh444 = 0x40, /**< High 4:4:4 profile */ - OMX_VIDEO_AVCProfileKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_VIDEO_AVCProfileVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_VIDEO_AVCProfileMax = 0x7FFFFFFF -} OMX_VIDEO_AVCPROFILETYPE; - - -/** - * AVC level types, each level indicates support for various frame sizes, - * bit rates, decoder frame rates. No need - */ -typedef enum OMX_VIDEO_AVCLEVELTYPE { - OMX_VIDEO_AVCLevel1 = 0x01, /**< Level 1 */ - OMX_VIDEO_AVCLevel1b = 0x02, /**< Level 1b */ - OMX_VIDEO_AVCLevel11 = 0x04, /**< Level 1.1 */ - OMX_VIDEO_AVCLevel12 = 0x08, /**< Level 1.2 */ - OMX_VIDEO_AVCLevel13 = 0x10, /**< Level 1.3 */ - OMX_VIDEO_AVCLevel2 = 0x20, /**< Level 2 */ - OMX_VIDEO_AVCLevel21 = 0x40, /**< Level 2.1 */ - OMX_VIDEO_AVCLevel22 = 0x80, /**< Level 2.2 */ - OMX_VIDEO_AVCLevel3 = 0x100, /**< Level 3 */ - OMX_VIDEO_AVCLevel31 = 0x200, /**< Level 3.1 */ - OMX_VIDEO_AVCLevel32 = 0x400, /**< Level 3.2 */ - OMX_VIDEO_AVCLevel4 = 0x800, /**< Level 4 */ - OMX_VIDEO_AVCLevel41 = 0x1000, /**< Level 4.1 */ - OMX_VIDEO_AVCLevel42 = 0x2000, /**< Level 4.2 */ - OMX_VIDEO_AVCLevel5 = 0x4000, /**< Level 5 */ - OMX_VIDEO_AVCLevel51 = 0x8000, /**< Level 5.1 */ - OMX_VIDEO_AVCLevelKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_VIDEO_AVCLevelVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_VIDEO_AVCLevelMax = 0x7FFFFFFF -} OMX_VIDEO_AVCLEVELTYPE; - - -/** - * AVC loop filter modes - * - * OMX_VIDEO_AVCLoopFilterEnable : Enable - * OMX_VIDEO_AVCLoopFilterDisable : Disable - * OMX_VIDEO_AVCLoopFilterDisableSliceBoundary : Disabled on slice boundaries - */ -typedef enum OMX_VIDEO_AVCLOOPFILTERTYPE { - OMX_VIDEO_AVCLoopFilterEnable = 0, - OMX_VIDEO_AVCLoopFilterDisable, - OMX_VIDEO_AVCLoopFilterDisableSliceBoundary, - OMX_VIDEO_AVCLoopFilterKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_VIDEO_AVCLoopFilterVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_VIDEO_AVCLoopFilterMax = 0x7FFFFFFF -} OMX_VIDEO_AVCLOOPFILTERTYPE; - - -/** - * AVC params - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * nSliceHeaderSpacing : Number of macroblocks between slice header, put - * zero if not used - * nPFrames : Number of P frames between each I frame - * nBFrames : Number of B frames between each I frame - * bUseHadamard : Enable/disable Hadamard transform - * nRefFrames : Max number of reference frames to use for inter - * motion search (1-16) - * nRefIdxTrailing : Pic param set ref frame index (index into ref - * frame buffer of trailing frames list), B frame - * support - * nRefIdxForward : Pic param set ref frame index (index into ref - * frame buffer of forward frames list), B frame - * support - * bEnableUEP : Enable/disable unequal error protection. This - * is only valid of data partitioning is enabled. - * bEnableFMO : Enable/disable flexible macroblock ordering - * bEnableASO : Enable/disable arbitrary slice ordering - * bEnableRS : Enable/disable sending of redundant slices - * eProfile : AVC profile(s) to use - * eLevel : AVC level(s) to use - * nAllowedPictureTypes : Specifies the picture types allowed in the - * bitstream - * bFrameMBsOnly : specifies that every coded picture of the - * coded video sequence is a coded frame - * containing only frame macroblocks - * bMBAFF : Enable/disable switching between frame and - * field macroblocks within a picture - * bEntropyCodingCABAC : Entropy decoding method to be applied for the - * syntax elements for which two descriptors appear - * in the syntax tables - * bWeightedPPrediction : Enable/disable weighted prediction shall not - * be applied to P and SP slices - * nWeightedBipredicitonMode : Default weighted prediction is applied to B - * slices - * bconstIpred : Enable/disable intra prediction - * bDirect8x8Inference : Specifies the method used in the derivation - * process for luma motion vectors for B_Skip, - * B_Direct_16x16 and B_Direct_8x8 as specified - * in subclause 8.4.1.2 of the AVC spec - * bDirectSpatialTemporal : Flag indicating spatial or temporal direct - * mode used in B slice coding (related to - * bDirect8x8Inference) . Spatial direct mode is - * more common and should be the default. - * nCabacInitIdx : Index used to init CABAC contexts - * eLoopFilterMode : Enable/disable loop filter - */ -typedef struct OMX_VIDEO_PARAM_AVCTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_U32 nSliceHeaderSpacing; - OMX_U32 nPFrames; - OMX_U32 nBFrames; - OMX_BOOL bUseHadamard; - OMX_U32 nRefFrames; - OMX_U32 nRefIdx10ActiveMinus1; - OMX_U32 nRefIdx11ActiveMinus1; - OMX_BOOL bEnableUEP; - OMX_BOOL bEnableFMO; - OMX_BOOL bEnableASO; - OMX_BOOL bEnableRS; - OMX_VIDEO_AVCPROFILETYPE eProfile; - OMX_VIDEO_AVCLEVELTYPE eLevel; - OMX_U32 nAllowedPictureTypes; - OMX_BOOL bFrameMBsOnly; - OMX_BOOL bMBAFF; - OMX_BOOL bEntropyCodingCABAC; - OMX_BOOL bWeightedPPrediction; - OMX_U32 nWeightedBipredicitonMode; - OMX_BOOL bconstIpred ; - OMX_BOOL bDirect8x8Inference; - OMX_BOOL bDirectSpatialTemporal; - OMX_U32 nCabacInitIdc; - OMX_VIDEO_AVCLOOPFILTERTYPE eLoopFilterMode; -} OMX_VIDEO_PARAM_AVCTYPE; - -typedef struct OMX_VIDEO_PARAM_PROFILELEVELTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_U32 eProfile; /**< type is OMX_VIDEO_AVCPROFILETYPE, OMX_VIDEO_H263PROFILETYPE, - or OMX_VIDEO_MPEG4PROFILETYPE depending on context */ - OMX_U32 eLevel; /**< type is OMX_VIDEO_AVCLEVELTYPE, OMX_VIDEO_H263LEVELTYPE, - or OMX_VIDEO_MPEG4PROFILETYPE depending on context */ - OMX_U32 nProfileIndex; /**< Used to query for individual profile support information, - This parameter is valid only for - OMX_IndexParamVideoProfileLevelQuerySupported index, - For all other indices this parameter is to be ignored. */ -} OMX_VIDEO_PARAM_PROFILELEVELTYPE; - -/** - * Structure for dynamically configuring bitrate mode of a codec. - * - * STRUCT MEMBERS: - * nSize : Size of the struct in bytes - * nVersion : OMX spec version info - * nPortIndex : Port that this struct applies to - * nEncodeBitrate : Target average bitrate to be generated in bps - */ -typedef struct OMX_VIDEO_CONFIG_BITRATETYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_U32 nEncodeBitrate; -} OMX_VIDEO_CONFIG_BITRATETYPE; - -/** - * Defines Encoder Frame Rate setting - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * xEncodeFramerate : Encoding framerate represented in Q16 format - */ -typedef struct OMX_CONFIG_FRAMERATETYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_U32 xEncodeFramerate; /* Q16 format */ -} OMX_CONFIG_FRAMERATETYPE; - -typedef struct OMX_CONFIG_INTRAREFRESHVOPTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_BOOL IntraRefreshVOP; -} OMX_CONFIG_INTRAREFRESHVOPTYPE; - -typedef struct OMX_CONFIG_MACROBLOCKERRORMAPTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_U32 nErrMapSize; /* Size of the Error Map in bytes */ - OMX_U8 ErrMap[1]; /* Error map hint */ -} OMX_CONFIG_MACROBLOCKERRORMAPTYPE; - -typedef struct OMX_CONFIG_MBERRORREPORTINGTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_BOOL bEnabled; -} OMX_CONFIG_MBERRORREPORTINGTYPE; - -typedef struct OMX_PARAM_MACROBLOCKSTYPE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_U32 nMacroblocks; -} OMX_PARAM_MACROBLOCKSTYPE; - -/** - * AVC Slice Mode modes - * - * OMX_VIDEO_SLICEMODE_AVCDefault : Normal frame encoding, one slice per frame - * OMX_VIDEO_SLICEMODE_AVCMBSlice : NAL mode, number of MBs per frame - * OMX_VIDEO_SLICEMODE_AVCByteSlice : NAL mode, number of bytes per frame - */ -typedef enum OMX_VIDEO_AVCSLICEMODETYPE { - OMX_VIDEO_SLICEMODE_AVCDefault = 0, - OMX_VIDEO_SLICEMODE_AVCMBSlice, - OMX_VIDEO_SLICEMODE_AVCByteSlice, - OMX_VIDEO_SLICEMODE_AVCKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ - OMX_VIDEO_SLICEMODE_AVCVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ - OMX_VIDEO_SLICEMODE_AVCLevelMax = 0x7FFFFFFF -} OMX_VIDEO_AVCSLICEMODETYPE; - -/** - * AVC FMO Slice Mode Params - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * nNumSliceGroups : Specifies the number of slice groups - * nSliceGroupMapType : Specifies the type of slice groups - * eSliceMode : Specifies the type of slice - */ -typedef struct OMX_VIDEO_PARAM_AVCSLICEFMO { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_U8 nNumSliceGroups; - OMX_U8 nSliceGroupMapType; - OMX_VIDEO_AVCSLICEMODETYPE eSliceMode; -} OMX_VIDEO_PARAM_AVCSLICEFMO; - -/** - * AVC IDR Period Configs - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * nIDRPeriod : Specifies periodicity of IDR frames - * nPFrames : Specifies internal of coding Intra frames - */ -typedef struct OMX_VIDEO_CONFIG_AVCINTRAPERIOD { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_U32 nIDRPeriod; - OMX_U32 nPFrames; -} OMX_VIDEO_CONFIG_AVCINTRAPERIOD; - -/** - * AVC NAL Size Configs - * - * STRUCT MEMBERS: - * nSize : Size of the structure in bytes - * nVersion : OMX specification version information - * nPortIndex : Port that this structure applies to - * nNaluBytes : Specifies the NAL unit size - */ -typedef struct OMX_VIDEO_CONFIG_NALSIZE { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; - OMX_U32 nNaluBytes; -} OMX_VIDEO_CONFIG_NALSIZE; - -/** @} */ - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif -/* File EOF */ - diff --git a/sec_mm/sec_omx/sec_omx_include/sec/SEC_OMX_Def.h b/sec_mm/sec_omx/sec_omx_include/sec/SEC_OMX_Def.h deleted file mode 100644 index 10b6144..0000000 --- a/sec_mm/sec_omx/sec_omx_include/sec/SEC_OMX_Def.h +++ /dev/null @@ -1,154 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OMX_Def.h - * @brief SEC_OMX specific define - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#ifndef SEC_OMX_DEF -#define SEC_OMX_DEF - -#include "OMX_Types.h" -#include "OMX_IVCommon.h" - -#define VERSIONMAJOR_NUMBER 1 -#define VERSIONMINOR_NUMBER 0 -#define REVISION_NUMBER 0 -#define STEP_NUMBER 0 - - -#define MAX_OMX_COMPONENT_NUM 20 -#define MAX_OMX_COMPONENT_ROLE_NUM 10 -#define MAX_OMX_COMPONENT_NAME_SIZE OMX_MAX_STRINGNAME_SIZE -#define MAX_OMX_COMPONENT_ROLE_SIZE OMX_MAX_STRINGNAME_SIZE -#define MAX_OMX_COMPONENT_LIBNAME_SIZE OMX_MAX_STRINGNAME_SIZE * 2 -#define MAX_OMX_MIMETYPE_SIZE OMX_MAX_STRINGNAME_SIZE - -#define MAX_TIMESTAMP 17 -#define MAX_FLAGS 17 - -#define USE_ANDROID_EXTENSION - - -typedef enum _SEC_CODEC_TYPE -{ - SW_CODEC, - HW_VIDEO_CODEC, - HW_AUDIO_CODEC -} SEC_CODEC_TYPE; - -typedef struct _SEC_OMX_PRIORITYMGMTTYPE -{ - OMX_U32 nGroupPriority; /* the value 0 represents the highest priority */ - /* for a group of components */ - OMX_U32 nGroupID; -} SEC_OMX_PRIORITYMGMTTYPE; - -typedef enum _SEC_OMX_INDEXTYPE -{ -#define SEC_INDEX_PARAM_ENABLE_THUMBNAIL "OMX.SEC.index.ThumbnailMode" - OMX_IndexVendorThumbnailMode = 0x7F000001, - - /* for Android Native Window */ -#define SEC_INDEX_PARAM_ENABLE_ANB "OMX.google.android.index.enableAndroidNativeBuffers" - OMX_IndexParamEnableAndroidBuffers = 0x7F000011, -#define SEC_INDEX_PARAM_GET_ANB "OMX.google.android.index.getAndroidNativeBufferUsage" - OMX_IndexParamGetAndroidNativeBuffer = 0x7F000012, -#define SEC_INDEX_PARAM_USE_ANB "OMX.google.android.index.useAndroidNativeBuffer" - OMX_IndexParamUseAndroidNativeBuffer = 0x7F000013, - /* for Android Store Metadata Inbuffer */ -#define SEC_INDEX_PARAM_STORE_METADATA_BUFFER "OMX.google.android.index.storeMetaDataInBuffers" - OMX_IndexParamStoreMetaDataBuffer = 0x7F000014, - - /* for Android PV OpenCore*/ - OMX_COMPONENT_CAPABILITY_TYPE_INDEX = 0xFF7A347 -} SEC_OMX_INDEXTYPE; - -typedef enum _SEC_OMX_ERRORTYPE -{ - OMX_ErrorNoEOF = 0x90000001, - OMX_ErrorInputDataDecodeYet, - OMX_ErrorInputDataEncodeYet, - OMX_ErrorMFCInit -} SEC_OMX_ERRORTYPE; - -typedef enum _SEC_OMX_COMMANDTYPE -{ - SEC_OMX_CommandComponentDeInit = 0x7F000001, - SEC_OMX_CommandEmptyBuffer, - SEC_OMX_CommandFillBuffer -} SEC_OMX_COMMANDTYPE; - -typedef enum _SEC_OMX_TRANS_STATETYPE { - SEC_OMX_TransStateInvalid, - SEC_OMX_TransStateLoadedToIdle, - SEC_OMX_TransStateIdleToExecuting, - SEC_OMX_TransStateExecutingToIdle, - SEC_OMX_TransStateIdleToLoaded, - SEC_OMX_TransStateMax = 0X7FFFFFFF -} SEC_OMX_TRANS_STATETYPE; - -typedef enum _SEC_OMX_COLOR_FORMATTYPE { - OMX_SEC_COLOR_FormatNV12TPhysicalAddress = 0x7F000001, /**< Reserved region for introducing Vendor Extensions */ - /* for Android Native Window */ - OMX_SEC_COLOR_FormatANBYUV420SemiPlanar = 0x100, - /* for Android surface texture encode */ - OMX_COLOR_FormatAndroidOpaque = 0x7F000789 -}SEC_OMX_COLOR_FORMATTYPE; - -typedef enum _SEC_OMX_SUPPORTFORMAT_TYPE -{ - supportFormat_0 = 0x00, - supportFormat_1, - supportFormat_2, - supportFormat_3 -} SEC_OMX_SUPPORTFORMAT_TYPE; - - -/* for Android */ -typedef struct _OMXComponentCapabilityFlagsType -{ - /* OMX COMPONENT CAPABILITY RELATED MEMBERS */ - OMX_BOOL iIsOMXComponentMultiThreaded; - OMX_BOOL iOMXComponentSupportsExternalOutputBufferAlloc; - OMX_BOOL iOMXComponentSupportsExternalInputBufferAlloc; - OMX_BOOL iOMXComponentSupportsMovableInputBuffers; - OMX_BOOL iOMXComponentSupportsPartialFrames; - OMX_BOOL iOMXComponentUsesNALStartCodes; - OMX_BOOL iOMXComponentCanHandleIncompleteFrames; - OMX_BOOL iOMXComponentUsesFullAVCFrames; -} OMXComponentCapabilityFlagsType; - -typedef struct _SEC_OMX_VIDEO_PROFILELEVEL -{ - OMX_S32 profile; - OMX_S32 level; -} SEC_OMX_VIDEO_PROFILELEVEL; - - -#ifndef __OMX_EXPORTS -#define __OMX_EXPORTS -#define SEC_EXPORT_REF __attribute__((visibility("default"))) -#define SEC_IMPORT_REF __attribute__((visibility("default"))) -#endif - -#endif diff --git a/sec_mm/sec_omx/sec_omx_include/sec/SEC_OMX_Macros.h b/sec_mm/sec_omx/sec_omx_include/sec/SEC_OMX_Macros.h deleted file mode 100644 index 1debc62..0000000 --- a/sec_mm/sec_omx/sec_omx_include/sec/SEC_OMX_Macros.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OMX_Macros.h - * @brief Macros - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#ifndef SEC_OMX_MACROS -#define SEC_OMX_MACROS - -#include "SEC_OMX_Def.h" -#include "SEC_OSAL_Memory.h" - - -/* - * MACROS - */ -#define ALIGN_TO_32B(x) ((((x) + (1 << 5) - 1) >> 5) << 5) -#define ALIGN_TO_128B(x) ((((x) + (1 << 7) - 1) >> 7) << 7) -#define ALIGN_TO_8KB(x) ((((x) + (1 << 13) - 1) >> 13) << 13) - -#define INIT_SET_SIZE_VERSION(_struct_, _structType_) \ - do { \ - SEC_OSAL_Memset((_struct_), 0, sizeof(_structType_)); \ - (_struct_)->nSize = sizeof(_structType_); \ - (_struct_)->nVersion.s.nVersionMajor = VERSIONMAJOR_NUMBER; \ - (_struct_)->nVersion.s.nVersionMinor = VERSIONMINOR_NUMBER; \ - (_struct_)->nVersion.s.nRevision = REVISION_NUMBER; \ - (_struct_)->nVersion.s.nStep = STEP_NUMBER; \ - } while (0) - -/* - * Port Specific - */ -#define SEC_TUNNEL_ESTABLISHED 0x0001 -#define SEC_TUNNEL_IS_SUPPLIER 0x0002 - -#define CHECK_PORT_BEING_FLUSHED(port) (port->bIsPortFlushed == OMX_TRUE) -#define CHECK_PORT_BEING_DISABLED(port) (port->bIsPortDisabled == OMX_TRUE) -#define CHECK_PORT_ENABLED(port) (port->portDefinition.bEnabled == OMX_TRUE) -#define CHECK_PORT_POPULATED(port) (port->portDefinition.bPopulated == OMX_TRUE) -#define CHECK_PORT_TUNNELED(port) (port->tunnelFlags & SEC_TUNNEL_ESTABLISHED) -#define CHECK_PORT_BUFFER_SUPPLIER(port) (port->tunnelFlags & SEC_TUNNEL_IS_SUPPLIER) - -#endif diff --git a/sec_mm/sec_omx/sec_osal/Android.mk b/sec_mm/sec_omx/sec_osal/Android.mk deleted file mode 100644 index 3cecc21..0000000 --- a/sec_mm/sec_omx/sec_osal/Android.mk +++ /dev/null @@ -1,38 +0,0 @@ -LOCAL_PATH := $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := optional - -LOCAL_SRC_FILES := \ - SEC_OSAL_Event.c \ - SEC_OSAL_Queue.c \ - SEC_OSAL_ETC.c \ - SEC_OSAL_Mutex.c \ - SEC_OSAL_Thread.c \ - SEC_OSAL_Memory.c \ - SEC_OSAL_Semaphore.c \ - SEC_OSAL_Library.c \ - SEC_OSAL_Log.c \ - SEC_OSAL_Buffer.cpp - - -LOCAL_MODULE := libsecosal.aries - -LOCAL_CFLAGS := - -LOCAL_STATIC_LIBRARIES := - -LOCAL_SHARED_LIBRARIES := libcutils \ - libutils \ - libui \ - libhardware \ - libandroid_runtime - -LOCAL_C_INCLUDES := $(SEC_OMX_INC)/khronos \ - $(SEC_OMX_INC)/sec \ - $(SEC_OMX_TOP)/sec_osal \ - $(SEC_OMX_COMPONENT)/common \ - $(SEC_OMX_TOP)/../../include \ - $(TOP)/frameworks/native/include/media/hardware - -include $(BUILD_STATIC_LIBRARY) diff --git a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Buffer.cpp b/sec_mm/sec_omx/sec_osal/SEC_OSAL_Buffer.cpp deleted file mode 100644 index b28f702..0000000 --- a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Buffer.cpp +++ /dev/null @@ -1,456 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OSAL_Buffer.c - * @brief - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * Jinsung Yang (jsgood.yang@samsung.com) - * @version 1.0.2 - * @history - * 2011.5.15 : Create - */ - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include -#include - -#include "SEC_OMX_Def.h" -#include "SEC_OMX_Macros.h" -#include "SEC_OSAL_Memory.h" -#include "SEC_OSAL_Semaphore.h" -#include "SEC_OSAL_Buffer.h" -#include "SEC_OMX_Basecomponent.h" - -#define SEC_LOG_OFF -#include "SEC_OSAL_Log.h" - -#ifdef __cplusplus -} -#endif - -#include -#include -#include -#include -#include -#include -#include -#include "hal_public.h" - -#define HAL_PIXEL_FORMAT_C110_NV12 0x100 - -using namespace android; - - -struct AndroidNativeBuffersParams { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_U32 nPortIndex; -}; - -#ifdef USE_ANDROID_EXTENSION -OMX_ERRORTYPE checkVersionANB(OMX_PTR ComponentParameterStructure) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_VERSIONTYPE* version = NULL; - - - AndroidNativeBuffersParams *pANBP; - pANBP = (AndroidNativeBuffersParams *)ComponentParameterStructure; - - version = (OMX_VERSIONTYPE*)((char*)pANBP + sizeof(OMX_U32)); - if (*((OMX_U32*)pANBP) <= sizeof(AndroidNativeBuffersParams)) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - if (version->s.nVersionMajor != VERSIONMAJOR_NUMBER || - version->s.nVersionMinor != VERSIONMINOR_NUMBER) { - ret = OMX_ErrorVersionMismatch; - goto EXIT; - } - - ret = OMX_ErrorNone; - -EXIT: - return ret; -} - -OMX_U32 checkPortIndexANB(OMX_PTR ComponentParameterStructure) -{ - AndroidNativeBuffersParams *pANBP; - pANBP = (AndroidNativeBuffersParams *)ComponentParameterStructure; - - return pANBP->nPortIndex; -} - -OMX_U32 getMetadataBufferType(const uint8_t *ptr) -{ - OMX_U32 type = *(OMX_U32 *) ptr; - SEC_OSAL_Log(SEC_LOG_TRACE, "getMetadataBufferType: %ld", type); - return type; -} - -OMX_U32 getVADDRfromANB(OMX_PTR pUnreadableBuffer, OMX_U32 Width, OMX_U32 Height, void *pVirAddrs[]) -{ - OMX_U32 ret = 0; - android_native_buffer_t *buf; - void *readableBuffer; - GraphicBufferMapper &mapper = GraphicBufferMapper::get(); - Rect bounds(Width, Height); - - FunctionIn(); - - buf = (android_native_buffer_t *)pUnreadableBuffer; - SEC_OSAL_Log(SEC_LOG_TRACE, "pUnreadableBuffer:0x%x, buf:0x%x, buf->handle:0x%x", - pUnreadableBuffer, buf, buf->handle); - - ret = mapper.lock(buf->handle, GRALLOC_USAGE_SW_WRITE_OFTEN, bounds, pVirAddrs); - if (ret != 0) { - SEC_OSAL_Log(SEC_LOG_ERROR, "mapper.lock Error, Error code:%d", ret); - } - FunctionOut(); - - return ret; -} - -OMX_U32 putVADDRtoANB(OMX_PTR pUnreadableBuffer) -{ - android_native_buffer_t *buf; - void *readableBuffer; - int ret = 0; - GraphicBufferMapper &mapper = GraphicBufferMapper::get(); - - FunctionIn(); - - buf = (android_native_buffer_t *)pUnreadableBuffer; - - FunctionOut(); - - return mapper.unlock(buf->handle); -} - -OMX_ERRORTYPE enableAndroidNativeBuffer(OMX_HANDLETYPE hComponent, OMX_PTR ComponentParameterStructure) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_OMX_BASEPORT *pSECPort = NULL; - - EnableAndroidNativeBuffersParams *peanbp; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - peanbp = (EnableAndroidNativeBuffersParams *)ComponentParameterStructure; - pSECPort = &pSECComponent->pSECPort[peanbp->nPortIndex]; - - if (peanbp->enable == OMX_FALSE) { - SEC_OSAL_Log(SEC_LOG_TRACE, "disable AndroidNativeBuffer"); - pSECPort->bUseAndroidNativeBuffer = OMX_FALSE; - } else { - SEC_OSAL_Log(SEC_LOG_TRACE, "enable AndroidNativeBuffer"); - pSECPort->bUseAndroidNativeBuffer = OMX_TRUE; - pSECPort->portDefinition.format.video.eColorFormat = (OMX_COLOR_FORMATTYPE)OMX_SEC_COLOR_FormatANBYUV420SemiPlanar; - } - - ret = OMX_ErrorNone; - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE getAndroidNativeBuffer(OMX_HANDLETYPE hComponent, OMX_PTR ComponentParameterStructure) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_OMX_BASEPORT *pSECPort = NULL; - - GetAndroidNativeBufferUsageParams *pganbp; - - FunctionIn(); - - pganbp = (GetAndroidNativeBufferUsageParams *)ComponentParameterStructure; - - pganbp->nUsage = GRALLOC_USAGE_SW_WRITE_OFTEN; - - ret = OMX_ErrorNone; - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE UseBufferANB( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_INOUT OMX_BUFFERHEADERTYPE **ppBufferHdr, - OMX_IN OMX_U32 nPortIndex, - OMX_IN OMX_PTR pAppPrivate, - OMX_IN OMX_U32 nSizeBytes, - OMX_IN OMX_U8 *pBuffer) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_OMX_BASEPORT *pSECPort = NULL; - OMX_BUFFERHEADERTYPE *temp_bufferHeader = NULL; - int i = 0; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - pSECPort = &pSECComponent->pSECPort[nPortIndex]; - if (nPortIndex >= pSECComponent->portParam.nPorts) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - if (pSECPort->portState != OMX_StateIdle) { - ret = OMX_ErrorIncorrectStateOperation; - goto EXIT; - } - - if (CHECK_PORT_TUNNELED(pSECPort) && CHECK_PORT_BUFFER_SUPPLIER(pSECPort)) { - ret = OMX_ErrorBadPortIndex; - goto EXIT; - } - - temp_bufferHeader = (OMX_BUFFERHEADERTYPE *)SEC_OSAL_Malloc(sizeof(OMX_BUFFERHEADERTYPE)); - if (temp_bufferHeader == NULL) { - ret = OMX_ErrorInsufficientResources; - goto EXIT; - } - SEC_OSAL_Memset(temp_bufferHeader, 0, sizeof(OMX_BUFFERHEADERTYPE)); - - for (i = 0; i < pSECPort->portDefinition.nBufferCountActual; i++) { - if (pSECPort->bufferStateAllocate[i] == BUFFER_STATE_FREE) { - pSECPort->bufferHeader[i] = temp_bufferHeader; - pSECPort->bufferStateAllocate[i] = (BUFFER_STATE_ASSIGNED | HEADER_STATE_ALLOCATED); - INIT_SET_SIZE_VERSION(temp_bufferHeader, OMX_BUFFERHEADERTYPE); - temp_bufferHeader->pBuffer = pBuffer; - temp_bufferHeader->nAllocLen = nSizeBytes; - temp_bufferHeader->pAppPrivate = pAppPrivate; - if (nPortIndex == INPUT_PORT_INDEX) - temp_bufferHeader->nInputPortIndex = INPUT_PORT_INDEX; - else - temp_bufferHeader->nOutputPortIndex = OUTPUT_PORT_INDEX; - - pSECPort->assignedBufferNum++; - if (pSECPort->assignedBufferNum == pSECPort->portDefinition.nBufferCountActual) { - pSECPort->portDefinition.bPopulated = OMX_TRUE; - /* SEC_OSAL_MutexLock(pSECComponent->compMutex); */ - SEC_OSAL_SemaphorePost(pSECPort->loadedResource); - /* SEC_OSAL_MutexUnlock(pSECComponent->compMutex); */ - } - *ppBufferHdr = temp_bufferHeader; - ret = OMX_ErrorNone; - goto EXIT; - } - } - - SEC_OSAL_Free(temp_bufferHeader); - ret = OMX_ErrorInsufficientResources; - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE useAndroidNativeBuffer(OMX_HANDLETYPE hComponent, OMX_PTR ComponentParameterStructure) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_OMX_BASEPORT *pSECPort = NULL; - OMX_U32 frameSize = 0; - OMX_U32 bufWidth, bufHeight; - UseAndroidNativeBufferParams *puanbp; - - FunctionIn(); - - puanbp = (UseAndroidNativeBufferParams *)ComponentParameterStructure; - - OMX_PTR buffer = (void *)puanbp->nativeBuffer.get(); - android_native_buffer_t *buf = (android_native_buffer_t *)buffer; - bufWidth = ((buf->width + 15) / 16) * 16; - bufHeight = ((buf->height + 15) / 16) * 16; - frameSize = (bufWidth * bufHeight * 3) / 2; - SEC_OSAL_Log(SEC_LOG_TRACE, "buffer:0x%x, buf:0x%x, buf->handle:0x%x", buffer, buf, buf->handle); - - ret = UseBufferANB(hComponent, puanbp->bufferHeader, puanbp->nPortIndex, - puanbp->pAppPrivate, frameSize, (OMX_U8 *)buffer); - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE enableStoreMetaDataInBuffers(OMX_HANDLETYPE hComponent, OMX_PTR ComponentParameterStructure) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_OMX_BASEPORT *pSECPort = NULL; - - StoreMetaDataInBuffersParams *pStoreMetaData; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - pStoreMetaData = (StoreMetaDataInBuffersParams*)ComponentParameterStructure; - pSECPort = &pSECComponent->pSECPort[pStoreMetaData->nPortIndex]; - - if (pStoreMetaData->bStoreMetaData == OMX_FALSE) { - SEC_OSAL_Log(SEC_LOG_TRACE, "disable StoreMetaDataInBuffers"); - pSECPort->bStoreMetaDataInBuffer = OMX_FALSE; - } else { - SEC_OSAL_Log(SEC_LOG_TRACE, "enable StoreMetaDataInBuffers"); - pSECPort->bStoreMetaDataInBuffer = OMX_TRUE; - } - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_BOOL isMetadataBufferTypeGrallocSource(OMX_BYTE pInputDataBuffer) -{ - OMX_U32 type = getMetadataBufferType(pInputDataBuffer); - - if (type == kMetadataBufferTypeGrallocSource) - return OMX_TRUE; - else - return OMX_FALSE; -} - -OMX_ERRORTYPE preprocessMetaDataInBuffers(OMX_HANDLETYPE hComponent, OMX_BYTE pInputDataBuffer, BUFFER_ADDRESS_INFO *pInputInfo) -{ - OMX_ERRORTYPE ret = OMX_ErrorNone; - OMX_COMPONENTTYPE *pOMXComponent = NULL; - SEC_OMX_BASECOMPONENT *pSECComponent = NULL; - SEC_OMX_BASEPORT *pSECPort = NULL; - OMX_U32 type = 0; - - FunctionIn(); - - if (hComponent == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; - if (pOMXComponent->pComponentPrivate == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - pSECPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; - - type = getMetadataBufferType(pInputDataBuffer); - if (type == kMetadataBufferTypeCameraSource) { - SEC_OSAL_Memcpy(&pInputInfo->YPhyAddr, pInputDataBuffer + 4, sizeof(void *)); - SEC_OSAL_Memcpy(&pInputInfo->CPhyAddr, pInputDataBuffer + 4 + sizeof(void *), sizeof(void *)); - } else if (type == kMetadataBufferTypeGrallocSource){ - IMG_gralloc_module_public_t *module = (IMG_gralloc_module_public_t *)pSECPort->pIMGGrallocModule; - OMX_PTR pUnreadableBuffer = NULL; - OMX_PTR pReadableBuffer = NULL; - OMX_PTR pVirAddrs[3]; - int err = 0; - - pVirAddrs[0] = pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.YVirAddr; - pVirAddrs[1] = pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.CVirAddr; - pVirAddrs[2] = NULL; - - if (module == NULL) { - err = hw_get_module(GRALLOC_HARDWARE_MODULE_ID, (const hw_module_t **)&module); - if(err) { - SEC_OSAL_Log(SEC_LOG_ERROR, "hw_get_module failed (err=%d)\n", err); - ret = OMX_ErrorUndefined; - goto EXIT; - } - pSECPort->pIMGGrallocModule = (OMX_PTR)module; - } - - /**************************************/ - /* IMG CSC RGB to NV12 */ - /**************************************/ - buffer_handle_t buf = *((buffer_handle_t *) (pInputDataBuffer + 4)); - SEC_OSAL_Log(SEC_LOG_TRACE, "buffer handle %p)\n", buf); - err = module->Blit(module, buf, pVirAddrs, HAL_PIXEL_FORMAT_C110_NV12); - if(err) { - SEC_OSAL_Log(SEC_LOG_ERROR, "module->Blit() failed (err=%d)\n", err); - ret = OMX_ErrorUndefined; - goto EXIT; - } - - pInputInfo->YPhyAddr = pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.YPhyAddr; - pInputInfo->CPhyAddr = pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.CPhyAddr; - } else { - ret = OMX_ErrorNotImplemented; - goto EXIT; - } - -EXIT: - FunctionOut(); - - return ret; -} - -int isTvOutEnabled() { - char value[PROPERTY_VALUE_MAX]; - property_get("init.svc.tvouthack", value, ""); - return (strcmp(value, "running") == 0); -} - -#endif diff --git a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Buffer.h b/sec_mm/sec_omx/sec_osal/SEC_OSAL_Buffer.h deleted file mode 100644 index 4ab32a3..0000000 --- a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Buffer.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OSAL_Buffer.h - * @brief - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * Jinsung Yang (jsgood.yang@samsung.com) - * @version 1.0.2 - * @history - * 2011.5.15 : Create - */ - -#ifndef SEC_OSAL_BUFFER -#define SEC_OSAL_BUFFER - -#ifdef __cplusplus -extern "C" { -#endif - -#include "OMX_Types.h" - -typedef struct { - void *YPhyAddr; // [IN/OUT] physical address of Y - void *CPhyAddr; // [IN/OUT] physical address of CbCr - void *YVirAddr; // [IN/OUT] virtual address of Y - void *CVirAddr; // [IN/OUT] virtual address of CbCr - int YSize; // [IN/OUT] input size of Y data - int CSize; // [IN/OUT] input size of CbCr data -} BUFFER_ADDRESS_INFO; - - -OMX_ERRORTYPE checkVersionANB(OMX_PTR ComponentParameterStructure); -OMX_U32 checkPortIndexANB(OMX_PTR ComponentParameterStructure); -OMX_U32 getMetadataBufferType(const uint8_t *ptr); -OMX_ERRORTYPE enableAndroidNativeBuffer(OMX_HANDLETYPE hComponent, OMX_PTR ComponentParameterStructure); -OMX_ERRORTYPE getAndroidNativeBuffer(OMX_HANDLETYPE hComponent, OMX_PTR ComponentParameterStructure); -OMX_ERRORTYPE useAndroidNativeBuffer(OMX_HANDLETYPE hComponent, OMX_PTR ComponentParameterStructure); -OMX_U32 getVADDRfromANB(OMX_PTR pUnreadableBuffer, OMX_U32 Width, OMX_U32 Height, void *vaddress[]); -OMX_U32 putVADDRtoANB(OMX_PTR pUnreadableBuffer); -OMX_ERRORTYPE enableStoreMetaDataInBuffers(OMX_HANDLETYPE hComponent, OMX_PTR ComponentParameterStructure); -OMX_BOOL isMetadataBufferTypeGrallocSource(OMX_BYTE pInputDataBuffer); -OMX_ERRORTYPE preprocessMetaDataInBuffers(OMX_HANDLETYPE hComponent, OMX_BYTE pInputDataBuffer, BUFFER_ADDRESS_INFO *pInputInfo); - -int isTvOutEnabled(); - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/sec_mm/sec_omx/sec_osal/SEC_OSAL_ETC.c b/sec_mm/sec_omx/sec_osal/SEC_OSAL_ETC.c deleted file mode 100644 index 66f8355..0000000 --- a/sec_mm/sec_omx/sec_osal/SEC_OSAL_ETC.c +++ /dev/null @@ -1,144 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OSAL_ETC.c - * @brief - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#include -#include -#include - -#include "SEC_OSAL_Memory.h" -#include "SEC_OSAL_ETC.h" - - -#ifndef HAVE_GETLINE -ssize_t getline(char **ppLine, size_t *pLen, FILE *pStream) -{ - char *pCurrentPointer = NULL; - size_t const chunk = 512; - - size_t defaultBufferSize = chunk + 1; - size_t retSize = 0; - - if (*ppLine == NULL) { - *ppLine = (char *)malloc(defaultBufferSize); - if (*ppLine == NULL) { - retSize = -1; - goto EXIT; - } - *pLen = defaultBufferSize; - } - else { - if (*pLen < defaultBufferSize) { - *ppLine = (char *)realloc(*ppLine, defaultBufferSize); - if (*ppLine == NULL) { - retSize = -1; - goto EXIT; - } - *pLen = defaultBufferSize; - } - } - - while (1) { - size_t i; - size_t j = 0; - size_t readByte = 0; - - pCurrentPointer = *ppLine + readByte; - - i = fread(pCurrentPointer, 1, chunk, pStream); - if (i < chunk && ferror(pStream)) { - retSize = -1; - goto EXIT; - } - while (j < i) { - ++j; - if (*pCurrentPointer++ == (char)'\n') { - *pCurrentPointer = '\0'; - if (j != i) { - if (fseek(pStream, j - i, SEEK_CUR)) { - retSize = -1; - goto EXIT; - } - if (feof(pStream)) - clearerr(pStream); - } - readByte += j; - retSize = readByte; - goto EXIT; - } - } - - readByte += j; - if (feof(pStream)) { - if (readByte) { - retSize = readByte; - goto EXIT; - } - if (!i) { - retSize = -1; - goto EXIT; - } - } - - i = ((readByte + (chunk * 2)) / chunk) * chunk; - if (i != *pLen) { - *ppLine = (char *)realloc(*ppLine, i); - if (*ppLine == NULL) { - retSize = -1; - goto EXIT; - } - *pLen = i; - } - } - -EXIT: - return retSize; -} -#endif /* HAVE_GETLINE */ - -OMX_PTR SEC_OSAL_Strcpy(OMX_PTR dest, OMX_PTR src) -{ - return strcpy(dest, src); -} - -OMX_PTR SEC_OSAL_Strncpy(OMX_PTR dest, OMX_PTR src, size_t num) -{ - return strncpy(dest, src, num); -} - -OMX_S32 SEC_OSAL_Strcmp(OMX_PTR str1, OMX_PTR str2) -{ - return strcmp(str1, str2); -} - -OMX_PTR SEC_OSAL_Strcat(OMX_PTR dest, OMX_PTR src) -{ - return strcat(dest, src); -} - -size_t SEC_OSAL_Strlen(const char *str) -{ - return strlen(str); -} diff --git a/sec_mm/sec_omx/sec_osal/SEC_OSAL_ETC.h b/sec_mm/sec_omx/sec_osal/SEC_OSAL_ETC.h deleted file mode 100644 index 6c6ede7..0000000 --- a/sec_mm/sec_omx/sec_osal/SEC_OSAL_ETC.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OSAL_ETC.h - * @brief - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#ifndef SEC_OSAL_ETC -#define SEC_OSAL_ETC - -#include "OMX_Types.h" - - -#ifdef __cplusplus -extern "C" { -#endif - -OMX_PTR SEC_OSAL_Strcpy(OMX_PTR dest, OMX_PTR src); -OMX_PTR SEC_OSAL_Strncpy(OMX_PTR dest, OMX_PTR src, size_t num); -OMX_S32 SEC_OSAL_Strcmp(OMX_PTR str1, OMX_PTR str2); -OMX_PTR SEC_OSAL_Strcat(OMX_PTR dest, OMX_PTR src); -size_t SEC_OSAL_Strlen(const char *str); -ssize_t getline(char **ppLine, size_t *len, FILE *stream); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Event.c b/sec_mm/sec_omx/sec_osal/SEC_OSAL_Event.c deleted file mode 100644 index 51b3ca2..0000000 --- a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Event.c +++ /dev/null @@ -1,217 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -*/ - -/* - * @file SEC_OSAL_Event.c - * @brief - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - - -#include -#include -#include -#include -#include - -#include "SEC_OSAL_Memory.h" -#include "SEC_OSAL_Mutex.h" -#include "SEC_OSAL_Event.h" - -#undef SEC_LOG_TAG -#define SEC_LOG_TAG "SEC_OSAL_EVENT" -#define SEC_LOG_OFF -#include "SEC_OSAL_Log.h" - - -OMX_ERRORTYPE SEC_OSAL_SignalCreate(OMX_HANDLETYPE *eventHandle) -{ - SEC_OSAL_THREADEVENT *event; - OMX_ERRORTYPE ret = OMX_ErrorNone; - - event = (SEC_OSAL_THREADEVENT *)SEC_OSAL_Malloc(sizeof(SEC_OSAL_THREADEVENT)); - if (!event) { - ret = OMX_ErrorInsufficientResources; - goto EXIT; - } - - SEC_OSAL_Memset(event, 0, sizeof(SEC_OSAL_THREADEVENT)); - event->signal = OMX_FALSE; - - ret = SEC_OSAL_MutexCreate(&event->mutex); - if (ret != OMX_ErrorNone) { - SEC_OSAL_Free(event); - goto EXIT; - } - - if (pthread_cond_init(&event->condition, NULL)) { - SEC_OSAL_MutexTerminate(event->mutex); - SEC_OSAL_Free(event); - ret = OMX_ErrorUndefined; - goto EXIT; - } - - *eventHandle = (OMX_HANDLETYPE)event; - ret = OMX_ErrorNone; - -EXIT: - return ret; -} - -OMX_ERRORTYPE SEC_OSAL_SignalTerminate(OMX_HANDLETYPE eventHandle) -{ - SEC_OSAL_THREADEVENT *event = (SEC_OSAL_THREADEVENT *)eventHandle; - OMX_ERRORTYPE ret = OMX_ErrorNone; - - if (!event) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - - ret = SEC_OSAL_MutexLock(event->mutex); - if (ret != OMX_ErrorNone) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - - if (pthread_cond_destroy(&event->condition)) { - ret = OMX_ErrorUndefined; - goto EXIT; - } - - ret = SEC_OSAL_MutexUnlock(event->mutex); - if (ret != OMX_ErrorNone) { - ret = OMX_ErrorUndefined; - goto EXIT; - } - - ret = SEC_OSAL_MutexTerminate(event->mutex); - if (ret != OMX_ErrorNone) { - ret = OMX_ErrorUndefined; - goto EXIT; - } - - SEC_OSAL_Free(event); - -EXIT: - return ret; -} - -OMX_ERRORTYPE SEC_OSAL_SignalReset(OMX_HANDLETYPE eventHandle) -{ - SEC_OSAL_THREADEVENT *event = (SEC_OSAL_THREADEVENT *)eventHandle; - OMX_ERRORTYPE ret = OMX_ErrorNone; - - if (!event) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - - ret = SEC_OSAL_MutexLock(event->mutex); - if (ret != OMX_ErrorNone) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - - event->signal = OMX_FALSE; - - SEC_OSAL_MutexUnlock(event->mutex); - -EXIT: - return ret; -} - -OMX_ERRORTYPE SEC_OSAL_SignalSet(OMX_HANDLETYPE eventHandle) -{ - SEC_OSAL_THREADEVENT *event = (SEC_OSAL_THREADEVENT *)eventHandle; - OMX_ERRORTYPE ret = OMX_ErrorNone; - - if (!event) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - - ret = SEC_OSAL_MutexLock(event->mutex); - if (ret != OMX_ErrorNone) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - - event->signal = OMX_TRUE; - pthread_cond_signal(&event->condition); - - SEC_OSAL_MutexUnlock(event->mutex); - -EXIT: - return ret; -} - -OMX_ERRORTYPE SEC_OSAL_SignalWait(OMX_HANDLETYPE eventHandle, OMX_U32 ms) -{ - SEC_OSAL_THREADEVENT *event = (SEC_OSAL_THREADEVENT *)eventHandle; - OMX_ERRORTYPE ret = OMX_ErrorNone; - struct timespec timeout; - struct timeval now; - int funcret = 0; - OMX_U32 tv_us; - - FunctionIn(); - - if (!event) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - - gettimeofday(&now, NULL); - - tv_us = now.tv_usec + ms * 1000; - timeout.tv_sec = now.tv_sec + tv_us / 1000000; - timeout.tv_nsec = (tv_us % 1000000) * 1000; - - ret = SEC_OSAL_MutexLock(event->mutex); - if (ret != OMX_ErrorNone) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - - if (ms == 0) { - if (!event->signal) - ret = OMX_ErrorTimeout; - } else if (ms == DEF_MAX_WAIT_TIME) { - while (!event->signal) - pthread_cond_wait(&event->condition, (pthread_mutex_t *)(event->mutex)); - ret = OMX_ErrorNone; - } else { - while (!event->signal) { - funcret = pthread_cond_timedwait(&event->condition, (pthread_mutex_t *)(event->mutex), &timeout); - if ((!event->signal) && (funcret == ETIMEDOUT)) { - ret = OMX_ErrorTimeout; - break; - } - } - } - - SEC_OSAL_MutexUnlock(event->mutex); - -EXIT: - FunctionOut(); - - return ret; -} diff --git a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Event.h b/sec_mm/sec_omx/sec_osal/SEC_OSAL_Event.h deleted file mode 100644 index 640d2cc..0000000 --- a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Event.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OSAL_Event.h - * @brief - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#ifndef SEC_OSAL_EVENT -#define SEC_OSAL_EVENT - -#include -#include "OMX_Types.h" -#include "OMX_Core.h" - - -#define DEF_MAX_WAIT_TIME 0xFFFFFFFF - -typedef struct _SEC_OSAL_THREADEVENT -{ - OMX_BOOL signal; - OMX_HANDLETYPE mutex; - pthread_cond_t condition; -} SEC_OSAL_THREADEVENT; - - -#ifdef __cplusplus -extern "C" { -#endif - - -OMX_ERRORTYPE SEC_OSAL_SignalCreate(OMX_HANDLETYPE *eventHandle); -OMX_ERRORTYPE SEC_OSAL_SignalTerminate(OMX_HANDLETYPE eventHandle); -OMX_ERRORTYPE SEC_OSAL_SignalReset(OMX_HANDLETYPE eventHandle); -OMX_ERRORTYPE SEC_OSAL_SignalSet(OMX_HANDLETYPE eventHandle); -OMX_ERRORTYPE SEC_OSAL_SignalWait(OMX_HANDLETYPE eventHandle, OMX_U32 ms); - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Library.c b/sec_mm/sec_omx/sec_osal/SEC_OSAL_Library.c deleted file mode 100644 index 06ac712..0000000 --- a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Library.c +++ /dev/null @@ -1,54 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OSAL_Library.c - * @brief - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - - -#include -#include -#include -#include - -#include "SEC_OSAL_Library.h" - - -void *SEC_OSAL_dlopen(const char *filename, int flag) -{ - return dlopen(filename, flag); -} - -void *SEC_OSAL_dlsym(void *handle, const char *symbol) -{ - return dlsym(handle, symbol); -} - -int SEC_OSAL_dlclose(void *handle) -{ - return dlclose(handle); -} - -const char *SEC_OSAL_dlerror(void) -{ - return dlerror(); -} diff --git a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Library.h b/sec_mm/sec_omx/sec_osal/SEC_OSAL_Library.h deleted file mode 100644 index 687cecd..0000000 --- a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Library.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OSAL_Library.h - * @brief - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#ifndef SEC_OSAL_LIBRARY -#define SEC_OSAL_LIBRARY - -#include "OMX_Types.h" - - -#ifdef __cplusplus -extern "C" { -#endif - -void *SEC_OSAL_dlopen(const char *filename, int flag); -void *SEC_OSAL_dlsym(void *handle, const char *symbol); -int SEC_OSAL_dlclose(void *handle); -const char *SEC_OSAL_dlerror(void); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Log.c b/sec_mm/sec_omx/sec_osal/SEC_OSAL_Log.c deleted file mode 100644 index bae4974..0000000 --- a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Log.c +++ /dev/null @@ -1,53 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OSAL_Log.c - * @brief - * @author Yunji Kim (yunji.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#include - -#include "SEC_OSAL_Log.h" - - -void _SEC_OSAL_Log(SEC_LOG_LEVEL logLevel, const char *tag, const char *msg, ...) -{ - va_list argptr; - - va_start(argptr, msg); - - switch (logLevel) { - case SEC_LOG_TRACE: - __android_log_vprint(ANDROID_LOG_DEBUG, tag, msg, argptr); - break; - case SEC_LOG_WARNING: - __android_log_vprint(ANDROID_LOG_WARN, tag, msg, argptr); - break; - case SEC_LOG_ERROR: - __android_log_vprint(ANDROID_LOG_ERROR, tag, msg, argptr); - break; - default: - __android_log_vprint(ANDROID_LOG_VERBOSE, tag, msg, argptr); - } - - va_end(argptr); -} diff --git a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Log.h b/sec_mm/sec_omx/sec_osal/SEC_OSAL_Log.h deleted file mode 100644 index 2f8a6ce..0000000 --- a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Log.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OSAL_Log.h - * @brief - * @author Yunji Kim (yunji.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - * 2010.8.27 : Add trace function - */ - -#ifndef SEC_OSAL_LOG -#define SEC_OSAL_LOG - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef SEC_LOG_OFF -#define SEC_LOG -#endif - -#ifndef SEC_LOG_TAG -#define SEC_LOG_TAG "SEC_LOG" -#endif - -#ifdef SEC_TRACE_ON -#define SEC_TRACE -#endif - -typedef enum _LOG_LEVEL -{ - SEC_LOG_TRACE, - SEC_LOG_WARNING, - SEC_LOG_ERROR -} SEC_LOG_LEVEL; - -#ifdef SEC_LOG -#define SEC_OSAL_Log(a, ...) ((void)_SEC_OSAL_Log(a, SEC_LOG_TAG, __VA_ARGS__)) -#else -#define SEC_OSAL_Log(a, ...) \ - do { \ - if (a == SEC_LOG_ERROR) \ - ((void)_SEC_OSAL_Log(a, SEC_LOG_TAG, __VA_ARGS__)); \ - } while (0) -#endif - -#ifdef SEC_TRACE -#define FunctionIn() _SEC_OSAL_Log(SEC_LOG_TRACE, SEC_LOG_TAG, "%s In , Line: %d", __FUNCTION__, __LINE__) -#define FunctionOut() _SEC_OSAL_Log(SEC_LOG_TRACE, SEC_LOG_TAG, "%s Out , Line: %d", __FUNCTION__, __LINE__) -#else -#define FunctionIn() ((void *)0) -#define FunctionOut() ((void *)0) -#endif - -extern void _SEC_OSAL_Log(SEC_LOG_LEVEL logLevel, const char *tag, const char *msg, ...); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Memory.c b/sec_mm/sec_omx/sec_osal/SEC_OSAL_Memory.c deleted file mode 100644 index 3579d92..0000000 --- a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Memory.c +++ /dev/null @@ -1,71 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OSAL_Memory.c - * @brief - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#include -#include -#include - -#include "SEC_OSAL_Memory.h" - -#define SEC_LOG_OFF -#include "SEC_OSAL_Log.h" - - -static int mem_cnt = 0; - -OMX_PTR SEC_OSAL_Malloc(OMX_U32 size) -{ - mem_cnt++; - SEC_OSAL_Log(SEC_LOG_TRACE, "alloc count: %d", mem_cnt); - - return (OMX_PTR)malloc(size); -} - -void SEC_OSAL_Free(OMX_PTR addr) -{ - mem_cnt--; - SEC_OSAL_Log(SEC_LOG_TRACE, "free count: %d", mem_cnt); - - if (addr) - free(addr); - - return; -} - -OMX_PTR SEC_OSAL_Memset(OMX_PTR dest, OMX_S32 c, OMX_S32 n) -{ - return memset(dest, c, n); -} - -OMX_PTR SEC_OSAL_Memcpy(OMX_PTR dest, OMX_PTR src, OMX_S32 n) -{ - return memcpy(dest, src, n); -} - -OMX_PTR SEC_OSAL_Memmove(OMX_PTR dest, OMX_PTR src, OMX_S32 n) -{ - return memmove(dest, src, n); -} diff --git a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Memory.h b/sec_mm/sec_omx/sec_osal/SEC_OSAL_Memory.h deleted file mode 100644 index 3a12838..0000000 --- a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Memory.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OSAL_Memory.h - * @brief - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#ifndef SEC_OSAL_MEMORY -#define SEC_OSAL_MEMORY - -#include "OMX_Types.h" - - -#ifdef __cplusplus -extern "C" { -#endif - -OMX_PTR SEC_OSAL_Malloc(OMX_U32 size); -void SEC_OSAL_Free(OMX_PTR addr); -OMX_PTR SEC_OSAL_Memset(OMX_PTR dest, OMX_S32 c, OMX_S32 n); -OMX_PTR SEC_OSAL_Memcpy(OMX_PTR dest, OMX_PTR src, OMX_S32 n); - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Mutex.c b/sec_mm/sec_omx/sec_osal/SEC_OSAL_Mutex.c deleted file mode 100644 index 146809c..0000000 --- a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Mutex.c +++ /dev/null @@ -1,91 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OSAL_Mutex.c - * @brief - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#include -#include -#include -#include - -#include "SEC_OSAL_Memory.h" -#include "SEC_OSAL_Mutex.h" - - -OMX_ERRORTYPE SEC_OSAL_MutexCreate(OMX_HANDLETYPE *mutexHandle) -{ - pthread_mutex_t *mutex; - - mutex = (pthread_mutex_t *)SEC_OSAL_Malloc(sizeof(pthread_mutex_t)); - if (!mutex) - return OMX_ErrorInsufficientResources; - - if (pthread_mutex_init(mutex, NULL) != 0) - return OMX_ErrorUndefined; - - *mutexHandle = (OMX_HANDLETYPE)mutex; - return OMX_ErrorNone; -} - -OMX_ERRORTYPE SEC_OSAL_MutexTerminate(OMX_HANDLETYPE mutexHandle) -{ - pthread_mutex_t *mutex = (pthread_mutex_t *)mutexHandle; - - if (mutex == NULL) - return OMX_ErrorBadParameter; - - if (pthread_mutex_destroy(mutex) != 0) - return OMX_ErrorUndefined; - - SEC_OSAL_Free(mutex); - return OMX_ErrorNone; -} - -OMX_ERRORTYPE SEC_OSAL_MutexLock(OMX_HANDLETYPE mutexHandle) -{ - pthread_mutex_t *mutex = (pthread_mutex_t *)mutexHandle; - int result; - - if (mutex == NULL) - return OMX_ErrorBadParameter; - - if (pthread_mutex_lock(mutex) != 0) - return OMX_ErrorUndefined; - - return OMX_ErrorNone; -} - -OMX_ERRORTYPE SEC_OSAL_MutexUnlock(OMX_HANDLETYPE mutexHandle) -{ - pthread_mutex_t *mutex = (pthread_mutex_t *)mutexHandle; - int result; - - if (mutex == NULL) - return OMX_ErrorBadParameter; - - if (pthread_mutex_unlock(mutex) != 0) - return OMX_ErrorUndefined; - - return OMX_ErrorNone; -} diff --git a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Mutex.h b/sec_mm/sec_omx/sec_osal/SEC_OSAL_Mutex.h deleted file mode 100644 index 70dcd9d..0000000 --- a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Mutex.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OSAL_Mutex.h - * @brief - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create -*/ - -#ifndef SEC_OSAL_MUTEX -#define SEC_OSAL_MUTEX - -#include "OMX_Types.h" -#include "OMX_Core.h" - - -#ifdef __cplusplus -extern "C" { -#endif - -OMX_ERRORTYPE SEC_OSAL_MutexCreate(OMX_HANDLETYPE *mutexHandle); -OMX_ERRORTYPE SEC_OSAL_MutexTerminate(OMX_HANDLETYPE mutexHandle); -OMX_ERRORTYPE SEC_OSAL_MutexLock(OMX_HANDLETYPE mutexHandle); -OMX_ERRORTYPE SEC_OSAL_MutexUnlock(OMX_HANDLETYPE mutexHandle); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Queue.c b/sec_mm/sec_omx/sec_osal/SEC_OSAL_Queue.c deleted file mode 100644 index 7a6c024..0000000 --- a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Queue.c +++ /dev/null @@ -1,174 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OSAL_Queue.c - * @brief - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - - -#include -#include -#include - -#include "SEC_OSAL_Memory.h" -#include "SEC_OSAL_Mutex.h" -#include "SEC_OSAL_Queue.h" - - -OMX_ERRORTYPE SEC_OSAL_QueueCreate(SEC_QUEUE *queueHandle) -{ - int i = 0; - SEC_QElem *newqelem = NULL; - SEC_QElem *currentqelem = NULL; - SEC_QUEUE *queue = (SEC_QUEUE *)queueHandle; - - OMX_ERRORTYPE ret = OMX_ErrorNone; - - if (!queue) - return OMX_ErrorBadParameter; - - ret = SEC_OSAL_MutexCreate(&queue->qMutex); - if (ret != OMX_ErrorNone) - return ret; - - queue->first = (SEC_QElem *)SEC_OSAL_Malloc(sizeof(SEC_QElem)); - if (queue->first == NULL) - return OMX_ErrorInsufficientResources; - - SEC_OSAL_Memset(queue->first, 0, sizeof(SEC_QElem)); - currentqelem = queue->last = queue->first; - queue->numElem = 0; - - for (i = 0; i < (MAX_QUEUE_ELEMENTS - 2); i++) { - newqelem = (SEC_QElem *)SEC_OSAL_Malloc(sizeof(SEC_QElem)); - if (newqelem == NULL) { - while (queue->first != NULL) { - currentqelem = queue->first->qNext; - SEC_OSAL_Free((OMX_PTR)queue->first); - queue->first = currentqelem; - } - return OMX_ErrorInsufficientResources; - } else { - SEC_OSAL_Memset(newqelem, 0, sizeof(SEC_QElem)); - currentqelem->qNext = newqelem; - currentqelem = newqelem; - } - } - - currentqelem->qNext = queue->first; - - return OMX_ErrorNone; -} - -OMX_ERRORTYPE SEC_OSAL_QueueTerminate(SEC_QUEUE *queueHandle) -{ - int i = 0; - SEC_QElem *currentqelem = NULL; - SEC_QUEUE *queue = (SEC_QUEUE *)queueHandle; - OMX_ERRORTYPE ret = OMX_ErrorNone; - - if (!queue) - return OMX_ErrorBadParameter; - - for ( i = 0; i < (MAX_QUEUE_ELEMENTS - 2); i++) { - currentqelem = queue->first->qNext; - SEC_OSAL_Free(queue->first); - queue->first = currentqelem; - } - - if(queue->first) { - SEC_OSAL_Free(queue->first); - queue->first = NULL; - } - - ret = SEC_OSAL_MutexTerminate(queue->qMutex); - - return ret; -} - -int SEC_OSAL_Queue(SEC_QUEUE *queueHandle, void *data) -{ - SEC_QUEUE *queue = (SEC_QUEUE *)queueHandle; - if (queue == NULL) - return -1; - - SEC_OSAL_MutexLock(queue->qMutex); - - if ((queue->last->data != NULL) || (queue->numElem >= MAX_QUEUE_ELEMENTS)) { - SEC_OSAL_MutexUnlock(queue->qMutex); - return -1; - } - queue->last->data = data; - queue->last = queue->last->qNext; - queue->numElem++; - - SEC_OSAL_MutexUnlock(queue->qMutex); - return 0; -} - -void *SEC_OSAL_Dequeue(SEC_QUEUE *queueHandle) -{ - void *data = NULL; - SEC_QUEUE *queue = (SEC_QUEUE *)queueHandle; - if (queue == NULL) - return NULL; - - SEC_OSAL_MutexLock(queue->qMutex); - - if ((queue->first->data == NULL) || (queue->numElem <= 0)) { - SEC_OSAL_MutexUnlock(queue->qMutex); - return NULL; - } - data = queue->first->data; - queue->first->data = NULL; - queue->first = queue->first->qNext; - queue->numElem--; - - SEC_OSAL_MutexUnlock(queue->qMutex); - return data; -} - -int SEC_OSAL_GetElemNum(SEC_QUEUE *queueHandle) -{ - int ElemNum = 0; - SEC_QUEUE *queue = (SEC_QUEUE *)queueHandle; - if (queue == NULL) - return -1; - - SEC_OSAL_MutexLock(queue->qMutex); - ElemNum = queue->numElem; - SEC_OSAL_MutexUnlock(queue->qMutex); - return ElemNum; -} - -int SEC_OSAL_SetElemNum(SEC_QUEUE *queueHandle, int ElemNum) -{ - SEC_QUEUE *queue = (SEC_QUEUE *)queueHandle; - if (queue == NULL) - return -1; - - SEC_OSAL_MutexLock(queue->qMutex); - queue->numElem = ElemNum; - SEC_OSAL_MutexUnlock(queue->qMutex); - return ElemNum; -} - diff --git a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Queue.h b/sec_mm/sec_omx/sec_osal/SEC_OSAL_Queue.h deleted file mode 100644 index 3f0938f..0000000 --- a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Queue.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OSAL_Queue.h - * @brief - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#ifndef SEC_OSAL_QUEUE -#define SEC_OSAL_QUEUE - -#include "OMX_Types.h" -#include "OMX_Core.h" - - -#define MAX_QUEUE_ELEMENTS 10 - -typedef struct _SEC_QElem -{ - void *data; - struct _SEC_QElem *qNext; -} SEC_QElem; - -typedef struct _SEC_QUEUE -{ - SEC_QElem *first; - SEC_QElem *last; - int numElem; - OMX_HANDLETYPE qMutex; -} SEC_QUEUE; - - -#ifdef __cplusplus -extern "C" { -#endif - -OMX_ERRORTYPE SEC_OSAL_QueueCreate(SEC_QUEUE *queueHandle); -OMX_ERRORTYPE SEC_OSAL_QueueTerminate(SEC_QUEUE *queueHandle); -int SEC_OSAL_Queue(SEC_QUEUE *queueHandle, void *data); -void *SEC_OSAL_Dequeue(SEC_QUEUE *queueHandle); -int SEC_OSAL_GetElemNum(SEC_QUEUE *queueHandle); -int SEC_OSAL_SetElemNum(SEC_QUEUE *queueHandle, int ElemNum); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Semaphore.c b/sec_mm/sec_omx/sec_osal/SEC_OSAL_Semaphore.c deleted file mode 100644 index 94bc9c8..0000000 --- a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Semaphore.c +++ /dev/null @@ -1,132 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OSAL_Semaphore.c - * @brief - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#include -#include -#include -#include -#include - -#include "SEC_OSAL_Memory.h" -#include "SEC_OSAL_Semaphore.h" - -#undef SEC_LOG_TAG -#define SEC_LOG_TAG "SEC_LOG_SEMA" -#define SEC_LOG_OFF -#include "SEC_OSAL_Log.h" - - -OMX_ERRORTYPE SEC_OSAL_SemaphoreCreate(OMX_HANDLETYPE *semaphoreHandle) -{ - sem_t *sema; - - sema = (sem_t *)SEC_OSAL_Malloc(sizeof(sem_t)); - if (!sema) - return OMX_ErrorInsufficientResources; - - if (sem_init(sema, 0, 0) != 0) - return OMX_ErrorUndefined; - - *semaphoreHandle = (OMX_HANDLETYPE)sema; - return OMX_ErrorNone; -} - -OMX_ERRORTYPE SEC_OSAL_SemaphoreTerminate(OMX_HANDLETYPE semaphoreHandle) -{ - sem_t *sema = (sem_t *)semaphoreHandle; - - if (sema == NULL) - return OMX_ErrorBadParameter; - - if (sem_destroy(sema) != 0) - return OMX_ErrorUndefined; - - SEC_OSAL_Free(sema); - return OMX_ErrorNone; -} - -OMX_ERRORTYPE SEC_OSAL_SemaphoreWait(OMX_HANDLETYPE semaphoreHandle) -{ - sem_t *sema = (sem_t *)semaphoreHandle; - - FunctionIn(); - - if (sema == NULL) - return OMX_ErrorBadParameter; - - if (sem_wait(sema) != 0) - return OMX_ErrorUndefined; - - FunctionOut(); - - return OMX_ErrorNone; -} - -OMX_ERRORTYPE SEC_OSAL_SemaphorePost(OMX_HANDLETYPE semaphoreHandle) -{ - sem_t *sema = (sem_t *)semaphoreHandle; - - FunctionIn(); - - if (sema == NULL) - return OMX_ErrorBadParameter; - - if (sem_post(sema) != 0) - return OMX_ErrorUndefined; - - FunctionOut(); - - return OMX_ErrorNone; -} - -OMX_ERRORTYPE SEC_OSAL_Set_SemaphoreCount(OMX_HANDLETYPE semaphoreHandle, OMX_S32 val) -{ - sem_t *sema = (sem_t *)semaphoreHandle; - - if (sema == NULL) - return OMX_ErrorBadParameter; - - if (sem_init(sema, 0, val) != 0) - return OMX_ErrorUndefined; - - return OMX_ErrorNone; -} - -OMX_ERRORTYPE SEC_OSAL_Get_SemaphoreCount(OMX_HANDLETYPE semaphoreHandle, OMX_S32 *val) -{ - sem_t *sema = (sem_t *)semaphoreHandle; - OMX_U32 semaVal = 0; - - if (sema == NULL) - return OMX_ErrorBadParameter; - - if (sem_getvalue(sema, &semaVal) != 0) - return OMX_ErrorUndefined; - - *val = semaVal; - - return OMX_ErrorNone; -} diff --git a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Semaphore.h b/sec_mm/sec_omx/sec_osal/SEC_OSAL_Semaphore.h deleted file mode 100644 index f23d3d6..0000000 --- a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Semaphore.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OSAL_Semaphore.h - * @brief - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#ifndef SEC_OSAL_SEMAPHORE -#define SEC_OSAL_SEMAPHORE - -#include "OMX_Types.h" -#include "OMX_Core.h" - - -#ifdef __cplusplus -extern "C" { -#endif - -OMX_ERRORTYPE SEC_OSAL_SemaphoreCreate(OMX_HANDLETYPE *semaphoreHandle); -OMX_ERRORTYPE SEC_OSAL_SemaphoreTerminate(OMX_HANDLETYPE semaphoreHandle); -OMX_ERRORTYPE SEC_OSAL_SemaphoreWait(OMX_HANDLETYPE semaphoreHandle); -OMX_ERRORTYPE SEC_OSAL_SemaphorePost(OMX_HANDLETYPE semaphoreHandle); -OMX_ERRORTYPE SEC_OSAL_Set_SemaphoreCount(OMX_HANDLETYPE semaphoreHandle, OMX_S32 val); -OMX_ERRORTYPE SEC_OSAL_Get_SemaphoreCount(OMX_HANDLETYPE semaphoreHandle, OMX_S32 *val); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Thread.c b/sec_mm/sec_omx/sec_osal/SEC_OSAL_Thread.c deleted file mode 100644 index 3b69d30..0000000 --- a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Thread.c +++ /dev/null @@ -1,153 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OSAL_Thread.c - * @brief - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#include -#include -#include -#include -#include -#include - -#include "SEC_OSAL_Memory.h" -#include "SEC_OSAL_Thread.h" - -#undef SEC_LOG_TAG -#define SEC_LOG_TAG "SEC_LOG_THREAD" -#define SEC_LOG_OFF -#include "SEC_OSAL_Log.h" - - -typedef struct _SEC_THREAD_HANDLE_TYPE -{ - pthread_t pthread; - pthread_attr_t attr; - struct sched_param schedparam; - int stack_size; -} SEC_THREAD_HANDLE_TYPE; - - -OMX_ERRORTYPE SEC_OSAL_ThreadCreate(OMX_HANDLETYPE *threadHandle, OMX_PTR function_name, OMX_PTR argument) -{ - FunctionIn(); - - int result = 0; - int detach_ret = 0; - SEC_THREAD_HANDLE_TYPE *thread; - OMX_ERRORTYPE ret = OMX_ErrorNone; - - thread = SEC_OSAL_Malloc(sizeof(SEC_THREAD_HANDLE_TYPE)); - SEC_OSAL_Memset(thread, 0, sizeof(SEC_THREAD_HANDLE_TYPE)); - - pthread_attr_init(&thread->attr); - if (thread->stack_size != 0) - pthread_attr_setstacksize(&thread->attr, thread->stack_size); - - /* set priority */ - if (thread->schedparam.sched_priority != 0) - pthread_attr_setschedparam(&thread->attr, &thread->schedparam); - - detach_ret = pthread_attr_setdetachstate(&thread->attr, PTHREAD_CREATE_JOINABLE); - if (detach_ret != 0) { - ret = OMX_ErrorUndefined; - goto EXIT; - } - - result = pthread_create(&thread->pthread, &thread->attr, function_name, (void *)argument); - /* pthread_setschedparam(thread->pthread, SCHED_RR, &thread->schedparam); */ - - switch (result) { - case 0: - *threadHandle = (OMX_HANDLETYPE)thread; - ret = OMX_ErrorNone; - break; - case EAGAIN: - *threadHandle = NULL; - ret = OMX_ErrorInsufficientResources; - break; - default: - *threadHandle = NULL; - ret = OMX_ErrorUndefined; - break; - } - -EXIT: - FunctionOut(); - - return ret; -} - -OMX_ERRORTYPE SEC_OSAL_ThreadTerminate(OMX_HANDLETYPE threadHandle) -{ - FunctionIn(); - - OMX_ERRORTYPE ret = OMX_ErrorNone; - SEC_THREAD_HANDLE_TYPE *thread = (SEC_THREAD_HANDLE_TYPE *)threadHandle; - - if (!thread) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } - if (pthread_join(thread->pthread, NULL) != 0) { - ret = OMX_ErrorUndefined; - goto EXIT; - } - - SEC_OSAL_Free(thread); - ret = OMX_ErrorNone; - -EXIT: - FunctionOut(); - - return ret; - -} - -OMX_ERRORTYPE SEC_OSAL_ThreadCancel(OMX_HANDLETYPE threadHandle) -{ - SEC_THREAD_HANDLE_TYPE *thread = (SEC_THREAD_HANDLE_TYPE *)threadHandle; - - if (!thread) - return OMX_ErrorBadParameter; - - /* thread_cancel(thread->pthread); */ - pthread_exit(thread->pthread); - pthread_join(thread->pthread, NULL); - - SEC_OSAL_Free(thread); - return OMX_ErrorNone; -} - -void SEC_OSAL_ThreadExit(void *value_ptr) -{ - pthread_exit(value_ptr); - return; -} - -void SEC_OSAL_SleepMillisec(OMX_U32 ms) -{ - usleep(ms * 1000); - return; -} diff --git a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Thread.h b/sec_mm/sec_omx/sec_osal/SEC_OSAL_Thread.h deleted file mode 100644 index ccd2609..0000000 --- a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Thread.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * - * Copyright 2010 Samsung Electronics S.LSI Co. LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * @file SEC_OSAL_Thread.h - * @brief - * @author SeungBeom Kim (sbcrux.kim@samsung.com) - * @version 1.0 - * @history - * 2010.7.15 : Create - */ - -#ifndef SEC_OSAL_THREAD -#define SEC_OSAL_THREAD - -#include "OMX_Types.h" -#include "OMX_Core.h" - - -#ifdef __cplusplus -extern "C" { -#endif - -OMX_ERRORTYPE SEC_OSAL_ThreadCreate(OMX_HANDLETYPE *threadHandle, OMX_PTR function_name, OMX_PTR argument); -OMX_ERRORTYPE SEC_OSAL_ThreadTerminate(OMX_HANDLETYPE threadHandle); -OMX_ERRORTYPE SEC_OSAL_ThreadCancel(OMX_HANDLETYPE threadHandle); -void SEC_OSAL_ThreadExit(void *value_ptr); -void SEC_OSAL_SleepMillisec(OMX_U32 ms); - -#ifdef __cplusplus -} -#endif - -#endif -- cgit v1.1