aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwfeng6 <wei.feng@intel.com>2012-09-21 18:51:51 +0800
committerPatrick Tjin <pattjin@google.com>2014-07-21 22:02:48 -0700
commit9101b0d1ca310418db57a1a394f5990e717df647 (patch)
treea12f3c1490b07c091c4a0b6b02cff83a47bfeaed
parent28516617d7c679a9d1c4d1a5a29af157eb25cc29 (diff)
downloadandroid_hardware_intel_common_omx-components-9101b0d1ca310418db57a1a394f5990e717df647.tar.gz
android_hardware_intel_common_omx-components-9101b0d1ca310418db57a1a394f5990e717df647.tar.bz2
android_hardware_intel_common_omx-components-9101b0d1ca310418db57a1a394f5990e717df647.zip
Remove unused codes and config files in video middleware stack
BZ: 58358 Remove unused codes and config files in video middleware stack. Change-Id: Ida0fd634e44465ad8c9f9eadc49cee82cd127b0b Signed-off-by: wfeng6 <wei.feng@intel.com> Reviewed-on: http://android.intel.com:8080/67296 Reviewed-by: Xiao, FengX <fengx.xiao@intel.com> Reviewed-by: Jiang, Fei <fei.jiang@intel.com> Reviewed-by: Liu, BolunX <bolunx.liu@intel.com> Reviewed-by: Zhao, Leo <leo.zhao@intel.com> Reviewed-by: Zeng, Li <li.zeng@intel.com> Reviewed-by: Guo, Nana N <nana.n.guo@intel.com> Reviewed-by: Tang, Richard <richard.tang@intel.com> Reviewed-by: Qiu, Junhai <junhai.qiu@intel.com> Reviewed-by: Chen, Tianmi <tianmi.chen@intel.com> Reviewed-by: Gu, Wangyi <wangyi.gu@intel.com> Reviewed-by: Sun, Mingruo <mingruo.sun@intel.com> Reviewed-by: Shi, PingX <pingx.shi@intel.com> Tested-by: Shi, PingX <pingx.shi@intel.com> Reviewed-by: buildbot <buildbot@intel.com> Tested-by: buildbot <buildbot@intel.com>
-rw-r--r--Android.mk15
-rw-r--r--avc-enc/Android.mk52
-rw-r--r--avc-enc/ebuild.mk21
-rw-r--r--avc-enc/psb_avc.cpp2725
-rw-r--r--avc-enc/psb_avc.h201
-rw-r--r--avc-enc/vabuffer.h29
-rw-r--r--ebuild.mk2
-rw-r--r--h263-enc/Android.mk53
-rw-r--r--h263-enc/ebuild.mk21
-rw-r--r--h263-enc/h263.cpp289
-rw-r--r--h263-enc/h263.h44
-rw-r--r--h263-enc/psb_h263.cpp1766
-rw-r--r--h263-enc/psb_h263.h173
-rw-r--r--h263-enc/vabuffer.h30
-rw-r--r--m4v-enc/Android.mk52
-rw-r--r--m4v-enc/ebuild.mk21
-rw-r--r--m4v-enc/psb_m4v.cpp1968
-rw-r--r--m4v-enc/psb_m4v.h198
-rw-r--r--m4v-enc/vabuffer.h29
-rw-r--r--psb-dec/Android.mk50
-rw-r--r--psb-dec/ebuild.mk21
-rw-r--r--psb-dec/h263.cpp283
-rw-r--r--psb-dec/h263.h44
-rw-r--r--psb-dec/psb.cpp3186
-rw-r--r--psb-dec/psb.h198
-rw-r--r--psb-dec/vabuffer.h30
-rw-r--r--sst/Android.mk27
-rw-r--r--sst/ebuild.mk21
-rw-r--r--sst/sst.cpp1790
-rw-r--r--sst/sst.h174
-rw-r--r--videocodec/OMXComponentCodecBase.cpp2
-rw-r--r--wrs_omxil_components.list21
32 files changed, 1 insertions, 13535 deletions
diff --git a/Android.mk b/Android.mk
index a0d51ba..fef0725 100644
--- a/Android.mk
+++ b/Android.mk
@@ -5,22 +5,7 @@ include $(CLEAR_VARS)
VENDORS_INTEL_MRST_COMPONENTS_ROOT := $(LOCAL_PATH)
-$(info WARNING: PRODUCT_COPY_FILES disabled in $(LOCAL_PATH))
-#PRODUCT_COPY_FILES += \
-# $(LOCAL_PATH)/wrs_omxil_components.list:system/etc/wrs_omxil_components.list
-#$(call add-prebuilt-files, ETC, wrs_omxil_components.list)
-
-# mrst sst audio
-#-include $(VENDORS_INTEL_MRST_COMPONENTS_ROOT)/sst/Android.mk
-
#intel video codecs
-include $(VENDORS_INTEL_MRST_COMPONENTS_ROOT)/psb-dec/Android.mk
-include $(VENDORS_INTEL_MRST_COMPONENTS_ROOT)/avc-enc/Android.mk
-include $(VENDORS_INTEL_MRST_COMPONENTS_ROOT)/h263-enc/Android.mk
-include $(VENDORS_INTEL_MRST_COMPONENTS_ROOT)/m4v-enc/Android.mk
include $(VENDORS_INTEL_MRST_COMPONENTS_ROOT)/videocodec/Android.mk
-#intel audio codecs
-#-include $(VENDORS_INTEL_MRST_COMPONENTS_ROOT)/sst-stub-base/Android.mk
-
endif #BOARD_USES_MRST_OMX
diff --git a/avc-enc/Android.mk b/avc-enc/Android.mk
deleted file mode 100644
index 2fdc093..0000000
--- a/avc-enc/Android.mk
+++ /dev/null
@@ -1,52 +0,0 @@
-ifeq ($(strip $(BOARD_USES_WRS_OMXIL_CORE)),true)
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- psb_avc.cpp
-
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE := libwrs_omxil_intel_mrst_psb_avc_enc
-
-LOCAL_CPPFLAGS := -DMIXVIDEO_ENCODE_ENABLE=0
-
-LOCAL_LDFLAGS :=
-
-LOCAL_STATIC_LIBRARIES :=
-
-LOCAL_SHARED_LIBRARIES := \
- libwrs_omxil_common \
- liblog \
- libmixcommon \
- libmixvideo \
- libmixvbp \
- libva \
- libva-android \
- libva-tpi \
- libutils \
- libsharedbuffer
-
-
-VENDORS_INTEL_MRST_MIXVBP_ROOT := $(VENDORS_INTEL_MRST_LIBMIX_ROOT)/mix_vbp
-
-LOCAL_C_INCLUDES := \
- $(TARGET_OUT_HEADERS)/wrs_omxil_core \
- $(TARGET_OUT_HEADERS)/khronos/openmax \
- $(TARGET_OUT_HEADERS)/libmixcommon \
- $(TARGET_OUT_HEADERS)/libmixvideo \
- $(TARGET_OUT_HEADERS)/libva \
- $(TARGET_OUT_HEADERS)/libdrm \
- $(TARGET_OUT_HEADERS)/libdrm/shared-core \
- $(TARGET_OUT_HEADERS)/libmixvbp \
- $(TARGET_OUT_HEADERS)/libpsb_drm \
- $(TARGET_OUT_HEADERS)/libsharedbuffer
-
-LOCAL_COPY_HEADERS_TO := libwrs_omxil_intel_mrst_psb_avc_enc
-LOCAL_COPY_HEADERS := vabuffer.h
-
-ifeq ($(ENABLE_BUFFER_SHARE_MODE),true)
-LOCAL_CPPFLAGS += -DENABLE_BUFFER_SHARE_MODE=1
-endif
-
-include $(BUILD_SHARED_LIBRARY)
-endif
diff --git a/avc-enc/ebuild.mk b/avc-enc/ebuild.mk
deleted file mode 100644
index 06a4106..0000000
--- a/avc-enc/ebuild.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- psb.cpp
-
-LOCAL_MODULE := libwrs_omxil_intel_mrst_psb
-
-LOCAL_CPPFLAGS :=
-
-LOCAL_LDFLAGS :=
-
-LOCAL_SHARED_LIBRARIES := \
- libwrs_omxil_common
-
-LOCAL_C_INCLUDES := \
- $(WRS_OMXIL_CORE_ROOT)/utils/inc \
- $(WRS_OMXIL_CORE_ROOT)/base/inc \
- $(WRS_OMXIL_CORE_ROOT)/core/inc/khronos/openmax/include
-
-include $(BUILD_SHARED_LIBRARY)
diff --git a/avc-enc/psb_avc.cpp b/avc-enc/psb_avc.cpp
deleted file mode 100644
index 0406fb6..0000000
--- a/avc-enc/psb_avc.cpp
+++ /dev/null
@@ -1,2725 +0,0 @@
-/*
- * psb.cpp, omx psb component file
- *
- * Copyright (c) 2009-2010 Wind River Systems, Inc.
- *
- * 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.
- */
-//#define LOG_NDEBUG 0
-#undef LOG_TAG
-#define LOG_TAG "intel-avc-encoder"
-#include <utils/Log.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <sys/time.h>
-
-#include <OMX_Core.h>
-#include <OMX_IndexExt.h>
-#include <OMX_VideoExt.h>
-#include <OMX_IntelErrorTypes.h>
-
-#include <cmodule.h>
-#include <portvideo.h>
-#include <componentbase.h>
-
-#include <mixdisplayandroid.h>
-#include <mixvideo.h>
-#include <mixvideoconfigparamsenc_h264.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <va/va.h>
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#include <va/va_android.h>
-
-#include "psb_avc.h"
-
-#define Display unsigned int
-
-#define SHOW_FPS 0
-
-#include "vabuffer.h"
-
-#include <IntelBufferSharing.h>
-
-/*
- * constructor & destructor
- */
-MrstPsbComponent::MrstPsbComponent()
-{
- LOGV("%s(): enter\n", __func__);
-
- buffer_sharing_state = BUFFER_SHARING_INVALID;
-
- OMX_ERRORTYPE oret = RequestToEnableBufferSharingMode();
-
- if (oret != OMX_ErrorNone) {
- LOGE("%s(),%d: set buffer sharing mode failed", __func__, __LINE__);
- RequestToDisableBufferSharingMode();
- }
-
- LOGV("%s(),%d: exit\n", __func__, __LINE__);
-}
-
-MrstPsbComponent::~MrstPsbComponent()
-{
- LOGV("%s(): enter\n", __func__);
-
- OMX_ERRORTYPE oret = RequestToDisableBufferSharingMode();
- if (oret != OMX_ErrorNone) {
- LOGE("%s(),%d: DisableBufferSharingMode failed", __func__, __LINE__);
- }
-
- LOGV("%s(),%d: exit\n", __func__, __LINE__);
-}
-
-/* end of constructor & destructor */
-
-/* core methods & helpers */
-OMX_ERRORTYPE MrstPsbComponent::ComponentAllocatePorts(void)
-{
- PortBase **ports;
-
- OMX_U32 codec_port_index, raw_port_index;
- OMX_DIRTYPE codec_port_dir, raw_port_dir;
-
- OMX_PORT_PARAM_TYPE portparam;
-
- OMX_ERRORTYPE ret = OMX_ErrorUndefined;
-
- LOGV("%s(): enter\n", __func__);
-
- ports = new PortBase *[NR_PORTS];
- if (!ports)
- return OMX_ErrorInsufficientResources;
-
- this->nr_ports = NR_PORTS;
- this->ports = ports;
-
- raw_port_index = INPORT_INDEX;
- codec_port_index = OUTPORT_INDEX;
- raw_port_dir = OMX_DirInput;
- codec_port_dir = OMX_DirOutput;
-
- ret = __AllocateAvcPort(codec_port_index, codec_port_dir);
-
- if (ret != OMX_ErrorNone)
- goto free_ports;
-
- LOGV("---- prepare to call __AllocateRawPort() ----\n");
- ret = __AllocateRawPort(raw_port_index, raw_port_dir);
-
-
- if (ret != OMX_ErrorNone)
- goto free_codecport;
-
- /* OMX_PORT_PARAM_TYPE */
- memset(&portparam, 0, sizeof(portparam));
- SetTypeHeader(&portparam, sizeof(portparam));
- portparam.nPorts = NR_PORTS;
- portparam.nStartPortNumber = INPORT_INDEX;
-
- memcpy(&this->portparam, &portparam, sizeof(portparam));
- /* end of OMX_PORT_PARAM_TYPE */
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, OMX_ErrorNone);
- return OMX_ErrorNone;
-
-free_codecport:
- delete ports[codec_port_index];
- ports[codec_port_index] = NULL;
-
-free_ports:
-
- delete []ports;
- ports = NULL;
-
- this->ports = NULL;
- this->nr_ports = 0;
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::__AllocateAvcPort(OMX_U32 port_index,
- OMX_DIRTYPE dir)
-{
- PortAvc *avcport;
-
- OMX_PARAM_PORTDEFINITIONTYPE avcportdefinition;
- OMX_VIDEO_PARAM_AVCTYPE avcportparam;
-
- LOGV("%s(): enter\n", __func__);
-
- ports[port_index] = new PortAvc;
- if (!ports[port_index]) {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__,
- OMX_ErrorInsufficientResources);
- return OMX_ErrorInsufficientResources;
- }
- avcport = static_cast<PortAvc *>(this->ports[port_index]);
-
- /* OMX_PARAM_PORTDEFINITIONTYPE */
- memset(&avcportdefinition, 0, sizeof(avcportdefinition));
- SetTypeHeader(&avcportdefinition, sizeof(avcportdefinition));
- avcportdefinition.nPortIndex = port_index;
- avcportdefinition.eDir = dir;
-
- avcportdefinition.nBufferCountActual = OUTPORT_AVC_ACTUAL_BUFFER_COUNT;
- avcportdefinition.nBufferCountMin = OUTPORT_AVC_MIN_BUFFER_COUNT;
- avcportdefinition.nBufferSize = OUTPORT_AVC_BUFFER_SIZE;
-
- avcportdefinition.bEnabled = OMX_TRUE;
- avcportdefinition.bPopulated = OMX_FALSE;
- avcportdefinition.eDomain = OMX_PortDomainVideo;
- avcportdefinition.format.video.cMIMEType = (char *)"video/h264";
- avcportdefinition.format.video.pNativeRender = NULL;
- avcportdefinition.format.video.nFrameWidth = 176;
- avcportdefinition.format.video.nFrameHeight = 144;
- avcportdefinition.format.video.nStride = 0;
- avcportdefinition.format.video.nSliceHeight = 0;
- avcportdefinition.format.video.nBitrate = 64000;
- avcportdefinition.format.video.xFramerate = 15 << 16;
- avcportdefinition.format.video.bFlagErrorConcealment = OMX_FALSE;
- avcportdefinition.format.video.eCompressionFormat = OMX_VIDEO_CodingAVC;
- avcportdefinition.format.video.eColorFormat = OMX_COLOR_FormatUnused;
- avcportdefinition.format.video.pNativeWindow = NULL;
- avcportdefinition.bBuffersContiguous = OMX_FALSE;
- avcportdefinition.nBufferAlignment = 0;
- avcport->SetPortDefinition(&avcportdefinition, true);
- /* end of OMX_PARAM_PORTDEFINITIONTYPE */
-
- /* OMX_VIDEO_PARAM_AVCTYPE */
- memset(&avcportparam, 0, sizeof(avcportparam));
- SetTypeHeader(&avcportparam, sizeof(avcportparam));
- avcportparam.nPortIndex = port_index;
- avcportparam.eProfile = OMX_VIDEO_AVCProfileBaseline;
- avcportparam.eLevel = OMX_VIDEO_AVCLevel1;
-
- avcport->SetPortAvcParam(&avcportparam, true);
- /* end of OMX_VIDEO_PARAM_AVCTYPE */
-
- /* encoder */
- /* OMX_VIDEO_PARAM_BITRATETYPE */
- OMX_VIDEO_PARAM_BITRATETYPE bitrateparam;
-
- memset(&bitrateparam, 0, sizeof(bitrateparam));
- SetTypeHeader(&bitrateparam, sizeof(bitrateparam));
-
- bitrateparam.nPortIndex = port_index;
- bitrateparam.eControlRate = OMX_Video_ControlRateConstant;
- bitrateparam.nTargetBitrate = 192000;
-
- avcport->SetPortBitrateParam(&bitrateparam, true);
- /* end of OMX_VIDEO_PARAM_BITRATETYPE */
-
- /* OMX_VIDEO_CONFIG_PRI_INFOTYPE */
- OMX_VIDEO_CONFIG_PRI_INFOTYPE privateinfoparam;
-
- memset(&privateinfoparam, 0, sizeof(privateinfoparam));
- SetTypeHeader(&privateinfoparam, sizeof(privateinfoparam));
-
- privateinfoparam.nPortIndex = port_index;
- privateinfoparam.nCapacity = 0;
- privateinfoparam.nHolder = NULL;
-
- avcport->SetPortPrivateInfoParam(&privateinfoparam, true);
- /* end of OMX_VIDEO_CONFIG_PRI_INFOTYPE */
-
- avcEncIDRPeriod = 0;
- avcEncPFrames = 0;
- avcEncNaluFormatType = OMX_NaluFormatStartCodesSeparateFirstHeader;
-
- avcEncParamIntelBitrateType.nPortIndex = port_index;
- avcEncParamIntelBitrateType.eControlRate = OMX_Video_Intel_ControlRateMax;
- avcEncParamIntelBitrateType.nTargetBitrate = 0;
- SetTypeHeader(&avcEncParamIntelBitrateType, sizeof(avcEncParamIntelBitrateType));
-
- avcEncConfigNalSize.nPortIndex = port_index;
- avcEncConfigNalSize.nNaluBytes = 0;
- SetTypeHeader(&avcEncConfigNalSize, sizeof(avcEncConfigNalSize));
-
- avcEncConfigSliceNumbers.nPortIndex = port_index;
- avcEncConfigSliceNumbers.nISliceNumber = 2;
- avcEncConfigSliceNumbers.nPSliceNumber = 2;
- SetTypeHeader(&avcEncConfigSliceNumbers, sizeof(avcEncConfigSliceNumbers));
-
- avcEncConfigAir.nPortIndex = port_index;
- avcEncConfigAir.bAirEnable = OMX_FALSE;
- avcEncConfigAir.bAirAuto = OMX_FALSE;
- avcEncConfigAir.nAirMBs = 0;
- avcEncConfigAir.nAirThreshold = 0;
- SetTypeHeader(&avcEncConfigAir, sizeof(avcEncConfigAir));
-
- avcEncFramerate.nPortIndex = port_index;
- avcEncFramerate.xEncodeFramerate = 0; // Q16 format
- SetTypeHeader(&avcEncFramerate, sizeof(avcEncFramerate));
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, OMX_ErrorNone);
- return OMX_ErrorNone;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::__AllocateRawPort(OMX_U32 port_index,
- OMX_DIRTYPE dir)
-{
- PortVideo *rawport;
-
- OMX_PARAM_PORTDEFINITIONTYPE rawportdefinition;
- OMX_VIDEO_PARAM_PORTFORMATTYPE rawvideoparam;
-
- LOGV("%s(): enter\n", __func__);
-
- ports[port_index] = new PortVideo;
- if (!ports[port_index]) {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__,
- OMX_ErrorInsufficientResources);
- return OMX_ErrorInsufficientResources;
- }
-
- rawport = static_cast<PortVideo *>(this->ports[port_index]);
-
- /* OMX_PARAM_PORTDEFINITIONTYPE */
- memset(&rawportdefinition, 0, sizeof(rawportdefinition));
- SetTypeHeader(&rawportdefinition, sizeof(rawportdefinition));
- rawportdefinition.nPortIndex = port_index;
- rawportdefinition.eDir = dir;
-
- rawportdefinition.nBufferCountActual = INPORT_RAW_ACTUAL_BUFFER_COUNT;
- rawportdefinition.nBufferCountMin = INPORT_RAW_MIN_BUFFER_COUNT;
- rawportdefinition.nBufferSize = INPORT_RAW_BUFFER_SIZE;
-
- rawportdefinition.bEnabled = OMX_TRUE;
- rawportdefinition.bPopulated = OMX_FALSE;
- rawportdefinition.eDomain = OMX_PortDomainVideo;
- rawportdefinition.format.video.cMIMEType = (char *)"video/raw";
- rawportdefinition.format.video.pNativeRender = NULL;
- rawportdefinition.format.video.nFrameWidth = 176;
- rawportdefinition.format.video.nFrameHeight = 144;
- rawportdefinition.format.video.nStride = 176;
- rawportdefinition.format.video.nSliceHeight = 144;
- rawportdefinition.format.video.nBitrate = 64000;
- rawportdefinition.format.video.xFramerate = 15 << 16;
- rawportdefinition.format.video.bFlagErrorConcealment = OMX_FALSE;
- rawportdefinition.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused;
- rawportdefinition.format.video.eColorFormat =
- OMX_COLOR_FormatYUV420SemiPlanar;
- rawportdefinition.format.video.pNativeWindow = NULL;
- rawportdefinition.bBuffersContiguous = OMX_FALSE;
- rawportdefinition.nBufferAlignment = 0;
- rawport->SetPortDefinition(&rawportdefinition, true);
- /* end of OMX_PARAM_PORTDEFINITIONTYPE */
-
- /* OMX_VIDEO_PARAM_PORTFORMATTYPE */
- rawvideoparam.nPortIndex = port_index;
- rawvideoparam.nIndex = 0;
- rawvideoparam.eCompressionFormat = OMX_VIDEO_CodingUnused;
- rawvideoparam.eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar;
- rawport->SetPortVideoParam(&rawvideoparam, true);
- /* end of OMX_VIDEO_PARAM_PORTFORMATTYPE */
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, OMX_ErrorNone);
- return OMX_ErrorNone;
-}
-
-/*
- Add OMX_COLOR_FormatVendorStartUnused + 0xA00E00 -> PVMF_MIME_RAWVA in file
- external/opencore/nodes/pvomxvideodecnode/src/pvmf_omx_videodec_node.cpp
-
-*/
-
-#define AVC_ENCODE_ERROR_CHECKING(p) \
-if (!p) { \
- LOGE("%s(), NULL pointer", __func__); \
- return OMX_ErrorBadParameter; \
-} \
-ret = CheckTypeHeader(p, sizeof(*p)); \
-if (ret != OMX_ErrorNone) { \
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret); \
- return ret; \
-} \
-OMX_U32 index = p->nPortIndex; \
-if (index != OUTPORT_INDEX) { \
- LOGE("%s(), wrong port index", __func__); \
- return OMX_ErrorBadPortIndex; \
-} \
-PortAvc *port = static_cast<PortAvc *> (ports[index]); \
-if (!port) { \
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, \
- OMX_ErrorBadPortIndex); \
- return OMX_ErrorBadPortIndex; \
-} \
-LOGV("%s(), about to get native or supported nal format", __func__); \
-if (!port->IsEnabled()) { \
- LOGE("%s() : port is not enabled", __func__); \
- return OMX_ErrorNotReady; \
-} \
-
-/*
- * component methods & helpers
- */
-/* Get/SetParameter */
-OMX_ERRORTYPE MrstPsbComponent::ComponentGetParameter(
- OMX_INDEXTYPE nParamIndex,
- OMX_PTR pComponentParameterStructure)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
-
- LOGV("%s(): enter (index = 0x%08x)\n", __func__, nParamIndex);
-
- switch (nParamIndex) {
- case OMX_IndexParamVideoPortFormat: {
- OMX_VIDEO_PARAM_PORTFORMATTYPE *p =
- (OMX_VIDEO_PARAM_PORTFORMATTYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortVideo *port = NULL;
-
- LOGV("%s(): port index : %lu\n", __func__, index);
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortVideo *>(ports[index]);
-
- if (!port) {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
- if(index == INPORT_INDEX ) {
- if(p->nIndex < 1) {
- p->eColorFormat = port->GetPortVideoParam()->eColorFormat;
- p->eCompressionFormat = OMX_VIDEO_CodingUnused;
- }
- else {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__,OMX_ErrorNoMore);
- return OMX_ErrorNoMore;
- }
- }
- else if(index == OUTPORT_INDEX) {
- if(p->nIndex < 1) {
- p->eCompressionFormat= port->GetPortVideoParam()->eCompressionFormat;
- p->eColorFormat = OMX_COLOR_FormatUnused;
- }
- else {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__,OMX_ErrorNoMore);
- return OMX_ErrorNoMore;
- }
- }
- else {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__,OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
- LOGV("%s(), p->eColorFormat = %x\n", __func__, p->eColorFormat);
- break;
- }
- case OMX_IndexParamVideoAvc: {
- OMX_VIDEO_PARAM_AVCTYPE *p =
- (OMX_VIDEO_PARAM_AVCTYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortAvc *port = NULL;
-
- LOGV("%s(): port index : %lu\n", __func__, index);
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortAvc *>(ports[index]);
-
- if (!port) {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- memcpy(p, port->GetPortAvcParam(), sizeof(*p));
- break;
- }
- case OMX_IndexParamVideoBitrate: {
-
- if (avcEncParamIntelBitrateType.eControlRate
- != OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
-
- OMX_VIDEO_PARAM_BITRATETYPE *p =
- (OMX_VIDEO_PARAM_BITRATETYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortVideo *port = NULL;
-
- LOGV("%s(): port index : %lu\n", __func__, index);
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortVideo *>(ports[index]);
-
- if (!port) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- memcpy(p, port->GetPortBitrateParam(), sizeof(*p));
- break;
- }
- case OMX_IndexParamNalStreamFormat:
- case OMX_IndexParamNalStreamFormatSupported: {
- OMX_NALSTREAMFORMATTYPE *p =
- (OMX_NALSTREAMFORMATTYPE *)pComponentParameterStructure;
-
- LOGV("%s(), OMX_IndexParamNalStreamFormat or OMX_IndexParamNalStreamFormatSupported", __func__);
-
- AVC_ENCODE_ERROR_CHECKING(p)
-
- if(nParamIndex == OMX_IndexParamNalStreamFormat) {
- p->eNaluFormat = OMX_NaluFormatStartCodesSeparateFirstHeader;
- LOGV("%s(), OMX_IndexParamNalStreamFormat 0x%x", __func__,
- p->eNaluFormat);
- } else {
- p->eNaluFormat = (OMX_NALUFORMATSTYPE)(OMX_NaluFormatStartCodes |
- OMX_NaluFormatStartCodesSeparateFirstHeader);
- LOGV("%s(), OMX_IndexParamNalStreamFormatSupported 0x%x",
- __func__, p->eNaluFormat);
- }
- break;
- }
-
- case OMX_IndexConfigVideoAVCIntraPeriod: {
- OMX_VIDEO_CONFIG_AVCINTRAPERIOD *pVideoIDRInterval =
- (OMX_VIDEO_CONFIG_AVCINTRAPERIOD *) pComponentParameterStructure;
-
- LOGV("%s(), OMX_IndexConfigVideoAVCIntraPeriod", __func__);
-
- if(!vcp) {
- LOGE("%s(), vcp is NULL", __func__);
- return OMX_ErrorNotReady;
- }
-
- AVC_ENCODE_ERROR_CHECKING(pVideoIDRInterval)
- ret = ComponentGetConfig(OMX_IndexConfigVideoAVCIntraPeriod,
- pComponentParameterStructure);
-
- break;
- }
- case OMX_IndexParamIntelBitrate: {
-
- if (avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
- LOGV("%s(), OMX_IndexParamIntelBitrate", __func__);
-
- OMX_VIDEO_PARAM_INTEL_BITRATETYPE *pIntelBitrate =
- (OMX_VIDEO_PARAM_INTEL_BITRATETYPE *) pComponentParameterStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pIntelBitrate)
-
- *pIntelBitrate = avcEncParamIntelBitrateType;
-
- break;
- }
-
- case OMX_IndexConfigIntelBitrate: {
-
- LOGV("%s(), OMX_IndexConfigIntelBitrate", __func__);
- ret = ComponentGetConfig((OMX_INDEXTYPE)OMX_IndexConfigIntelBitrate,
- (OMX_PTR)pComponentParameterStructure);
- break;
-
- }
-
- case OMX_IndexConfigVideoNalSize: {
-
- LOGV("%s(), OMX_IndexConfigVideoNalSize", __func__);
- ret = ComponentGetConfig(OMX_IndexConfigVideoNalSize,
- pComponentParameterStructure);
-
- break;
- }
-
- case OMX_IndexConfigIntelSliceNumbers: {
-
- LOGV("%s(), OMX_IndexConfigIntelSliceNumbers", __func__);
- ret = ComponentGetConfig((OMX_INDEXTYPE)OMX_IndexConfigIntelSliceNumbers,
- pComponentParameterStructure);
-
- break;
- }
-
- case OMX_IndexConfigIntelAIR: {
-
- LOGV("%s(), OMX_IndexConfigIntelAIR", __func__);
- ret = ComponentGetConfig((OMX_INDEXTYPE)OMX_IndexConfigIntelAIR,
- pComponentParameterStructure);
-
- break;
- }
-
- case OMX_IndexConfigVideoFramerate: {
-
- LOGV("%s(), OMX_IndexConfigVideoFramerate", __func__);
- ret = ComponentGetConfig((OMX_INDEXTYPE)OMX_IndexConfigVideoFramerate,
- pComponentParameterStructure);
-
- break;
- }
-
- case OMX_IndexParamVideoProfileLevelQuerySupported:
- {
- OMX_VIDEO_PARAM_PROFILELEVELTYPE *p =
- (OMX_VIDEO_PARAM_PROFILELEVELTYPE *)pComponentParameterStructure;
- PortAvc *port = NULL;
-
- OMX_U32 index = p->nPortIndex;
-
- LOGV("%s(): port index : %lu\n", __func__, index);
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone)
- {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- {
- port = static_cast<PortAvc *>(ports[index]);
- }
- else
- {
- return OMX_ErrorBadParameter;
- }
-
- const OMX_VIDEO_PARAM_AVCTYPE *avcParam = port->GetPortAvcParam();
-
- p->eProfile = avcParam->eProfile;
- p->eLevel = avcParam->eLevel;
-
- break;
- }
- default:
- ret = OMX_ErrorUnsupportedIndex;
- } /* switch */
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::ComponentSetParameter(
- OMX_INDEXTYPE nIndex,
- OMX_PTR pComponentParameterStructure)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
-
- LOGV("%s(): enter (index = 0x%08x)\n", __func__, nIndex);
-
- switch (nIndex) {
- case OMX_IndexParamVideoPortFormat: {
- OMX_VIDEO_PARAM_PORTFORMATTYPE *p =
- (OMX_VIDEO_PARAM_PORTFORMATTYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortVideo *port = NULL;
-
- LOGV("%s(): port index : %lu\n", __func__, index);
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortVideo *>(ports[index]);
-
- if (!port) {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- if (port->IsEnabled()) {
- OMX_STATETYPE state;
-
- CBaseGetState((void *)GetComponentHandle(), &state);
- if (state != OMX_StateLoaded &&
- state != OMX_StateWaitForResources) {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__,
- OMX_ErrorIncorrectStateOperation);
- return OMX_ErrorIncorrectStateOperation;
- }
- }
-
- ret = port->SetPortVideoParam(p, false);
- break;
- }
- case OMX_IndexParamVideoAvc: {
- OMX_VIDEO_PARAM_AVCTYPE *p =
- (OMX_VIDEO_PARAM_AVCTYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortAvc *port = NULL;
-
- LOGV("%s(): port index : %lu\n", __func__, index);
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortAvc *>(ports[index]);
-
- if (!port) {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- if (port->IsEnabled()) {
- OMX_STATETYPE state;
-
- CBaseGetState((void *)GetComponentHandle(), &state);
- if (state != OMX_StateLoaded &&
- state != OMX_StateWaitForResources) {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__,
- OMX_ErrorIncorrectStateOperation);
- return OMX_ErrorIncorrectStateOperation;
- }
- }
-
- ret = port->SetPortAvcParam(p, false);
- break;
- }
- case OMX_IndexParamVideoBitrate: {
-
- LOGV("%s(), OMX_IndexParamVideoBitrate", __func__);
- avcEncParamIntelBitrateType.eControlRate = OMX_Video_Intel_ControlRateMax;
-
- OMX_VIDEO_PARAM_BITRATETYPE *p =
- (OMX_VIDEO_PARAM_BITRATETYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortVideo *port = NULL;
-
- LOGV("%s(): port index : %lu\n", __func__, index);
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortVideo *>(ports[index]);
-
- if (!port) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- if (port->IsEnabled()) {
- OMX_STATETYPE state;
- CBaseGetState((void *)GetComponentHandle(), &state);
- if (state != OMX_StateLoaded &&
- state != OMX_StateWaitForResources) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorIncorrectStateOperation);
- return OMX_ErrorIncorrectStateOperation;
- }
- }
-
- ret = port->SetPortBitrateParam(p, false);
- break;
- }
- case OMX_IndexParamVideoBytestream: {
-
- LOGV("%s(), OMX_IndexParamVideoBytestream", __func__);
-
- OMX_VIDEO_PARAM_BYTESTREAMTYPE *p =
- (OMX_VIDEO_PARAM_BYTESTREAMTYPE *) pComponentParameterStructure;
-
- AVC_ENCODE_ERROR_CHECKING(p)
-
- OMX_STATETYPE state;
- CBaseGetState((void *) GetComponentHandle(), &state);
- if (state != OMX_StateLoaded && state != OMX_StateWaitForResources) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorIncorrectStateOperation);
- return OMX_ErrorIncorrectStateOperation;
- }
-
- if (p->bBytestream == OMX_TRUE) {
- avcEncNaluFormatType = OMX_NaluFormatStartCodes;
- } else {
- avcEncNaluFormatType = OMX_NaluFormatStartCodesSeparateFirstHeader;
- }
-
- break;
- }
- case OMX_IndexParamNalStreamFormatSelect: {
-
- LOGV("%s() : OMX_IndexParamNalStreamFormatSelect", __func__);
- OMX_NALSTREAMFORMATTYPE *p =
- (OMX_NALSTREAMFORMATTYPE *) pComponentParameterStructure;
-
- AVC_ENCODE_ERROR_CHECKING(p)
-
- if (p->eNaluFormat == OMX_NaluFormatStartCodes || p->eNaluFormat
- == OMX_NaluFormatStartCodesSeparateFirstHeader) {
- OMX_STATETYPE state;
- CBaseGetState((void *) GetComponentHandle(), &state);
- if (state != OMX_StateLoaded && state != OMX_StateWaitForResources) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorIncorrectStateOperation);
- return OMX_ErrorIncorrectStateOperation;
- }
-
- avcEncNaluFormatType = p->eNaluFormat;
- LOGE("%s(), OMX_IndexParamNalStreamFormatSelect : 0x%x",
- __func__, avcEncNaluFormatType);
- }
- break;
- }
-
- case OMX_IndexConfigVideoAVCIntraPeriod: {
-
- LOGV("%s() : OMX_IndexConfigVideoAVCIntraPeriod", __func__);
-
- OMX_VIDEO_CONFIG_AVCINTRAPERIOD *pVideoIDRInterval =
- (OMX_VIDEO_CONFIG_AVCINTRAPERIOD *) pComponentParameterStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pVideoIDRInterval)
-
- avcEncIDRPeriod = pVideoIDRInterval->nIDRPeriod;
- avcEncPFrames = pVideoIDRInterval->nPFrames;
- LOGV("%s(), OMX_IndexConfigVideoAVCIntraPeriod : avcEncIDRPeriod = %d avcEncPFrames = %d",
- __func__, avcEncIDRPeriod, avcEncPFrames);
- break;
- }
- case OMX_IndexParamIntelBitrate: {
- OMX_VIDEO_PARAM_INTEL_BITRATETYPE *pIntelBitrate =
- (OMX_VIDEO_PARAM_INTEL_BITRATETYPE *) pComponentParameterStructure;
-
- LOGV("%s(), OMX_IndexParamIntelBitrate", __func__);
-
- AVC_ENCODE_ERROR_CHECKING(pIntelBitrate)
- avcEncParamIntelBitrateType = *pIntelBitrate;
-
- break;
- }
-
- case OMX_IndexConfigIntelBitrate: {
-
- LOGV("%s(), OMX_IndexParamIntelBitrate", __func__);
-
- if (avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
-
- OMX_VIDEO_CONFIG_INTEL_BITRATETYPE *pIntelBitrate =
- (OMX_VIDEO_CONFIG_INTEL_BITRATETYPE *) pComponentParameterStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pIntelBitrate)
- avcEncConfigIntelBitrateType = *pIntelBitrate;
-
- break;
- }
- case OMX_IndexConfigVideoNalSize: {
-
- LOGV("%s() : OMX_IndexConfigVideoNalSize", __func__);
-
- if (avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
-
- OMX_VIDEO_CONFIG_NALSIZE *pNalSize =
- (OMX_VIDEO_CONFIG_NALSIZE *) pComponentParameterStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pNalSize)
-
- avcEncConfigNalSize = *pNalSize;
-
- break;
- }
-
- case OMX_IndexConfigIntelSliceNumbers: {
-
- LOGV("%s() : OMX_IndexConfigIntelSliceNumbers", __func__);
-
- if (avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
-
- OMX_VIDEO_CONFIG_INTEL_SLICE_NUMBERS *pSliceNumbers =
- (OMX_VIDEO_CONFIG_INTEL_SLICE_NUMBERS *) pComponentParameterStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pSliceNumbers)
-
- avcEncConfigSliceNumbers = *pSliceNumbers;
-
- LOGV("%s(), nISliceNumber = %d nPSliceNumber = %d", __func__,
- pSliceNumbers->nISliceNumber, pSliceNumbers->nPSliceNumber);
-
- break;
- }
-
- case OMX_IndexConfigIntelAIR: {
-
- LOGV("%s() : OMX_IndexConfigIntelAIR", __func__);
-
- if (avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
-
- OMX_VIDEO_CONFIG_INTEL_AIR *pIntelAir =
- (OMX_VIDEO_CONFIG_INTEL_AIR *) pComponentParameterStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pIntelAir)
-
- avcEncConfigAir = *pIntelAir;
-
- break;
- }
-
- case OMX_IndexConfigVideoFramerate: {
-
- LOGV("%s() : OMX_IndexConfigVideoFramerate", __func__);
-
- if (avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
-
- OMX_CONFIG_FRAMERATETYPE *pxFramerate =
- (OMX_CONFIG_FRAMERATETYPE *) pComponentParameterStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pxFramerate)
-
- avcEncFramerate = *pxFramerate;
-
- break;
- }
-
- case OMX_IndexParamIntelAVCDecodeSettings: {
- OMX_VIDEO_PARAM_INTEL_AVC_DECODE_SETTINGS *pAvcDecodeSettings =
- (OMX_VIDEO_PARAM_INTEL_AVC_DECODE_SETTINGS *) pComponentParameterStructure;
-
- LOGV("%s(), OMX_IndexParamIntelAVCDecodeSettings", __func__);
-
- ret = CheckTypeHeader(pAvcDecodeSettings, sizeof(*pAvcDecodeSettings));
- if (ret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- LOGE("%s(), wrong codec mode", __func__);
- return OMX_ErrorUnsupportedIndex;
-
- break;
- }
-
-
- default:
- ret = OMX_ErrorUnsupportedIndex;
- } /* switch */
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-/* Get/SetConfig */
-OMX_ERRORTYPE MrstPsbComponent::ComponentGetConfig(
- OMX_INDEXTYPE nIndex,
- OMX_PTR pComponentConfigStructure)
-{
- OMX_ERRORTYPE ret = OMX_ErrorUnsupportedIndex;
- OMX_CONFIG_INTRAREFRESHVOPTYPE* pVideoIFrame;
- OMX_VIDEO_CONFIG_AVCINTRAPERIOD *pVideoIDRInterval;
-
- LOGV("%s(): enter\n", __func__);
- LOGV("%s() : nIndex = %d\n", __func__, nIndex);
-
- switch (nIndex)
- {
- case OMX_IndexConfigVideoAVCIntraPeriod:
- {
- if(!vcp) {
- return OMX_ErrorNotReady;
- }
- pVideoIDRInterval = (OMX_VIDEO_CONFIG_AVCINTRAPERIOD *) pComponentConfigStructure;
- if(!pVideoIDRInterval) {
- LOGE("%s(), NULL pointer", __func__);
- return OMX_ErrorBadParameter;
- }
-
- AVC_ENCODE_ERROR_CHECKING(pVideoIDRInterval)
-
- if(!mix) {
- LOGE("%s(), MixVideo is not created", __func__);
- return OMX_ErrorUndefined;
- }
-
- MixVideoConfigParams *mixbaseconfig = NULL;
- MIX_RESULT mret = mix_video_get_config(mix, &mixbaseconfig);
- if(mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(), failed to get config", __func__);
- return OMX_ErrorUndefined;
- }
-
- uint intra_period = 0;
- mret = mix_videoconfigparamsenc_get_intra_period(MIX_VIDEOCONFIGPARAMSENC(mixbaseconfig), &intra_period);
- if(mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(), failed to get intra period", __func__);
- return OMX_ErrorUndefined;
- }
-
- uint idr_interval = 0;
- mret = mix_videoconfigparamsenc_h264_get_IDR_interval(MIX_VIDEOCONFIGPARAMSENC_H264(mixbaseconfig), &idr_interval);
- if(mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(), failed to get IDR interval", __func__);
- return OMX_ErrorUndefined;
- }
-
- mix_videoconfigparams_unref(mixbaseconfig);
-
- pVideoIDRInterval->nIDRPeriod = idr_interval;
- pVideoIDRInterval->nPFrames = intra_period;
-
- LOGV("%s(), OMX_IndexConfigVideoAVCIntraPeriod : nIDRPeriod = %d, nPFrames = %d",
- __func__, pVideoIDRInterval->nIDRPeriod, pVideoIDRInterval->nPFrames);
-
- SetTypeHeader(pVideoIDRInterval, sizeof(OMX_VIDEO_CONFIG_AVCINTRAPERIOD));
- }
- break;
-
- case OMX_IndexConfigIntelBitrate: {
-
- LOGV("%s() : OMX_IndexParamIntelBitrate", __func__);
-
- if (avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
-
- OMX_VIDEO_CONFIG_INTEL_BITRATETYPE *pIntelBitrate =
- (OMX_VIDEO_CONFIG_INTEL_BITRATETYPE *) pComponentConfigStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pIntelBitrate)
-
- *pIntelBitrate = avcEncConfigIntelBitrateType;
-
- break;
- }
- case OMX_IndexConfigVideoNalSize: {
-
- LOGV("%s() : OMX_IndexConfigVideoNalSize", __func__);
-
- if (avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
-
- OMX_VIDEO_CONFIG_NALSIZE *pNalSize =
- (OMX_VIDEO_CONFIG_NALSIZE *) pComponentConfigStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pNalSize)
-
- *pNalSize = avcEncConfigNalSize;
- break;
- }
-
- case OMX_IndexConfigIntelSliceNumbers: {
-
- LOGV("%s() : OMX_IndexConfigIntelSliceNumbers", __func__);
-
- if (avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
-
- OMX_VIDEO_CONFIG_INTEL_SLICE_NUMBERS *pSliceNumbers =
- (OMX_VIDEO_CONFIG_INTEL_SLICE_NUMBERS *) pComponentConfigStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pSliceNumbers)
-
- *pSliceNumbers = avcEncConfigSliceNumbers;
- break;
- }
-
- case OMX_IndexConfigIntelAIR: {
-
- LOGV("%s() : OMX_IndexConfigIntelAIR", __func__);
-
- if (avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
-
- OMX_VIDEO_CONFIG_INTEL_AIR *pIntelAir =
- (OMX_VIDEO_CONFIG_INTEL_AIR *) pComponentConfigStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pIntelAir)
-
- *pIntelAir = avcEncConfigAir;
- break;
- }
- case OMX_IndexConfigVideoFramerate: {
-
- LOGV("%s() : OMX_IndexConfigVideoFramerate", __func__);
-
- if (avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
-
- OMX_CONFIG_FRAMERATETYPE *pxFramerate =
- (OMX_CONFIG_FRAMERATETYPE *) pComponentConfigStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pxFramerate)
-
- *pxFramerate = avcEncFramerate;
- break;
- }
- case OMX_IndexIntelPrivateInfo: {
- OMX_VIDEO_CONFIG_PRI_INFOTYPE *p =
- (OMX_VIDEO_CONFIG_PRI_INFOTYPE *)pComponentConfigStructure;
- OMX_U32 index = p->nPortIndex;
- PortVideo *port = NULL;
-
- LOGV("%s(): port index : %lu\n", __func__, index);
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortVideo *>(ports[index]);
-
- if (!port) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- memcpy(p, port->GetPortPrivateInfoParam(), sizeof(*p));
- break;
- }
- default:
- {
- return OMX_ErrorUnsupportedIndex;
- }
- }
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return OMX_ErrorNone;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::ComponentSetConfig(
- OMX_INDEXTYPE nParamIndex,
- OMX_PTR pComponentConfigStructure)
-{
- OMX_ERRORTYPE ret = OMX_ErrorUnsupportedIndex;
- OMX_CONFIG_INTRAREFRESHVOPTYPE* pVideoIFrame;
- OMX_VIDEO_CONFIG_AVCINTRAPERIOD *pVideoIDRInterval;
- MIX_RESULT mret;
-
- LOGV("%s(): enter\n", __func__);
- LOGV("%s() : nIndex = %d\n", __func__, nParamIndex);
-
- switch (nParamIndex)
- {
- case OMX_IndexConfigVideoIntraVOPRefresh:
- {
- LOGV("%s(), OMX_IndexConfigVideoIntraVOPRefresh", __func__);
-
- pVideoIFrame = (OMX_CONFIG_INTRAREFRESHVOPTYPE*) pComponentConfigStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pVideoIFrame)
-
- LOGV("%s(), OMX_IndexConfigVideoIntraVOPRefresh", __func__);
- if(pVideoIFrame->IntraRefreshVOP == OMX_TRUE) {
- LOGV("%s(), pVideoIFrame->IntraRefreshVOP == OMX_TRUE", __func__);
-
- MixEncDynamicParams encdynareq;
- memset(&encdynareq, 0, sizeof(encdynareq));
- encdynareq.force_idr = TRUE;
- if(mix) {
- mret = mix_video_set_dynamic_enc_config (mix,
- MIX_ENC_PARAMS_FORCE_KEY_FRAME, &encdynareq);
- if(mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), failed to set IDR interval", __func__);
- }
- }
- }
- }
- break;
-
- case OMX_IndexConfigVideoAVCIntraPeriod:
- {
- LOGV("%s(), OMX_IndexConfigVideoAVCIntraPeriod", __func__);
-
- pVideoIDRInterval = (OMX_VIDEO_CONFIG_AVCINTRAPERIOD *) pComponentConfigStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pVideoIDRInterval)
-
- LOGV("%s(), OMX_IndexConfigVideoAVCIntraPeriod : nIDRPeriod = %d, nPFrames = %d",
- __func__, pVideoIDRInterval->nIDRPeriod, pVideoIDRInterval->nPFrames);
-
- MixEncDynamicParams encdynareq;
- memset(&encdynareq, 0, sizeof(encdynareq));
- encdynareq.idr_interval = pVideoIDRInterval->nIDRPeriod;
- encdynareq.intra_period = pVideoIDRInterval->nPFrames;
- if(mix) {
-
- // Ignore the return code
- mret = mix_video_set_dynamic_enc_config (mix, MIX_ENC_PARAMS_IDR_INTERVAL, &encdynareq);
- if(mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), failed to set IDR interval", __func__);
- }
-
- mret = mix_video_set_dynamic_enc_config (mix, MIX_ENC_PARAMS_GOP_SIZE, &encdynareq);
- if(mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), failed to set GOP size", __func__);
- }
- }
- }
- break;
- case OMX_IndexConfigIntelBitrate: {
-
- LOGV("%s(), OMX_IndexConfigIntelBitrate", __func__);
- if (avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- LOGV("%s(), eControlRate == OMX_Video_Intel_ControlRateMax");
- break;
- }
-
- OMX_VIDEO_CONFIG_INTEL_BITRATETYPE *pIntelBitrate =
- (OMX_VIDEO_CONFIG_INTEL_BITRATETYPE *) pComponentConfigStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pIntelBitrate)
-
- avcEncConfigIntelBitrateType = *pIntelBitrate;
-
- if (mix && avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateVideoConferencingMode) {
-
- LOGV("%s(), avcEncConfigIntelBitrateType.nInitialQP = %d", __func__,
- avcEncConfigIntelBitrateType.nInitialQP);
-
- LOGV("%s(), avcEncConfigIntelBitrateType.nMinQP = %d", __func__,
- avcEncConfigIntelBitrateType.nMinQP);
-
- LOGV("%s(), avcEncConfigIntelBitrateType.nMaxEncodeBitrate = %d", __func__,
- avcEncConfigIntelBitrateType.nMaxEncodeBitrate);
-
- LOGV("%s(), avcEncConfigIntelBitrateType.nTargetPercentage = %d", __func__,
- avcEncConfigIntelBitrateType.nTargetPercentage);
-
- LOGV("%s(), avcEncConfigIntelBitrateType.nWindowSize = %d", __func__,
- avcEncConfigIntelBitrateType.nWindowSize);
-
- MixEncParamsType params_type;
- MixEncDynamicParams dynamic_params;
- memset(&dynamic_params, 0, sizeof(dynamic_params));
-
-
- params_type = MIX_ENC_PARAMS_INIT_QP;
- dynamic_params.init_QP = avcEncConfigIntelBitrateType.nInitialQP;
- mret = mix_video_set_dynamic_enc_config(mix, params_type,
- &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
-
- params_type = MIX_ENC_PARAMS_MIN_QP;
- dynamic_params.min_QP = avcEncConfigIntelBitrateType.nMinQP;
- mret = mix_video_set_dynamic_enc_config(mix, params_type,
- &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
-
- params_type = MIX_ENC_PARAMS_BITRATE;
- dynamic_params.bitrate
- = avcEncConfigIntelBitrateType.nMaxEncodeBitrate;
- mret = mix_video_set_dynamic_enc_config(mix, params_type,
- &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
-
- params_type = MIX_ENC_PARAMS_TARGET_PERCENTAGE;
- dynamic_params.target_percentage
- = avcEncConfigIntelBitrateType.nTargetPercentage;
- mret = mix_video_set_dynamic_enc_config(mix, params_type,
- &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
-
- params_type = MIX_ENC_PARAMS_WINDOW_SIZE;
- dynamic_params.window_size
- = avcEncConfigIntelBitrateType.nWindowSize;
- mret = mix_video_set_dynamic_enc_config(mix, params_type,
- &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
- }
- break;
- }
-
- case OMX_IndexConfigVideoNalSize: {
- if (avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
-
- OMX_VIDEO_CONFIG_NALSIZE *pNalSize =
- (OMX_VIDEO_CONFIG_NALSIZE *) pComponentConfigStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pNalSize)
-
- avcEncConfigNalSize = *pNalSize;
-
- if (mix && avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateVideoConferencingMode) {
-
- MixEncParamsType params_type;
- MixEncDynamicParams dynamic_params;
- memset(&dynamic_params, 0, sizeof(dynamic_params));
-
- params_type = MIX_ENC_PARAMS_MTU_SLICE_SIZE;
- dynamic_params.max_slice_size = avcEncConfigNalSize.nNaluBytes * 8; // bits
- mret = mix_video_set_dynamic_enc_config (mix,
- params_type, &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
- }
- break;
- }
-
- case OMX_IndexConfigIntelSliceNumbers: {
- if (avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
-
- OMX_VIDEO_CONFIG_INTEL_SLICE_NUMBERS *pSliceNumbers =
- (OMX_VIDEO_CONFIG_INTEL_SLICE_NUMBERS *) pComponentConfigStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pSliceNumbers)
-
- avcEncConfigSliceNumbers = *pSliceNumbers;
-
- LOGV("%s(), OMX_IndexConfigIntelSliceNumbers", __func__);
- LOGV("%s(), nISliceNumber = %d nPSliceNumber = %d", __func__,
- pSliceNumbers->nISliceNumber, pSliceNumbers->nPSliceNumber);
-
- if (mix && avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateVideoConferencingMode) {
-
- MixEncParamsType params_type;
- MixEncDynamicParams dynamic_params;
- memset(&dynamic_params, 0, sizeof(dynamic_params));
-
- params_type = MIX_ENC_PARAMS_I_SLICE_NUM;
- dynamic_params.I_slice_num = pSliceNumbers->nISliceNumber;
- mret = mix_video_set_dynamic_enc_config (mix,
- params_type, &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
- params_type = MIX_ENC_PARAMS_P_SLICE_NUM;
- dynamic_params.P_slice_num = pSliceNumbers->nPSliceNumber;
- mret = mix_video_set_dynamic_enc_config (mix,
- params_type, &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
- }
- break;
- }
- case OMX_IndexConfigIntelAIR: {
-
- if (avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
- OMX_VIDEO_CONFIG_INTEL_AIR *pIntelAir =
- (OMX_VIDEO_CONFIG_INTEL_AIR *) pComponentConfigStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pIntelAir)
-
- avcEncConfigAir = *pIntelAir;
-
- if (mix && avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateVideoConferencingMode) {
-
- MixEncParamsType params_type;
- MixEncDynamicParams dynamic_params;
- memset(&dynamic_params, 0, sizeof(dynamic_params));
-
- if(pIntelAir->bAirEnable) {
-
- params_type = MIX_ENC_PARAMS_REFRESH_TYPE;
- dynamic_params.refresh_type = MIX_VIDEO_AIR;
- mret = mix_video_set_dynamic_enc_config (mix, params_type, &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
-
- params_type = MIX_ENC_PARAMS_AIR;
- dynamic_params.air_params.air_auto = pIntelAir->bAirAuto;
- dynamic_params.air_params.air_MBs = pIntelAir->nAirMBs;
- dynamic_params.air_params.air_threshold = pIntelAir->nAirThreshold;
- mret = mix_video_set_dynamic_enc_config (mix, params_type, &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
-
- } else {
-
- params_type = MIX_ENC_PARAMS_REFRESH_TYPE;
- dynamic_params.refresh_type = MIX_VIDEO_NONIR;
- mret = mix_video_set_dynamic_enc_config (mix, params_type, &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
- }
- }
- break;
- }
-
- case OMX_IndexConfigVideoFramerate: {
- if (avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
-
- OMX_CONFIG_FRAMERATETYPE *pxFramerate =
- (OMX_CONFIG_FRAMERATETYPE *) pComponentConfigStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pxFramerate)
-
- avcEncFramerate = *pxFramerate;
-
- if (mix && avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateVideoConferencingMode) {
-
- MixEncParamsType params_type;
- MixEncDynamicParams dynamic_params;
- memset(&dynamic_params, 0, sizeof(dynamic_params));
-
- params_type = MIX_ENC_PARAMS_FRAME_RATE;
- dynamic_params.frame_rate_denom = 1;
- dynamic_params.frame_rate_num = avcEncFramerate.xEncodeFramerate >> 16; // Q16 format
- mret = mix_video_set_dynamic_enc_config (mix, params_type, &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
- }
- break;
- }
-
- default:
- {
- return OMX_ErrorUnsupportedIndex;
- }
- }
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return OMX_ErrorNone;
-}
-/* end of component methods & helpers */
-
-/*
- * implement ComponentBase::Processor[*]
- */
-OMX_ERRORTYPE MrstPsbComponent::ProcessorInit(void)
-{
- MixVideo *mix = NULL;
- MixVideoInitParams *vip = NULL;
- MixParams *mvp = NULL;
- MixVideoConfigParams *vcp = NULL;
- MixDisplayAndroid *display = NULL;
-
- temp_coded_data_buffer = NULL;
- b_sync_frame = false;
-
- uint major, minor;
-
- OMX_ERRORTYPE oret = OMX_ErrorNone;
- MIX_RESULT mret;
-
- LOGV("%s(): enter\n", __func__);
-
- mix = mix_video_new();
- LOGV("%s(): called to mix_video_new()", __func__);
-
- if (!mix) {
- LOGE("%s(),%d: exit, mix_video_new failed", __func__, __LINE__);
- goto error_out;
- }
-
- mix_video_get_version(mix, &major, &minor);
- LOGV("MixVideo version: %d.%d", major, minor);
-
- /* encoder */
- vcp = MIX_VIDEOCONFIGPARAMS(mix_videoconfigparamsenc_h264_new());
-
- mvp = MIX_PARAMS(mix_videoencodeparams_new());
-
- if (!vcp || !mvp ) {
- LOGE("%s(),%d: exit, failed to allocate vcp, mvp\n",
- __func__, __LINE__);
- goto error_out;
- }
-
- oret = ChangeVcpWithPortParam(vcp,
- static_cast<PortVideo *>(ports[INPORT_INDEX]),
- static_cast<PortVideo *>(ports[OUTPORT_INDEX]),
- NULL);
- if (oret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit, ChangeVcpWithPortParam failed (ret == 0x%08x)\n",
- __func__, __LINE__, oret);
- goto error_out;
- }
-
- display = mix_displayandroid_new();
- if (!display) {
- LOGE("%s(),%d: exit, mix_displayandroid_new failed", __func__, __LINE__);
- goto error_out;
- }
-
- vip = mix_videoinitparams_new();
- if (!vip) {
- LOGE("%s(),%d: exit, mix_videoinitparams_new failed", __func__,
- __LINE__);
- goto error_out;
- }
-
- {
- Display *android_display = (Display*)malloc(sizeof(Display));
- *(android_display) = 0x18c34078;
-
- LOGV("*android_display = %d", *android_display);
-
- mret = mix_displayandroid_set_display(display, android_display);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(),%d: exit, mix_displayandroid_set_display failed "
- "(ret == 0x%08x)", __func__, __LINE__, mret);
- goto error_out;
- }
- }
-
- mret = mix_videoinitparams_set_display(vip, MIX_DISPLAY(display));
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(),%d: exit, mix_videoinitparams_set_display failed "
- "(ret == 0x%08x)", __func__, __LINE__, mret);
- goto error_out;
- }
-
- mret = mix_video_initialize(mix, MIX_CODEC_MODE_ENCODE, vip, NULL);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(),%d: exit, mix_video_initialize failed (ret == 0x%08x)",
- __func__, __LINE__, mret);
- goto error_out;
- }
-
- oret = CheckAndEnableBufferSharingMode();
- if (oret != OMX_ErrorNone) {
- LOGE("%s(), %d: CheckAndEnableBufferSharingMode() failed ", __func__, __LINE__);
- goto error_out;
- }
-
- oret = RequestShareBuffers(mix,
- MIX_VIDEOCONFIGPARAMSENC(vcp)->picture_width,
- MIX_VIDEOCONFIGPARAMSENC(vcp)->picture_height);
- if (oret != OMX_ErrorNone) {
- LOGE("%s(), %d: RequestShareBuffers() failed ", __func__, __LINE__);
- goto error_out;
- }
-
- mix_videoconfigparamsenc_set_share_buf_mode(MIX_VIDEOCONFIGPARAMSENC(vcp), FALSE);
-
- LOGV("mix_video_configure");
- mret = mix_video_configure(mix, vcp, NULL);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(), %d: exit, mix_video_configure failed "
- "(ret:0x%08x)", __func__, __LINE__, mret);
- oret = OMX_ErrorUndefined;
- if(mret == MIX_RESULT_NO_MEMORY) {
- oret = OMX_ErrorInsufficientResources;
- } else if(mret == MIX_RESULT_NOT_PERMITTED) {
- oret = (OMX_ERRORTYPE)OMX_ErrorIntelVideoNotPermitted;
- }
- goto error_out;
- }
-
- LOGV("%s(): mix video configured", __func__);
-
- this->mix = mix;
- this->vip = vip;
- this->mvp = mvp;
- this->vcp = vcp;
- this->display = display;
- this->mixbuffer_in[0] = NULL;
-
- inframe_counter = 0;
- outframe_counter = 0;
- is_mixvideodec_configured = OMX_FALSE;
-
- last_ts = 0;
- last_fps = 0.0;
-
- b_config_sent = false;
-
- video_len = 0;
- video_data = NULL;
-
- LOGV("temp coded buffer %dx%d", MIX_VIDEOCONFIGPARAMSENC(vcp)->picture_width,
- MIX_VIDEOCONFIGPARAMSENC(vcp)->picture_height);
- temp_coded_data_buffer_size = MIX_VIDEOCONFIGPARAMSENC(vcp)->picture_width *
- MIX_VIDEOCONFIGPARAMSENC(vcp)->picture_height * 400 / 16 / 16;
- temp_coded_data_buffer = new OMX_U8 [temp_coded_data_buffer_size];
-
- oret = RegisterShareBuffersToPort();
- if (oret != OMX_ErrorNone) {
- LOGE("%s(), %d RegisterShareBufferToPort() failed", __func__, __LINE__);
- oret = OMX_ErrorUndefined;
- goto error_out;
- }
-
- oret = RegisterShareBuffersToLib();
- if (oret != OMX_ErrorNone) {
- LOGE("%s(), %d register Share Buffering Mode failed", __func__, __LINE__);
- goto error_out;
- }
-
- oret = EnterBufferSharingMode();
- if (oret != OMX_ErrorNone) {
- LOGE("%s(), %d EnterShareBufferingMode() failed", __func__, __LINE__);
- goto error_out;
- }
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, oret);
- return oret;
-
-error_out:
- if (buffer_sharing_state == BUFFER_SHARING_EXECUTING) {
- ExitBufferSharingMode();
- }
- mix_params_unref(mvp);
- mix_videoconfigparams_unref(vcp);
- mix_displayandroid_unref(display);
- mix_videoinitparams_unref(vip);
- mix_video_unref(mix);
-
- if (temp_coded_data_buffer != NULL) {
- delete [] temp_coded_data_buffer;
- temp_coded_data_buffer = NULL;
- }
-
- return OMX_ErrorUndefined;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::ProcessorDeinit(void)
-{
- OMX_ERRORTYPE oret = OMX_ErrorNone;
- MIX_RESULT mret;
-
- LOGV("%s(): enter\n", __func__);
-
- if (buffer_sharing_state == BUFFER_SHARING_EXECUTING) {
- oret = ExitBufferSharingMode();
- if (oret != OMX_ErrorNone) {
- LOGE("%s(),%d: ExitShareBufferingMode failed", __func__, __LINE__);
- }
- }
-
- mix_video_eos(mix);
- mix_video_flush(mix);
-
- mix_params_unref(mvp);
- mix_videoconfigparams_unref(vcp);
- mix_displayandroid_unref(display);
- mix_videoinitparams_unref(vip);
-
- if (mixbuffer_in[0]) {
- mix_video_release_mixbuffer(mix, mixbuffer_in[0]);
- mixbuffer_in[0] = NULL;
- }
-
- mix_video_deinitialize(mix);
- mix_video_unref(mix);
-
- //delete temp coded buffer
- if (temp_coded_data_buffer != NULL) {
- delete [] temp_coded_data_buffer;
- temp_coded_data_buffer = NULL;
- }
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, oret);
- return oret;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::ProcessorStart(void)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
-
- LOGV("%s(): enter\n", __func__);
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::ProcessorStop(void)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
-
- LOGV("%s(): enter\n", __func__);
-
- ports[INPORT_INDEX]->ReturnAllRetainedBuffers();
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::ProcessorPause(void)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
-
- LOGV("%s(): enter\n", __func__);
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::ProcessorResume(void)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
-
- LOGV("%s(): enter\n", __func__);
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-// The function is based on mix_videofmtenc_h264_AnnexB_to_length_prefixed()
-OMX_ERRORTYPE MrstPsbComponent::ParserConfigData(OMX_U8* coded_buf,OMX_U32 coded_len,OMX_U8** config_buf, OMX_U32* config_len)
-{
- unsigned int pos = 0;
- unsigned int last_pos = 0;
-
- unsigned int zero_byte_count = 0;
- unsigned int prefix_length = 0;
- unsigned int leading_zero_count = 0;
- int nal_size = 0;
- unsigned int nal_type = 0;
- unsigned int length = 0;
-
- *config_buf = NULL;
- *config_len = 0;
-
- LOGV ("Begin\n");
-
- if (coded_buf == NULL || coded_len == 0) {
-
- LOGE("input arguments is not valid\n");
- return OMX_ErrorUndefined;
- }
-
- while ((coded_buf[pos++] == 0x00)) {
- zero_byte_count ++;
- if (pos >= coded_len) //to make sure the buffer to be accessed is valid
- break;
- }
-
- if (coded_buf[pos - 1] != 0x01 || zero_byte_count < 2)
- {
- LOGE("The stream is not AnnexB format \n");
- return OMX_ErrorUndefined; ; //not AnnexB, we won't process it
- }
-
- /*
- * First NAL Unit
- */
- nal_type = (*(coded_buf + pos)) & 0x1F;
- LOGV ("First nal_type = 0x%x\n", nal_type);
-
-
- if(nal_type != SPS && nal_type != PPS) {
-
- *config_len = 0;
- return OMX_ErrorNone;
- }
-
- zero_byte_count = 0;
- last_pos = pos;
-
- while (pos < coded_len) {
-
- while (coded_buf[pos++] == 0) {
- zero_byte_count ++;
- if (pos >= coded_len) //to make sure the buffer to be accessed is valid
- break;
- }
-
- if (coded_buf[pos - 1] == 0x01 && zero_byte_count >= 2) {
- if (zero_byte_count == 2) {
- prefix_length = 3;
- }
- else {
- prefix_length = 4;
- leading_zero_count = zero_byte_count - 3;
- }
-
- LOGV("leading_zero_count = %d\n", leading_zero_count);
-
- nal_size = pos - last_pos - prefix_length - leading_zero_count;
- if (nal_size < 0) {
- LOGE ("something wrong in the stream\n");
- return OMX_ErrorUndefined; //not AnnexB, we won't process it
- }
-
- nal_type = (*(coded_buf + pos)) & 0x1F;
-
- LOGV ("nal_size = %d\n", nal_size);
- LOGV ("nal_type = 0x%x\n", nal_type);
-
- if(nal_type != SPS && nal_type != PPS) {
- length = pos - prefix_length - leading_zero_count;
- LOGV ("config length = %d\n", length);
- break;
- }
-
- zero_byte_count = 0;
- leading_zero_count = 0;
- last_pos = pos;
- }
- else if (pos == coded_len) {
-
- LOGV ("Only header found\n");
- length = coded_len;
- }
- else {
- zero_byte_count = 0;
- leading_zero_count = 0;
- }
- }
-
- *config_len = length;
- *config_buf = coded_buf;
- LOGV ("End\n");
- return OMX_ErrorNone;
-}
-
-
-/* implement ComponentBase::ProcessorProcess */
-OMX_ERRORTYPE MrstPsbComponent::ProcessorProcess(
- OMX_BUFFERHEADERTYPE ***pBuffers,
- buffer_retain_t *retain,
- OMX_U32 nr_buffers)
-{
- MixIOVec buffer_in, buffer_out;
- OMX_U32 outfilledlen = 0;
- OMX_S64 outtimestamp = 0;
- OMX_U32 outflags = 0;
-
- OMX_U8* config_data = NULL;
- OMX_U32 config_len = 0;
-
- OMX_ERRORTYPE oret = OMX_ErrorNone;
- MIX_RESULT mret;
-
- LOGV("%s(): <******avc******> enter encode\n", __func__);
-
- LOGV_IF((*pBuffers[INPORT_INDEX])->nFlags & OMX_BUFFERFLAG_EOS,
- "%s(),%d: got OMX_BUFFERFLAG_EOS\n", __func__, __LINE__);
-
- if (!(*pBuffers[INPORT_INDEX])->nFilledLen) {
- LOGV("%s(),%d: input buffer's nFilledLen is zero\n",
- __func__, __LINE__);
- goto out;
- }
-
- if (buffer_sharing_state != BUFFER_SHARING_INVALID) {
- buffer_in.data_size = buffer_sharing_info[0].dataSize;
- buffer_in.buffer_size = buffer_sharing_info[0].allocatedSize;
- buffer_in.data =
- *(reinterpret_cast<uchar**>((*pBuffers[INPORT_INDEX])->pBuffer + (*pBuffers[INPORT_INDEX])->nOffset));
- } else {
- buffer_in.data =
- (*pBuffers[INPORT_INDEX])->pBuffer + (*pBuffers[INPORT_INDEX])->nOffset;
- buffer_in.data_size = (*pBuffers[INPORT_INDEX])->nFilledLen;
- buffer_in.buffer_size = (*pBuffers[INPORT_INDEX])->nFilledLen;
- }
-
- LOGV("buffer_in.data=%x, data_size=%d, buffer_size=%d",
- (unsigned)buffer_in.data, buffer_in.data_size, buffer_in.buffer_size);
-
- buffer_out.data = (*pBuffers[OUTPORT_INDEX])->pBuffer +(*pBuffers[OUTPORT_INDEX])->nOffset;
- buffer_out.data_size = 0;
- buffer_out.buffer_size = (*pBuffers[OUTPORT_INDEX])->nAllocLen - (*pBuffers[OUTPORT_INDEX])->nOffset;
- mixiovec_out[0] = &buffer_out;
-
-normal_start:
- /* get MixBuffer */
- mret = mix_video_get_mixbuffer(mix, &mixbuffer_in[0]);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(), %d: exit, mix_video_get_mixbuffer failed (ret:0x%08x)",
- __func__, __LINE__, mret);
- oret = OMX_ErrorUndefined;
- goto out;
- }
-
- /* fill MixBuffer */
- mret = mix_buffer_set_data(mixbuffer_in[0],
- buffer_in.data, buffer_in.data_size,
- (ulong)this, AvcEncMixBufferCallback);
-
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(), %d: exit, mix_buffer_set_data failed (ret:0x%08x)",
- __func__, __LINE__, mret);
- oret = OMX_ErrorUndefined;
- goto out;
- }
-
- /* encoder */
- LOGV("in buffer = 0x%x ts = %lld",
- (*pBuffers[INPORT_INDEX])->pBuffer + (*pBuffers[INPORT_INDEX])->nOffset,
- (*pBuffers[INPORT_INDEX])->nTimeStamp);
-
- switch(avcEncNaluFormatType) {
-
- case OMX_NaluFormatStartCodes: //CAUTION: this case not tested yet
- LOGV("begin to call mix_video_encode()");
- mret = mix_video_encode(mix, mixbuffer_in, 1, mixiovec_out, 1,
- MIX_VIDEOENCODEPARAMS(mvp));
-
- LOGV("%s(), mret = 0x%08x", __func__, mret);
- LOGV("output data size = %d", mixiovec_out[0]->data_size);
-
- outtimestamp = (*pBuffers[INPORT_INDEX])->nTimeStamp;
-
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(), %d: exit, mix_video_encode failed (ret == 0x%08x)\n",
- __func__, __LINE__, mret);
- oret = OMX_ErrorUndefined;
- goto out;
- }
-
- if (mixiovec_out[0]-> data_size == 0) {
- retain[OUTPORT_INDEX] = BUFFER_RETAIN_GETAGAIN;
- retain[INPORT_INDEX] = BUFFER_RETAIN_ACCUMULATE;
- goto out;
- }
- outfilledlen = mixiovec_out[0]-> data_size;
- break;
- case OMX_NaluFormatStartCodesSeparateFirstHeader:
- /*
- FIXME: Stagefright requires:
- 1. SPS and PPS are packed together in single output buffer;
- 2. Only 1 SPS & PPS buffer is sent in one session;
- */
- if (video_len == 0) {
-
- LOGV("begin to call mix_video_encode()");
- mret = mix_video_encode(mix, mixbuffer_in, 1, mixiovec_out, 1,
- MIX_VIDEOENCODEPARAMS(mvp));
-
- LOGV("%s(), mret = 0x%08x", __func__, mret);
- LOGV("output data size = %d", mixiovec_out[0]->data_size);
-
- outtimestamp = (*pBuffers[INPORT_INDEX])->nTimeStamp;
-
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(), %d: exit, mix_video_encode failed (ret == 0x%08x)\n",
- __func__, __LINE__, mret);
- oret = OMX_ErrorUndefined;
- goto out;
- }
-
- if (mixiovec_out[0]-> data_size== 0) {
- retain[OUTPORT_INDEX] = BUFFER_RETAIN_GETAGAIN;
- retain[INPORT_INDEX] = BUFFER_RETAIN_ACCUMULATE;
- goto out;
- }
- b_sync_frame = false;
- oret = ParserConfigData(mixiovec_out[0]->data,mixiovec_out[0]->data_size,&config_data, &config_len);
- video_data = mixiovec_out[0]->data;
- video_len = mixiovec_out[0]->data_size;
- if(OMX_ErrorNone != oret ) {
- LOGE("%s(), %d: exit, ParserConfigData() failed (ret == 0x%08x)\n",__func__, __LINE__, oret);
- goto out;
- }
-
- }
- //IDR frame
- if( config_len != 0) {
- //Need send SPS+PPS NAL unit since stagefright want this as codec config data
- if(!b_config_sent) {
- outfilledlen = config_len;
- outflags |= OMX_BUFFERFLAG_CODECCONFIG;
- b_config_sent = true;
- if(config_data == NULL) {
- LOGE("%s()exit config_data is NULL.",__func__);
- oret = OMX_ErrorUndefined;
- goto out;
- }
- if ((*pBuffers[OUTPORT_INDEX])->pBuffer + (*pBuffers[OUTPORT_INDEX])->nOffset != config_data) {
- memcpy((*pBuffers[OUTPORT_INDEX])->pBuffer + (*pBuffers[OUTPORT_INDEX])->nOffset, config_data, config_len);
- }
- // Separate SPS+PPS data from first IDR frame
- video_len = mixiovec_out[0]->data_size - config_len;
- if(video_len > temp_coded_data_buffer_size) {
- LOGE("temp_coded_data_buffer_size is too small %s",__LINE__);
- return OMX_ErrorUndefined;
- }
- memcpy(temp_coded_data_buffer,mixiovec_out[0]->data + config_len,video_len);
- video_data = temp_coded_data_buffer;
- }
- else {
- //send SPS+PPS+IDR frame data
- if ((*pBuffers[OUTPORT_INDEX])->pBuffer + (*pBuffers[OUTPORT_INDEX])->nOffset != video_data) {
- memcpy((*pBuffers[OUTPORT_INDEX])->pBuffer + (*pBuffers[OUTPORT_INDEX])->nOffset, video_data,video_len);
- }
- outfilledlen = video_len;
- video_data = NULL;
- video_len = 0;
- }
- outflags |= OMX_BUFFERFLAG_SYNCFRAME;
- outflags |= OMX_BUFFERFLAG_ENDOFFRAME;
- b_sync_frame = true;
- }
- else {
- //NAL frame
- outfilledlen = video_len;
- if (b_sync_frame) {
- //first IDR frame NAL data has been separated. It's a sync frame
- outflags |= OMX_BUFFERFLAG_SYNCFRAME;
- }
-
- if ((*pBuffers[OUTPORT_INDEX])->pBuffer + (*pBuffers[OUTPORT_INDEX])->nOffset != video_data) {
- memcpy((*pBuffers[OUTPORT_INDEX])->pBuffer + (*pBuffers[OUTPORT_INDEX])->nOffset, video_data, video_len);
- }
-
- video_data = NULL;
- video_len = 0;
-
- outflags |= OMX_BUFFERFLAG_ENDOFFRAME;
- }
-
- if (outfilledlen > 0) {
- retain[OUTPORT_INDEX] = BUFFER_RETAIN_NOT_RETAIN;
- } else {
- retain[OUTPORT_INDEX] = BUFFER_RETAIN_GETAGAIN;
- }
-
- if (video_len == 0) {
- retain[INPORT_INDEX] = BUFFER_RETAIN_ACCUMULATE; //release by callback
- } else {
- retain[INPORT_INDEX] = BUFFER_RETAIN_GETAGAIN; //get again
- }
- break;
-
- default:
- LOGE("Unsupported Nalu format.%s",__LINE__);
- oret = OMX_ErrorUndefined;
- break;
-
- }
-
-#if SHOW_FPS
- {
- struct timeval t;
- OMX_TICKS current_ts, interval_ts;
- float current_fps, average_fps;
-
- t.tv_sec = t.tv_usec = 0;
- gettimeofday(&t, NULL);
-
- current_ts =
- (nsecs_t)t.tv_sec * 1000000000 + (nsecs_t)t.tv_usec * 1000;
- interval_ts = current_ts - last_ts;
- last_ts = current_ts;
-
- current_fps = (float)1000000000 / (float)interval_ts;
- average_fps = (current_fps + last_fps) / 2;
- last_fps = current_fps;
-
- LOGV("FPS = %2.1f\n", average_fps);
- }
-#endif
-
-out:
- if (mixbuffer_in[0]) {
- mix_video_release_mixbuffer(mix, mixbuffer_in[0]);
- mixbuffer_in[0] = NULL;
- }
-
- LOGV("output buffers = %p:%d, flag = %x",
- (*pBuffers[OUTPORT_INDEX])->pBuffer,
- outfilledlen,
- outflags);
-
- if(retain[OUTPORT_INDEX] != BUFFER_RETAIN_GETAGAIN) {
- (*pBuffers[OUTPORT_INDEX])->nFilledLen = outfilledlen;
- (*pBuffers[OUTPORT_INDEX])->nTimeStamp = outtimestamp;
- (*pBuffers[OUTPORT_INDEX])->nFlags = outflags;
- }
-
- if (retain[INPORT_INDEX] == BUFFER_RETAIN_NOT_RETAIN ||
- retain[INPORT_INDEX] == BUFFER_RETAIN_ACCUMULATE ) {
- inframe_counter++;
- }
-
- if (retain[OUTPORT_INDEX] == BUFFER_RETAIN_NOT_RETAIN)
- outframe_counter++;
-
- if (avcEncParamIntelBitrateType.eControlRate != OMX_Video_Intel_ControlRateVideoConferencingMode) {
- if (oret == (OMX_ERRORTYPE) OMX_ErrorIntelExtSliceSizeOverflow) {
- oret = OMX_ErrorNone;
- }
- }
-
- LOGV_IF(oret == OMX_ErrorNone,
- "%s(),%d: exit, encode is done\n", __func__, __LINE__);
-
- return oret;
-}
-/* end of implement ComponentBase::Processor[*] */
-
-OMX_ERRORTYPE MrstPsbComponent::__AvcChangeVcpWithPortParam(
- MixVideoConfigParams *vcp, PortAvc *port, bool *vcp_changed)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
-
- /* encoder */
- MixVideoConfigParamsEnc *config = MIX_VIDEOCONFIGPARAMSENC(vcp);
- mix_videoconfigparamsenc_set_encode_format(
- config, MIX_ENCODE_TARGET_FORMAT_H264);
- mix_videoconfigparamsenc_set_profile(config, MIX_PROFILE_H264BASELINE);
- mix_videoconfigparamsenc_set_mime_type(config, "video/x-h264");
- mix_videoconfigparamsenc_h264_set_bus(
- MIX_VIDEOCONFIGPARAMSENC_H264(config), 0);
- mix_videoconfigparamsenc_h264_set_dlk(
- MIX_VIDEOCONFIGPARAMSENC_H264(config), FALSE);
-
- if (avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateVideoConferencingMode) {
-
- LOGV("%s(), avcEncConfigSliceNumbers.nISliceNumber = %d", __func__, avcEncConfigSliceNumbers.nISliceNumber);
- LOGV("%s(), calls to mix_videoconfigparamsenc_h264_set_I_slice_num()", __func__);
-
- mix_videoconfigparamsenc_h264_set_I_slice_num(
- MIX_VIDEOCONFIGPARAMSENC_H264(config),
- avcEncConfigSliceNumbers.nISliceNumber);
-
- LOGV("%s(), avcEncConfigSliceNumbers.nPSliceNumber = %d", __func__, avcEncConfigSliceNumbers.nPSliceNumber);
- LOGV("%s(), calls to mix_videoconfigparamsenc_h264_set_P_slice_num()", __func__);
-
- mix_videoconfigparamsenc_h264_set_P_slice_num(
- MIX_VIDEOCONFIGPARAMSENC_H264(config),
- avcEncConfigSliceNumbers.nPSliceNumber);
-
- if(avcEncConfigAir.bAirEnable == OMX_TRUE) {
- mix_videoconfigparamsenc_set_refresh_type(config, MIX_VIDEO_AIR);
-
- MixAIRParams mixairparam;
- mixairparam.air_auto = avcEncConfigAir.bAirAuto;
- mixairparam.air_MBs = avcEncConfigAir.nAirMBs;
- mixairparam.air_threshold = avcEncConfigAir.nAirThreshold;
- mix_videoconfigparamsenc_set_AIR_params(config, mixairparam);
-
- } else {
- mix_videoconfigparamsenc_set_refresh_type(config, MIX_VIDEO_NONIR);
- }
-
- } else {
-
- mix_videoconfigparamsenc_h264_set_I_slice_num(
- MIX_VIDEOCONFIGPARAMSENC_H264(config),
- avcEncConfigSliceNumbers.nISliceNumber);
-
- mix_videoconfigparamsenc_h264_set_P_slice_num(
- MIX_VIDEOCONFIGPARAMSENC_H264(config),
- avcEncConfigSliceNumbers.nPSliceNumber);
-
- }
-
-
- if (avcEncNaluFormatType == OMX_NaluFormatStartCodes ||
- avcEncNaluFormatType ==OMX_NaluFormatStartCodesSeparateFirstHeader) {
- mix_videoconfigparamsenc_h264_set_delimiter_type(
- MIX_VIDEOCONFIGPARAMSENC_H264(config), MIX_DELIMITER_ANNEXB);
- LOGV("%s(), use MIX_DELIMITER_ANNEXB", __func__);
- } else {
- mix_videoconfigparamsenc_h264_set_delimiter_type(
- MIX_VIDEOCONFIGPARAMSENC_H264(config),
- MIX_DELIMITER_LENGTHPREFIX);
- LOGV("%s(), use MIX_DELIMITER_LENGTHPREFIX", __func__);
- }
-
- if(avcEncIDRPeriod == 0) //FIXME: avcEncIDRPeriod should be set dynamic
- avcEncIDRPeriod = 1;
-
- LOGV("%s() : avcEncIDRPeriod = %d", __func__, avcEncIDRPeriod);
- mix_videoconfigparamsenc_h264_set_IDR_interval(
- MIX_VIDEOCONFIGPARAMSENC_H264(config), avcEncIDRPeriod);
-
- return ret;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::ChangeVcpWithPortParam(
- MixVideoConfigParams *vcp,
- PortVideo *port_in,
- PortVideo *port_out,
- bool *vcp_changed)
-{
- const OMX_PARAM_PORTDEFINITIONTYPE *pd_out = port_out->GetPortDefinition();
- const OMX_PARAM_PORTDEFINITIONTYPE *pd_in = port_in->GetPortDefinition();
- OMX_ERRORTYPE ret;
-
- ret = __AvcChangeVcpWithPortParam(vcp,
- static_cast<PortAvc *>(port_out),
- vcp_changed);
- /* encoder */
-
- MixVideoConfigParamsEnc *config = MIX_VIDEOCONFIGPARAMSENC(vcp);
- const OMX_VIDEO_PARAM_BITRATETYPE *bitrate =
- port_out->GetPortBitrateParam();
- OMX_VIDEO_CONTROLRATETYPE controlrate;
-
- if ((config->picture_width != pd_out->format.video.nFrameWidth) ||
- (config->picture_height != pd_out->format.video.nFrameHeight)) {
- LOGV("%s(): width : %d != %ld", __func__,
- config->picture_width, pd_out->format.video.nFrameWidth);
- LOGV("%s(): height : %d != %ld", __func__,
- config->picture_height, pd_out->format.video.nFrameHeight);
-
- mix_videoconfigparamsenc_set_picture_res(config,
- pd_out->format.video.nFrameWidth,
- pd_out->format.video.nFrameHeight);
- if (vcp_changed)
- *vcp_changed = true;
- }
-
- if (config->frame_rate_num != (pd_in->format.video.xFramerate >> 16)) {
- LOGV("%s(): framerate : %u != %ld", __func__,
- config->frame_rate_num, pd_in->format.video.xFramerate >> 16);
-
- mix_videoconfigparamsenc_set_frame_rate(config,
- pd_in->format.video.xFramerate >> 16,
- 1);
-
-
- if(avcEncFramerate.xEncodeFramerate != 0) {
- mix_videoconfigparamsenc_set_frame_rate(config,
- avcEncFramerate.xEncodeFramerate >> 16, 1);
- } else {
- avcEncFramerate.xEncodeFramerate = pd_in->format.video.xFramerate;
- }
-
- if (vcp_changed)
- *vcp_changed = true;
- }
-
- if(avcEncPFrames == 0) {
- avcEncPFrames = config->frame_rate_num / 2;
- }
-
- LOGV("%s() : avcEncPFrames = %d", __func__, avcEncPFrames);
- mix_videoconfigparamsenc_set_intra_period(config, avcEncPFrames);
-
- if (avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
-
- LOGV("%s(), eControlRate == OMX_Video_Intel_ControlRateMax", __func__);
-
- if (config->bitrate != bitrate->nTargetBitrate) {
- LOGV("%s(): bitrate : %d != %ld", __func__,
- config->bitrate, bitrate->nTargetBitrate);
-
- mix_videoconfigparamsenc_set_bit_rate(config,
- bitrate->nTargetBitrate);
-
- if (vcp_changed)
- *vcp_changed = true;
- }
-
- if (config->rate_control == MIX_RATE_CONTROL_CBR)
- controlrate = OMX_Video_ControlRateConstant;
- else if (config->rate_control == MIX_RATE_CONTROL_VBR)
- controlrate = OMX_Video_ControlRateVariable;
- else
- controlrate = OMX_Video_ControlRateDisable;
-
- if (controlrate != bitrate->eControlRate) {
- LOGV("%s(): ratecontrol : %d != %d", __func__,
- controlrate, bitrate->eControlRate);
-
- if ((bitrate->eControlRate == OMX_Video_ControlRateVariable) ||
- (bitrate->eControlRate ==
- OMX_Video_ControlRateVariableSkipFrames))
- config->rate_control = MIX_RATE_CONTROL_VBR;
- else if ((bitrate->eControlRate ==
- OMX_Video_ControlRateConstant) ||
- (bitrate->eControlRate ==
- OMX_Video_ControlRateConstantSkipFrames))
- config->rate_control = MIX_RATE_CONTROL_CBR;
- else
- config->rate_control = MIX_RATE_CONTROL_NONE;
-
- if (vcp_changed)
- *vcp_changed = true;
- }
-
- /* hard coding */
- mix_videoconfigparamsenc_set_raw_format(config,
- MIX_RAW_TARGET_FORMAT_NV12);
-
- mix_videoconfigparamsenc_set_init_qp(config, 24);
- mix_videoconfigparamsenc_set_min_qp(config, 1);
- mix_videoconfigparamsenc_set_buffer_pool_size(config, 8);
- mix_videoconfigparamsenc_set_drawable(config, 0x0);
- mix_videoconfigparamsenc_set_need_display(config, FALSE);
-
- } else {
-
- LOGV("%s(), eControlRate != OMX_Video_Intel_ControlRateMax, AVC", __func__);
- config->rate_control = MIX_RATE_CONTROL_VCM;
-
- if (avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateConstant
- || avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateVariable) {
-
- if (config->bitrate
- != avcEncParamIntelBitrateType.nTargetBitrate) {
- LOGV("%s(): bitrate : %d != %ld", __func__,
- config->bitrate,
- avcEncParamIntelBitrateType.nTargetBitrate);
-
- mix_videoconfigparamsenc_set_bit_rate(config,
- avcEncParamIntelBitrateType.nTargetBitrate);
-
- if (vcp_changed)
- *vcp_changed = true;
- }
- } else if (avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateVideoConferencingMode) {
-
- LOGV("%s(), VCM mode", __func__);
-
- // call mix api to set the following
-
- mix_videoconfigparamsenc_set_bit_rate(config,
- avcEncConfigIntelBitrateType.nMaxEncodeBitrate);
-
- LOGV("%s(), nMaxEncodeBitrate = %d", __func__,
- avcEncConfigIntelBitrateType.nMaxEncodeBitrate);
-
- mix_videoconfigparamsenc_set_target_percentage(config,
- avcEncConfigIntelBitrateType.nTargetPercentage);
-
- LOGV("%s(), nTargetPercentage = %d", __func__,
- avcEncConfigIntelBitrateType.nTargetPercentage);
-
- mix_videoconfigparamsenc_set_window_size(config,
- avcEncConfigIntelBitrateType.nWindowSize);
-
- LOGV("%s(), nWindowSize = %d", __func__,
- avcEncConfigIntelBitrateType.nWindowSize);
-
- mix_videoconfigparamsenc_set_init_qp(config,
- avcEncConfigIntelBitrateType.nInitialQP);
-
- LOGV("%s(), nInitialQP = %d", __func__,
- avcEncConfigIntelBitrateType.nInitialQP);
-
- mix_videoconfigparamsenc_set_min_qp(config,
- avcEncConfigIntelBitrateType.nMinQP);
-
- LOGV("%s(), nMinQP = %d", __func__,
- avcEncConfigIntelBitrateType.nMinQP);
-
- mix_videoconfigparamsenc_set_max_slice_size(config,
- avcEncConfigNalSize.nNaluBytes * 8); // bits
-
- LOGV("%s(), nNaluBytes = %d", __func__,
- avcEncConfigNalSize.nNaluBytes);
-
- }
-
- /* hard coding */
- mix_videoconfigparamsenc_set_raw_format(config,
- MIX_RAW_TARGET_FORMAT_YUV420);
- mix_videoconfigparamsenc_set_buffer_pool_size(config, 8);
- mix_videoconfigparamsenc_set_drawable(config, 0x0);
- mix_videoconfigparamsenc_set_need_display(config, FALSE);
- }
-
- return ret;
-}
-
-/* end of vcp setting helpers */
-
-/* share buffer setting */
-OMX_ERRORTYPE MrstPsbComponent::RequestToEnableBufferSharingMode()
-{
- BufferShareStatus bsret;
-
- if (buffer_sharing_state != BUFFER_SHARING_INVALID) {
- LOGE("%s(),%d: invoke %s failed (incorrect state).", __func__, __LINE__, __func__);
- return OMX_ErrorUndefined;
- }
-
- buffer_sharing_count = 7;
- buffer_sharing_info = NULL;
- buffer_sharing_lib = BufferShareRegistry::getInstance();
-
- bsret = buffer_sharing_lib->encoderRequestToEnableSharingMode();
- if (bsret != BS_SUCCESS) {
- LOGE("%s(),%d: encoder request to enable buffer sharing mode failed:%d", __func__, __LINE__, bsret);
- return OMX_ErrorUndefined;
- }
-
- return OMX_ErrorNone;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::CheckAndEnableBufferSharingMode()
-{
- BufferShareStatus bsret;
-
- if (buffer_sharing_state != BUFFER_SHARING_INVALID) {
- LOGE("%s(),%d: invoke %s failed (incorrect state).", __func__, __LINE__, __func__);
- return OMX_ErrorUndefined;
- }
-
- if (buffer_sharing_lib->isBufferSharingModeEnabled()) {
- LOGW("Buffer sharing is enabled (video source does support)");
- buffer_sharing_state = BUFFER_SHARING_LOADED;
- } else {
- LOGW("Buffer sharing is disabled (video source doesn't support)");
- }
-
- return OMX_ErrorNone;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::RequestToDisableBufferSharingMode()
-{
- BufferShareStatus bsret;
-
- if ((buffer_sharing_state != BUFFER_SHARING_INVALID) &&
- (buffer_sharing_state != BUFFER_SHARING_LOADED)) {
- LOGE("%s(),%d: invoke %s failed (incorrect state).", __func__, __LINE__, __func__);
- return OMX_ErrorUndefined;
- }
-
- if (buffer_sharing_state == BUFFER_SHARING_INVALID) {
- LOGW("%s(),%d: buffer sharing already in invalid state.", __func__, __LINE__);
- return OMX_ErrorNone;
- }
-
- if (buffer_sharing_info) {
- delete [] buffer_sharing_info;
- }
- buffer_sharing_info = NULL;
-
- bsret = buffer_sharing_lib->encoderRequestToDisableSharingMode();
- if (bsret != BS_SUCCESS) {
- LOGE("%s(),%d: request to disable sharing mode failed.", __func__, __LINE__);
- return OMX_ErrorUndefined;
- }
-
- buffer_sharing_state = BUFFER_SHARING_INVALID;
- return OMX_ErrorNone;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::RequestShareBuffers(MixVideo* mix, int width, int height)
-{
- int i;
- int buf_width, buf_height, buf_size;
- MIX_RESULT mret;
- bool is_request_ok = true;
-
- if (width <= 0 || height <= 0) {
- LOGE("%s(),%d: width and height incorrect", __func__, __LINE__);
- return OMX_ErrorUndefined;
- }
-
- if ((buffer_sharing_state != BUFFER_SHARING_INVALID) &&
- (buffer_sharing_state != BUFFER_SHARING_LOADED)) {
- LOGE("%s(),%d: invoke %s failed (incorrect state:%d).", __func__, __LINE__, __func__, buffer_sharing_state);
- return OMX_ErrorUndefined;
- }
-
- if (buffer_sharing_state == BUFFER_SHARING_INVALID) {
- LOGW("%s(),%d: buffer sharing not enabled, do nothing.", __func__, __LINE__);
- return OMX_ErrorNone;
- }
-
- if (buffer_sharing_info != NULL) {
- delete [] buffer_sharing_info;
- buffer_sharing_info = NULL;
- }
-
- buffer_sharing_info = new SharedBufferType[buffer_sharing_count];
- //query mix for share buffer info.
- for (i = 0; i < buffer_sharing_count; i++) {
- buf_width = width;
- buf_height = height;
- buf_size = SHARE_PTR_ALIGN(buf_width) * buf_height * 3 / 2;
- mret = mix_video_get_new_userptr_for_surface_buffer(mix,
- (uint)buf_width,
- (uint)buf_height,
- MIX_STRING_TO_FOURCC("NV12"),
- (uint)buf_size,
- (uint*)&buffer_sharing_info[i].allocatedSize,
- (uint*)&buffer_sharing_info[i].stride,
- (uint8**)&buffer_sharing_info[i].pointer);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(),%d: mix_video_get_new_userptr_for_surface_buffer failed", __func__, __LINE__);
- is_request_ok = false;
- break;
- }
- buffer_sharing_info[i].width = buf_width;
- buffer_sharing_info[i].height = buf_height;
- buffer_sharing_info[i].dataSize = buffer_sharing_info[i].stride * buf_height * 3 / 2;
-
- LOGD("width:%d, Height:%d, stride:%d, pointer:%p", buffer_sharing_info[i].width,
- buffer_sharing_info[i].height, buffer_sharing_info[i].stride,
- buffer_sharing_info[i].pointer);
- }
-
- if (!is_request_ok) {
- delete []buffer_sharing_info;
- buffer_sharing_info = NULL;
- LOGE("%s(),%d: %s failed", __func__, __LINE__,"get usr ptr for surface buffer");
- return OMX_ErrorUndefined;
- }
-
- return OMX_ErrorNone;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::RegisterShareBuffersToLib()
-{
- if ((buffer_sharing_state != BUFFER_SHARING_INVALID) &&
- (buffer_sharing_state != BUFFER_SHARING_LOADED)) {
- LOGE("%s(),%d: invoke %s failed (incorrect state).", __func__, __LINE__, __func__);
- return OMX_ErrorUndefined;
- }
-
- if (buffer_sharing_state == BUFFER_SHARING_INVALID) {
- LOGW("%s(),%d: buffer sharing not enabled, do nothing.", __func__, __LINE__);
- return OMX_ErrorNone;
- }
-
- BufferShareStatus bsret = buffer_sharing_lib->encoderSetSharedBuffer(buffer_sharing_info, buffer_sharing_count);
- if (bsret != BS_SUCCESS) {
- LOGE("%s(),%d: encoder set shared buffer failed", __func__, __LINE__);
- return OMX_ErrorUndefined;
- }
-
- return OMX_ErrorNone;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::RegisterShareBuffersToPort()
-{
- if ((buffer_sharing_state != BUFFER_SHARING_INVALID) &&
- (buffer_sharing_state != BUFFER_SHARING_LOADED)) {
- LOGE("%s(),%d: invoke %s failed (incorrect state).", __func__, __LINE__, __func__);
- return OMX_ErrorUndefined;
- }
-
- OMX_VIDEO_CONFIG_PRI_INFOTYPE privateinfoparam;
- memset(&privateinfoparam, 0, sizeof(privateinfoparam));
- SetTypeHeader(&privateinfoparam, sizeof(privateinfoparam));
-
- //caution: buffer-sharing info stored in INPORT (raw port)
- privateinfoparam.nPortIndex = INPORT_INDEX;
- if (buffer_sharing_state == BUFFER_SHARING_INVALID) {
- privateinfoparam.nCapacity = 0;
- privateinfoparam.nHolder = NULL;
- } else {
- privateinfoparam.nCapacity = buffer_sharing_count;
- privateinfoparam.nHolder = buffer_sharing_info;
- }
- OMX_ERRORTYPE ret = static_cast<PortVideo*>(ports[privateinfoparam.nPortIndex])->SetPortPrivateInfoParam(&privateinfoparam, false);
-
- return ret;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::EnterBufferSharingMode()
-{
- if ((buffer_sharing_state != BUFFER_SHARING_INVALID) &&
- (buffer_sharing_state != BUFFER_SHARING_LOADED)) {
- LOGE("%s(),%d: invoke %s failed (incorrect state).", __func__, __LINE__, __func__);
- return OMX_ErrorUndefined;
- }
-
- if (buffer_sharing_state == BUFFER_SHARING_INVALID) {
- LOGW("%s(),%d: buffer sharing not enabled, do nothing.", __func__, __LINE__);
- return OMX_ErrorNone;
- }
-
- BufferShareStatus bsret = buffer_sharing_lib->encoderEnterSharingMode();
- if (bsret != BS_SUCCESS) {
- LOGE("%s(),%d: encoderEnterSharingMode failed", __func__, __LINE__);
- if (bsret == BS_PEER_DOWN) {
- LOGE("%s(), %d: camera down during buffer sharing state transition.",__func__, __LINE__);
- }
- return OMX_ErrorUndefined;
- }
-
- buffer_sharing_state = BUFFER_SHARING_EXECUTING;
- return OMX_ErrorNone;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::ExitBufferSharingMode()
-{
- if ((buffer_sharing_state != BUFFER_SHARING_INVALID) &&
- (buffer_sharing_state != BUFFER_SHARING_EXECUTING)) {
- LOGE("%s(),%d: invoke %s failed (incorrect state).", __func__, __LINE__, __func__);
- return OMX_ErrorUndefined;
- }
-
- if (buffer_sharing_state == BUFFER_SHARING_INVALID) {
- LOGW("%s(),%d: buffer sharing not enabled, do nothing.", __func__, __LINE__);
- return OMX_ErrorNone;
- }
-
- BufferShareStatus bsret = buffer_sharing_lib->encoderExitSharingMode();
- if (bsret != BS_SUCCESS) {
- LOGE("%s(),%d: encoderEnterSharingMode failed", __func__, __LINE__);
- if (bsret == BS_PEER_DOWN) {
- LOGE("%s(), %d: camera down during buffer sharing state transition.",__func__, __LINE__);
- }
- return OMX_ErrorUndefined;
- }
-
- buffer_sharing_state = BUFFER_SHARING_LOADED;
- return OMX_ErrorNone;
-}
-/* end of share buffer setting */
-
-OMX_ERRORTYPE MrstPsbComponent::ProcessorFlush(OMX_U32 port_index) {
-
- LOGV("port_index = %d Flushed!\n", port_index);
-
- if ((port_index == INPORT_INDEX || port_index == OMX_ALL)) {
- ports[INPORT_INDEX]->ReturnAllRetainedBuffers();
- mix_video_flush( mix);
- }
- return OMX_ErrorNone;
-}
-
-void MrstPsbComponent::AvcEncMixBufferCallback(ulong token, uchar *data) {
- MrstPsbComponent *_this = (MrstPsbComponent *) token;
-
- LOGV("AvcEncMixBufferCallback Begin\n");
-
- if(_this) {
- _this->ports[_this->INPORT_INDEX]->ReturnAllRetainedBuffers();
- }
-
- LOGV("AvcEncMixBufferCallback End\n");
-}
-
-/*
- * CModule Interface
- */
-#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
-
-static const char *g_name = (const char *)"OMX.Intel.Mrst.PSB.AVC.Enc";
-
-static const char *g_roles[] =
-{
- (const char *)"video_encoder.avc",
-};
-
-OMX_ERRORTYPE wrs_omxil_cmodule_ops_instantiate(OMX_PTR *instance)
-{
- ComponentBase *cbase;
-
- cbase = new MrstPsbComponent;
- if (!cbase) {
- *instance = NULL;
- return OMX_ErrorInsufficientResources;
- }
-
- *instance = cbase;
- return OMX_ErrorNone;
-}
-
-struct wrs_omxil_cmodule_ops_s cmodule_ops = {
-instantiate:
- wrs_omxil_cmodule_ops_instantiate,
-};
-
-struct wrs_omxil_cmodule_s WRS_OMXIL_CMODULE_SYMBOL = {
-name:
- g_name,
-roles:
- &g_roles[0],
-nr_roles:
- ARRAY_SIZE(g_roles),
-ops:
- &cmodule_ops,
-};
diff --git a/avc-enc/psb_avc.h b/avc-enc/psb_avc.h
deleted file mode 100644
index e55062d..0000000
--- a/avc-enc/psb_avc.h
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * psb.h, omx psb component header
- *
- * Copyright (c) 2009-2010 Wind River Systems, Inc.
- *
- * 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 __WRS_OMXIL_INTEL_MRST_PSB
-#define __WRS_OMXIL_INTEL_MRST_PSB
-
-#include <OMX_Core.h>
-#include <OMX_Component.h>
-
-#include <cmodule.h>
-#include <portbase.h>
-#include <componentbase.h>
-
-#include <IntelBufferSharing.h>
-
-using android::sp;
-using android::BufferShareRegistry;
-
-typedef enum
-{
- UNSPECIFIED = 0,
- CODED_SLICE_NON_IDR,
- CODED_SLICE_PARTITION_A,
- CODED_SLICE_PARTITION_B,
- CODED_SLICE_PARTITION_C,
- CODED_SLICE_IDR,
- SEI,
- SPS,
- PPS,
- AU_DELIMITER,
- END_OF_SEQ,
- END_OF_STREAM,
- FILLER_DATA,
- SPS_EXT,
- CODED_SLICE_AUX_PIC_NO_PARTITION = 19,
- INVALID_NAL_TYPE = 64
-} AvcNaluType;
-
-typedef enum
-{
- BUFFER_SHARING_INVALID,
- BUFFER_SHARING_LOADED,
- BUFFER_SHARING_EXECUTING
-} BufferSharingState;
-
-class MrstPsbComponent : public ComponentBase
-{
-public:
- /*
- * constructor & destructor
- */
- MrstPsbComponent();
- ~MrstPsbComponent();
-
-private:
- /*
- * component methods & helpers
- */
- /* implement ComponentBase::ComponentAllocatePorts */
- virtual OMX_ERRORTYPE ComponentAllocatePorts(void);
-
- OMX_ERRORTYPE __AllocateAvcPort(OMX_U32 port_index, OMX_DIRTYPE dir);
- OMX_ERRORTYPE __AllocateRawPort(OMX_U32 port_index, OMX_DIRTYPE dir);
-
- /* implement ComponentBase::ComponentGet/SetPatameter */
- virtual OMX_ERRORTYPE
- ComponentGetParameter(OMX_INDEXTYPE nParamIndex,
- OMX_PTR pComponentParameterStructure);
- virtual OMX_ERRORTYPE
- ComponentSetParameter(OMX_INDEXTYPE nIndex,
- OMX_PTR pComponentParameterStructure);
-
- /* implement ComponentBase::ComponentGet/SetConfig */
- virtual OMX_ERRORTYPE
- ComponentGetConfig(OMX_INDEXTYPE nIndex,
- OMX_PTR pComponentConfigStructure);
- virtual OMX_ERRORTYPE
- ComponentSetConfig(OMX_INDEXTYPE nIndex,
- OMX_PTR pComponentConfigStructure);
-
- /* implement ComponentBase::Processor[*] */
- virtual OMX_ERRORTYPE ProcessorInit(void); /* Loaded to Idle */
- virtual OMX_ERRORTYPE ProcessorDeinit(void);/* Idle to Loaded */
- virtual OMX_ERRORTYPE ProcessorStart(void); /* Idle to Executing/Pause */
- virtual OMX_ERRORTYPE ProcessorStop(void); /* Executing/Pause to Idle */
- virtual OMX_ERRORTYPE ProcessorPause(void); /* Executing to Pause */
- virtual OMX_ERRORTYPE ProcessorResume(void);/* Pause to Executing */
- virtual OMX_ERRORTYPE ProcessorFlush(OMX_U32 port_index);
- virtual OMX_ERRORTYPE ProcessorProcess(OMX_BUFFERHEADERTYPE ***pBuffers,
- buffer_retain_t *retain,
- OMX_U32 nr_buffers);
-
- /* end of component methods & helpers */
-
- /* encoders */
- OMX_ERRORTYPE __AvcChangeVcpWithPortParam(MixVideoConfigParams *vcp,
- PortAvc *port, bool *vcp_changed);
- OMX_ERRORTYPE ChangeVcpWithPortParam(MixVideoConfigParams *vcp,
- PortVideo *port_in,
- PortVideo *port_out,
- bool *vcp_changed);
-
- static void AvcEncMixBufferCallback(ulong token, uchar *data);
- OMX_ERRORTYPE ParserConfigData(OMX_U8* coded_buf, OMX_U32 coded_len,OMX_U8** config_buf, OMX_U32* config_len);
-
- /* end of vcp setting helpers */
-
- /* share buffer setting */
- OMX_ERRORTYPE EnterBufferSharingMode(void);
- OMX_ERRORTYPE ExitBufferSharingMode(void);
- OMX_ERRORTYPE RequestToEnableBufferSharingMode(void);
- OMX_ERRORTYPE RequestToDisableBufferSharingMode(void);
- OMX_ERRORTYPE CheckAndEnableBufferSharingMode(void);
- OMX_ERRORTYPE RequestShareBuffers(MixVideo* mix, int width, int height);
- OMX_ERRORTYPE RegisterShareBuffersToPort(void);
- OMX_ERRORTYPE RegisterShareBuffersToLib(void);
- /* end of share buffer setting */
- /* mix video */
- MixVideo *mix;
- MixVideoInitParams *vip;
- MixParams *mvp;
- MixVideoConfigParams *vcp;
- MixDisplayAndroid *display;
- MixBuffer *mixbuffer_in[1];
- MixIOVec *mixiovec_out[1];
-
- OMX_BOOL is_mixvideodec_configured;
-
- OMX_U32 inframe_counter;
- OMX_U32 outframe_counter;
-
- /* for fps */
- OMX_TICKS last_ts;
- float last_fps;
-
- /* for buffer sharing */
- sp<BufferShareRegistry> buffer_sharing_lib;
- int buffer_sharing_count;
- SharedBufferType* buffer_sharing_info;
- BufferSharingState buffer_sharing_state;
-
- /* for Nalu format encapsulation and config data setting*/
- bool b_config_sent;
- bool b_sync_frame;
- OMX_U8* video_data;
- OMX_U32 video_len;
-
- OMX_U8 *temp_coded_data_buffer;
- OMX_U32 temp_coded_data_buffer_size;
-
- OMX_NALUFORMATSTYPE avcEncNaluFormatType;
- OMX_U32 avcEncIDRPeriod;
- OMX_U32 avcEncPFrames;
-
- OMX_VIDEO_PARAM_INTEL_BITRATETYPE avcEncParamIntelBitrateType;
- OMX_VIDEO_CONFIG_INTEL_BITRATETYPE avcEncConfigIntelBitrateType;
- OMX_VIDEO_CONFIG_NALSIZE avcEncConfigNalSize;
- OMX_VIDEO_CONFIG_INTEL_SLICE_NUMBERS avcEncConfigSliceNumbers;
- OMX_VIDEO_CONFIG_INTEL_AIR avcEncConfigAir;
- OMX_CONFIG_FRAMERATETYPE avcEncFramerate;
-
- /* constant */
- /* ports */
- const static OMX_U32 NR_PORTS = 2;
- const static OMX_U32 INPORT_INDEX = 0;
- const static OMX_U32 OUTPORT_INDEX = 1;
-
- /* default buffer */
- const static OMX_U32 INPORT_RAW_ACTUAL_BUFFER_COUNT = 2; //FIXME: must be set as 2
- const static OMX_U32 INPORT_RAW_MIN_BUFFER_COUNT = 1;
- const static OMX_U32 INPORT_RAW_BUFFER_SIZE = 614400;
- const static OMX_U32 OUTPORT_RAW_ACTUAL_BUFFER_COUNT = 2;
- const static OMX_U32 OUTPORT_RAW_MIN_BUFFER_COUNT = 1;
- const static OMX_U32 OUTPORT_RAW_BUFFER_SIZE = 38016;
-
- const static OMX_U32 INPORT_AVC_ACTUAL_BUFFER_COUNT = 256;
- const static OMX_U32 INPORT_AVC_MIN_BUFFER_COUNT = 1;
- const static OMX_U32 INPORT_AVC_BUFFER_SIZE = 614400;
- const static OMX_U32 OUTPORT_AVC_ACTUAL_BUFFER_COUNT = 10;
- const static OMX_U32 OUTPORT_AVC_MIN_BUFFER_COUNT = 1;
- const static OMX_U32 OUTPORT_AVC_BUFFER_SIZE = 3240000;
-
-
-};
-
-#endif /* __WRS_OMXIL_INTEL_MRST_PSB */
diff --git a/avc-enc/vabuffer.h b/avc-enc/vabuffer.h
deleted file mode 100644
index ea0b56a..0000000
--- a/avc-enc/vabuffer.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * vabuffer.h, vabuffer structure header
- *
- * Copyright (c) 2009-2010 Wind River Systems, Inc.
- *
- * 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 __VA_BUFFER_H__
-#define __VA_BUFFER_H__
-
-struct VABuffer
-{
- VASurfaceID surface;
- VADisplay display;
- unsigned int frame_structure;
-};
-
-#endif /* __VA_BUFFER_H__ */
diff --git a/ebuild.mk b/ebuild.mk
index 9b1481f..c3258ec 100644
--- a/ebuild.mk
+++ b/ebuild.mk
@@ -3,5 +3,3 @@ include $(CLEAR_VARS)
VENDORS_INTEL_MRST_COMPONENTS_ROOT := $(LOCAL_PATH)
-# mrst sst audio
--include $(VENDORS_INTEL_MRST_COMPONENTS_ROOT)/sst/ebuild.mk
diff --git a/h263-enc/Android.mk b/h263-enc/Android.mk
deleted file mode 100644
index 57f8bbf..0000000
--- a/h263-enc/Android.mk
+++ /dev/null
@@ -1,53 +0,0 @@
-ifeq ($(strip $(BOARD_USES_WRS_OMXIL_CORE)),true)
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- psb_h263.cpp \
- h263.cpp
-
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE := libwrs_omxil_intel_mrst_psb_h263_enc
-
-LOCAL_CPPFLAGS := -DMIXVIDEO_ENCODE_ENABLE=0
-
-LOCAL_LDFLAGS :=
-
-LOCAL_STATIC_LIBRARIES := \
-
-LOCAL_SHARED_LIBRARIES := \
- libwrs_omxil_common \
- liblog \
- libmixcommon \
- libmixvideo \
- libmixvbp \
- libva \
- libva-android \
- libva-tpi \
- libutils \
- libsharedbuffer
-
-
-VENDORS_INTEL_MRST_MIXVBP_ROOT := $(VENDORS_INTEL_MRST_LIBMIX_ROOT)/mix_vbp
-
-LOCAL_C_INCLUDES := \
- $(TARGET_OUT_HEADERS)/wrs_omxil_core \
- $(TARGET_OUT_HEADERS)/khronos/openmax \
- $(TARGET_OUT_HEADERS)/libmixcommon \
- $(TARGET_OUT_HEADERS)/libmixvideo \
- $(TARGET_OUT_HEADERS)/libva \
- $(TARGET_OUT_HEADERS)/libdrm \
- $(TARGET_OUT_HEADERS)/libdrm/shared-core \
- $(TARGET_OUT_HEADERS)/libmixvbp \
- $(TARGET_OUT_HEADERS)/libpsb_drm \
- $(TARGET_OUT_HEADERS)/libsharedbuffer
-
-LOCAL_COPY_HEADERS_TO := libwrs_omxil_intel_mrst_psb_h263_enc
-LOCAL_COPY_HEADERS := vabuffer.h
-
-ifeq ($(ENABLE_BUFFER_SHARE_MODE),true)
-LOCAL_CPPFLAGS += -DENABLE_BUFFER_SHARE_MODE=1
-endif
-
-include $(BUILD_SHARED_LIBRARY)
-endif
diff --git a/h263-enc/ebuild.mk b/h263-enc/ebuild.mk
deleted file mode 100644
index 06a4106..0000000
--- a/h263-enc/ebuild.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- psb.cpp
-
-LOCAL_MODULE := libwrs_omxil_intel_mrst_psb
-
-LOCAL_CPPFLAGS :=
-
-LOCAL_LDFLAGS :=
-
-LOCAL_SHARED_LIBRARIES := \
- libwrs_omxil_common
-
-LOCAL_C_INCLUDES := \
- $(WRS_OMXIL_CORE_ROOT)/utils/inc \
- $(WRS_OMXIL_CORE_ROOT)/base/inc \
- $(WRS_OMXIL_CORE_ROOT)/core/inc/khronos/openmax/include
-
-include $(BUILD_SHARED_LIBRARY)
diff --git a/h263-enc/h263.cpp b/h263-enc/h263.cpp
deleted file mode 100644
index 6558f51..0000000
--- a/h263-enc/h263.cpp
+++ /dev/null
@@ -1,289 +0,0 @@
-/* ------------------------------------------------------------------
- * Copyright (C) 1998-2009 PacketVideo
- *
- * 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.
- * -------------------------------------------------------------------
- */
-/*
- * Portions Copyright 2011, Intel Corportion
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <sys/time.h>
-#include <OMX_Core.h>
-
-#include "h263.h"
-
-OMX_BOOL H263HeaderParser::DecodeH263Header(OMX_U8* aInputBuffer, int32 *width,
- int32 *height, int32 *display_width, int32 *display_height, bool* b_intra) {
- uint32 codeword;
- int32 extended_PTYPE = 0;
- int32 UFEP = 0;
- int32 custom_PFMT = 0;
-
- //Reset the data bit position to the start of the stream
- iH263DataBitPos = 0;
- iH263BitPos = 0;
- //BitBuf contains the first 4 bytes of the aInputBuffer
- iH263BitBuf = (aInputBuffer[0] << 24) | (aInputBuffer[1] << 16) | (aInputBuffer[2] << 8) | aInputBuffer[3];
-
-
- ReadBits(aInputBuffer, 22, &codeword); //Check PSC
- if (codeword != 0x20)
- {
- return OMX_FALSE;
- }
-
- ReadBits(aInputBuffer, 8, &codeword); //Skip TR
-
- //Check PTYPE starts
- ReadBits(aInputBuffer, 1, &codeword); //Check bit1
- if (codeword == 0) return OMX_FALSE;
-
- ReadBits(aInputBuffer, 1, &codeword); //Check bit2
- if (codeword == 1) return OMX_FALSE;
-
- ReadBits(aInputBuffer, 1, &codeword); //Check bit3
- if (codeword == 1) return OMX_FALSE;
-
- ReadBits(aInputBuffer, 1, &codeword); //Check bit4
- if (codeword == 1) return OMX_FALSE;
-
- ReadBits(aInputBuffer, 1, &codeword); //Check bit6
- if (codeword == 1) return OMX_FALSE;
-
- ReadBits(aInputBuffer, 3, &codeword); //Check source format
- switch (codeword)
- {
- case 1:
- *width = 128; //sub QCIF
- *height = 96;
- break;
-
- case 2:
- *width = 176; //QCIF
- *height = 144;
- break;
-
- case 3:
- *width = 352; //CIF
- *height = 288;
- break;
-
- case 4:
- *width = 704; //4CIF
- *height = 576;
- break;
-
- case 5:
- *width = 1408; //16CIF
- *height = 1152;
- break;
-
- case 7: //reserved (extended by vendor)
- extended_PTYPE = 1;
- break;
- default:
- /* Msg("H.263 source format not legal\n"); */
- return OMX_FALSE;
- }
-
- if (extended_PTYPE == 0)
- {
- *display_width = *width;
- *display_height = *height;
-
- ReadBits(aInputBuffer, 1, &codeword); //Check intra/inter type
- if (codeword == 0) {
- *b_intra = true;
- } else {
- *b_intra = false;
- }
-
- return OMX_TRUE;
- }
-
- //Check UFEP
- ReadBits(aInputBuffer, 3, &codeword);
- UFEP = codeword;
- if (UFEP == 1)
- {
- //Check source format
- ReadBits(aInputBuffer, 3, &codeword);
- switch (codeword)
- {
- case 1:
- *width = 128;
- *height = 96;
-
- break;
-
- case 2:
- *width = 176;
- *height = 144;
-
- break;
-
- case 3:
- *width = 352;
- *height = 288;
-
- break;
-
- case 4:
- *width = 704;
- *height = 576;
-
- break;
-
- case 5:
- *width = 1408;
- *height = 1152;
-
- break;
-
- case 6:
- custom_PFMT = 1;
- break;
- default:
- /* Msg("H.263 source format not legal\n"); */
- return OMX_FALSE;
- }
- if (custom_PFMT == 0)
- {
- *display_width = *width;
- *display_height = *height;
- }
-
- ReadBits(aInputBuffer, 1, &codeword); //Check PCF
- ReadBits(aInputBuffer, 1, &codeword); //UMV
- if (codeword) return OMX_FALSE;
- ReadBits(aInputBuffer, 1, &codeword); //SAC
- if (codeword) return OMX_FALSE;
- ReadBits(aInputBuffer, 1, &codeword); //AP
- if (codeword) return OMX_FALSE;
- ReadBits(aInputBuffer, 3, &codeword); //AIC, DF, SS
- ReadBits(aInputBuffer, 3, &codeword); //RPS, ISD, AIV
- if (codeword) return OMX_FALSE;
- ReadBits(aInputBuffer, 1, &codeword); //MQ
- ReadBits(aInputBuffer, 4, &codeword); //1, Reserved, Reserved, Reserved
- if (codeword != 8) return OMX_FALSE;
- }
-
- //Check MPPTYPE
- if (UFEP == 0 || UFEP == 1)
- {
- ReadBits(aInputBuffer, 3, &codeword); //Check intra/inter type
- switch (codeword) {
- case 0:
- *b_intra = true;
- break;
- case 1:
- *b_intra = false;
- break;
- default:
- *b_intra = false;
- return OMX_FALSE;
- }
-
- ReadBits(aInputBuffer, 1, &codeword); //Check RPR
- if (codeword) return OMX_FALSE;
- ReadBits(aInputBuffer, 1, &codeword); //Check RRU
- if (codeword) return OMX_FALSE;
- ReadBits(aInputBuffer, 1, &codeword); //Check RTYPE
- ReadBits(aInputBuffer, 3, &codeword); //Reserved, Reserved, 1
- if (codeword != 1) return OMX_FALSE;
- }
- else
- {
- return OMX_FALSE;
- }
-
- ReadBits(aInputBuffer, 1, &codeword);
- if (codeword) return OMX_FALSE; /* CPM */
- if (custom_PFMT == 1 && UFEP == 1)
- {
- OMX_U32 DisplayWidth, Width, DisplayHeight, Height, Resolution;
-
- ReadBits(aInputBuffer, 4, &codeword);
- if (codeword == 0) return OMX_FALSE;
- if (codeword == 0xf)
- {
- ReadBits(aInputBuffer, 8, &codeword);
- ReadBits(aInputBuffer, 8, &codeword);
- }
- ReadBits(aInputBuffer, 9, &codeword);
- DisplayWidth = (codeword + 1) << 2;
- Width = (DisplayWidth + 15) & -16;
-
- ReadBits(aInputBuffer, 1, &codeword);
- if (codeword != 1) return OMX_FALSE;
- ReadBits(aInputBuffer, 9, &codeword);
- if (codeword == 0) return OMX_FALSE;
- DisplayHeight = codeword << 2;
- Height = (DisplayHeight + 15) & -16;
-
- Resolution = Width * Height;
-
- *width = Width;
- *height = Height;
- *display_width = DisplayWidth;
- *display_height = DisplayHeight;
- }
-
- return OMX_TRUE;
-}
-
-static const uint32 mask[33] =
-{
- 0x00000000, 0x00000001, 0x00000003, 0x00000007,
- 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f,
- 0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff,
- 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff,
- 0x0000ffff, 0x0001ffff, 0x0003ffff, 0x0007ffff,
- 0x000fffff, 0x001fffff, 0x003fffff, 0x007fffff,
- 0x00ffffff, 0x01ffffff, 0x03ffffff, 0x07ffffff,
- 0x0fffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff,
- 0xffffffff
-};
-
-void H263HeaderParser::ReadBits(OMX_U8* aStream, /* Input Stream */
- uint8 aNumBits, /* nr of bits to read */
- uint32* aOutData /* output target */
- )
-{
- uint8 *bits;
- uint32 dataBitPos = iH263DataBitPos;
- uint32 bitPos = iH263BitPos;
- uint32 dataBytePos;
-
- if (aNumBits > (32 - bitPos)) /* not enough bits */
- {
- dataBytePos = dataBitPos >> 3; /* Byte Aligned Position */
- bitPos = dataBitPos & 7; /* update bit position */
- bits = &aStream[dataBytePos];
- iH263BitBuf = (bits[0] << 24) | (bits[1] << 16) | (bits[2] << 8) | bits[3];
- }
-
- iH263DataBitPos += aNumBits;
- iH263BitPos = (unsigned char)(bitPos + aNumBits);
-
- *aOutData = (iH263BitBuf >> (32 - iH263BitPos)) & mask[(uint16)aNumBits];
-
- return;
-}
diff --git a/h263-enc/h263.h b/h263-enc/h263.h
deleted file mode 100644
index 41afebb..0000000
--- a/h263-enc/h263.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* ------------------------------------------------------------------
- * Copyright (C) 1998-2009 PacketVideo
- *
- * 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.
- * -------------------------------------------------------------------
- */
-/*
- * Portions Copyright 2011, Intel Corportion
- */
-
-#ifndef __OMXIL_INTEL_H263__
-#define __OMXIL_INTEL_H263__
-
-typedef int int32;
-typedef unsigned int uint32;
-typedef unsigned char uint8;
-typedef unsigned short uint16;
-
-class H263HeaderParser {
-
-private:
- OMX_U32 iH263DataBitPos;
- OMX_U32 iH263BitPos;
- OMX_U32 iH263BitBuf;
-
-public:
-
- OMX_BOOL DecodeH263Header(OMX_U8* aInputBuffer, int32 *width,
- int32 *height, int32 *display_width, int32 *display_height, bool *b_intra);
- void ReadBits(OMX_U8* aStream, uint8 aNumBits, uint32* aOutData);
-};
-
-#endif /* __OMXIL_INTEL_H263__ */
diff --git a/h263-enc/psb_h263.cpp b/h263-enc/psb_h263.cpp
deleted file mode 100644
index 6ca7ca7..0000000
--- a/h263-enc/psb_h263.cpp
+++ /dev/null
@@ -1,1766 +0,0 @@
-/*
- * psb.cpp, omx psb component file
- *
- * Copyright (c) 2009-2010 Wind River Systems, Inc.
- *
- * 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.
- */
-//#define LOG_NDEBUG 0
-#undef LOG_TAG
-#define LOG_TAG "intel-h263-encoder"
-#include <utils/Log.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <sys/time.h>
-
-#include <OMX_Core.h>
-#include <OMX_IndexExt.h>
-#include <OMX_VideoExt.h>
-#include <OMX_IntelErrorTypes.h>
-
-#include <cmodule.h>
-#include <portvideo.h>
-#include <componentbase.h>
-
-#include <mixdisplayandroid.h>
-#include <mixvideo.h>
-#include <mixvideoconfigparamsenc_h263.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <va/va.h>
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#include <va/va_android.h>
-
-#include "h263.h"
-#include "psb_h263.h"
-
-#define Display unsigned int
-#define SHOW_FPS 0
-#include "vabuffer.h"
-
-#include <IntelBufferSharing.h>
-
-/*
- * constructor & destructor
- */
-MrstPsbComponent::MrstPsbComponent()
-{
- LOGV("%s(): enter\n", __func__);
-
- buffer_sharing_state = BUFFER_SHARING_INVALID;
-
- OMX_ERRORTYPE oret = RequestToEnableBufferSharingMode();
-
- if (oret != OMX_ErrorNone) {
- LOGE("%s(),%d: set buffer sharing mode failed", __func__, __LINE__);
- RequestToDisableBufferSharingMode();
- }
-
- LOGV("%s(),%d: exit\n", __func__, __LINE__);
-}
-
-MrstPsbComponent::~MrstPsbComponent()
-{
- LOGV("%s(): enter\n", __func__);
-
- OMX_ERRORTYPE oret = RequestToDisableBufferSharingMode();
- if (oret != OMX_ErrorNone) {
- LOGE("%s(),%d: DisableBufferSharingMode failed", __func__, __LINE__);
- }
-
- LOGV("%s(),%d: exit\n", __func__, __LINE__);
-}
-
-/* end of constructor & destructor */
-
-/* core methods & helpers */
-OMX_ERRORTYPE MrstPsbComponent::ComponentAllocatePorts(void)
-{
- PortBase **ports;
- OMX_U32 codec_port_index, raw_port_index;
- OMX_DIRTYPE codec_port_dir, raw_port_dir;
- OMX_PORT_PARAM_TYPE portparam;
- const char *working_role;
-
- OMX_ERRORTYPE ret = OMX_ErrorUndefined;
- LOGV("%s(): enter\n", __func__);
-
- ports = new PortBase *[NR_PORTS];
- if (!ports)
- return OMX_ErrorInsufficientResources;
-
- this->nr_ports = NR_PORTS;
- this->ports = ports;
-
- /* video_[encoder/decoder].[avc/whatever] */
- working_role = GetWorkingRole();
- working_role = strpbrk(working_role, "_");
-
- raw_port_index = INPORT_INDEX;
- codec_port_index = OUTPORT_INDEX;
- raw_port_dir = OMX_DirInput;
- codec_port_dir = OMX_DirOutput;
-
- working_role = strpbrk(working_role, ".");
- if (!working_role)
- return OMX_ErrorUndefined;
- working_role++;
-
- ret = __AllocateH263Port(codec_port_index, codec_port_dir);
-
- if (ret != OMX_ErrorNone)
- goto free_ports;
-
- LOGV("---- prepare to call __AllocateRawPort() ----\n");
- ret = __AllocateRawPort(raw_port_index, raw_port_dir);
-
- if (ret != OMX_ErrorNone)
- goto free_codecport;
-
- /* OMX_PORT_PARAM_TYPE */
- memset(&portparam, 0, sizeof(portparam));
- SetTypeHeader(&portparam, sizeof(portparam));
- portparam.nPorts = NR_PORTS;
- portparam.nStartPortNumber = INPORT_INDEX;
-
- memcpy(&this->portparam, &portparam, sizeof(portparam));
- /* end of OMX_PORT_PARAM_TYPE */
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, OMX_ErrorNone);
- return OMX_ErrorNone;
-
-free_codecport:
- delete ports[codec_port_index];
- ports[codec_port_index] = NULL;
-
-free_ports:
-
- delete []ports;
- ports = NULL;
- this->ports = NULL;
- this->nr_ports = 0;
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::__AllocateH263Port(OMX_U32 port_index, OMX_DIRTYPE dir) {
-
- PortH263 *h263port;
-
- OMX_PARAM_PORTDEFINITIONTYPE h263portdefinition;
- OMX_VIDEO_PARAM_H263TYPE h263portparam;
-
- LOGV("%s(): enter\n", __func__);
-
- ports[port_index] = new PortH263;
- if (!ports[port_index]) {
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorInsufficientResources);
- return OMX_ErrorInsufficientResources;
- }
-
- h263port = static_cast<PortH263 *>(this->ports[port_index]);
-
- /* OMX_PARAM_PORTDEFINITIONTYPE */
- memset(&h263portdefinition, 0, sizeof(h263portdefinition));
- SetTypeHeader(&h263portdefinition, sizeof(h263portdefinition));
- h263portdefinition.nPortIndex = port_index;
- h263portdefinition.eDir = dir;
-
- h263portdefinition.nBufferCountActual =OUTPORT_H263_ACTUAL_BUFFER_COUNT;
- h263portdefinition.nBufferCountMin = OUTPORT_H263_MIN_BUFFER_COUNT;
- h263portdefinition.nBufferSize = OUTPORT_H263_BUFFER_SIZE;
-
- h263portdefinition.bEnabled = OMX_TRUE;
- h263portdefinition.bPopulated = OMX_FALSE;
- h263portdefinition.eDomain = OMX_PortDomainVideo;
- h263portdefinition.format.video.cMIMEType = (OMX_STRING)"video/h263";
- h263portdefinition.format.video.pNativeRender = NULL;
- h263portdefinition.format.video.nFrameWidth = 176;
- h263portdefinition.format.video.nFrameHeight = 144;
- h263portdefinition.format.video.nStride = 0;
- h263portdefinition.format.video.nSliceHeight = 0;
- h263portdefinition.format.video.nBitrate = 64000;
- h263portdefinition.format.video.xFramerate = 15 << 16;
- h263portdefinition.format.video.bFlagErrorConcealment = OMX_FALSE;
- h263portdefinition.format.video.eCompressionFormat = OMX_VIDEO_CodingH263;
- h263portdefinition.format.video.eColorFormat = OMX_COLOR_FormatUnused;
- h263portdefinition.format.video.pNativeWindow = NULL;
- h263portdefinition.bBuffersContiguous = OMX_FALSE;
- h263portdefinition.nBufferAlignment = 0;
- h263port->SetPortDefinition(&h263portdefinition, true);
- /* end of OMX_PARAM_PORTDEFINITIONTYPE */
-
- /* OMX_VIDEO_PARAM_H263TYPE */
- memset(&h263portparam, 0, sizeof(h263portparam));
- SetTypeHeader(&h263portparam, sizeof(h263portparam));
- h263portparam.nPortIndex = port_index;
- h263portparam.eProfile = OMX_VIDEO_H263ProfileBaseline;
- h263portparam.eLevel = OMX_VIDEO_H263Level70;
- h263port->SetPortH263Param(&h263portparam, true);
- /* end of OMX_VIDEO_PARAM_H263TYPE */
-
- /* encoder */
-
- /* OMX_VIDEO_PARAM_BITRATETYPE */
- OMX_VIDEO_PARAM_BITRATETYPE bitrateparam;
-
- memset(&bitrateparam, 0, sizeof(bitrateparam));
- SetTypeHeader(&bitrateparam, sizeof(bitrateparam));
-
- bitrateparam.nPortIndex = port_index;
- bitrateparam.eControlRate = OMX_Video_ControlRateConstant;
- bitrateparam.nTargetBitrate = 64000;
-
- h263port->SetPortBitrateParam(&bitrateparam, true);
- /* end of OMX_VIDEO_PARAM_BITRATETYPE */
-
- /* OMX_VIDEO_CONFIG_PRI_INFOTYPE */
- OMX_VIDEO_CONFIG_PRI_INFOTYPE privateinfoparam;
- memset(&privateinfoparam, 0, sizeof(privateinfoparam));
- SetTypeHeader(&privateinfoparam, sizeof(privateinfoparam));
- privateinfoparam.nPortIndex = port_index;
- privateinfoparam.nCapacity = 0;
- privateinfoparam.nHolder = NULL;
- h263port->SetPortPrivateInfoParam(&privateinfoparam, true);
- /* end of OMX_VIDEO_CONFIG_PRI_INFOTYPE */
-
- h263EncPFrames = 0;
- h263EncParamIntelBitrateType.nPortIndex = port_index;
- h263EncParamIntelBitrateType.eControlRate = OMX_Video_Intel_ControlRateMax;
- h263EncParamIntelBitrateType.nTargetBitrate = 0;
- SetTypeHeader(&h263EncParamIntelBitrateType, sizeof(h263EncParamIntelBitrateType));
-
- h263EncConfigIntelBitrateType.nPortIndex = port_index;
- h263EncConfigIntelBitrateType.nMaxEncodeBitrate = 4000 * 1024; // Maximum bitrate
- h263EncConfigIntelBitrateType.nTargetPercentage = 95; // Target bitrate as percentage of maximum bitrate; e.g. 95 is 95%
- h263EncConfigIntelBitrateType.nWindowSize = 1000; // Window size in milliseconds allowed for bitrate to reach target
- h263EncConfigIntelBitrateType.nInitialQP = 36; // Initial QP for I frames
- h263EncConfigIntelBitrateType.nMinQP = 18;
- SetTypeHeader(&h263EncConfigIntelBitrateType, sizeof(h263EncConfigIntelBitrateType));
-
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, OMX_ErrorNone);
- return OMX_ErrorNone;
-}
-
-
-OMX_ERRORTYPE MrstPsbComponent::__AllocateRawPort(OMX_U32 port_index,
- OMX_DIRTYPE dir)
-{
- PortVideo *rawport;
- OMX_PARAM_PORTDEFINITIONTYPE rawportdefinition;
- OMX_VIDEO_PARAM_PORTFORMATTYPE rawvideoparam;
-
- LOGV("%s(): enter\n", __func__);
-
- ports[port_index] = new PortVideo;
- if (!ports[port_index]) {
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__,
- OMX_ErrorInsufficientResources);
- return OMX_ErrorInsufficientResources;
- }
- rawport = static_cast<PortVideo *>(this->ports[port_index]);
- /* OMX_PARAM_PORTDEFINITIONTYPE */
- memset(&rawportdefinition, 0, sizeof(rawportdefinition));
- SetTypeHeader(&rawportdefinition, sizeof(rawportdefinition));
- rawportdefinition.nPortIndex = port_index;
- rawportdefinition.eDir = dir;
-
- rawportdefinition.nBufferCountActual = INPORT_RAW_ACTUAL_BUFFER_COUNT;
- rawportdefinition.nBufferCountMin = INPORT_RAW_MIN_BUFFER_COUNT;
- rawportdefinition.nBufferSize = INPORT_RAW_BUFFER_SIZE;
-
- rawportdefinition.bEnabled = OMX_TRUE;
- rawportdefinition.bPopulated = OMX_FALSE;
- rawportdefinition.eDomain = OMX_PortDomainVideo;
- rawportdefinition.format.video.cMIMEType = (char *)"video/raw";
- rawportdefinition.format.video.pNativeRender = NULL;
- rawportdefinition.format.video.nFrameWidth = 176;
- rawportdefinition.format.video.nFrameHeight = 144;
- rawportdefinition.format.video.nStride = 176;
- rawportdefinition.format.video.nSliceHeight = 144;
- rawportdefinition.format.video.nBitrate = 64000;
- rawportdefinition.format.video.xFramerate = 15 << 16;
- rawportdefinition.format.video.bFlagErrorConcealment = OMX_FALSE;
- rawportdefinition.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused;
- rawportdefinition.format.video.eColorFormat =
- OMX_COLOR_FormatYUV420SemiPlanar;
- rawportdefinition.format.video.pNativeWindow = NULL;
- rawportdefinition.bBuffersContiguous = OMX_FALSE;
- rawportdefinition.nBufferAlignment = 0;
- rawport->SetPortDefinition(&rawportdefinition, true);
- /* end of OMX_PARAM_PORTDEFINITIONTYPE */
-
- /* OMX_VIDEO_PARAM_PORTFORMATTYPE */
- rawvideoparam.nPortIndex = port_index;
- rawvideoparam.nIndex = 0;
- rawvideoparam.eCompressionFormat = OMX_VIDEO_CodingUnused;
- rawvideoparam.eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar;
- rawport->SetPortVideoParam(&rawvideoparam, true);
- /* end of OMX_VIDEO_PARAM_PORTFORMATTYPE */
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, OMX_ErrorNone);
- return OMX_ErrorNone;
-}
-
-#define H263_ENCODE_ERROR_CHECKING(p) \
-if (!p) { \
- LOGV("%s(), NULL pointer", __func__); \
- return OMX_ErrorBadParameter; \
-} \
-ret = CheckTypeHeader(p, sizeof(*p)); \
-if (ret != OMX_ErrorNone) { \
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret); \
- return ret; \
-} \
-OMX_U32 index = p->nPortIndex; \
-if (index != OUTPORT_INDEX) { \
- LOGV("%s(), wrong port index", __func__); \
- return OMX_ErrorBadPortIndex; \
-} \
-PortH263*port = static_cast<PortH263 *> (ports[index]); \
-if (!port) { \
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, \
- OMX_ErrorBadPortIndex); \
- return OMX_ErrorBadPortIndex; \
-} \
-LOGV("%s(), about to get native or supported nal format", __func__); \
-if (!port->IsEnabled()) { \
- LOGV("%s() : port is not enabled", __func__); \
- return OMX_ErrorNotReady; \
-} \
-
-/*
- * component methods & helpers
- */
-/* Get/SetParameter */
-OMX_ERRORTYPE MrstPsbComponent::ComponentGetParameter(
- OMX_INDEXTYPE nParamIndex,
- OMX_PTR pComponentParameterStructure)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
-
- LOGV("%s(): enter (index = 0x%08x)\n", __func__, nParamIndex);
-
- switch (nParamIndex) {
- case OMX_IndexParamVideoPortFormat: {
- OMX_VIDEO_PARAM_PORTFORMATTYPE *p =
- (OMX_VIDEO_PARAM_PORTFORMATTYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortVideo *port = NULL;
-
- LOGV("%s(): port index : %lu\n", __func__, index);
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortVideo *>(ports[index]);
-
- if (!port) {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- if(index == INPORT_INDEX ) {
- if(p->nIndex < 1) {
- p->eColorFormat = port->GetPortVideoParam()->eColorFormat;
- p->eCompressionFormat = OMX_VIDEO_CodingUnused;
- }
- else {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__,OMX_ErrorNoMore);
- return OMX_ErrorNoMore;
- }
- }
- else if(index == OUTPORT_INDEX) {
- if(p->nIndex < 1) {
- p->eCompressionFormat= port->GetPortVideoParam()->eCompressionFormat;
- p->eColorFormat = OMX_COLOR_FormatUnused;
- }
- else {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__,OMX_ErrorNoMore);
- return OMX_ErrorNoMore;
- }
- }
- else {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__,OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- LOGV("%s(), p->eColorFormat = %x\n", __func__, p->eColorFormat);
- break;
- }
- case OMX_IndexParamVideoH263: {
- OMX_VIDEO_PARAM_H263TYPE *p =
- (OMX_VIDEO_PARAM_H263TYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortH263 *port = NULL;
-
- LOGV("%s(): port index : %lu\n", __func__, index);
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortH263 *>(ports[index]);
-
- if (!port) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- memcpy(p, port->GetPortH263Param(), sizeof(*p));
- break;
- }
- case OMX_IndexParamVideoBitrate: {
-
- OMX_VIDEO_PARAM_BITRATETYPE *p =
- (OMX_VIDEO_PARAM_BITRATETYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortVideo *port = NULL;
-
- LOGV("%s(): port index : %lu\n", __func__, index);
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortVideo *>(ports[index]);
-
- if (!port) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- memcpy(p, port->GetPortBitrateParam(), sizeof(*p));
- break;
- }
- case OMX_IndexParamVideoProfileLevelQuerySupported:
- {
- OMX_VIDEO_PARAM_PROFILELEVELTYPE *p =
- (OMX_VIDEO_PARAM_PROFILELEVELTYPE *)pComponentParameterStructure;
- PortH263 *port = NULL;
-
- OMX_U32 index = p->nPortIndex;
-
- LOGV("%s(): port index : %lu\n", __func__, index);
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone)
- {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- {
- port = static_cast<PortH263 *>(ports[index]);
- }
- else
- {
- return OMX_ErrorBadParameter;
- }
-
- const OMX_VIDEO_PARAM_H263TYPE *H263Param = port->GetPortH263Param();
-
- p->eProfile = H263Param->eProfile;
- p->eLevel = H263Param->eLevel;
-
- break;
- }
- default:
- ret = OMX_ErrorUnsupportedIndex;
- } /* switch */
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::ComponentSetParameter(
- OMX_INDEXTYPE nIndex,
- OMX_PTR pComponentParameterStructure)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
-
- LOGV("%s(): enter (index = 0x%08x)\n", __func__, nIndex);
-
- switch (nIndex) {
- case OMX_IndexParamVideoPortFormat: {
- OMX_VIDEO_PARAM_PORTFORMATTYPE *p =
- (OMX_VIDEO_PARAM_PORTFORMATTYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortVideo *port = NULL;
-
- LOGV("%s(): port index : %lu\n", __func__, index);
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortVideo *>(ports[index]);
-
- if (!port) {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- if (port->IsEnabled()) {
- OMX_STATETYPE state;
-
- CBaseGetState((void *)GetComponentHandle(), &state);
- if (state != OMX_StateLoaded &&
- state != OMX_StateWaitForResources) {
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__,
- OMX_ErrorIncorrectStateOperation);
- return OMX_ErrorIncorrectStateOperation;
- }
- }
- ret = port->SetPortVideoParam(p, false);
- break;
- }
- case OMX_IndexParamVideoH263: {
- OMX_VIDEO_PARAM_H263TYPE *p =
- (OMX_VIDEO_PARAM_H263TYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortH263 *port = NULL;
-
- LOGV("%s(): port index : %lu\n", __func__, index);
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortH263 *>(ports[index]);
-
- if (!port) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- if (port->IsEnabled()) {
- OMX_STATETYPE state;
-
- CBaseGetState((void *)GetComponentHandle(), &state);
- if (state != OMX_StateLoaded &&
- state != OMX_StateWaitForResources) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorIncorrectStateOperation);
- return OMX_ErrorIncorrectStateOperation;
- }
- }
-
- ret = port->SetPortH263Param(p, false);
- break;
- }
- case OMX_IndexParamVideoBitrate: {
-
- LOGV("%s(), OMX_IndexParamVideoBitrate", __func__);
- h263EncParamIntelBitrateType.eControlRate
- = OMX_Video_Intel_ControlRateMax;
-
- OMX_VIDEO_PARAM_BITRATETYPE *p =
- (OMX_VIDEO_PARAM_BITRATETYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortVideo *port = NULL;
-
- LOGV("%s(): port index : %lu\n", __func__, index);
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortVideo *>(ports[index]);
-
- if (!port) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- if (port->IsEnabled()) {
- OMX_STATETYPE state;
- CBaseGetState((void *)GetComponentHandle(), &state);
- if (state != OMX_StateLoaded &&
- state != OMX_StateWaitForResources) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorIncorrectStateOperation);
- return OMX_ErrorIncorrectStateOperation;
- }
- }
-
- ret = port->SetPortBitrateParam(p, false);
- break;
- }
- case OMX_IndexParamVideoBytestream: {
-
- LOGV("%s(), OMX_IndexParamVideoBytestream", __func__);
-
- OMX_VIDEO_PARAM_BYTESTREAMTYPE *p =
- (OMX_VIDEO_PARAM_BYTESTREAMTYPE *) pComponentParameterStructure;
-
- H263_ENCODE_ERROR_CHECKING(p)
-
- OMX_STATETYPE state;
- CBaseGetState((void *) GetComponentHandle(), &state);
- if (state != OMX_StateLoaded && state != OMX_StateWaitForResources) {
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorIncorrectStateOperation);
- return OMX_ErrorIncorrectStateOperation;
- }
- break;
- }
- default:
- ret = OMX_ErrorUnsupportedIndex;
- } /* switch */
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-/* Get/SetConfig */
-OMX_ERRORTYPE MrstPsbComponent::ComponentGetConfig(
- OMX_INDEXTYPE nIndex,
- OMX_PTR pComponentConfigStructure)
-{
- OMX_ERRORTYPE ret = OMX_ErrorUnsupportedIndex;
- OMX_CONFIG_INTRAREFRESHVOPTYPE* pVideoIFrame;
- OMX_VIDEO_CONFIG_AVCINTRAPERIOD *pVideoIDRInterval;
-
- LOGV("%s(): enter\n", __func__);
-
- LOGV("%s() : nIndex = %d\n", __func__, nIndex);
-
- switch (nIndex)
- {
- case OMX_IndexConfigIntelBitrate: {
-
- LOGV("%s() : OMX_IndexParamIntelBitrate", __func__);
-
- if (h263EncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
-
- OMX_VIDEO_CONFIG_INTEL_BITRATETYPE *pIntelBitrate =
- (OMX_VIDEO_CONFIG_INTEL_BITRATETYPE *) pComponentConfigStructure;
-
- H263_ENCODE_ERROR_CHECKING(pIntelBitrate)
-
- *pIntelBitrate = h263EncConfigIntelBitrateType;
-
- break;
- }
-
- case OMX_IndexConfigVideoFramerate: {
-
- LOGV("%s() : OMX_IndexConfigVideoFramerate", __func__);
-
- if (h263EncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
-
- OMX_CONFIG_FRAMERATETYPE *pxFramerate =
- (OMX_CONFIG_FRAMERATETYPE *) pComponentConfigStructure;
-
- H263_ENCODE_ERROR_CHECKING(pxFramerate)
-
- *pxFramerate = h263EncFramerate;
- break;
- }
- case OMX_IndexIntelPrivateInfo: {
-
- OMX_VIDEO_CONFIG_PRI_INFOTYPE *p =
- (OMX_VIDEO_CONFIG_PRI_INFOTYPE *)pComponentConfigStructure;
- OMX_U32 index = p->nPortIndex;
- PortVideo *port = NULL;
-
- LOGV("%s(): port index : %lu\n", __func__, index);
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortVideo *>(ports[index]);
-
- if (!port) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- memcpy(p, port->GetPortPrivateInfoParam(), sizeof(*p));
- break;
- }
- default:
- {
- return OMX_ErrorUnsupportedIndex;
- }
- }
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return OMX_ErrorNone;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::ComponentSetConfig(
- OMX_INDEXTYPE nParamIndex,
- OMX_PTR pComponentConfigStructure)
-{
- OMX_ERRORTYPE ret = OMX_ErrorUnsupportedIndex;
- OMX_CONFIG_INTRAREFRESHVOPTYPE* pVideoIFrame;
-
- MIX_RESULT mret;
-
- LOGV("%s(): enter\n", __func__);
-
- LOGV("%s() : nIndex = %d\n", __func__, nParamIndex);
-
- switch (nParamIndex)
- {
- case OMX_IndexConfigVideoIntraVOPRefresh:
- {
- LOGV("%s(), OMX_IndexConfigVideoIntraVOPRefresh", __func__);
-
- pVideoIFrame = (OMX_CONFIG_INTRAREFRESHVOPTYPE*) pComponentConfigStructure;
-
- H263_ENCODE_ERROR_CHECKING(pVideoIFrame)
-
- LOGV("%s(), OMX_IndexConfigVideoIntraVOPRefresh", __func__);
- if(pVideoIFrame->IntraRefreshVOP == OMX_TRUE) {
- LOGV("%s(), pVideoIFrame->IntraRefreshVOP == OMX_TRUE", __func__);
-
- MixEncDynamicParams encdynareq;
- memset(&encdynareq, 0, sizeof(encdynareq));
- encdynareq.force_idr = TRUE;
- if(mix) {
- mret = mix_video_set_dynamic_enc_config (mix,
- MIX_ENC_PARAMS_FORCE_KEY_FRAME, &encdynareq);
- if(mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), failed to set IDR interval", __func__);
- }
- }
- }
- }
- break;
-
- case OMX_IndexConfigIntelBitrate: {
-
- LOGV("%s(), OMX_IndexConfigIntelBitrate", __func__);
- if (h263EncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- LOGV("%s(), eControlRate == OMX_Video_Intel_ControlRateMax");
- break;
- }
-
- OMX_VIDEO_CONFIG_INTEL_BITRATETYPE *pIntelBitrate =
- (OMX_VIDEO_CONFIG_INTEL_BITRATETYPE *) pComponentConfigStructure;
-
- H263_ENCODE_ERROR_CHECKING(pIntelBitrate);
-
- h263EncConfigIntelBitrateType = *pIntelBitrate;
-
- if (mix && h263EncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateVideoConferencingMode) {
-
- LOGV("%s(), h263EncConfigIntelBitrateType.nInitialQP = %d", __func__,
- h263EncConfigIntelBitrateType.nInitialQP);
-
- LOGV("%s(), h263EncConfigIntelBitrateType.nMinQP = %d", __func__,
- h263EncConfigIntelBitrateType.nMinQP);
-
- LOGV("%s(), h263EncConfigIntelBitrateType.nMaxEncodeBitrate = %d", __func__,
- h263EncConfigIntelBitrateType.nMaxEncodeBitrate);
-
- LOGV("%s(), h263EncConfigIntelBitrateType.nTargetPercentage = %d", __func__,
- h263EncConfigIntelBitrateType.nTargetPercentage);
-
- LOGV("%s(), h263EncConfigIntelBitrateType.nWindowSize = %d", __func__,
- h263EncConfigIntelBitrateType.nWindowSize);
-
- MixEncParamsType params_type;
- MixEncDynamicParams dynamic_params;
- memset(&dynamic_params, 0, sizeof(dynamic_params));
-
- params_type = MIX_ENC_PARAMS_INIT_QP;
- dynamic_params.init_QP = h263EncConfigIntelBitrateType.nInitialQP;
- mret = mix_video_set_dynamic_enc_config(mix, params_type,
- &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
-
- params_type = MIX_ENC_PARAMS_MIN_QP;
- dynamic_params.min_QP = h263EncConfigIntelBitrateType.nMinQP;
- mret = mix_video_set_dynamic_enc_config(mix, params_type,
- &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
-
- params_type = MIX_ENC_PARAMS_BITRATE;
- dynamic_params.bitrate
- = h263EncConfigIntelBitrateType.nMaxEncodeBitrate;
- mret = mix_video_set_dynamic_enc_config(mix, params_type,
- &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
-
- params_type = MIX_ENC_PARAMS_TARGET_PERCENTAGE;
- dynamic_params.target_percentage
- = h263EncConfigIntelBitrateType.nTargetPercentage;
- mret = mix_video_set_dynamic_enc_config(mix, params_type,
- &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
-
- params_type = MIX_ENC_PARAMS_WINDOW_SIZE;
- dynamic_params.window_size
- = h263EncConfigIntelBitrateType.nWindowSize;
- mret = mix_video_set_dynamic_enc_config(mix, params_type,
- &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
- }
- break;
- }
-
- case OMX_IndexConfigVideoFramerate: {
- if (h263EncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
-
- OMX_CONFIG_FRAMERATETYPE *pxFramerate =
- (OMX_CONFIG_FRAMERATETYPE *) pComponentConfigStructure;
-
- H263_ENCODE_ERROR_CHECKING(pxFramerate);
-
- h263EncFramerate = *pxFramerate;
-
- if (mix && h263EncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateVideoConferencingMode) {
-
- MixEncParamsType params_type;
- MixEncDynamicParams dynamic_params;
- memset(&dynamic_params, 0, sizeof(dynamic_params));
-
- params_type = MIX_ENC_PARAMS_FRAME_RATE;
- dynamic_params.frame_rate_denom = 1;
- dynamic_params.frame_rate_num = h263EncFramerate.xEncodeFramerate >> 16; // Q16 format
- mret = mix_video_set_dynamic_enc_config (mix, params_type, &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
- }
- break;
- }
-
- default:
- {
- return OMX_ErrorUnsupportedIndex;
- }
- }
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return OMX_ErrorNone;
-}
-/* end of component methods & helpers */
-
-/*
- * implement ComponentBase::Processor[*]
- */
-OMX_ERRORTYPE MrstPsbComponent::ProcessorInit(void)
-{
- MixVideo *mix = NULL;
- MixVideoInitParams *vip = NULL;
- MixParams *mvp = NULL;
- MixVideoConfigParams *vcp = NULL;
- MixDisplayAndroid *display = NULL;
- MixVideoConfigParamsEnc * pMixParam = NULL;
- uint major, minor;
- OMX_ERRORTYPE oret = OMX_ErrorNone;
- MIX_RESULT mret;
-
- LOGV("%s(): enter\n", __func__);
-
- mix = mix_video_new();
- LOGV("%s(): called to mix_video_new()", __func__);
-
- if (!mix) {
- LOGE("%s(),%d: exit, mix_video_new failed", __func__, __LINE__);
- goto error_out;
- }
-
- mix_video_get_version(mix, &major, &minor);
- LOGV("MixVideo version: %d.%d", major, minor);
-
- /* encoder */
- vcp = MIX_VIDEOCONFIGPARAMS(mix_videoconfigparamsenc_h263_new());
- mvp = MIX_PARAMS(mix_videoencodeparams_new());
-
- if (!vcp || !mvp ) {
- LOGE("%s(),%d: exit, failed to allocate vcp, mvp\n",
- __func__, __LINE__);
- goto error_out;
- }
-
- oret = ChangeVcpWithPortParam(vcp,
- static_cast<PortVideo *>(ports[INPORT_INDEX]),
- static_cast<PortVideo *>(ports[OUTPORT_INDEX]),
- NULL);
- if (oret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit, ChangeVcpWithPortParam failed (ret == 0x%08x)\n",
- __func__, __LINE__, oret);
- goto error_out;
- }
-
- display = mix_displayandroid_new();
- if (!display) {
- LOGE("%s(),%d: exit, mix_displayandroid_new failed", __func__, __LINE__);
- goto error_out;
- }
-
- vip = mix_videoinitparams_new();
- if (!vip) {
- LOGE("%s(),%d: exit, mix_videoinitparams_new failed", __func__,
- __LINE__);
- goto error_out;
- }
-
- {
- Display *android_display = (Display*)malloc(sizeof(Display));
- *(android_display) = 0x18c34078;
-
- LOGV("*android_display = %d", *android_display);
-
- mret = mix_displayandroid_set_display(display, android_display);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(),%d: exit, mix_displayandroid_set_display failed "
- "(ret == 0x%08x)", __func__, __LINE__, mret);
- goto error_out;
- }
- }
-
- mret = mix_videoinitparams_set_display(vip, MIX_DISPLAY(display));
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(),%d: exit, mix_videoinitparams_set_display failed "
- "(ret == 0x%08x)", __func__, __LINE__, mret);
- goto error_out;
- }
-
- mret = mix_video_initialize(mix, MIX_CODEC_MODE_ENCODE, vip, NULL);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(),%d: exit, mix_video_initialize failed (ret == 0x%08x)",
- __func__, __LINE__, mret);
- goto error_out;
- }
-
- oret = CheckAndEnableBufferSharingMode();
- if (oret != OMX_ErrorNone) {
- LOGE("%s(), %d: CheckAndEnableBufferSharingMode() failed ", __func__, __LINE__);
- goto error_out;
- }
-
- oret = RequestShareBuffers(mix,
- MIX_VIDEOCONFIGPARAMSENC(vcp)->picture_width,
- MIX_VIDEOCONFIGPARAMSENC(vcp)->picture_height);
- if (oret != OMX_ErrorNone) {
- LOGE("%s(), %d: RequestShareBuffers() failed ", __func__, __LINE__);
- goto error_out;
- }
-
- mix_videoconfigparamsenc_set_share_buf_mode(MIX_VIDEOCONFIGPARAMSENC(vcp), FALSE);
-
- LOGV("mix_video_configure");
- mret = mix_video_configure(mix, vcp, NULL);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(), %d: exit, mix_video_configure failed "
- "(ret:0x%08x)", __func__, __LINE__, mret);
- oret = OMX_ErrorUndefined;
- if(mret == MIX_RESULT_NO_MEMORY) {
- oret = OMX_ErrorInsufficientResources;
- } else if(mret == MIX_RESULT_NOT_PERMITTED) {
- oret = (OMX_ERRORTYPE)OMX_ErrorIntelVideoNotPermitted;;
- }
- goto error_out;
- }
-
- LOGV("%s(): mix video configured", __func__);
-
- this->mix = mix;
- this->vip = vip;
- this->mvp = mvp;
- this->vcp = vcp;
- this->display = display;
- this->mixbuffer_in[0] = NULL;
-
- inframe_counter = 0;
- outframe_counter = 0;
- is_mixvideodec_configured = OMX_FALSE;
-
- last_ts = 0;
- last_fps = 0.0;
-
- oret = RegisterShareBuffersToPort();
- if (oret != OMX_ErrorNone) {
- LOGE("%s(), %d RegisterShareBufferToPort() failed", __func__, __LINE__);
- oret = OMX_ErrorUndefined;
- goto error_out;
- }
-
- oret = RegisterShareBuffersToLib();
- if (oret != OMX_ErrorNone) {
- LOGE("%s(), %d register Share Buffering Mode failed", __func__, __LINE__);
- goto error_out;
- }
-
- oret = EnterBufferSharingMode();
- if (oret != OMX_ErrorNone) {
- LOGE("%s(), %d EnterShareBufferingMode() failed", __func__, __LINE__);
- goto error_out;
- }
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, oret);
- return oret;
-
-error_out:
- if (buffer_sharing_state == BUFFER_SHARING_EXECUTING) {
- ExitBufferSharingMode();
- }
- mix_params_unref(mvp);
- mix_videoconfigparams_unref(vcp);
- mix_displayandroid_unref(display);
- mix_videoinitparams_unref(vip);
- mix_video_unref(mix);
-
- return OMX_ErrorUndefined;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::ProcessorDeinit(void)
-{
- OMX_ERRORTYPE oret = OMX_ErrorNone;
- MIX_RESULT mret;
-
- LOGV("%s(): enter\n", __func__);
- if (buffer_sharing_state == BUFFER_SHARING_EXECUTING) {
- oret = ExitBufferSharingMode();
- if (oret != OMX_ErrorNone) {
- LOGE("%s(),%d: ExitShareBufferingMode failed", __func__, __LINE__);
- }
- }
-
- mix_video_eos(mix);
- mix_video_flush(mix);
-
- mix_params_unref(mvp);
- mix_videoconfigparams_unref(vcp);
- mix_displayandroid_unref(display);
- mix_videoinitparams_unref(vip);
-
- if (mixbuffer_in[0]) {
- mix_video_release_mixbuffer(mix, mixbuffer_in[0]);
- mixbuffer_in[0] = NULL;
- }
-
- mix_video_deinitialize(mix);
- mix_video_unref(mix);
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, oret);
- return oret;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::ProcessorStart(void)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
-
- LOGV("%s(): enter\n", __func__);
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::ProcessorStop(void)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
-
- LOGV("%s(): enter\n", __func__);
-
- ports[INPORT_INDEX]->ReturnAllRetainedBuffers();
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::ProcessorPause(void)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
-
- LOGV("%s(): enter\n", __func__);
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::ProcessorResume(void)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
-
- LOGV("%s(): enter\n", __func__);
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-
-/* implement ComponentBase::ProcessorProcess */
-OMX_ERRORTYPE MrstPsbComponent::ProcessorProcess(
- OMX_BUFFERHEADERTYPE ***pBuffers,
- buffer_retain_t *retain,
- OMX_U32 nr_buffers)
-{
- MixIOVec buffer_in, buffer_out;
- OMX_U32 outfilledlen = 0;
- OMX_S64 outtimestamp = 0;
- OMX_U32 outflags = 0;
- OMX_ERRORTYPE oret = OMX_ErrorNone;
- MIX_RESULT mret;
-
- LOGV("%s(): enter encode\n", __func__);
-
- LOGV_IF((*pBuffers[INPORT_INDEX])->nFlags & OMX_BUFFERFLAG_EOS,
- "%s(),%d: got OMX_BUFFERFLAG_EOS\n", __func__, __LINE__);
-
- if (!(*pBuffers[INPORT_INDEX])->nFilledLen) {
- LOGE("%s(),%d: input buffer's nFilledLen is zero\n",
- __func__, __LINE__);
- goto out;
- }
-
- if (buffer_sharing_state != BUFFER_SHARING_INVALID) {
- buffer_in.data_size = buffer_sharing_info[0].dataSize;
- buffer_in.buffer_size = buffer_sharing_info[0].allocatedSize;
- buffer_in.data = *(reinterpret_cast<uchar**>((*pBuffers[INPORT_INDEX])->pBuffer + (*pBuffers[INPORT_INDEX])->nOffset));
- } else {
- buffer_in.data = (*pBuffers[INPORT_INDEX])->pBuffer + (*pBuffers[INPORT_INDEX])->nOffset;
- buffer_in.data_size = (*pBuffers[INPORT_INDEX])->nFilledLen;
- buffer_in.buffer_size = (*pBuffers[INPORT_INDEX])->nFilledLen;
- }
-
- LOGV("buffer_in.data=%x, data_size=%d, buffer_size=%d",
- (unsigned)buffer_in.data, buffer_in.data_size, buffer_in.buffer_size);
-
- buffer_out.data =
- (*pBuffers[OUTPORT_INDEX])->pBuffer + (*pBuffers[OUTPORT_INDEX])->nOffset;
- buffer_out.data_size = 0;
- buffer_out.buffer_size = (*pBuffers[OUTPORT_INDEX])->nAllocLen - (*pBuffers[OUTPORT_INDEX])->nOffset;
- mixiovec_out[0] = &buffer_out;
-
-normal_start:
- /* get MixBuffer */
- mret = mix_video_get_mixbuffer(mix, &mixbuffer_in[0]);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(), %d: exit, mix_video_get_mixbuffer failed (ret:0x%08x)",
- __func__, __LINE__, mret);
- oret = OMX_ErrorUndefined;
- goto out;
- }
-
- /* fill MixBuffer */
- mret = mix_buffer_set_data(mixbuffer_in[0],
- buffer_in.data, buffer_in.data_size,
- (ulong)this, H263EncMixBufferCallback);
-
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(), %d: exit, mix_buffer_set_data failed (ret:0x%08x)",
- __func__, __LINE__, mret);
- oret = OMX_ErrorUndefined;
- goto out;
- }
-
- /* encoder */
- mret = mix_video_encode(mix, mixbuffer_in, 1, mixiovec_out, 1,
- MIX_VIDEOENCODEPARAMS(mvp));
-
- LOGV("%s(), mret = 0x%08x", __func__, mret);
-
- if (mret != MIX_RESULT_SUCCESS &&
- mret != MIX_RESULT_VIDEO_ENC_SLICESIZE_OVERFLOW) {
- LOGE("%s(), %d: exit, mix_video_encode failed (ret == 0x%08x)\n",
- __func__, __LINE__, mret);
- oret = OMX_ErrorUndefined;
- goto out;
- }
-
- outfilledlen = mixiovec_out[0]->data_size;
- outtimestamp = (*pBuffers[INPORT_INDEX])->nTimeStamp;
- outflags |= OMX_BUFFERFLAG_ENDOFFRAME;
-
- int32 width;
- int32 height;
- int32 display_width;
- int32 display_height;
- bool b_intra;
-
- h263_parser.DecodeH263Header(mixiovec_out[0]->data, &width,
- &height, &display_width, &display_height, &b_intra);
-
- if (b_intra) {
- LOGV("%s(), syncframe", __func__);
- outflags |= OMX_BUFFERFLAG_SYNCFRAME;
- }
-
- LOGV("********** output buffer: len=%d, ts=%ld, flags=%x",
- outfilledlen,
- outtimestamp,
- outflags);
-
- // The buffer will be relaseed in H263EncMixBufferCallback()
-
- retain[INPORT_INDEX] = BUFFER_RETAIN_ACCUMULATE;
-
- if(mret == MIX_RESULT_VIDEO_ENC_SLICESIZE_OVERFLOW) {
- LOGV("%s(), mix_video_encode returns MIX_RESULT_VIDEO_ENC_SLICESIZE_OVERFLOW"
- , __func__);
- oret = (OMX_ERRORTYPE)OMX_ErrorIntelExtSliceSizeOverflow;
- }
-#if SHOW_FPS
- {
- struct timeval t;
- OMX_TICKS current_ts, interval_ts;
- float current_fps, average_fps;
-
- t.tv_sec = t.tv_usec = 0;
- gettimeofday(&t, NULL);
-
- current_ts =
- (nsecs_t)t.tv_sec * 1000000000 + (nsecs_t)t.tv_usec * 1000;
- interval_ts = current_ts - last_ts;
- last_ts = current_ts;
-
- current_fps = (float)1000000000 / (float)interval_ts;
- average_fps = (current_fps + last_fps) / 2;
- last_fps = current_fps;
-
- LOGD("FPS = %2.1f\n", average_fps);
- }
-#endif
-
-out:
- if (mixbuffer_in[0]) {
- mix_video_release_mixbuffer(mix, mixbuffer_in[0]);
- mixbuffer_in[0] = NULL;
- }
-
- if(retain[OUTPORT_INDEX] != BUFFER_RETAIN_GETAGAIN) {
- (*pBuffers[OUTPORT_INDEX])->nFilledLen = outfilledlen;
- (*pBuffers[OUTPORT_INDEX])->nTimeStamp = outtimestamp;
- (*pBuffers[OUTPORT_INDEX])->nFlags = outflags;
-
- LOGV("********** output buffer: len=%d, ts=%ld, flags=%x",
- outfilledlen,
- outtimestamp,
- outflags);
- }
-
- if (retain[INPORT_INDEX] == BUFFER_RETAIN_NOT_RETAIN ||
- retain[INPORT_INDEX] == BUFFER_RETAIN_ACCUMULATE ) {
- inframe_counter++;
- }
-
- if (retain[OUTPORT_INDEX] == BUFFER_RETAIN_NOT_RETAIN)
- outframe_counter++;
-
- LOGV_IF(oret == OMX_ErrorNone,
- "%s(),%d: exit, encode is done\n", __func__, __LINE__);
-
- return oret;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::__H263ChangeVcpWithPortParam(
- MixVideoConfigParams *vcp, PortH263 *port, bool *vcp_changed)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
-
- MixVideoConfigParamsEnc *config = MIX_VIDEOCONFIGPARAMSENC(vcp);
-
- mix_videoconfigparamsenc_set_encode_format(
- config, MIX_ENCODE_TARGET_FORMAT_H263);
- mix_videoconfigparamsenc_set_profile(config, MIX_PROFILE_H263BASELINE);
- mix_videoconfigparamsenc_set_mime_type(config, "video/x-h263");
- mix_videoconfigparamsenc_h263_set_dlk(
- MIX_VIDEOCONFIGPARAMSENC_H263(config), FALSE);
-
- return ret;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::ChangeVcpWithPortParam(
- MixVideoConfigParams *vcp,
- PortVideo *port_in,
- PortVideo *port_out,
- bool *vcp_changed)
-{
- const OMX_PARAM_PORTDEFINITIONTYPE *pd_out = port_out->GetPortDefinition();
- const OMX_PARAM_PORTDEFINITIONTYPE *pd_in = port_in->GetPortDefinition();
- OMX_ERRORTYPE ret;
-
- ret = __H263ChangeVcpWithPortParam(vcp,
- static_cast<PortH263 *>(port_out),
- vcp_changed);
-
- /* encoder */
- MixVideoConfigParamsEnc *config = MIX_VIDEOCONFIGPARAMSENC(vcp);
- const OMX_VIDEO_PARAM_BITRATETYPE *bitrate =
- port_out->GetPortBitrateParam();
- OMX_VIDEO_CONTROLRATETYPE controlrate;
-
- if ((config->picture_width != pd_out->format.video.nFrameWidth) ||
- (config->picture_height != pd_out->format.video.nFrameHeight)) {
- LOGV("%s(): width : %d != %ld", __func__,
- config->picture_width, pd_out->format.video.nFrameWidth);
- LOGV("%s(): height : %d != %ld", __func__,
- config->picture_height, pd_out->format.video.nFrameHeight);
-
- mix_videoconfigparamsenc_set_picture_res(config,
- pd_out->format.video.nFrameWidth,
- pd_out->format.video.nFrameHeight);
- if (vcp_changed)
- *vcp_changed = true;
- }
-
- PortVideo *input_port = static_cast<PortVideo*>(ports[INPORT_INDEX]);
- const OMX_PARAM_PORTDEFINITIONTYPE *input_pd = input_port->GetPortDefinition();
-
- if (config->frame_rate_num != (input_pd->format.video.xFramerate >> 16)) {
- LOGV("%s(): framerate : %u != %ld", __func__,
- config->frame_rate_num, input_pd->format.video.xFramerate >> 16);
-
- mix_videoconfigparamsenc_set_frame_rate(config,
- input_pd->format.video.xFramerate >> 16,
- 1);
-
- if (vcp_changed)
- *vcp_changed = true;
- }
-
- if(h263EncPFrames == 0) {
- h263EncPFrames = config->frame_rate_num/2 ;
- }
-
- LOGV("%s() : h263EncPFrames = %d", __func__, h263EncPFrames);
- mix_videoconfigparamsenc_set_intra_period(config,h263EncPFrames);
-
- if (h263EncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
-
- LOGV("%s(), eControlRate == OMX_Video_Intel_ControlRateMax", __func__);
-
- if (config->bitrate != bitrate->nTargetBitrate) {
- LOGV("%s(): bitrate : %d != %ld", __func__,
- config->bitrate, bitrate->nTargetBitrate);
-
- mix_videoconfigparamsenc_set_bit_rate(config,
- bitrate->nTargetBitrate);
- if (vcp_changed)
- *vcp_changed = true;
- }
-
- if (config->rate_control == MIX_RATE_CONTROL_CBR)
- controlrate = OMX_Video_ControlRateConstant;
- else if (config->rate_control == MIX_RATE_CONTROL_VBR)
- controlrate = OMX_Video_ControlRateVariable;
- else
- controlrate = OMX_Video_ControlRateDisable;
-
- if (controlrate != bitrate->eControlRate) {
- LOGV("%s(): ratecontrol : %d != %d", __func__,
- controlrate, bitrate->eControlRate);
-
- if ((bitrate->eControlRate == OMX_Video_ControlRateVariable) ||
- (bitrate->eControlRate ==
- OMX_Video_ControlRateVariableSkipFrames))
- config->rate_control = MIX_RATE_CONTROL_VBR;
- else if ((bitrate->eControlRate ==
- OMX_Video_ControlRateConstant) ||
- (bitrate->eControlRate ==
- OMX_Video_ControlRateConstantSkipFrames))
- config->rate_control = MIX_RATE_CONTROL_CBR;
- else
- config->rate_control = MIX_RATE_CONTROL_NONE;
-
- if (vcp_changed)
- *vcp_changed = true;
- }
-
- /* hard coding */
- mix_videoconfigparamsenc_set_raw_format(config,
- MIX_RAW_TARGET_FORMAT_NV12);
- mix_videoconfigparamsenc_set_init_qp(config, 15);
- mix_videoconfigparamsenc_set_min_qp(config, 1);
- mix_videoconfigparamsenc_set_buffer_pool_size(config, 8);
- mix_videoconfigparamsenc_set_drawable(config, 0x0);
- mix_videoconfigparamsenc_set_need_display(config, FALSE);
-
- }
-
- return ret;
-}
-/* end of vcp setting helpers */
-
-/* share buffer setting */
-OMX_ERRORTYPE MrstPsbComponent::RequestToEnableBufferSharingMode()
-{
- BufferShareStatus bsret;
-
- if (buffer_sharing_state != BUFFER_SHARING_INVALID) {
- LOGE("%s(),%d: invoke %s failed (incorrect state).", __func__, __LINE__, __func__);
- return OMX_ErrorUndefined;
- }
-
- buffer_sharing_count = 7;
- buffer_sharing_info = NULL;
- buffer_sharing_lib = BufferShareRegistry::getInstance();
-
- bsret = buffer_sharing_lib->encoderRequestToEnableSharingMode();
- if (bsret != BS_SUCCESS) {
- LOGE("%s(),%d: encoder request to enable buffer sharing mode failed:%d", __func__, __LINE__, bsret);
- return OMX_ErrorUndefined;
- }
-
- return OMX_ErrorNone;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::CheckAndEnableBufferSharingMode()
-{
- BufferShareStatus bsret;
-
- if (buffer_sharing_state != BUFFER_SHARING_INVALID) {
- LOGE("%s(),%d: invoke %s failed (incorrect state).", __func__, __LINE__, __func__);
- return OMX_ErrorUndefined;
- }
-
- if (buffer_sharing_lib->isBufferSharingModeEnabled()) {
- LOGW("Buffer sharing is enabled (video source does support)");
- buffer_sharing_state = BUFFER_SHARING_LOADED;
- } else {
- LOGW("Buffer sharing is disabled (video source doesn't support)");
- }
-
- return OMX_ErrorNone;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::RequestToDisableBufferSharingMode()
-{
- BufferShareStatus bsret;
-
- if ((buffer_sharing_state != BUFFER_SHARING_INVALID) &&
- (buffer_sharing_state != BUFFER_SHARING_LOADED)) {
- LOGE("%s(),%d: invoke %s failed (incorrect state).", __func__, __LINE__, __func__);
- return OMX_ErrorUndefined;
- }
-
- if (buffer_sharing_state == BUFFER_SHARING_INVALID) {
- LOGW("%s(),%d: buffer sharing already in invalid state.", __func__, __LINE__);
- return OMX_ErrorNone;
- }
-
- if (buffer_sharing_info) {
- delete [] buffer_sharing_info;
- }
- buffer_sharing_info = NULL;
-
- bsret = buffer_sharing_lib->encoderRequestToDisableSharingMode();
- if (bsret != BS_SUCCESS) {
- LOGE("%s(),%d: request to disable sharing mode failed.", __func__, __LINE__);
- return OMX_ErrorUndefined;
- }
-
- buffer_sharing_state = BUFFER_SHARING_INVALID;
- return OMX_ErrorNone;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::RequestShareBuffers(MixVideo* mix, int width, int height)
-{
- int i;
- int buf_width, buf_height, buf_size;
- MIX_RESULT mret;
- bool is_request_ok = true;
-
- if (width <= 0 || height <= 0) {
- LOGE("%s(),%d: width and height incorrect", __func__, __LINE__);
- return OMX_ErrorUndefined;
- }
-
- if ((buffer_sharing_state != BUFFER_SHARING_INVALID) &&
- (buffer_sharing_state != BUFFER_SHARING_LOADED)) {
- LOGE("%s(),%d: invoke %s failed (incorrect state:%d).", __func__, __LINE__, __func__, buffer_sharing_state);
- return OMX_ErrorUndefined;
- }
-
- if (buffer_sharing_state == BUFFER_SHARING_INVALID) {
- LOGW("%s(),%d: buffer sharing not enabled, do nothing.", __func__, __LINE__);
- return OMX_ErrorNone;
- }
-
- if (buffer_sharing_info != NULL) {
- delete [] buffer_sharing_info;
- buffer_sharing_info = NULL;
- }
-
- buffer_sharing_info = new SharedBufferType[buffer_sharing_count];
- //query mix for share buffer info.
- for (i = 0; i < buffer_sharing_count; i++) {
- buf_width = width;
- buf_height = height;
- buf_size = SHARE_PTR_ALIGN(buf_width) * buf_height * 3 / 2;
- mret = mix_video_get_new_userptr_for_surface_buffer(mix,
- (uint)buf_width,
- (uint)buf_height,
- MIX_STRING_TO_FOURCC("NV12"),
- (uint)buf_size,
- (uint*)&buffer_sharing_info[i].allocatedSize,
- (uint*)&buffer_sharing_info[i].stride,
- (uint8**)&buffer_sharing_info[i].pointer);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(),%d: mix_video_get_new_userptr_for_surface_buffer failed", __func__, __LINE__);
- is_request_ok = false;
- break;
- }
- buffer_sharing_info[i].width = buf_width;
- buffer_sharing_info[i].height = buf_height;
- buffer_sharing_info[i].dataSize = buffer_sharing_info[i].stride * buf_height * 3 / 2;
-
- LOGD("width:%d, Height:%d, stride:%d, pointer:%p", buffer_sharing_info[i].width,
- buffer_sharing_info[i].height, buffer_sharing_info[i].stride,
- buffer_sharing_info[i].pointer);
- }
-
- if (!is_request_ok) {
- delete []buffer_sharing_info;
- buffer_sharing_info = NULL;
- LOGE("%s(),%d: %s failed", __func__, __LINE__,"get usr ptr for surface buffer");
- return OMX_ErrorUndefined;
- }
-
- return OMX_ErrorNone;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::RegisterShareBuffersToLib()
-{
- if ((buffer_sharing_state != BUFFER_SHARING_INVALID) &&
- (buffer_sharing_state != BUFFER_SHARING_LOADED)) {
- LOGE("%s(),%d: invoke %s failed (incorrect state).", __func__, __LINE__, __func__);
- return OMX_ErrorUndefined;
- }
-
- if (buffer_sharing_state == BUFFER_SHARING_INVALID) {
- LOGW("%s(),%d: buffer sharing not enabled, do nothing.", __func__, __LINE__);
- return OMX_ErrorNone;
- }
-
- BufferShareStatus bsret = buffer_sharing_lib->encoderSetSharedBuffer(buffer_sharing_info, buffer_sharing_count);
- if (bsret != BS_SUCCESS) {
- LOGE("%s(),%d: encoder set shared buffer failed", __func__, __LINE__);
- return OMX_ErrorUndefined;
- }
-
- return OMX_ErrorNone;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::RegisterShareBuffersToPort()
-{
- if ((buffer_sharing_state != BUFFER_SHARING_INVALID) &&
- (buffer_sharing_state != BUFFER_SHARING_LOADED)) {
- LOGE("%s(),%d: invoke %s failed (incorrect state).", __func__, __LINE__, __func__);
- return OMX_ErrorUndefined;
- }
-
- OMX_VIDEO_CONFIG_PRI_INFOTYPE privateinfoparam;
- memset(&privateinfoparam, 0, sizeof(privateinfoparam));
- SetTypeHeader(&privateinfoparam, sizeof(privateinfoparam));
-
- //caution: buffer-sharing info stored in INPORT (raw port)
- privateinfoparam.nPortIndex = INPORT_INDEX;
- if (buffer_sharing_state == BUFFER_SHARING_INVALID) {
- privateinfoparam.nCapacity = 0;
- privateinfoparam.nHolder = NULL;
- } else {
- privateinfoparam.nCapacity = buffer_sharing_count;
- privateinfoparam.nHolder = buffer_sharing_info;
- }
- OMX_ERRORTYPE ret = static_cast<PortVideo*>(ports[privateinfoparam.nPortIndex])->SetPortPrivateInfoParam(&privateinfoparam, false);
-
- return ret;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::EnterBufferSharingMode()
-{
- if ((buffer_sharing_state != BUFFER_SHARING_INVALID) &&
- (buffer_sharing_state != BUFFER_SHARING_LOADED)) {
- LOGE("%s(),%d: invoke %s failed (incorrect state).", __func__, __LINE__, __func__);
- return OMX_ErrorUndefined;
- }
-
- if (buffer_sharing_state == BUFFER_SHARING_INVALID) {
- LOGW("%s(),%d: buffer sharing not enabled, do nothing.", __func__, __LINE__);
- return OMX_ErrorNone;
- }
-
- BufferShareStatus bsret = buffer_sharing_lib->encoderEnterSharingMode();
- if (bsret != BS_SUCCESS) {
- LOGE("%s(),%d: encoderEnterSharingMode failed", __func__, __LINE__);
- if (bsret == BS_PEER_DOWN) {
- LOGE("%s(), %d: camera down during buffer sharing state transition.",__func__, __LINE__);
- }
- return OMX_ErrorUndefined;
- }
-
- buffer_sharing_state = BUFFER_SHARING_EXECUTING;
- return OMX_ErrorNone;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::ExitBufferSharingMode()
-{
- if ((buffer_sharing_state != BUFFER_SHARING_INVALID) &&
- (buffer_sharing_state != BUFFER_SHARING_EXECUTING)) {
- LOGE("%s(),%d: invoke %s failed (incorrect state).", __func__, __LINE__, __func__);
- return OMX_ErrorUndefined;
- }
-
- if (buffer_sharing_state == BUFFER_SHARING_INVALID) {
- LOGW("%s(),%d: buffer sharing not enabled, do nothing.", __func__, __LINE__);
- return OMX_ErrorNone;
- }
-
- BufferShareStatus bsret = buffer_sharing_lib->encoderExitSharingMode();
- if (bsret != BS_SUCCESS) {
- LOGE("%s(),%d: encoderEnterSharingMode failed", __func__, __LINE__);
- if (bsret == BS_PEER_DOWN) {
- LOGE("%s(), %d: camera down during buffer sharing state transition.",__func__, __LINE__);
- }
- return OMX_ErrorUndefined;
- }
-
- buffer_sharing_state = BUFFER_SHARING_LOADED;
- return OMX_ErrorNone;
-}
-/* end of share buffer setting */
-
-
-
-OMX_ERRORTYPE MrstPsbComponent::ProcessorFlush(OMX_U32 port_index) {
-
- LOGV("port_index = %d Flushed!\n", port_index);
-
- if ((port_index == INPORT_INDEX || port_index == OMX_ALL)) {
- ports[INPORT_INDEX]->ReturnAllRetainedBuffers();
- mix_video_flush( mix);
- }
- return OMX_ErrorNone;
-}
-
-void MrstPsbComponent::H263EncMixBufferCallback(ulong token, uchar *data) {
- MrstPsbComponent *_this = (MrstPsbComponent *) token;
-
- LOGV("H263EncMixBufferCallback Begin\n");
-
- if(_this) {
- _this->ports[_this->INPORT_INDEX]->ReturnAllRetainedBuffers();
- }
-
- LOGV("H263EncMixBufferCallback End\n");
-}
-
-/*
- * CModule Interface
- */
-#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
-
-static const char *g_name = (const char *)"OMX.Intel.Mrst.PSB.H263.Enc";
-
-static const char *g_roles[] =
-{
- (const char *)"video_encoder.h263",
-};
-
-OMX_ERRORTYPE wrs_omxil_cmodule_ops_instantiate(OMX_PTR *instance)
-{
- ComponentBase *cbase;
-
- cbase = new MrstPsbComponent;
- if (!cbase) {
- *instance = NULL;
- return OMX_ErrorInsufficientResources;
- }
-
- *instance = cbase;
- return OMX_ErrorNone;
-}
-
-struct wrs_omxil_cmodule_ops_s cmodule_ops = {
-instantiate:
- wrs_omxil_cmodule_ops_instantiate,
-};
-
-struct wrs_omxil_cmodule_s WRS_OMXIL_CMODULE_SYMBOL = {
-name:
- g_name,
-roles:
- &g_roles[0],
-nr_roles:
- ARRAY_SIZE(g_roles),
-ops:
- &cmodule_ops,
-};
diff --git a/h263-enc/psb_h263.h b/h263-enc/psb_h263.h
deleted file mode 100644
index e9cc627..0000000
--- a/h263-enc/psb_h263.h
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * psb.h, omx psb component header
- *
- * Copyright (c) 2009-2010 Wind River Systems, Inc.
- *
- * 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 __WRS_OMXIL_INTEL_MRST_PSB
-#define __WRS_OMXIL_INTEL_MRST_PSB
-
-#include <OMX_Core.h>
-#include <OMX_Component.h>
-
-#include <cmodule.h>
-#include <portbase.h>
-#include <componentbase.h>
-
-#include <IntelBufferSharing.h>
-
-using android::sp;
-using android::BufferShareRegistry;
-
-typedef enum
-{
- BUFFER_SHARING_INVALID,
- BUFFER_SHARING_LOADED,
- BUFFER_SHARING_EXECUTING
-} BufferSharingState;
-
-class MrstPsbComponent : public ComponentBase
-{
-public:
- /*
- * constructor & destructor
- */
- MrstPsbComponent();
- ~MrstPsbComponent();
-
-private:
- /*
- * component methods & helpers
- */
- /* implement ComponentBase::ComponentAllocatePorts */
- virtual OMX_ERRORTYPE ComponentAllocatePorts(void);
- OMX_ERRORTYPE __AllocateH263Port(OMX_U32 port_index, OMX_DIRTYPE dir);
- OMX_ERRORTYPE __AllocateRawPort(OMX_U32 port_index, OMX_DIRTYPE dir);
-
- /* implement ComponentBase::ComponentGet/SetPatameter */
- virtual OMX_ERRORTYPE
- ComponentGetParameter(OMX_INDEXTYPE nParamIndex,
- OMX_PTR pComponentParameterStructure);
- virtual OMX_ERRORTYPE
- ComponentSetParameter(OMX_INDEXTYPE nIndex,
- OMX_PTR pComponentParameterStructure);
-
- /* implement ComponentBase::ComponentGet/SetConfig */
- virtual OMX_ERRORTYPE
- ComponentGetConfig(OMX_INDEXTYPE nIndex,
- OMX_PTR pComponentConfigStructure);
- virtual OMX_ERRORTYPE
- ComponentSetConfig(OMX_INDEXTYPE nIndex,
- OMX_PTR pComponentConfigStructure);
-
- /* implement ComponentBase::Processor[*] */
- virtual OMX_ERRORTYPE ProcessorInit(void); /* Loaded to Idle */
- virtual OMX_ERRORTYPE ProcessorDeinit(void);/* Idle to Loaded */
- virtual OMX_ERRORTYPE ProcessorStart(void); /* Idle to Executing/Pause */
- virtual OMX_ERRORTYPE ProcessorStop(void); /* Executing/Pause to Idle */
- virtual OMX_ERRORTYPE ProcessorPause(void); /* Executing to Pause */
- virtual OMX_ERRORTYPE ProcessorResume(void);/* Pause to Executing */
- virtual OMX_ERRORTYPE ProcessorFlush(OMX_U32 port_index);
- virtual OMX_ERRORTYPE ProcessorProcess(OMX_BUFFERHEADERTYPE ***pBuffers,
- buffer_retain_t *retain,
- OMX_U32 nr_buffers);
-
- /* end of component methods & helpers */
-
- /*
- * vcp setting helpers
- */
- OMX_ERRORTYPE __RawChangePortParamWithVcp(MixVideoConfigParams *vcp,
- PortVideo *port);
- OMX_ERRORTYPE ChangePortParamWithVcp(void);
-
- /* encoders */
- OMX_ERRORTYPE __H263ChangeVcpWithPortParam(MixVideoConfigParams *vcp,
- PortH263 *port, bool *vcp_changed);
- OMX_ERRORTYPE ChangeVcpWithPortParam(MixVideoConfigParams *vcp,
- PortVideo *port_in,
- PortVideo *port_out,
- bool *vcp_changed);
-
- static void H263EncMixBufferCallback(ulong token, uchar *data);
-
- /* end of vcp setting helpers */
-
- /* share buffer setting */
- OMX_ERRORTYPE EnterBufferSharingMode(void);
- OMX_ERRORTYPE ExitBufferSharingMode(void);
- OMX_ERRORTYPE RequestToEnableBufferSharingMode(void);
- OMX_ERRORTYPE RequestToDisableBufferSharingMode(void);
- OMX_ERRORTYPE CheckAndEnableBufferSharingMode(void);
- OMX_ERRORTYPE RequestShareBuffers(MixVideo* mix, int width, int height);
- OMX_ERRORTYPE RegisterShareBuffersToPort(void);
- OMX_ERRORTYPE RegisterShareBuffersToLib(void);
- /* end of share buffer setting */
-
-
- /* mix video */
- MixVideo *mix;
- MixVideoInitParams *vip;
- MixParams *mvp;
- MixVideoConfigParams *vcp;
- MixDisplayAndroid *display;
- MixBuffer *mixbuffer_in[1];
- MixIOVec *mixiovec_out[1];
-
- OMX_BOOL is_mixvideodec_configured;
-
- OMX_U32 inframe_counter;
- OMX_U32 outframe_counter;
-
- /* for buffer sharing */
- sp<BufferShareRegistry> buffer_sharing_lib;
- int buffer_sharing_count;
- SharedBufferType* buffer_sharing_info;
- BufferSharingState buffer_sharing_state;
-
- /* for fps */
- OMX_TICKS last_ts;
- float last_fps;
-
- OMX_U32 h263EncPFrames;
- /* for H263 format detect */
- H263HeaderParser h263_parser;
-
- OMX_VIDEO_PARAM_INTEL_BITRATETYPE h263EncParamIntelBitrateType;
- OMX_VIDEO_CONFIG_INTEL_BITRATETYPE h263EncConfigIntelBitrateType;
- OMX_CONFIG_FRAMERATETYPE h263EncFramerate;
-
- /* constant */
- /* ports */
- const static OMX_U32 NR_PORTS = 2;
- const static OMX_U32 INPORT_INDEX = 0;
- const static OMX_U32 OUTPORT_INDEX = 1;
-
- /* default buffer */
- const static OMX_U32 INPORT_RAW_ACTUAL_BUFFER_COUNT = 2; //FIXME, must be set to 2
- const static OMX_U32 INPORT_RAW_MIN_BUFFER_COUNT = 1;
- const static OMX_U32 INPORT_RAW_BUFFER_SIZE = 614400;
- const static OMX_U32 OUTPORT_RAW_ACTUAL_BUFFER_COUNT = 2;
- const static OMX_U32 OUTPORT_RAW_MIN_BUFFER_COUNT = 1;
- const static OMX_U32 OUTPORT_RAW_BUFFER_SIZE = 38016;
-
- const static OMX_U32 INPORT_H263_ACTUAL_BUFFER_COUNT = 10;
- const static OMX_U32 INPORT_H263_MIN_BUFFER_COUNT = 1;
- const static OMX_U32 INPORT_H263_BUFFER_SIZE = 614400;
- const static OMX_U32 OUTPORT_H263_ACTUAL_BUFFER_COUNT = 2;
- const static OMX_U32 OUTPORT_H263_MIN_BUFFER_COUNT = 1;
- const static OMX_U32 OUTPORT_H263_BUFFER_SIZE = 614400;
-};
-#endif /* __WRS_OMXIL_INTEL_MRST_PSB */
diff --git a/h263-enc/vabuffer.h b/h263-enc/vabuffer.h
deleted file mode 100644
index 1b0196c..0000000
--- a/h263-enc/vabuffer.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * vabuffer.h, vabuffer structure header
- *
- * Copyright (c) 2009-2010 Wind River Systems, Inc.
- *
- * 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 __VA_BUFFER_H__
-#define __VA_BUFFER_H__
-
-struct VABuffer
-{
- VASurfaceID surface;
- VADisplay display;
- unsigned int frame_structure;
-};
-
-#endif /* __VA_BUFFER_H__ */
-
diff --git a/m4v-enc/Android.mk b/m4v-enc/Android.mk
deleted file mode 100644
index 43bb590..0000000
--- a/m4v-enc/Android.mk
+++ /dev/null
@@ -1,52 +0,0 @@
-ifeq ($(strip $(BOARD_USES_WRS_OMXIL_CORE)),true)
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- psb_m4v.cpp
-
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE := libwrs_omxil_intel_mrst_psb_m4v_enc
-
-LOCAL_CPPFLAGS := -DMIXVIDEO_ENCODE_ENABLE=0
-
-LOCAL_LDFLAGS :=
-
-LOCAL_STATIC_LIBRARIES :=
-
-LOCAL_SHARED_LIBRARIES := \
- libwrs_omxil_common \
- liblog \
- libmixcommon \
- libmixvideo \
- libmixvbp \
- libva \
- libva-android \
- libva-tpi \
- libutils \
- libsharedbuffer
-
-VENDORS_INTEL_MRST_MIXVBP_ROOT := $(VENDORS_INTEL_MRST_LIBMIX_ROOT)/mix_vbp
-
-LOCAL_C_INCLUDES := \
- $(TARGET_OUT_HEADERS)/khronos/openmax \
- $(TARGET_OUT_HEADERS)/wrs_omxil_core \
- $(TARGET_OUT_HEADERS)/libmixcommon \
- $(TARGET_OUT_HEADERS)/libmixvideo \
- $(TARGET_OUT_HEADERS)/libva \
- $(TARGET_OUT_HEADERS)/libdrm \
- $(TARGET_OUT_HEADERS)/libdrm/shared-core \
- $(TARGET_OUT_HEADERS)/libmixvbp \
- $(TARGET_OUT_HEADERS)/libpsb_drm \
- $(TARGET_OUT_HEADERS)/libsharedbuffer
-
-
-LOCAL_COPY_HEADERS_TO := libwrs_omxil_intel_mrst_psb_m4v_enc
-LOCAL_COPY_HEADERS := vabuffer.h
-
-ifeq ($(ENABLE_BUFFER_SHARE_MODE),true)
-LOCAL_CPPFLAGS += -DENABLE_BUFFER_SHARE_MODE=1
-endif
-
-include $(BUILD_SHARED_LIBRARY)
-endif
diff --git a/m4v-enc/ebuild.mk b/m4v-enc/ebuild.mk
deleted file mode 100644
index 06a4106..0000000
--- a/m4v-enc/ebuild.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- psb.cpp
-
-LOCAL_MODULE := libwrs_omxil_intel_mrst_psb
-
-LOCAL_CPPFLAGS :=
-
-LOCAL_LDFLAGS :=
-
-LOCAL_SHARED_LIBRARIES := \
- libwrs_omxil_common
-
-LOCAL_C_INCLUDES := \
- $(WRS_OMXIL_CORE_ROOT)/utils/inc \
- $(WRS_OMXIL_CORE_ROOT)/base/inc \
- $(WRS_OMXIL_CORE_ROOT)/core/inc/khronos/openmax/include
-
-include $(BUILD_SHARED_LIBRARY)
diff --git a/m4v-enc/psb_m4v.cpp b/m4v-enc/psb_m4v.cpp
deleted file mode 100644
index e3299d9..0000000
--- a/m4v-enc/psb_m4v.cpp
+++ /dev/null
@@ -1,1968 +0,0 @@
-/*
- * psb.cpp, omx psb component file
- *
- * Copyright (c) 2009-2010 Wind River Systems, Inc.
- *
- * 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.
- */
-//#define LOG_NDEBUG 0
-#undef LOG_TAG
-#define LOG_TAG "intel-m4v-encoder"
-#include <utils/Log.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <sys/time.h>
-
-#include <OMX_Core.h>
-#include <OMX_IndexExt.h>
-#include <OMX_VideoExt.h>
-#include <OMX_IntelErrorTypes.h>
-
-#include <cmodule.h>
-#include <portvideo.h>
-#include <componentbase.h>
-
-#include <mixdisplayandroid.h>
-#include <mixvideo.h>
-#include <mixvideoconfigparamsenc_mpeg4.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <va/va.h>
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#include <va/va_android.h>
-#include "psb_m4v.h"
-
-#define Display unsigned int
-#define SHOW_FPS 0
-#include "vabuffer.h"
-
-#include <IntelBufferSharing.h>
-
-#define MPEG4_ENCODE_ERROR_CHECKING(p) \
-if (!p) { \
- LOGV("%s(), NULL pointer", __func__); \
- return OMX_ErrorBadParameter; \
-} \
-ret = CheckTypeHeader(p, sizeof(*p)); \
-if (ret != OMX_ErrorNone) { \
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret); \
- return ret; \
-} \
-OMX_U32 index = p->nPortIndex; \
-if (index != OUTPORT_INDEX) { \
- LOGV("%s(), wrong port index", __func__); \
- return OMX_ErrorBadPortIndex; \
-} \
-PortMpeg4*port = static_cast<PortMpeg4 *> (ports[index]); \
-if (!port) { \
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, \
- OMX_ErrorBadPortIndex); \
- return OMX_ErrorBadPortIndex; \
-} \
-LOGV("%s(), about to get native or supported nal format", __func__); \
-if (!port->IsEnabled()) { \
- LOGV("%s() : port is not enabled", __func__); \
- return OMX_ErrorNotReady; \
-}\
-
-/*
- * constructor & destructor
- */
-MrstPsbComponent::MrstPsbComponent()
-{
- LOGV("%s(): enter\n", __func__);
-
- buffer_sharing_state = BUFFER_SHARING_INVALID;
-
- OMX_ERRORTYPE oret = RequestToEnableBufferSharingMode();
-
- if (oret != OMX_ErrorNone) {
- LOGE("%s(),%d: set buffer sharing mode failed", __func__, __LINE__);
- RequestToDisableBufferSharingMode();
- }
-
- LOGV("%s(),%d: exit\n", __func__, __LINE__);
-}
-
-MrstPsbComponent::~MrstPsbComponent()
-{
- LOGV("%s(): enter\n", __func__);
-
- OMX_ERRORTYPE oret = RequestToDisableBufferSharingMode();
- if (oret != OMX_ErrorNone) {
- LOGE("%s(),%d: DisableBufferSharingMode failed", __func__, __LINE__);
- }
-
- LOGV("%s(),%d: exit\n", __func__, __LINE__);
-}
-
-/* end of constructor & destructor */
-
-/* core methods & helpers */
-OMX_ERRORTYPE MrstPsbComponent::ComponentAllocatePorts(void)
-{
- PortBase **ports;
- OMX_U32 codec_port_index, raw_port_index;
- OMX_DIRTYPE codec_port_dir, raw_port_dir;
- OMX_PORT_PARAM_TYPE portparam;
- const char *working_role;
-
- OMX_ERRORTYPE ret = OMX_ErrorUndefined;
- LOGV("%s(): enter\n", __func__);
- ports = new PortBase *[NR_PORTS];
- if (!ports)
- return OMX_ErrorInsufficientResources;
-
- this->nr_ports = NR_PORTS;
- this->ports = ports;
-
- /* video_[encoder/decoder].[avc/whatever] */
- working_role = GetWorkingRole();
- working_role = strpbrk(working_role, "_");
-
- raw_port_index = INPORT_INDEX;
- codec_port_index = OUTPORT_INDEX;
- raw_port_dir = OMX_DirInput;
- codec_port_dir = OMX_DirOutput;
-
- working_role = strpbrk(working_role, ".");
- if (!working_role)
- return OMX_ErrorUndefined;
- working_role++;
-
- this->mix = NULL;
- this->vip = NULL;
- this->mvp = NULL;
- this->vcp = NULL;
- this->display = NULL;
- this->mixbuffer_in[0] = NULL;
-
- ret = __AllocateMpeg4Port(codec_port_index, codec_port_dir);
-
- if (ret != OMX_ErrorNone)
- goto free_ports;
-
- ret = __AllocateRawPort(raw_port_index, raw_port_dir);
-
- if (ret != OMX_ErrorNone)
- goto free_codecport;
-
- /* OMX_PORT_PARAM_TYPE */
- memset(&portparam, 0, sizeof(portparam));
- SetTypeHeader(&portparam, sizeof(portparam));
- portparam.nPorts = NR_PORTS;
- portparam.nStartPortNumber = INPORT_INDEX;
-
- memcpy(&this->portparam, &portparam, sizeof(portparam));
- /* end of OMX_PORT_PARAM_TYPE */
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, OMX_ErrorNone);
- return OMX_ErrorNone;
-
-free_codecport:
- delete ports[codec_port_index];
- ports[codec_port_index] = NULL;
-
-free_ports:
-
- delete []ports;
- ports = NULL;
-
- this->ports = NULL;
- this->nr_ports = 0;
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::__AllocateMpeg4Port(OMX_U32 port_index,
- OMX_DIRTYPE dir)
-{
- PortMpeg4 *mpeg4port;
-
- OMX_PARAM_PORTDEFINITIONTYPE mpeg4portdefinition;
- OMX_VIDEO_PARAM_MPEG4TYPE mpeg4portparam;
-
- LOGV("%s(): enter\n", __func__);
-
- ports[port_index] = new PortMpeg4;
- if (!ports[port_index]) {
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorInsufficientResources);
- return OMX_ErrorInsufficientResources;
- }
- mpeg4port = static_cast<PortMpeg4 *>(this->ports[port_index]);
-
- /* OMX_PARAM_PORTDEFINITIONTYPE */
- memset(&mpeg4portdefinition, 0, sizeof(mpeg4portdefinition));
- SetTypeHeader(&mpeg4portdefinition, sizeof(mpeg4portdefinition));
- mpeg4portdefinition.nPortIndex = port_index;
- mpeg4portdefinition.eDir = dir;
-
- mpeg4portdefinition.nBufferCountActual =OUTPORT_MPEG4_ACTUAL_BUFFER_COUNT;
- mpeg4portdefinition.nBufferCountMin = OUTPORT_MPEG4_MIN_BUFFER_COUNT;
- mpeg4portdefinition.nBufferSize = OUTPORT_MPEG4_BUFFER_SIZE;
-
- mpeg4portdefinition.bEnabled = OMX_TRUE;
- mpeg4portdefinition.bPopulated = OMX_FALSE;
- mpeg4portdefinition.eDomain = OMX_PortDomainVideo;
- mpeg4portdefinition.format.video.cMIMEType = (OMX_STRING)"video/mpeg4";
- mpeg4portdefinition.format.video.pNativeRender = NULL;
- mpeg4portdefinition.format.video.nFrameWidth = 176;
- mpeg4portdefinition.format.video.nFrameHeight = 144;
- mpeg4portdefinition.format.video.nStride = 0;
- mpeg4portdefinition.format.video.nSliceHeight = 0;
- mpeg4portdefinition.format.video.nBitrate = 64000;
- mpeg4portdefinition.format.video.xFramerate = 15 << 16;
- mpeg4portdefinition.format.video.bFlagErrorConcealment = OMX_FALSE;
- mpeg4portdefinition.format.video.eCompressionFormat = OMX_VIDEO_CodingMPEG4;
- mpeg4portdefinition.format.video.eColorFormat = OMX_COLOR_FormatUnused;
- mpeg4portdefinition.format.video.pNativeWindow = NULL;
- mpeg4portdefinition.bBuffersContiguous = OMX_FALSE;
- mpeg4portdefinition.nBufferAlignment = 0;
- mpeg4port->SetPortDefinition(&mpeg4portdefinition, true);
- /* end of OMX_PARAM_PORTDEFINITIONTYPE */
-
- /* OMX_VIDEO_PARAM_MPEG4TYPE */
- memset(&mpeg4portparam, 0, sizeof(mpeg4portparam));
- SetTypeHeader(&mpeg4portparam, sizeof(mpeg4portparam));
- mpeg4portparam.nPortIndex = port_index;
- mpeg4portparam.eProfile = OMX_VIDEO_MPEG4ProfileSimple;
- mpeg4portparam.eLevel = OMX_VIDEO_MPEG4Level5;
-
- mpeg4port->SetPortMpeg4Param(&mpeg4portparam, true);
- /* end of OMX_VIDEO_PARAM_MPEG4TYPE */
-
- /* encoder */
- /* OMX_VIDEO_PARAM_BITRATETYPE */
- OMX_VIDEO_PARAM_BITRATETYPE bitrateparam;
- memset(&bitrateparam, 0, sizeof(bitrateparam));
- SetTypeHeader(&bitrateparam, sizeof(bitrateparam));
- bitrateparam.nPortIndex = port_index;
- bitrateparam.eControlRate = OMX_Video_ControlRateConstant;
- bitrateparam.nTargetBitrate = 64000;
- mpeg4port->SetPortBitrateParam(&bitrateparam, true);
- /* end of OMX_VIDEO_PARAM_BITRATETYPE */
-
- /* OMX_VIDEO_CONFIG_PRI_INFOTYPE */
- OMX_VIDEO_CONFIG_PRI_INFOTYPE privateinfoparam;
-
- memset(&privateinfoparam, 0, sizeof(privateinfoparam));
- SetTypeHeader(&privateinfoparam, sizeof(privateinfoparam));
-
- privateinfoparam.nPortIndex = port_index;
- privateinfoparam.nCapacity = 0;
- privateinfoparam.nHolder = NULL;
- mpeg4port->SetPortPrivateInfoParam(&privateinfoparam, true);
- /* end of OMX_VIDEO_CONFIG_PRI_INFOTYPE */
-
- mpeg4EncPFrames = 0;
- mpeg4EncParamIntelBitrateType.nPortIndex = port_index;
- mpeg4EncParamIntelBitrateType.eControlRate = OMX_Video_Intel_ControlRateMax;
- mpeg4EncParamIntelBitrateType.nTargetBitrate = 0;
- SetTypeHeader(&mpeg4EncParamIntelBitrateType, sizeof(mpeg4EncParamIntelBitrateType));
-
- mpeg4EncConfigIntelBitrateType.nPortIndex = port_index;
- mpeg4EncConfigIntelBitrateType.nMaxEncodeBitrate = 4000 * 1024; // Maximum bitrate
- mpeg4EncConfigIntelBitrateType.nTargetPercentage = 95; // Target bitrate as percentage of maximum bitrate; e.g. 95 is 95%
- mpeg4EncConfigIntelBitrateType.nWindowSize = 1000; // Window size in milliseconds allowed for bitrate to reach target
- mpeg4EncConfigIntelBitrateType.nInitialQP = 36; // Initial QP for I frames
- mpeg4EncConfigIntelBitrateType.nMinQP = 18;
- SetTypeHeader(&mpeg4EncConfigIntelBitrateType, sizeof(mpeg4EncConfigIntelBitrateType));
-
- mpeg4EncConfigAir.nPortIndex = port_index;
- mpeg4EncConfigAir.bAirEnable = OMX_FALSE;
- mpeg4EncConfigAir.bAirAuto = OMX_FALSE;
- mpeg4EncConfigAir.nAirMBs = 0;
- mpeg4EncConfigAir.nAirThreshold = 0;
- SetTypeHeader(&mpeg4EncConfigAir, sizeof(mpeg4EncConfigAir));
-
- mpeg4EncFramerate.nPortIndex = port_index;
- mpeg4EncFramerate.xEncodeFramerate = 0; // Q16 format
- SetTypeHeader(&mpeg4EncFramerate, sizeof(mpeg4EncFramerate));
-
-
-
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, OMX_ErrorNone);
- return OMX_ErrorNone;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::__AllocateRawPort(OMX_U32 port_index,
- OMX_DIRTYPE dir)
-{
- PortVideo *rawport;
-
- OMX_PARAM_PORTDEFINITIONTYPE rawportdefinition;
- OMX_VIDEO_PARAM_PORTFORMATTYPE rawvideoparam;
-
- LOGV("%s(): enter\n", __func__);
-
- ports[port_index] = new PortVideo;
- if (!ports[port_index]) {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__,
- OMX_ErrorInsufficientResources);
- return OMX_ErrorInsufficientResources;
- }
-
- rawport = static_cast<PortVideo *>(this->ports[port_index]);
-
- /* OMX_PARAM_PORTDEFINITIONTYPE */
- memset(&rawportdefinition, 0, sizeof(rawportdefinition));
- SetTypeHeader(&rawportdefinition, sizeof(rawportdefinition));
- rawportdefinition.nPortIndex = port_index;
- rawportdefinition.eDir = dir;
-
- rawportdefinition.nBufferCountActual = INPORT_RAW_ACTUAL_BUFFER_COUNT;
- rawportdefinition.nBufferCountMin = INPORT_RAW_MIN_BUFFER_COUNT;
- rawportdefinition.nBufferSize = INPORT_RAW_BUFFER_SIZE;
-
- rawportdefinition.bEnabled = OMX_TRUE;
- rawportdefinition.bPopulated = OMX_FALSE;
- rawportdefinition.eDomain = OMX_PortDomainVideo;
- rawportdefinition.format.video.cMIMEType = (char *)"video/raw";
- rawportdefinition.format.video.pNativeRender = NULL;
- rawportdefinition.format.video.nFrameWidth = 176;
- rawportdefinition.format.video.nFrameHeight = 144;
- rawportdefinition.format.video.nStride = 176;
- rawportdefinition.format.video.nSliceHeight = 144;
- rawportdefinition.format.video.nBitrate = 64000;
- rawportdefinition.format.video.xFramerate = 15 << 16;
- rawportdefinition.format.video.bFlagErrorConcealment = OMX_FALSE;
- rawportdefinition.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused;
- rawportdefinition.format.video.eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar;
- rawportdefinition.format.video.pNativeWindow = NULL;
- rawportdefinition.bBuffersContiguous = OMX_FALSE;
- rawportdefinition.nBufferAlignment = 0;
- rawport->SetPortDefinition(&rawportdefinition, true);
- /* end of OMX_PARAM_PORTDEFINITIONTYPE */
-
- /* OMX_VIDEO_PARAM_PORTFORMATTYPE */
- rawvideoparam.nPortIndex = port_index;
- rawvideoparam.nIndex = 0;
- rawvideoparam.eCompressionFormat = OMX_VIDEO_CodingUnused;
- rawvideoparam.eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar;
- rawport->SetPortVideoParam(&rawvideoparam, true);
- /* end of OMX_VIDEO_PARAM_PORTFORMATTYPE */
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, OMX_ErrorNone);
- return OMX_ErrorNone;
-}
-/* end of core methods & helpers */
-
-
-/*
- * component methods & helpers
- */
-/* Get/SetParameter */
-OMX_ERRORTYPE MrstPsbComponent::ComponentGetParameter(
- OMX_INDEXTYPE nParamIndex,
- OMX_PTR pComponentParameterStructure)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
-
- LOGV("%s(): enter (index = 0x%08x)\n", __func__, nParamIndex);
-
- switch (nParamIndex) {
- case OMX_IndexParamVideoPortFormat: {
- LOGV("%s(), OMX_IndexParamVideoPortFormat", __func__);
- OMX_VIDEO_PARAM_PORTFORMATTYPE *p =
- (OMX_VIDEO_PARAM_PORTFORMATTYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortVideo *port = NULL;
-
- LOGV("%s(): port index : %lu\n", __func__, index);
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortVideo *>(ports[index]);
-
- if (!port) {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- if(index == INPORT_INDEX ) {
- if(p->nIndex < 1) {
- p->eColorFormat = port->GetPortVideoParam()->eColorFormat;
- p->eCompressionFormat = OMX_VIDEO_CodingUnused;
- }
- else {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__,OMX_ErrorNoMore);
- return OMX_ErrorNoMore;
- }
- }
- else if(index == OUTPORT_INDEX) {
- if(p->nIndex < 1) {
- p->eCompressionFormat= port->GetPortVideoParam()->eCompressionFormat;
- p->eColorFormat = OMX_COLOR_FormatUnused;
- }
- else {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__,OMX_ErrorNoMore);
- return OMX_ErrorNoMore;
- }
- }
- else {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__,OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
-
- LOGV("p->eColorFormat = %x\n", p->eColorFormat);
-
- break;
- }
- case OMX_IndexParamVideoMpeg4: {
- LOGV("%s(), OMX_IndexParamVideoMpeg4", __func__);
- OMX_VIDEO_PARAM_MPEG4TYPE *p =
- (OMX_VIDEO_PARAM_MPEG4TYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortMpeg4 *port = NULL;
-
- LOGV("%s(): port index : %lu\n", __func__, index);
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortMpeg4 *>(ports[index]);
-
- if (!port) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- memcpy(p, port->GetPortMpeg4Param(), sizeof(*p));
- break;
- }
- case OMX_IndexParamVideoBitrate: {
- LOGV("%s(), OMX_IndexParamVideoBitrate", __func__);
- OMX_VIDEO_PARAM_BITRATETYPE *p =
- (OMX_VIDEO_PARAM_BITRATETYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortVideo *port = NULL;
-
- LOGV("%s(): port index : %lu\n", __func__, index);
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortVideo *>(ports[index]);
-
- if (!port) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- memcpy(p, port->GetPortBitrateParam(), sizeof(*p));
- break;
- }
- case OMX_IndexParamVideoProfileLevelQuerySupported:
- {
- LOGV("%s(), OMX_IndexParamVideoProfileLevelQuerySupported", __func__);
- OMX_VIDEO_PARAM_PROFILELEVELTYPE *p =
- (OMX_VIDEO_PARAM_PROFILELEVELTYPE *)pComponentParameterStructure;
- PortMpeg4 *port = NULL;
-
- OMX_U32 index = p->nPortIndex;
-
- LOGV("%s(): port index : %lu\n", __func__, index);
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone)
- {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- {
- port = static_cast<PortMpeg4 *>(ports[index]);
- }
- else
- {
- return OMX_ErrorBadParameter;
- }
-
- const OMX_VIDEO_PARAM_MPEG4TYPE *mpeg4Param = port->GetPortMpeg4Param();
-
- p->eProfile = mpeg4Param->eProfile;
- p->eLevel = mpeg4Param->eLevel;
-
- break;
- }
-
- default:
- ret = OMX_ErrorUnsupportedIndex;
- } /* switch */
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::ComponentSetParameter(
- OMX_INDEXTYPE nIndex,
- OMX_PTR pComponentParameterStructure)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
- LOGV("%s(): enter (index = 0x%08x)\n", __func__, nIndex);
-
- switch (nIndex) {
- case OMX_IndexParamVideoPortFormat: {
- LOGV("%s(), OMX_IndexParamVideoPortFormat", __func__);
- OMX_VIDEO_PARAM_PORTFORMATTYPE *p =
- (OMX_VIDEO_PARAM_PORTFORMATTYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortVideo *port = NULL;
-
- LOGV("%s(): port index : %lu\n", __func__, index);
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortVideo *>(ports[index]);
-
- if (!port) {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- if (port->IsEnabled()) {
- OMX_STATETYPE state;
-
- CBaseGetState((void *)GetComponentHandle(), &state);
- if (state != OMX_StateLoaded &&
- state != OMX_StateWaitForResources) {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__,
- OMX_ErrorIncorrectStateOperation);
- return OMX_ErrorIncorrectStateOperation;
- }
- }
-
- ret = port->SetPortVideoParam(p, false);
- break;
- }
- case OMX_IndexParamVideoMpeg4: {
- LOGV("%s(), OMX_IndexParamVideoMpeg4", __func__);
- OMX_VIDEO_PARAM_MPEG4TYPE *p =
- (OMX_VIDEO_PARAM_MPEG4TYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortMpeg4 *port = NULL;
-
- LOGV("%s(): port index : %lu\n", __func__, index);
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortMpeg4 *>(ports[index]);
-
- if (!port) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- if (port->IsEnabled()) {
- OMX_STATETYPE state;
-
- CBaseGetState((void *)GetComponentHandle(), &state);
- if (state != OMX_StateLoaded &&
- state != OMX_StateWaitForResources) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorIncorrectStateOperation);
- return OMX_ErrorIncorrectStateOperation;
- }
- }
- ret = port->SetPortMpeg4Param(p, false);
- break;
- }
- case OMX_IndexParamVideoBitrate: {
- LOGV("%s(), OMX_IndexParamVideoBitrate", __func__);
- OMX_VIDEO_PARAM_BITRATETYPE *p =
- (OMX_VIDEO_PARAM_BITRATETYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortVideo *port = NULL;
-
- LOGV("%s(): port index : %lu\n", __func__, index);
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortVideo *>(ports[index]);
-
- if (!port) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- if (port->IsEnabled()) {
- OMX_STATETYPE state;
- CBaseGetState((void *)GetComponentHandle(), &state);
- if (state != OMX_StateLoaded &&
- state != OMX_StateWaitForResources) {
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorIncorrectStateOperation);
- return OMX_ErrorIncorrectStateOperation;
- }
- }
- ret = port->SetPortBitrateParam(p, false);
-
- break;
- }
- case OMX_IndexParamVideoBytestream: {
- LOGV("%s(), OMX_IndexParamVideoBytestream", __func__);
- OMX_VIDEO_PARAM_BYTESTREAMTYPE *p =
- (OMX_VIDEO_PARAM_BYTESTREAMTYPE *) pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortVideo *port = NULL;
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortVideo *> (ports[index]);
-
- if (!port) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- if (port->IsEnabled()) {
- OMX_STATETYPE state;
- CBaseGetState((void *) GetComponentHandle(), &state);
- if (state != OMX_StateLoaded && state != OMX_StateWaitForResources) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorIncorrectStateOperation);
- return OMX_ErrorIncorrectStateOperation;
- }
-
- }
- break;
- }
-
- default:
- ret = OMX_ErrorUnsupportedIndex;
- } /* switch */
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-/* Get/SetConfig */
-OMX_ERRORTYPE MrstPsbComponent::ComponentGetConfig(
- OMX_INDEXTYPE nIndex,
- OMX_PTR pComponentConfigStructure)
-{
- OMX_ERRORTYPE ret = OMX_ErrorUnsupportedIndex;
- OMX_CONFIG_INTRAREFRESHVOPTYPE* pVideoIFrame;
- OMX_VIDEO_CONFIG_AVCINTRAPERIOD *pVideoIDRInterval;
-
- LOGV("%s(): enter\n", __func__);
-
- LOGV("%s() : nIndex = %d\n", __func__, nIndex);
-
- switch (nIndex)
- {
-
- case OMX_IndexConfigIntelBitrate: {
-
- LOGV("%s() : OMX_IndexParamIntelBitrate", __func__);
-
- if (mpeg4EncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
-
- OMX_VIDEO_CONFIG_INTEL_BITRATETYPE *pIntelBitrate =
- (OMX_VIDEO_CONFIG_INTEL_BITRATETYPE *) pComponentConfigStructure;
-
- MPEG4_ENCODE_ERROR_CHECKING(pIntelBitrate)
-
- *pIntelBitrate = mpeg4EncConfigIntelBitrateType;
-
- break;
- }
- case OMX_IndexConfigIntelAIR: {
-
- LOGV("%s() : OMX_IndexConfigIntelAIR", __func__);
-
- if (mpeg4EncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
-
- OMX_VIDEO_CONFIG_INTEL_AIR *pIntelAir =
- (OMX_VIDEO_CONFIG_INTEL_AIR *) pComponentConfigStructure;
-
- MPEG4_ENCODE_ERROR_CHECKING(pIntelAir)
-
- *pIntelAir = mpeg4EncConfigAir;
- break;
- }
- case OMX_IndexConfigVideoFramerate: {
-
- LOGV("%s() : OMX_IndexConfigVideoFramerate", __func__);
-
- if (mpeg4EncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
-
- OMX_CONFIG_FRAMERATETYPE *pxFramerate =
- (OMX_CONFIG_FRAMERATETYPE *) pComponentConfigStructure;
-
- MPEG4_ENCODE_ERROR_CHECKING(pxFramerate)
-
- *pxFramerate = mpeg4EncFramerate;
- break;
- }
- case OMX_IndexIntelPrivateInfo: {
- OMX_VIDEO_CONFIG_PRI_INFOTYPE *p =
- (OMX_VIDEO_CONFIG_PRI_INFOTYPE *)pComponentConfigStructure;
- OMX_U32 index = p->nPortIndex;
- PortVideo *port = NULL;
-
- LOGV("%s(): port index : %lu\n", __func__, index);
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortVideo *>(ports[index]);
-
- if (!port) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- memcpy(p, port->GetPortPrivateInfoParam(), sizeof(*p));
- break;
- }
- default:
- {
- return OMX_ErrorUnsupportedIndex;
- }
- }
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return OMX_ErrorNone;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::ComponentSetConfig(
- OMX_INDEXTYPE nParamIndex,
- OMX_PTR pComponentConfigStructure)
-{
- OMX_ERRORTYPE ret = OMX_ErrorUnsupportedIndex;
- OMX_CONFIG_INTRAREFRESHVOPTYPE* pVideoIFrame;
- MIX_RESULT mret;
- LOGV("%s(): enter\n", __func__);
-
- switch (nParamIndex)
- {
- case OMX_IndexConfigVideoIntraVOPRefresh:
- {
- LOGV("%s(), OMX_IndexConfigVideoIntraVOPRefresh", __func__);
-
- pVideoIFrame = (OMX_CONFIG_INTRAREFRESHVOPTYPE*) pComponentConfigStructure;
-
- MPEG4_ENCODE_ERROR_CHECKING(pVideoIFrame)
-
- LOGV("%s(), OMX_IndexConfigVideoIntraVOPRefresh", __func__);
- if(pVideoIFrame->IntraRefreshVOP == OMX_TRUE) {
- LOGV("%s(), pVideoIFrame->IntraRefreshVOP == OMX_TRUE", __func__);
-
- MixEncDynamicParams encdynareq;
- memset(&encdynareq, 0, sizeof(encdynareq));
- encdynareq.force_idr = TRUE;
- if(mix) {
- mret = mix_video_set_dynamic_enc_config (mix,
- MIX_ENC_PARAMS_FORCE_KEY_FRAME, &encdynareq);
- if(mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), failed to set IDR interval", __func__);
- }
- }
- }
- break;
- }
-
- case OMX_IndexConfigIntelBitrate: {
-
- LOGV("%s(), OMX_IndexConfigIntelBitrate", __func__);
- if (mpeg4EncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- LOGV("%s(), eControlRate == OMX_Video_Intel_ControlRateMax");
- break;
- }
-
- OMX_VIDEO_CONFIG_INTEL_BITRATETYPE *pIntelBitrate =
- (OMX_VIDEO_CONFIG_INTEL_BITRATETYPE *) pComponentConfigStructure;
-
- MPEG4_ENCODE_ERROR_CHECKING(pIntelBitrate);
-
- mpeg4EncConfigIntelBitrateType = *pIntelBitrate;
-
- if (mix && mpeg4EncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateVideoConferencingMode) {
-
- LOGV("%s(), mpeg44EncConfigIntelBitrateType.nInitialQP = %d", __func__,
- mpeg4EncConfigIntelBitrateType.nInitialQP);
-
- LOGV("%s(), mpeg4EncConfigIntelBitrateType.nMinQP = %d", __func__,
- mpeg4EncConfigIntelBitrateType.nMinQP);
-
- LOGV("%s(), mpeg4EncConfigIntelBitrateType.nMaxEncodeBitrate = %d", __func__,
- mpeg4EncConfigIntelBitrateType.nMaxEncodeBitrate);
-
- LOGV("%s(), mpeg4EncConfigIntelBitrateType.nTargetPercentage = %d", __func__,
- mpeg4EncConfigIntelBitrateType.nTargetPercentage);
-
- LOGV("%s(), mpeg4EncConfigIntelBitrateType.nWindowSize = %d", __func__,
- mpeg4EncConfigIntelBitrateType.nWindowSize);
-
- MixEncParamsType params_type;
- MixEncDynamicParams dynamic_params;
- memset(&dynamic_params, 0, sizeof(dynamic_params));
-
- params_type = MIX_ENC_PARAMS_INIT_QP;
- dynamic_params.init_QP = mpeg4EncConfigIntelBitrateType.nInitialQP;
- mret = mix_video_set_dynamic_enc_config(mix, params_type,
- &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
-
- params_type = MIX_ENC_PARAMS_MIN_QP;
- dynamic_params.min_QP = mpeg4EncConfigIntelBitrateType.nMinQP;
- mret = mix_video_set_dynamic_enc_config(mix, params_type,
- &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
-
- params_type = MIX_ENC_PARAMS_BITRATE;
- dynamic_params.bitrate
- = mpeg4EncConfigIntelBitrateType.nMaxEncodeBitrate;
- mret = mix_video_set_dynamic_enc_config(mix, params_type,
- &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
-
- params_type = MIX_ENC_PARAMS_TARGET_PERCENTAGE;
- dynamic_params.target_percentage
- = mpeg4EncConfigIntelBitrateType.nTargetPercentage;
- mret = mix_video_set_dynamic_enc_config(mix, params_type,
- &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
-
- params_type = MIX_ENC_PARAMS_WINDOW_SIZE;
- dynamic_params.window_size
- = mpeg4EncConfigIntelBitrateType.nWindowSize;
- mret = mix_video_set_dynamic_enc_config(mix, params_type,
- &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
- }
- break;
- }
- case OMX_IndexConfigIntelAIR: {
- LOGV("%s(), OMX_IndexConfigIntelAIR", __func__);
- if (mpeg4EncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
-
- OMX_VIDEO_CONFIG_INTEL_AIR *pIntelAir =
- (OMX_VIDEO_CONFIG_INTEL_AIR *) pComponentConfigStructure;
-
- MPEG4_ENCODE_ERROR_CHECKING(pIntelAir);
-
- mpeg4EncConfigAir = *pIntelAir;
-
- if (mix && mpeg4EncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateVideoConferencingMode) {
-
- MixEncParamsType params_type;
- MixEncDynamicParams dynamic_params;
- memset(&dynamic_params, 0, sizeof(dynamic_params));
-
- if(pIntelAir->bAirEnable) {
-
- params_type = MIX_ENC_PARAMS_REFRESH_TYPE;
- dynamic_params.refresh_type = MIX_VIDEO_AIR;
- mret = mix_video_set_dynamic_enc_config (mix, params_type, &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
-
- params_type = MIX_ENC_PARAMS_AIR;
- dynamic_params.air_params.air_auto = pIntelAir->bAirAuto;
- dynamic_params.air_params.air_MBs = pIntelAir->nAirMBs;
- dynamic_params.air_params.air_threshold = pIntelAir->nAirThreshold;
- mret = mix_video_set_dynamic_enc_config (mix, params_type, &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
-
- } else {
-
- params_type = MIX_ENC_PARAMS_REFRESH_TYPE;
- dynamic_params.refresh_type = MIX_VIDEO_NONIR;
- mret = mix_video_set_dynamic_enc_config (mix, params_type, &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
- }
- }
- break;
- }
-
- case OMX_IndexConfigVideoFramerate: {
-
- LOGV("%s(), OMX_IndexConfigVideoFramerate", __func__);
- if (mpeg4EncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
-
- OMX_CONFIG_FRAMERATETYPE *pxFramerate =
- (OMX_CONFIG_FRAMERATETYPE *) pComponentConfigStructure;
-
- MPEG4_ENCODE_ERROR_CHECKING(pxFramerate);
-
- mpeg4EncFramerate = *pxFramerate;
-
- if (mix && mpeg4EncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateVideoConferencingMode) {
-
- MixEncParamsType params_type;
- MixEncDynamicParams dynamic_params;
- memset(&dynamic_params, 0, sizeof(dynamic_params));
-
- params_type = MIX_ENC_PARAMS_FRAME_RATE;
- dynamic_params.frame_rate_denom = 1;
- dynamic_params.frame_rate_num = mpeg4EncFramerate.xEncodeFramerate >> 16; // Q16 format
- mret = mix_video_set_dynamic_enc_config (mix, params_type, &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
- }
- break;
- }
-
- default:
- {
- return OMX_ErrorUnsupportedIndex;
- }
- }
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return OMX_ErrorNone;
-}
-/* end of component methods & helpers */
-
-/*
- * implement ComponentBase::Processor[*]
- */
-OMX_ERRORTYPE MrstPsbComponent::ProcessorInit(void)
-{
- MixVideo *mix = NULL;
- MixVideoInitParams *vip = NULL;
- MixParams *mvp = NULL;
- MixVideoConfigParams *vcp = NULL;
- MixDisplayAndroid *display = NULL;
- OMX_U32 port_index = (OMX_U32)-1;
- uint major, minor;
- OMX_ERRORTYPE oret = OMX_ErrorNone;
- MIX_RESULT mret;
- BufferShareStatus bsret;
- temp_coded_data_buffer = NULL;
-
- LOGV("%s(): enter\n", __func__);
- mix = mix_video_new();
- LOGV("%s(): called to mix_video_new()", __func__);
-
- if (!mix) {
- LOGE("%s(),%d: exit, mix_video_new failed", __func__, __LINE__);
- goto error_out;
- }
-
- mix_video_get_version(mix, &major, &minor);
- LOGV("MixVideo version: %d.%d", major, minor);
-
- /* encoder */
- vcp =MIX_VIDEOCONFIGPARAMS(mix_videoconfigparamsenc_mpeg4_new());
- mvp = MIX_PARAMS(mix_videoencodeparams_new());
- port_index = OUTPORT_INDEX;
-
- if (!vcp || !mvp || (port_index == (OMX_U32)-1)) {
- LOGE("%s(),%d: exit, failed to allocate vcp, mvp, port_index\n",
- __func__, __LINE__);
- goto error_out;
- }
-
- oret = ChangeVcpWithPortParam(vcp,
- static_cast<PortVideo *>(ports[port_index]),
- NULL);
- if (oret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit, ChangeVcpWithPortParam failed (ret == 0x%08x)\n",
- __func__, __LINE__, oret);
- goto error_out;
- }
-
- display = mix_displayandroid_new();
- if (!display) {
- LOGE("%s(),%d: exit, mix_displayandroid_new failed", __func__, __LINE__);
- goto error_out;
- }
-
- vip = mix_videoinitparams_new();
- if (!vip) {
- LOGE("%s(),%d: exit, mix_videoinitparams_new failed", __func__,
- __LINE__);
- goto error_out;
- }
-
- {
- Display *android_display = (Display*)malloc(sizeof(Display));
- *(android_display) = 0x18c34078;
-
- LOGV("*android_display = %d", *android_display);
-
- mret = mix_displayandroid_set_display(display, android_display);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGV("%s(),%d: exit, mix_displayandroid_set_display failed "
- "(ret == 0x%08x)", __func__, __LINE__, mret);
- goto error_out;
- }
- }
-
- mret = mix_videoinitparams_set_display(vip, MIX_DISPLAY(display));
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(),%d: exit, mix_videoinitparams_set_display failed "
- "(ret == 0x%08x)", __func__, __LINE__, mret);
- goto error_out;
- }
-
- mret = mix_video_initialize(mix, MIX_CODEC_MODE_ENCODE, vip, NULL);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(),%d: exit, mix_video_initialize failed (ret == 0x%08x)",
- __func__, __LINE__, mret);
- goto error_out;
- }
-
- oret = CheckAndEnableBufferSharingMode();
- if (oret != OMX_ErrorNone) {
- LOGE("%s(), %d: CheckAndEnableBufferSharingMode() failed ", __func__, __LINE__);
- goto error_out;
- }
-
- oret = RequestShareBuffers(mix,
- MIX_VIDEOCONFIGPARAMSENC(vcp)->picture_width,
- MIX_VIDEOCONFIGPARAMSENC(vcp)->picture_height);
- if (oret != OMX_ErrorNone) {
- LOGE("%s(), %d: RequestShareBuffers() failed ", __func__, __LINE__);
- goto error_out;
- }
-
- mix_videoconfigparamsenc_set_share_buf_mode(MIX_VIDEOCONFIGPARAMSENC(vcp), FALSE);
-
- LOGV("mix_video_configure");
- mret = mix_video_configure(mix, vcp, NULL);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGV("%s(), %d: exit, mix_video_configure failed "
- "(ret:0x%08x)", __func__, __LINE__, mret);
- oret = OMX_ErrorUndefined;
- if(mret == MIX_RESULT_NO_MEMORY) {
- oret = OMX_ErrorInsufficientResources;
- } else if(mret == MIX_RESULT_NOT_PERMITTED) {
- oret = (OMX_ERRORTYPE)OMX_ErrorIntelVideoNotPermitted;;
- }
- goto error_out;
- }
-
- LOGV("%s(): mix video configured", __func__);
-
- this->mix = mix;
- this->vip = vip;
- this->mvp = mvp;
- this->vcp = vcp;
- this->display = display;
- this->mixbuffer_in[0] = NULL;
-
- inframe_counter = 0;
- outframe_counter = 0;
- is_mixvideodec_configured = OMX_FALSE;
-
- last_ts = 0;
- last_fps = 0.0;
-
- video_data = NULL;
- video_len = 0;
-
- temp_coded_data_buffer_size = MIX_VIDEOCONFIGPARAMSENC(vcp)->picture_width *
- MIX_VIDEOCONFIGPARAMSENC(vcp)->picture_height *
- 400 / 16 / 16; //FIXME: same with h264?
- temp_coded_data_buffer = new OMX_U8 [temp_coded_data_buffer_size];
-
- b_config_sent = false;
-
- oret = RegisterShareBuffersToPort();
- if (oret != OMX_ErrorNone) {
- LOGE("%s(), %d RegisterShareBufferToPort() failed", __func__, __LINE__);
- oret = OMX_ErrorUndefined;
- goto error_out;
- }
-
- oret = RegisterShareBuffersToLib();
- if (oret != OMX_ErrorNone) {
- LOGE("%s(), %d register Share Buffering Mode failed", __func__, __LINE__);
- goto error_out;
- }
-
- oret = EnterBufferSharingMode();
- if (oret != OMX_ErrorNone) {
- LOGE("%s(), %d EnterShareBufferingMode() failed", __func__, __LINE__);
- goto error_out;
- }
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, oret);
- return oret;
-
-error_out:
- if (buffer_sharing_state == BUFFER_SHARING_EXECUTING) {
- ExitBufferSharingMode();
- }
- mix_params_unref(mvp);
- mix_videoconfigparams_unref(vcp);
- mix_displayandroid_unref(display);
- mix_videoinitparams_unref(vip);
- mix_video_unref(mix);
-
-
- if (temp_coded_data_buffer != NULL) {
- delete [] temp_coded_data_buffer;
- temp_coded_data_buffer = NULL;
- }
-
- return OMX_ErrorUndefined;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::ProcessorDeinit(void)
-{
- OMX_ERRORTYPE oret = OMX_ErrorNone;
- MIX_RESULT mret;
-
- LOGV("%s(): enter\n", __func__);
- if (buffer_sharing_state == BUFFER_SHARING_EXECUTING) {
- oret = ExitBufferSharingMode();
- if (oret != OMX_ErrorNone) {
- LOGE("%s(),%d: ExitShareBufferingMode failed", __func__, __LINE__);
- }
- }
-
- mix_video_eos(mix);
- mix_video_flush(mix);
-
- mix_params_unref(mvp);
- mix_videoconfigparams_unref(vcp);
- mix_displayandroid_unref(display);
- mix_videoinitparams_unref(vip);
-
- if (mixbuffer_in[0]) {
- mix_video_release_mixbuffer(mix, mixbuffer_in[0]);
- mixbuffer_in[0] = NULL;
- }
-
- mix_video_deinitialize(mix);
- mix_video_unref(mix);
-
- //delete temp coded buffer
- if (temp_coded_data_buffer != NULL) {
- delete [] temp_coded_data_buffer;
- temp_coded_data_buffer = NULL;
- }
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, oret);
- return oret;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::ProcessorStart(void)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
- LOGV("%s(): enter\n", __func__);
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::ProcessorStop(void)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
-
- LOGV("%s(): enter\n", __func__);
-
- ports[INPORT_INDEX]->ReturnAllRetainedBuffers();
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::ProcessorPause(void)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
-
- LOGV("%s(): enter\n", __func__);
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::ProcessorResume(void)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
-
- LOGV("%s(): enter\n", __func__);
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-bool MrstPsbComponent::DetectSyncFrame(OMX_U8* vop)
-{
- M4vVopType voptype= static_cast<M4vVopType>(vop[4] & M4V_VOP_TYPE_MASK);
- return ( voptype == I_FRAME );
-}
-OMX_ERRORTYPE MrstPsbComponent::ParserConfigData(OMX_U8* coded_buf, OMX_U32 coded_len,
- OMX_U8** config_buf, OMX_U32* config_len)
-{
-
- if(coded_buf == NULL || coded_len < 4) {
- LOGE("%s,failed Wrong data ",__func__);
- return OMX_ErrorUndefined; // we won't proceed this not vop
- }
- OMX_U32 count = 0;
- OMX_U32 i = 0;
- OMX_U8* buf_in = coded_buf;
- *config_buf = NULL;
- *config_len = 0;
-
- while (i < coded_len)
- {
- if ((count > 1) && (buf_in[0] == 0x01) && (buf_in[1] == 0xB6)) //vop start code
- {
- i += 2;
- break;
- }
-
- if (*buf_in++)
- count = 0;
- else
- count++;
- i++;
- }
- if( i == coded_len) {
- LOGE("%s failed didn't find vop start code",__func__);
- return OMX_ErrorUndefined; //didn't find vop start code
- }
- //we need VOL header as codec config data not including 00 00 01 B6
- *config_buf = coded_buf;
- *config_len = i - 4;
-
- return OMX_ErrorNone;
-}
-
-/* implement ComponentBase::ProcessorProcess */
-OMX_ERRORTYPE MrstPsbComponent::ProcessorProcess(
- OMX_BUFFERHEADERTYPE ***pBuffers,
- buffer_retain_t *retain,
- OMX_U32 nr_buffers)
-{
- MixIOVec buffer_in, buffer_out;
- OMX_U32 outfilledlen = 0;
- OMX_S64 outtimestamp = 0;
- OMX_U32 outflags = 0;
- OMX_ERRORTYPE oret = OMX_ErrorNone;
- MIX_RESULT mret;
-
- OMX_U8* config_data = NULL;
- OMX_U32 config_len = 0;
-
- LOGV("%s(): enter encode\n", __func__);
-
- LOGV_IF((*pBuffers[INPORT_INDEX])->nFlags & OMX_BUFFERFLAG_EOS,
- "%s(),%d: got OMX_BUFFERFLAG_EOS\n", __func__, __LINE__);
-
- if (!(*pBuffers[INPORT_INDEX])->nFilledLen) {
- LOGV("%s(),%d: input buffer's nFilledLen is zero\n",
- __func__, __LINE__);
- goto out;
- }
-
- if (buffer_sharing_state != BUFFER_SHARING_INVALID) {
- buffer_in.data_size = buffer_sharing_info[0].dataSize;
- buffer_in.buffer_size = buffer_sharing_info[0].allocatedSize;
- buffer_in.data = *(reinterpret_cast<uchar**>((*pBuffers[INPORT_INDEX])->pBuffer + (*pBuffers[INPORT_INDEX])->nOffset));
- } else {
- buffer_in.data = (*pBuffers[INPORT_INDEX])->pBuffer + (*pBuffers[INPORT_INDEX])->nOffset;
- buffer_in.data_size = (*pBuffers[INPORT_INDEX])->nFilledLen;
- buffer_in.buffer_size = (*pBuffers[INPORT_INDEX])->nFilledLen;
- }
-
- LOGV("buffer_in.data=%x, data_size=%d, buffer_size=%d",
- (unsigned)buffer_in.data, buffer_in.data_size, buffer_in.buffer_size);
-
- buffer_out.data = (*pBuffers[OUTPORT_INDEX])->pBuffer + (*pBuffers[OUTPORT_INDEX])->nOffset;
- buffer_out.data_size = 0;
- buffer_out.buffer_size = (*pBuffers[OUTPORT_INDEX])->nAllocLen - (*pBuffers[OUTPORT_INDEX])->nOffset;
- mixiovec_out[0] = &buffer_out;
-
-nomal_start:
-
- /* get MixBuffer */
- mret = mix_video_get_mixbuffer(mix, &mixbuffer_in[0]);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(), %d: exit, mix_video_get_mixbuffer failed (ret:0x%08x)",
- __func__, __LINE__, mret);
- oret = OMX_ErrorUndefined;
- goto out;
- }
-
- /* fill MixBuffer */
- mret = mix_buffer_set_data(mixbuffer_in[0],
- buffer_in.data, buffer_in.data_size,
- (ulong)this, M4vEncMixBufferCallback);
-
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(), %d: exit, mix_buffer_set_data failed (ret:0x%08x)",
- __func__, __LINE__, mret);
- oret = OMX_ErrorUndefined;
- goto out;
- }
-
- if (video_len == 0) {
-
- LOGV("begin to call mix_video_encode()");
- mret = mix_video_encode(mix, mixbuffer_in, 1, mixiovec_out, 1,
- MIX_VIDEOENCODEPARAMS(mvp));
-
- LOGV("%s(), mret = 0x%08x", __func__, mret);
- LOGV("output data size = %d", mixiovec_out[0]->data_size);
-
- outtimestamp = (*pBuffers[INPORT_INDEX])->nTimeStamp;
-
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(), %d: exit, mix_video_encode failed (ret == 0x%08x)\n",
- __func__, __LINE__, mret);
- oret = OMX_ErrorUndefined;
- goto out;
- }
-
- if (mixiovec_out[0]-> data_size== 0) {
- retain[OUTPORT_INDEX] = BUFFER_RETAIN_GETAGAIN;
- retain[INPORT_INDEX] = BUFFER_RETAIN_ACCUMULATE;
- goto out;
- }
-
- oret = ParserConfigData(mixiovec_out[0]->data,mixiovec_out[0]->data_size,&config_data, &config_len);
- video_data = mixiovec_out[0]->data;
- video_len = mixiovec_out[0]->data_size;
- if(OMX_ErrorNone != oret)
- {
- LOGE("%s(), %d: exit, ParserConfigData() failed (ret == 0x%08x)\n",__func__, __LINE__, oret);
- goto out;
- }
- }
-
- if(config_len != 0) {
- //config data needs to be sent completely in a ProcessorProcess() cycle
- if(!b_config_sent) {
- outfilledlen = config_len;
- outflags |= OMX_BUFFERFLAG_CODECCONFIG;
- b_config_sent = true;
- if(config_data == NULL) {
- LOGE("%s()exit config_data is NULL.",__func__);
- oret = OMX_ErrorUndefined;
- goto out;
- }
- if((*pBuffers[OUTPORT_INDEX])->pBuffer + (*pBuffers[OUTPORT_INDEX])->nOffset != config_data) {
- memcpy((*pBuffers[OUTPORT_INDEX])->pBuffer+(*pBuffers[OUTPORT_INDEX])->nOffset,config_data,config_len);
- }
- }
- else {
- //stagefright only accept the first set of config data, hence discard following ones
- outfilledlen = 0;
- }
- //separate vol data from frame
- video_len = mixiovec_out[0]->data_size - config_len;
- if(video_len > temp_coded_data_buffer_size) {
- LOGE("temp_coded_data_buffer_size is too small %s",__LINE__);
- return OMX_ErrorUndefined;
- }
- memcpy(temp_coded_data_buffer,mixiovec_out[0]->data + config_len,video_len);
- video_data = temp_coded_data_buffer;
- outflags |= OMX_BUFFERFLAG_ENDOFFRAME;
- }
- else {
- outfilledlen = video_len;
- if(DetectSyncFrame(video_data)) {
- outflags |= OMX_BUFFERFLAG_SYNCFRAME;
- }
- if((*pBuffers[OUTPORT_INDEX])->pBuffer + (*pBuffers[OUTPORT_INDEX])->nOffset != video_data) {
- memcpy((*pBuffers[OUTPORT_INDEX])->pBuffer+(*pBuffers[OUTPORT_INDEX])->nOffset,video_data,video_len);
- }
- video_data = NULL;
- video_len = 0;
-
- outflags |= OMX_BUFFERFLAG_ENDOFFRAME;
- }
-
- if( outfilledlen > 0 ) {
- retain[OUTPORT_INDEX] = BUFFER_RETAIN_NOT_RETAIN;
- }
- else {
- retain[OUTPORT_INDEX] = BUFFER_RETAIN_GETAGAIN;
- }
-
- if (video_len == 0) {
- retain[INPORT_INDEX] = BUFFER_RETAIN_ACCUMULATE; //release by callback
- } else {
- retain[INPORT_INDEX] = BUFFER_RETAIN_GETAGAIN; //get again
- }
-
-#if SHOW_FPS
- {
- struct timeval t;
- OMX_TICKS current_ts, interval_ts;
- float current_fps, average_fps;
-
- t.tv_sec = t.tv_usec = 0;
- gettimeofday(&t, NULL);
-
- current_ts =
- (nsecs_t)t.tv_sec * 1000000000 + (nsecs_t)t.tv_usec * 1000;
- interval_ts = current_ts - last_ts;
- last_ts = current_ts;
-
- current_fps = (float)1000000000 / (float)interval_ts;
- average_fps = (current_fps + last_fps) / 2;
- last_fps = current_fps;
-
- LOGV("FPS = %2.1f\n", average_fps);
- }
-#endif
-
-out:
- if (mixbuffer_in[0]) {
- mix_video_release_mixbuffer(mix, mixbuffer_in[0]);
- mixbuffer_in[0] = NULL;
- }
-
- if(retain[OUTPORT_INDEX] != BUFFER_RETAIN_GETAGAIN) {
- (*pBuffers[OUTPORT_INDEX])->nFilledLen = outfilledlen;
- (*pBuffers[OUTPORT_INDEX])->nTimeStamp = outtimestamp;
- (*pBuffers[OUTPORT_INDEX])->nFlags = outflags;
- }
-
- if (retain[INPORT_INDEX] == BUFFER_RETAIN_NOT_RETAIN ||
- retain[INPORT_INDEX] == BUFFER_RETAIN_ACCUMULATE ) {
- inframe_counter++;
- }
-
- if (retain[OUTPORT_INDEX] == BUFFER_RETAIN_NOT_RETAIN)
- outframe_counter++;
-
- LOGV_IF(oret == OMX_ErrorNone,
- "%s(),%d: exit, encode is done\n", __func__, __LINE__);
-
- return oret;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::__Mpeg4ChangeVcpWithPortParam(
- MixVideoConfigParams *vcp, PortMpeg4 *port, bool *vcp_changed)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
- MixVideoConfigParamsEnc *config = MIX_VIDEOCONFIGPARAMSENC(vcp);
- mix_videoconfigparamsenc_set_encode_format(config, MIX_ENCODE_TARGET_FORMAT_MPEG4);
- mix_videoconfigparamsenc_set_profile(config, MIX_PROFILE_MPEG4SIMPLE);
- mix_videoconfigparamsenc_set_mime_type(config, "video/mpeg");
- mix_videoconfigparamsenc_mpeg4_set_dlk(MIX_VIDEOCONFIGPARAMSENC_MPEG4(config), FALSE);
- return ret;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::ChangeVcpWithPortParam(
- MixVideoConfigParams *vcp,
- PortVideo *port,
- bool *vcp_changed)
-{
- const OMX_PARAM_PORTDEFINITIONTYPE *pd = port->GetPortDefinition();
- OMX_ERRORTYPE ret;
-
- ret = __Mpeg4ChangeVcpWithPortParam(vcp,static_cast<PortMpeg4 *>(port), vcp_changed);
-
- /* encoder */
- MixVideoConfigParamsEnc *config = MIX_VIDEOCONFIGPARAMSENC(vcp);
- const OMX_VIDEO_PARAM_BITRATETYPE *bitrate =
- port->GetPortBitrateParam();
- OMX_VIDEO_CONTROLRATETYPE controlrate;
-
- if ((config->picture_width != pd->format.video.nFrameWidth) ||
- (config->picture_height != pd->format.video.nFrameHeight)) {
- LOGV("%s(): width : %d != %ld", __func__,
- config->picture_width, pd->format.video.nFrameWidth);
- LOGV("%s(): height : %d != %ld", __func__,
- config->picture_height, pd->format.video.nFrameHeight);
-
- mix_videoconfigparamsenc_set_picture_res(config,
- pd->format.video.nFrameWidth,
- pd->format.video.nFrameHeight);
- if (vcp_changed)
- *vcp_changed = true;
- }
-
- PortVideo *input_port = static_cast<PortVideo*>(ports[INPORT_INDEX]);
- const OMX_PARAM_PORTDEFINITIONTYPE *input_pd = input_port->GetPortDefinition();
-
- if (config->frame_rate_num != (input_pd->format.video.xFramerate >> 16)) {
- LOGV("%s(): framerate : %u != %ld", __func__,
- config->frame_rate_num, input_pd->format.video.xFramerate >> 16);
-
- mix_videoconfigparamsenc_set_frame_rate(config,
- input_pd->format.video.xFramerate >> 16,
- 1);
-
- if (vcp_changed)
- *vcp_changed = true;
- }
-
- if(mpeg4EncPFrames == 0 && mpeg4EncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- mpeg4EncPFrames = config->frame_rate_num / 2;
- }
-
- LOGV("%s() : mpeg4EncPFrames = %d", __func__, mpeg4EncPFrames);
- mix_videoconfigparamsenc_set_intra_period(config, mpeg4EncPFrames);
-
- if (mpeg4EncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
-
- LOGV("%s(), eControlRate == OMX_Video_Intel_ControlRateMax", __func__);
-
- if (config->bitrate != bitrate->nTargetBitrate) {
- LOGV("%s(): bitrate : %d != %ld", __func__,
- config->bitrate, bitrate->nTargetBitrate);
-
- mix_videoconfigparamsenc_set_bit_rate(config,
- bitrate->nTargetBitrate);
-
- if (vcp_changed)
- *vcp_changed = true;
- }
-
- if (config->rate_control == MIX_RATE_CONTROL_CBR)
- controlrate = OMX_Video_ControlRateConstant;
- else if (config->rate_control == MIX_RATE_CONTROL_VBR)
- controlrate = OMX_Video_ControlRateVariable;
- else
- controlrate = OMX_Video_ControlRateDisable;
-
- if (controlrate != bitrate->eControlRate) {
- LOGV("%s(): ratecontrol : %d != %d", __func__,
- controlrate, bitrate->eControlRate);
-
- if ((bitrate->eControlRate == OMX_Video_ControlRateVariable) ||
- (bitrate->eControlRate ==
- OMX_Video_ControlRateVariableSkipFrames))
- config->rate_control = MIX_RATE_CONTROL_VBR;
- else if ((bitrate->eControlRate ==
- OMX_Video_ControlRateConstant) ||
- (bitrate->eControlRate ==
- OMX_Video_ControlRateConstantSkipFrames))
- config->rate_control = MIX_RATE_CONTROL_CBR;
- else
- config->rate_control = MIX_RATE_CONTROL_NONE;
-
- if (vcp_changed)
- *vcp_changed = true;
- }
-
- /* hard coding */
- mix_videoconfigparamsenc_set_raw_format(config,
- MIX_RAW_TARGET_FORMAT_NV12);
- mix_videoconfigparamsenc_set_init_qp(config, 6);
- mix_videoconfigparamsenc_set_min_qp(config, 1);
- mix_videoconfigparamsenc_set_buffer_pool_size(config, 8);
- mix_videoconfigparamsenc_set_drawable(config, 0x0);
- mix_videoconfigparamsenc_set_need_display(config, FALSE);
- }
-
- return ret;
-}
-/* end of vcp setting helpers */
-
-/* share buffer setting */
-OMX_ERRORTYPE MrstPsbComponent::RequestToEnableBufferSharingMode()
-{
- BufferShareStatus bsret;
-
- if (buffer_sharing_state != BUFFER_SHARING_INVALID) {
- LOGE("%s(),%d: invoke %s failed (incorrect state).", __func__, __LINE__, __func__);
- return OMX_ErrorUndefined;
- }
-
- buffer_sharing_count = 7;
- buffer_sharing_info = NULL;
- buffer_sharing_lib = BufferShareRegistry::getInstance();
-
- bsret = buffer_sharing_lib->encoderRequestToEnableSharingMode();
- if (bsret != BS_SUCCESS) {
- LOGE("%s(),%d: encoder request to enable buffer sharing mode failed:%d", __func__, __LINE__, bsret);
- return OMX_ErrorUndefined;
- }
-
- return OMX_ErrorNone;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::CheckAndEnableBufferSharingMode()
-{
- BufferShareStatus bsret;
-
- if (buffer_sharing_state != BUFFER_SHARING_INVALID) {
- LOGE("%s(),%d: invoke %s failed (incorrect state).", __func__, __LINE__, __func__);
- return OMX_ErrorUndefined;
- }
-
- if (buffer_sharing_lib->isBufferSharingModeEnabled()) {
- LOGW("Buffer sharing is enabled (video source does support)");
- buffer_sharing_state = BUFFER_SHARING_LOADED;
- } else {
- LOGW("Buffer sharing is disabled (video source doesn't support)");
- }
-
- return OMX_ErrorNone;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::RequestToDisableBufferSharingMode()
-{
- BufferShareStatus bsret;
-
- if ((buffer_sharing_state != BUFFER_SHARING_INVALID) &&
- (buffer_sharing_state != BUFFER_SHARING_LOADED)) {
- LOGE("%s(),%d: invoke %s failed (incorrect state).", __func__, __LINE__, __func__);
- return OMX_ErrorUndefined;
- }
-
- if (buffer_sharing_state == BUFFER_SHARING_INVALID) {
- LOGW("%s(),%d: buffer sharing already in invalid state.", __func__, __LINE__);
- return OMX_ErrorNone;
- }
-
- if (buffer_sharing_info) {
- delete [] buffer_sharing_info;
- }
- buffer_sharing_info = NULL;
-
- bsret = buffer_sharing_lib->encoderRequestToDisableSharingMode();
- if (bsret != BS_SUCCESS) {
- LOGE("%s(),%d: request to disable sharing mode failed.", __func__, __LINE__);
- return OMX_ErrorUndefined;
- }
-
- buffer_sharing_state = BUFFER_SHARING_INVALID;
- return OMX_ErrorNone;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::RequestShareBuffers(MixVideo* mix, int width, int height)
-{
- int i;
- int buf_width, buf_height, buf_size;
- MIX_RESULT mret;
- bool is_request_ok = true;
-
- if (width <= 0 || height <= 0) {
- LOGE("%s(),%d: width and height incorrect", __func__, __LINE__);
- return OMX_ErrorUndefined;
- }
-
- if ((buffer_sharing_state != BUFFER_SHARING_INVALID) &&
- (buffer_sharing_state != BUFFER_SHARING_LOADED)) {
- LOGE("%s(),%d: invoke %s failed (incorrect state:%d).", __func__, __LINE__, __func__, buffer_sharing_state);
- return OMX_ErrorUndefined;
- }
-
- if (buffer_sharing_state == BUFFER_SHARING_INVALID) {
- LOGW("%s(),%d: buffer sharing not enabled, do nothing.", __func__, __LINE__);
- return OMX_ErrorNone;
- }
-
- if (buffer_sharing_info != NULL) {
- delete [] buffer_sharing_info;
- buffer_sharing_info = NULL;
- }
-
- buffer_sharing_info = new SharedBufferType[buffer_sharing_count];
- //query mix for share buffer info.
- for (i = 0; i < buffer_sharing_count; i++) {
- buf_width = width;
- buf_height = height;
- buf_size = SHARE_PTR_ALIGN(buf_width) * buf_height * 3 / 2;
- mret = mix_video_get_new_userptr_for_surface_buffer(mix,
- (uint)buf_width,
- (uint)buf_height,
- MIX_STRING_TO_FOURCC("NV12"),
- (uint)buf_size,
- (uint*)&buffer_sharing_info[i].allocatedSize,
- (uint*)&buffer_sharing_info[i].stride,
- (uint8**)&buffer_sharing_info[i].pointer);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(),%d: mix_video_get_new_userptr_for_surface_buffer failed", __func__, __LINE__);
- is_request_ok = false;
- break;
- }
- buffer_sharing_info[i].width = buf_width;
- buffer_sharing_info[i].height = buf_height;
- buffer_sharing_info[i].dataSize = buffer_sharing_info[i].stride * buf_height * 3 / 2;
-
- LOGD("width:%d, Height:%d, stride:%d, pointer:%p", buffer_sharing_info[i].width,
- buffer_sharing_info[i].height, buffer_sharing_info[i].stride,
- buffer_sharing_info[i].pointer);
- }
-
- if (!is_request_ok) {
- delete []buffer_sharing_info;
- buffer_sharing_info = NULL;
- LOGE("%s(),%d: %s failed", __func__, __LINE__,"get usr ptr for surface buffer");
- return OMX_ErrorUndefined;
- }
-
- return OMX_ErrorNone;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::RegisterShareBuffersToLib()
-{
- if ((buffer_sharing_state != BUFFER_SHARING_INVALID) &&
- (buffer_sharing_state != BUFFER_SHARING_LOADED)) {
- LOGE("%s(),%d: invoke %s failed (incorrect state).", __func__, __LINE__, __func__);
- return OMX_ErrorUndefined;
- }
-
- if (buffer_sharing_state == BUFFER_SHARING_INVALID) {
- LOGW("%s(),%d: buffer sharing not enabled, do nothing.", __func__, __LINE__);
- return OMX_ErrorNone;
- }
-
- BufferShareStatus bsret = buffer_sharing_lib->encoderSetSharedBuffer(buffer_sharing_info, buffer_sharing_count);
- if (bsret != BS_SUCCESS) {
- LOGE("%s(),%d: encoder set shared buffer failed", __func__, __LINE__);
- return OMX_ErrorUndefined;
- }
-
- return OMX_ErrorNone;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::RegisterShareBuffersToPort()
-{
- if ((buffer_sharing_state != BUFFER_SHARING_INVALID) &&
- (buffer_sharing_state != BUFFER_SHARING_LOADED)) {
- LOGE("%s(),%d: invoke %s failed (incorrect state).", __func__, __LINE__, __func__);
- return OMX_ErrorUndefined;
- }
-
- OMX_VIDEO_CONFIG_PRI_INFOTYPE privateinfoparam;
- memset(&privateinfoparam, 0, sizeof(privateinfoparam));
- SetTypeHeader(&privateinfoparam, sizeof(privateinfoparam));
-
- //caution: buffer-sharing info stored in INPORT (raw port)
- privateinfoparam.nPortIndex = INPORT_INDEX;
- if (buffer_sharing_state == BUFFER_SHARING_INVALID) {
- privateinfoparam.nCapacity = 0;
- privateinfoparam.nHolder = NULL;
- } else {
- privateinfoparam.nCapacity = buffer_sharing_count;
- privateinfoparam.nHolder = buffer_sharing_info;
- }
- OMX_ERRORTYPE ret = static_cast<PortVideo*>(ports[privateinfoparam.nPortIndex])->SetPortPrivateInfoParam(&privateinfoparam, false);
-
- return ret;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::EnterBufferSharingMode()
-{
- if ((buffer_sharing_state != BUFFER_SHARING_INVALID) &&
- (buffer_sharing_state != BUFFER_SHARING_LOADED)) {
- LOGE("%s(),%d: invoke %s failed (incorrect state).", __func__, __LINE__, __func__);
- return OMX_ErrorUndefined;
- }
-
- if (buffer_sharing_state == BUFFER_SHARING_INVALID) {
- LOGW("%s(),%d: buffer sharing not enabled, do nothing.", __func__, __LINE__);
- return OMX_ErrorNone;
- }
-
- BufferShareStatus bsret = buffer_sharing_lib->encoderEnterSharingMode();
- if (bsret != BS_SUCCESS) {
- LOGE("%s(),%d: encoderEnterSharingMode failed", __func__, __LINE__);
- if (bsret == BS_PEER_DOWN) {
- LOGE("%s(), %d: camera down during buffer sharing state transition.",__func__, __LINE__);
- }
- return OMX_ErrorUndefined;
- }
-
- buffer_sharing_state = BUFFER_SHARING_EXECUTING;
- return OMX_ErrorNone;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::ExitBufferSharingMode()
-{
- if ((buffer_sharing_state != BUFFER_SHARING_INVALID) &&
- (buffer_sharing_state != BUFFER_SHARING_EXECUTING)) {
- LOGE("%s(),%d: invoke %s failed (incorrect state).", __func__, __LINE__, __func__);
- return OMX_ErrorUndefined;
- }
-
- if (buffer_sharing_state == BUFFER_SHARING_INVALID) {
- LOGW("%s(),%d: buffer sharing not enabled, do nothing.", __func__, __LINE__);
- return OMX_ErrorNone;
- }
-
- BufferShareStatus bsret = buffer_sharing_lib->encoderExitSharingMode();
- if (bsret != BS_SUCCESS) {
- LOGE("%s(),%d: encoderEnterSharingMode failed", __func__, __LINE__);
- if (bsret == BS_PEER_DOWN) {
- LOGE("%s(), %d: camera down during buffer sharing state transition.",__func__, __LINE__);
- }
- return OMX_ErrorUndefined;
- }
-
- buffer_sharing_state = BUFFER_SHARING_LOADED;
- return OMX_ErrorNone;
-}
-/* end of share buffer setting */
-
-OMX_ERRORTYPE MrstPsbComponent::ProcessorFlush(OMX_U32 port_index) {
-
- LOGV("port_index = %d Flushed!\n", port_index);
-
- if (port_index == INPORT_INDEX || port_index == OMX_ALL) {
- ports[INPORT_INDEX]->ReturnAllRetainedBuffers();
- mix_video_flush( mix);
- }
- return OMX_ErrorNone;
-}
-
-void MrstPsbComponent::M4vEncMixBufferCallback(ulong token, uchar *data) {
- MrstPsbComponent *_this = (MrstPsbComponent *) token;
-
- LOGV("M4vEncMixBufferCallback Begin\n");
- if(_this) {
- _this->ports[_this->INPORT_INDEX]->ReturnAllRetainedBuffers();
- }
-
- LOGV("M4vEncMixBufferCallback End\n");
-}
-
-/*
- * CModule Interface
- */
-#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
-
-static const char *g_name = (const char *)"OMX.Intel.Mrst.PSB.M4V.Enc";
-
-static const char *g_roles[] =
-{
- (const char *)"video_encoder.mpeg4",
-};
-
-OMX_ERRORTYPE wrs_omxil_cmodule_ops_instantiate(OMX_PTR *instance)
-{
- ComponentBase *cbase;
-
- cbase = new MrstPsbComponent;
- if (!cbase) {
- *instance = NULL;
- return OMX_ErrorInsufficientResources;
- }
-
- *instance = cbase;
- return OMX_ErrorNone;
-}
-
-struct wrs_omxil_cmodule_ops_s cmodule_ops = {
-instantiate:
- wrs_omxil_cmodule_ops_instantiate,
-};
-
-struct wrs_omxil_cmodule_s WRS_OMXIL_CMODULE_SYMBOL = {
-name:
- g_name,
-roles:
- &g_roles[0],
-nr_roles:
- ARRAY_SIZE(g_roles),
-ops:
- &cmodule_ops,
-};
-
diff --git a/m4v-enc/psb_m4v.h b/m4v-enc/psb_m4v.h
deleted file mode 100644
index 3018f3b..0000000
--- a/m4v-enc/psb_m4v.h
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * psb.h, omx psb component header
- *
- * Copyright (c) 2009-2010 Wind River Systems, Inc.
- *
- * 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 __WRS_OMXIL_INTEL_MRST_PSB
-#define __WRS_OMXIL_INTEL_MRST_PSB
-
-#include <OMX_Core.h>
-#include <OMX_Component.h>
-
-#include <cmodule.h>
-#include <portbase.h>
-#include <componentbase.h>
-
-#include <IntelBufferSharing.h>
-
-using android::sp;
-using android::BufferShareRegistry;
-
-#define M4V_VOP_TYPE_MASK 0xC0
-
-typedef enum _M4vVopType {
- I_FRAME = 0x00,
- P_FRAME = 0x40,
- B_FRAME = 0x80,
- S_FRAME = 0xC0,
- UNKNOWN_FRAME = 0xFF,
-} M4vVopType;
-
-typedef enum
-{
- BUFFER_SHARING_INVALID,
- BUFFER_SHARING_LOADED,
- BUFFER_SHARING_EXECUTING
-} BufferSharingState;
-
-class MrstPsbComponent : public ComponentBase
-{
-public:
- /*
- * constructor & destructor
- */
- MrstPsbComponent();
- ~MrstPsbComponent();
-
-private:
- /*
- * component methods & helpers
- */
- /* implement ComponentBase::ComponentAllocatePorts */
- virtual OMX_ERRORTYPE ComponentAllocatePorts(void);
-
- OMX_ERRORTYPE __AllocateMpeg4Port(OMX_U32 port_index, OMX_DIRTYPE dir);
-
- OMX_ERRORTYPE __AllocateRawPort(OMX_U32 port_index, OMX_DIRTYPE dir);
-
- /* implement ComponentBase::ComponentGet/SetPatameter */
- virtual OMX_ERRORTYPE
- ComponentGetParameter(OMX_INDEXTYPE nParamIndex,
- OMX_PTR pComponentParameterStructure);
- virtual OMX_ERRORTYPE
- ComponentSetParameter(OMX_INDEXTYPE nIndex,
- OMX_PTR pComponentParameterStructure);
-
- /* implement ComponentBase::ComponentGet/SetConfig */
- virtual OMX_ERRORTYPE
- ComponentGetConfig(OMX_INDEXTYPE nIndex,
- OMX_PTR pComponentConfigStructure);
- virtual OMX_ERRORTYPE
- ComponentSetConfig(OMX_INDEXTYPE nIndex,
- OMX_PTR pComponentConfigStructure);
-
- /* implement ComponentBase::Processor[*] */
- virtual OMX_ERRORTYPE ProcessorInit(void); /* Loaded to Idle */
- virtual OMX_ERRORTYPE ProcessorDeinit(void);/* Idle to Loaded */
- virtual OMX_ERRORTYPE ProcessorStart(void); /* Idle to Executing/Pause */
- virtual OMX_ERRORTYPE ProcessorStop(void); /* Executing/Pause to Idle */
- virtual OMX_ERRORTYPE ProcessorPause(void); /* Executing to Pause */
- virtual OMX_ERRORTYPE ProcessorResume(void);/* Pause to Executing */
- virtual OMX_ERRORTYPE ProcessorFlush(OMX_U32 port_index);
- virtual OMX_ERRORTYPE ProcessorProcess(OMX_BUFFERHEADERTYPE ***pBuffers,
- buffer_retain_t *retain,
- OMX_U32 nr_buffers);
-
- /* end of component methods & helpers */
-
- /*
- * vcp setting helpers
- */
- OMX_ERRORTYPE __RawChangePortParamWithVcp(MixVideoConfigParams *vcp,
- PortVideo *port);
-
- OMX_ERRORTYPE __Mpeg4ChangePortParamWithVcp(MixVideoConfigParams *vcp,
- PortMpeg4 *port);
- OMX_ERRORTYPE ChangePortParamWithVcp(void);
-
- OMX_ERRORTYPE __Mpeg4ChangeVcpWithPortParam(MixVideoConfigParams *vcp,
- PortMpeg4 *port, bool *vcp_changed);
-
- OMX_ERRORTYPE ChangeVcpWithPortParam(MixVideoConfigParams *vcp,
- PortVideo *port, bool *vcp_changed);
-
- static void M4vEncMixBufferCallback(ulong token, uchar *data);
-
- inline bool DetectSyncFrame(OMX_U8* vop);
-
- OMX_ERRORTYPE ParserConfigData(OMX_U8* coded_buf, OMX_U32 coded_len,OMX_U8** config_buf, OMX_U32* config_len);
-
- /* end of vcp setting helpers */
- /* share buffer setting */
- OMX_ERRORTYPE EnterBufferSharingMode(void);
- OMX_ERRORTYPE ExitBufferSharingMode(void);
- OMX_ERRORTYPE RequestToEnableBufferSharingMode(void);
- OMX_ERRORTYPE RequestToDisableBufferSharingMode(void);
- OMX_ERRORTYPE CheckAndEnableBufferSharingMode(void);
- OMX_ERRORTYPE RequestShareBuffers(MixVideo* mix, int width, int height);
- OMX_ERRORTYPE RegisterShareBuffersToPort(void);
- OMX_ERRORTYPE RegisterShareBuffersToLib(void);
- /* end of share buffer setting */
-
- /* mix video */
- MixVideo *mix;
- MixVideoInitParams *vip;
- MixParams *mvp;
- MixVideoConfigParams *vcp;
- MixDisplayAndroid *display;
- MixBuffer *mixbuffer_in[1];
- MixIOVec *mixiovec_out[1];
-
- OMX_BOOL is_mixvideodec_configured;
- OMX_U32 inframe_counter;
- OMX_U32 outframe_counter;
-
- /* for fps */
- OMX_TICKS last_ts;
- float last_fps;
-
- /* for buffer sharing */
- sp<BufferShareRegistry> buffer_sharing_lib;
- int buffer_sharing_count;
- SharedBufferType* buffer_sharing_info;
- BufferSharingState buffer_sharing_state;
-
-
- bool b_config_sent;
- OMX_U8* video_data;
- OMX_U32 video_len;
- OMX_U8 *temp_coded_data_buffer;
- OMX_U32 temp_coded_data_buffer_size;
-
- OMX_U32 mpeg4EncPFrames;
-
- OMX_VIDEO_PARAM_INTEL_BITRATETYPE mpeg4EncParamIntelBitrateType;
- OMX_VIDEO_CONFIG_INTEL_BITRATETYPE mpeg4EncConfigIntelBitrateType;
-
- OMX_VIDEO_CONFIG_INTEL_AIR mpeg4EncConfigAir;
- OMX_CONFIG_FRAMERATETYPE mpeg4EncFramerate;
-
- /* constant */
- /* ports */
- const static OMX_U32 NR_PORTS = 2;
- const static OMX_U32 INPORT_INDEX = 0;
- const static OMX_U32 OUTPORT_INDEX = 1;
-
- /* default buffer */
- const static OMX_U32 INPORT_RAW_ACTUAL_BUFFER_COUNT = 2;//FIXME: must be set to 2
- const static OMX_U32 INPORT_RAW_MIN_BUFFER_COUNT = 1;
- const static OMX_U32 INPORT_RAW_BUFFER_SIZE = 614400;
- const static OMX_U32 OUTPORT_RAW_ACTUAL_BUFFER_COUNT = 2;
- const static OMX_U32 OUTPORT_RAW_MIN_BUFFER_COUNT = 1;
- const static OMX_U32 OUTPORT_RAW_BUFFER_SIZE = 38016;
-
- const static OMX_U32 INPORT_MPEG4_ACTUAL_BUFFER_COUNT = 10;
- const static OMX_U32 INPORT_MPEG4_MIN_BUFFER_COUNT = 1;
-
- const static OMX_U32 INPORT_MPEG4_BUFFER_SIZE = 614400;
- const static OMX_U32 OUTPORT_MPEG4_ACTUAL_BUFFER_COUNT = 2;
- const static OMX_U32 OUTPORT_MPEG4_MIN_BUFFER_COUNT = 1;
- const static OMX_U32 OUTPORT_MPEG4_BUFFER_SIZE = 307200;
-
-
-};
-
-#endif /* __WRS_OMXIL_INTEL_MRST_PSB */
diff --git a/m4v-enc/vabuffer.h b/m4v-enc/vabuffer.h
deleted file mode 100644
index e81b195..0000000
--- a/m4v-enc/vabuffer.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * vabuffer.h, vabuffer structure header
- *
- * Copyright (c) 2009-2010 Wind River Systems, Inc.
- *
- * 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 __VA_BUFFER_H__
-#define __VA_BUFFER_H__
-
-struct VABuffer
-{
- VASurfaceID surface;
- VADisplay display;
- unsigned int frame_structure;
-};
-
-#endif /* __VA_BUFFER_H__ */
-
diff --git a/psb-dec/Android.mk b/psb-dec/Android.mk
deleted file mode 100644
index 8eb606e..0000000
--- a/psb-dec/Android.mk
+++ /dev/null
@@ -1,50 +0,0 @@
-ifeq ($(strip $(BOARD_USES_WRS_OMXIL_CORE)),true)
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- psb.cpp \
- h263.cpp
-
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE := libwrs_omxil_intel_mrst_psb_dec
-
-LOCAL_CPPFLAGS := -DMIXVIDEO_ENCODE_ENABLE=0
-
-LOCAL_LDFLAGS :=
-
-LOCAL_SHARED_LIBRARIES := \
- libwrs_omxil_common \
- liblog \
- libmixcommon \
- libmixvideo \
- libmixvbp \
- libva \
- libva-android \
- libva-tpi
-
-
-VENDORS_INTEL_MRST_MIXVBP_ROOT := $(VENDORS_INTEL_MRST_LIBMIX_ROOT)/mix_vbp
-
-LOCAL_C_INCLUDES := \
- $(TARGET_OUT_HEADERS)/wrs_omxil_core \
- $(TARGET_OUT_HEADERS)/khronos/openmax \
- $(PV_INCLUDES) \
- $(TARGET_OUT_HEADERS)/libmixcommon \
- $(TARGET_OUT_HEADERS)/libmixvideo \
- $(TARGET_OUT_HEADERS)/libva \
- $(TARGET_OUT_HEADERS)/libdrm \
- $(TARGET_OUT_HEADERS)/libdrm/shared-core \
- $(TARGET_OUT_HEADERS)/libmixvbp \
- $(TARGET_OUT_HEADERS)/libpsb_drm
-
-ifeq ($(strip $(COMPONENT_SUPPORT_OPENCORE)),true)
-LOCAL_CFLAGS += -DCOMPONENT_SUPPORT_OPENCORE
-endif
-
-
-LOCAL_COPY_HEADERS_TO := libwrs_omxil_intel_mrst_psb_dec
-LOCAL_COPY_HEADERS := vabuffer.h
-
-include $(BUILD_SHARED_LIBRARY)
-endif
diff --git a/psb-dec/ebuild.mk b/psb-dec/ebuild.mk
deleted file mode 100644
index 06a4106..0000000
--- a/psb-dec/ebuild.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- psb.cpp
-
-LOCAL_MODULE := libwrs_omxil_intel_mrst_psb
-
-LOCAL_CPPFLAGS :=
-
-LOCAL_LDFLAGS :=
-
-LOCAL_SHARED_LIBRARIES := \
- libwrs_omxil_common
-
-LOCAL_C_INCLUDES := \
- $(WRS_OMXIL_CORE_ROOT)/utils/inc \
- $(WRS_OMXIL_CORE_ROOT)/base/inc \
- $(WRS_OMXIL_CORE_ROOT)/core/inc/khronos/openmax/include
-
-include $(BUILD_SHARED_LIBRARY)
diff --git a/psb-dec/h263.cpp b/psb-dec/h263.cpp
deleted file mode 100644
index a6982fc..0000000
--- a/psb-dec/h263.cpp
+++ /dev/null
@@ -1,283 +0,0 @@
-/* ------------------------------------------------------------------
- * Copyright (C) 1998-2009 PacketVideo
- *
- * 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.
- * -------------------------------------------------------------------
- */
-/*
- * Portions Copyright 2011, Intel Corportion
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <sys/time.h>
-#include <OMX_Core.h>
-
-// #define LOG_NDEBUG 0
-
-#define LOG_TAG "mrst_h263"
-#include <utils/Log.h>
-
-//#include "oscl_base.h"
-//#include "oscl_types.h"
-
-#include "h263.h"
-
-OMX_BOOL H263HeaderParser::DecodeH263Header(OMX_U8* aInputBuffer, int32 *width,
- int32 *height, int32 *display_width, int32 *display_height) {
- uint32 codeword;
- int32 extended_PTYPE = 0;
- int32 UFEP = 0;
- int32 custom_PFMT = 0;
-
- //Reset the data bit position to the start of the stream
- iH263DataBitPos = 0;
- iH263BitPos = 0;
- //BitBuf contains the first 4 bytes of the aInputBuffer
- iH263BitBuf = (aInputBuffer[0] << 24) | (aInputBuffer[1] << 16) | (aInputBuffer[2] << 8) | aInputBuffer[3];
-
- ReadBits(aInputBuffer, 22, &codeword);
- if (codeword != 0x20)
- {
- return OMX_FALSE;
- }
-
- ReadBits(aInputBuffer, 8, &codeword);
-
- ReadBits(aInputBuffer, 1, &codeword);
- if (codeword == 0) return OMX_FALSE;
-
- ReadBits(aInputBuffer, 1, &codeword);
- if (codeword == 1) return OMX_FALSE;
-
- ReadBits(aInputBuffer, 1, &codeword);
- if (codeword == 1){
- LOGW("split_screen_indicator don't support!");
- }
-
- ReadBits(aInputBuffer, 1, &codeword);
- if (codeword == 1) {
- LOGW("document_freeze_camera don't support!");
- }
-
- ReadBits(aInputBuffer, 1, &codeword);
- if (codeword == 1) {
- LOGW("freeze_picture_release don't support!");
- }
-
- /* source format */
- ReadBits(aInputBuffer, 3, &codeword);
- switch (codeword)
- {
- case 1:
- *width = 128;
- *height = 96;
- break;
-
- case 2:
- *width = 176;
- *height = 144;
- break;
-
- case 3:
- *width = 352;
- *height = 288;
- break;
-
- case 4:
- *width = 704;
- *height = 576;
- break;
-
- case 5:
- *width = 1408;
- *height = 1152;
- break;
-
- case 7:
- extended_PTYPE = 1;
- break;
- default:
- /* Msg("H.263 source format not legal\n"); */
- return OMX_FALSE;
- }
-
- if (extended_PTYPE == 0)
- {
- *display_width = *width;
- *display_height = *height;
- return OMX_TRUE;
- }
-
- /* source format */
- ReadBits(aInputBuffer, 3, &codeword);
- UFEP = codeword;
- if (UFEP == 1)
- {
- ReadBits(aInputBuffer, 3, &codeword);
- switch (codeword)
- {
- case 1:
- *width = 128;
- *height = 96;
-
- break;
-
- case 2:
- *width = 176;
- *height = 144;
-
- break;
-
- case 3:
- *width = 352;
- *height = 288;
-
- break;
-
- case 4:
- *width = 704;
- *height = 576;
-
- break;
-
- case 5:
- *width = 1408;
- *height = 1152;
-
- break;
-
- case 6:
- custom_PFMT = 1;
- break;
- default:
- /* Msg("H.263 source format not legal\n"); */
- return OMX_FALSE;
- }
- if (custom_PFMT == 0)
- {
- *display_width = *width;
- *display_height = *height;
- return OMX_TRUE;
- }
-
-
- ReadBits(aInputBuffer, 1, &codeword);
- ReadBits(aInputBuffer, 1, &codeword);
- if (codeword) return OMX_FALSE;
- ReadBits(aInputBuffer, 1, &codeword);
- if (codeword) return OMX_FALSE;
- ReadBits(aInputBuffer, 1, &codeword);
- if (codeword) return OMX_FALSE;
- ReadBits(aInputBuffer, 3, &codeword);
- ReadBits(aInputBuffer, 3, &codeword);
- if (codeword) return OMX_FALSE; /* RPS, ISD, AIV */
- ReadBits(aInputBuffer, 1, &codeword);
- ReadBits(aInputBuffer, 4, &codeword);
- if (codeword != 8) return OMX_FALSE;
- }
-
- if (UFEP == 0 || UFEP == 1)
- {
- ReadBits(aInputBuffer, 3, &codeword);
- if (codeword > 1) return OMX_FALSE;
- ReadBits(aInputBuffer, 1, &codeword);
- if (codeword) return OMX_FALSE;
- ReadBits(aInputBuffer, 1, &codeword);
- if (codeword) return OMX_FALSE;
- ReadBits(aInputBuffer, 1, &codeword);
- ReadBits(aInputBuffer, 3, &codeword);
- if (codeword != 1) return OMX_FALSE;
- }
- else
- {
- return OMX_FALSE;
- }
-
- ReadBits(aInputBuffer, 1, &codeword);
- if (codeword) return OMX_FALSE; /* CPM */
- if (custom_PFMT == 1 && UFEP == 1)
- {
- OMX_U32 DisplayWidth, Width, DisplayHeight, Height, Resolution;
-
- ReadBits(aInputBuffer, 4, &codeword);
- if (codeword == 0) return OMX_FALSE;
- if (codeword == 0xf)
- {
- ReadBits(aInputBuffer, 8, &codeword);
- ReadBits(aInputBuffer, 8, &codeword);
- }
- ReadBits(aInputBuffer, 9, &codeword);
- DisplayWidth = (codeword + 1) << 2;
- Width = (DisplayWidth + 15) & -16;
-
- ReadBits(aInputBuffer, 1, &codeword);
- if (codeword != 1) return OMX_FALSE;
- ReadBits(aInputBuffer, 9, &codeword);
- if (codeword == 0) return OMX_FALSE;
- DisplayHeight = codeword << 2;
- Height = (DisplayHeight + 15) & -16;
-
- Resolution = Width * Height;
-
- *width = Width;
- *height = Height;
- *display_width = DisplayWidth;
- *display_height = DisplayHeight;
- }
-
- return OMX_TRUE;
-}
-
-static const uint32 mask[33] =
-{
- 0x00000000, 0x00000001, 0x00000003, 0x00000007,
- 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f,
- 0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff,
- 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff,
- 0x0000ffff, 0x0001ffff, 0x0003ffff, 0x0007ffff,
- 0x000fffff, 0x001fffff, 0x003fffff, 0x007fffff,
- 0x00ffffff, 0x01ffffff, 0x03ffffff, 0x07ffffff,
- 0x0fffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff,
- 0xffffffff
-};
-
-void H263HeaderParser::ReadBits(OMX_U8* aStream, /* Input Stream */
- uint8 aNumBits, /* nr of bits to read */
- uint32* aOutData /* output target */
- )
-{
- uint8 *bits;
- uint32 dataBitPos = iH263DataBitPos;
- uint32 bitPos = iH263BitPos;
- uint32 dataBytePos;
-
- if (aNumBits > (32 - bitPos)) /* not enough bits */
- {
- dataBytePos = dataBitPos >> 3; /* Byte Aligned Position */
- bitPos = dataBitPos & 7; /* update bit position */
- bits = &aStream[dataBytePos];
- iH263BitBuf = (bits[0] << 24) | (bits[1] << 16) | (bits[2] << 8) | bits[3];
- }
-
- iH263DataBitPos += aNumBits;
- iH263BitPos = (unsigned char)(bitPos + aNumBits);
-
- *aOutData = (iH263BitBuf >> (32 - iH263BitPos)) & mask[(uint16)aNumBits];
-
- return;
-}
diff --git a/psb-dec/h263.h b/psb-dec/h263.h
deleted file mode 100644
index be2a5af..0000000
--- a/psb-dec/h263.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* ------------------------------------------------------------------
- * Copyright (C) 1998-2009 PacketVideo
- *
- * 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.
- * -------------------------------------------------------------------
- */
-/*
- * Portions Copyright 2011, Intel Corportion
- */
-
-#ifndef __OMXIL_INTEL_H263__
-#define __OMXIL_INTEL_H263__
-
-typedef int int32;
-typedef unsigned int uint32;
-typedef unsigned char uint8;
-typedef unsigned short uint16;
-
-class H263HeaderParser {
-
-private:
- OMX_U32 iH263DataBitPos;
- OMX_U32 iH263BitPos;
- OMX_U32 iH263BitBuf;
-
-public:
-
- OMX_BOOL DecodeH263Header(OMX_U8* aInputBuffer, int32 *width,
- int32 *height, int32 *display_width, int32 *display_height);
- void ReadBits(OMX_U8* aStream, uint8 aNumBits, uint32* aOutData);
-};
-
-#endif /* __OMXIL_INTEL_H263__ */
diff --git a/psb-dec/psb.cpp b/psb-dec/psb.cpp
deleted file mode 100644
index 0712f4c..0000000
--- a/psb-dec/psb.cpp
+++ /dev/null
@@ -1,3186 +0,0 @@
-/*
- * psb.cpp, omx psb component file
- *
- * Copyright (c) 2009-2010 Wind River Systems, Inc.
- *
- * 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.
- */
-
-// #define LOG_NDEBUG 0
-
-#define LOG_TAG "mrst_psb"
-#include <utils/Log.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <sys/time.h>
-
-#include <OMX_Core.h>
-#include <OMX_IndexExt.h>
-#include <OMX_VideoExt.h>
-#include <OMX_IntelErrorTypes.h>
-
-#include <cmodule.h>
-#include <portvideo.h>
-#include <componentbase.h>
-
-#include <mixdisplayandroid.h>
-#include <mixvideo.h>
-#include <mixvideoconfigparamsdec_h264.h>
-#include <mixvideoconfigparamsenc_h264.h>
-#include <mixvideoconfigparamsdec_mp42.h>
-#include <mixvideoconfigparamsenc_h263.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-#include <va/va.h>
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#include <va/va_android.h>
-
-#include "h263.h"
-#include "psb.h"
-
-#define Display unsigned int
-
-#define SHOW_FPS 0
-
-#include "vabuffer.h"
-
-/*
- * constructor & destructor
- */
-MrstPsbComponent::MrstPsbComponent()
-{
- LOGV("%s(): enter\n", __func__);
-
- LOGV("%s(),%d: exit\n", __func__, __LINE__);
-}
-
-MrstPsbComponent::~MrstPsbComponent()
-{
- LOGV("%s(): enter\n", __func__);
-
- LOGV("%s(),%d: exit\n", __func__, __LINE__);
-}
-
-/* end of constructor & destructor */
-
-/* core methods & helpers */
-OMX_ERRORTYPE MrstPsbComponent::ComponentAllocatePorts(void)
-{
- PortBase **ports;
-
- OMX_U32 codec_port_index, raw_port_index;
- OMX_DIRTYPE codec_port_dir, raw_port_dir;
-
- OMX_PORT_PARAM_TYPE portparam;
-
- const char *working_role;
-
- bool isencoder;
-
- OMX_ERRORTYPE ret = OMX_ErrorUndefined;
-
- LOGV("%s(): enter\n", __func__);
-
- ports = new PortBase *[NR_PORTS];
- if (!ports)
- return OMX_ErrorInsufficientResources;
-
- this->nr_ports = NR_PORTS;
- this->ports = ports;
-
- /* video_[encoder/decoder].[avc/whatever] */
- working_role = GetWorkingRole();
- working_role = strpbrk(working_role, "_");
-
- if (!strncmp(working_role, "_encoder", strlen("_encoder")))
- isencoder = true;
- else
- isencoder = false;
-
- if (isencoder) {
- raw_port_index = INPORT_INDEX;
- codec_port_index = OUTPORT_INDEX;
- raw_port_dir = OMX_DirInput;
- codec_port_dir = OMX_DirOutput;
- }
- else {
- codec_port_index = INPORT_INDEX;
- raw_port_index = OUTPORT_INDEX;
- codec_port_dir = OMX_DirInput;
- raw_port_dir = OMX_DirOutput;
- }
-
- working_role = strpbrk(working_role, ".");
- if (!working_role)
- return OMX_ErrorUndefined;
- working_role++;
-
- if (!strcmp(working_role, "avc")) {
- ret = __AllocateAvcPort(codec_port_index, codec_port_dir);
- coding_type = OMX_VIDEO_CodingAVC;
- }
- else if (!strcmp(working_role, "mpeg4")) {
- ret = __AllocateMpeg4Port(codec_port_index, codec_port_dir);
- coding_type = OMX_VIDEO_CodingMPEG4;
- }
- else if (!strcmp(working_role, "h263")) {
- ret = __AllocateH263Port(codec_port_index, codec_port_dir);
- coding_type = OMX_VIDEO_CodingH263;
- }
- else
- ret = OMX_ErrorUndefined;
-
- if (ret != OMX_ErrorNone)
- goto free_ports;
-
-
- if(isencoder) {
-
- LOGV("---- prepare to call __AllocateRawPort() ----\n");
-
- ret = __AllocateRawPort(raw_port_index, raw_port_dir);
- } else {
-
- LOGV("---- prepare to call __AllocateRawVAPort() ----\n");
-
- ret = __AllocateRawVAPort(raw_port_index, raw_port_dir);
- }
- if (ret != OMX_ErrorNone)
- goto free_codecport;
-
- codec_mode = isencoder ? MIX_CODEC_MODE_ENCODE : MIX_CODEC_MODE_DECODE;
-
- /* OMX_PORT_PARAM_TYPE */
- memset(&portparam, 0, sizeof(portparam));
- SetTypeHeader(&portparam, sizeof(portparam));
- portparam.nPorts = NR_PORTS;
- portparam.nStartPortNumber = INPORT_INDEX;
-
- memcpy(&this->portparam, &portparam, sizeof(portparam));
- /* end of OMX_PORT_PARAM_TYPE */
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, OMX_ErrorNone);
- return OMX_ErrorNone;
-
-free_codecport:
- delete ports[codec_port_index];
- ports[codec_port_index] = NULL;
-
-free_ports:
- coding_type = OMX_VIDEO_CodingUnused;
-
- delete []ports;
- ports = NULL;
-
- this->ports = NULL;
- this->nr_ports = 0;
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::__AllocateAvcPort(OMX_U32 port_index,
- OMX_DIRTYPE dir)
-{
- PortAvc *avcport;
-
- OMX_PARAM_PORTDEFINITIONTYPE avcportdefinition;
- OMX_VIDEO_PARAM_AVCTYPE avcportparam;
-
- LOGV("%s(): enter\n", __func__);
-
- ports[port_index] = new PortAvc;
- if (!ports[port_index]) {
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__,
- OMX_ErrorInsufficientResources);
- return OMX_ErrorInsufficientResources;
- }
-
- avcport = static_cast<PortAvc *>(this->ports[port_index]);
-
- /* OMX_PARAM_PORTDEFINITIONTYPE */
- memset(&avcportdefinition, 0, sizeof(avcportdefinition));
- SetTypeHeader(&avcportdefinition, sizeof(avcportdefinition));
- avcportdefinition.nPortIndex = port_index;
- avcportdefinition.eDir = dir;
- if (dir == OMX_DirInput) {
- avcportdefinition.nBufferCountActual = INPORT_AVC_ACTUAL_BUFFER_COUNT;
- avcportdefinition.nBufferCountMin = INPORT_AVC_MIN_BUFFER_COUNT;
- avcportdefinition.nBufferSize = INPORT_AVC_BUFFER_SIZE;
- }
- else {
- avcportdefinition.nBufferCountActual = OUTPORT_AVC_ACTUAL_BUFFER_COUNT;
- avcportdefinition.nBufferCountMin = OUTPORT_AVC_MIN_BUFFER_COUNT;
- avcportdefinition.nBufferSize = OUTPORT_AVC_BUFFER_SIZE;
- }
- avcportdefinition.bEnabled = OMX_TRUE;
- avcportdefinition.bPopulated = OMX_FALSE;
- avcportdefinition.eDomain = OMX_PortDomainVideo;
- avcportdefinition.format.video.cMIMEType = (char *)"video/h264";
- avcportdefinition.format.video.pNativeRender = NULL;
- avcportdefinition.format.video.nFrameWidth = 176;
- avcportdefinition.format.video.nFrameHeight = 144;
- avcportdefinition.format.video.nStride = 0;
- avcportdefinition.format.video.nSliceHeight = 0;
- avcportdefinition.format.video.nBitrate = 64000;
- avcportdefinition.format.video.xFramerate = 15 << 16;
- avcportdefinition.format.video.bFlagErrorConcealment = OMX_FALSE;
- avcportdefinition.format.video.eCompressionFormat = OMX_VIDEO_CodingAVC;
- avcportdefinition.format.video.eColorFormat = OMX_COLOR_FormatUnused;
- avcportdefinition.format.video.pNativeWindow = NULL;
- avcportdefinition.bBuffersContiguous = OMX_FALSE;
- avcportdefinition.nBufferAlignment = 0;
-
- avcport->SetPortDefinition(&avcportdefinition, true);
-
- /* end of OMX_PARAM_PORTDEFINITIONTYPE */
-
- /* OMX_VIDEO_PARAM_AVCTYPE */
- memset(&avcportparam, 0, sizeof(avcportparam));
- SetTypeHeader(&avcportparam, sizeof(avcportparam));
- avcportparam.nPortIndex = port_index;
- avcportparam.eProfile = OMX_VIDEO_AVCProfileBaseline;
- avcportparam.eLevel = OMX_VIDEO_AVCLevel1;
-
- avcport->SetPortAvcParam(&avcportparam, true);
- /* end of OMX_VIDEO_PARAM_AVCTYPE */
-
- /* encoder */
- if (dir == OMX_DirOutput) {
- /* OMX_VIDEO_PARAM_BITRATETYPE */
- OMX_VIDEO_PARAM_BITRATETYPE bitrateparam;
-
- memset(&bitrateparam, 0, sizeof(bitrateparam));
- SetTypeHeader(&bitrateparam, sizeof(bitrateparam));
-
- bitrateparam.nPortIndex = port_index;
- bitrateparam.eControlRate = OMX_Video_ControlRateConstant;
- bitrateparam.nTargetBitrate = 192000;
-
- avcport->SetPortBitrateParam(&bitrateparam, true);
- /* end of OMX_VIDEO_PARAM_BITRATETYPE */
-
- /* OMX_VIDEO_CONFIG_PRI_INFOTYPE */
- OMX_VIDEO_CONFIG_PRI_INFOTYPE privateinfoparam;
-
- memset(&privateinfoparam, 0, sizeof(privateinfoparam));
- SetTypeHeader(&privateinfoparam, sizeof(privateinfoparam));
-
- privateinfoparam.nPortIndex = port_index;
- privateinfoparam.nCapacity = 0;
- privateinfoparam.nHolder = NULL;
-
- avcport->SetPortPrivateInfoParam(&privateinfoparam, true);
- /* end of OMX_VIDEO_CONFIG_PRI_INFOTYPE */
-
- avcEncIDRPeriod = 0;
- avcEncPFrames = 0;
- avcEncNaluFormatType = OMX_NaluFormatZeroByteInterleaveLength;
-
- avcEncParamIntelBitrateType.nPortIndex = port_index;
- avcEncParamIntelBitrateType.eControlRate = OMX_Video_Intel_ControlRateMax;
- avcEncParamIntelBitrateType.nTargetBitrate = 0;
- SetTypeHeader(&avcEncParamIntelBitrateType, sizeof(avcEncParamIntelBitrateType));
-
- avcEncConfigNalSize.nPortIndex = port_index;
- avcEncConfigNalSize.nNaluBytes = 0;
- SetTypeHeader(&avcEncConfigNalSize, sizeof(avcEncConfigNalSize));
-
- avcEncConfigSliceNumbers.nPortIndex = port_index;
- avcEncConfigSliceNumbers.nISliceNumber = 1;
- avcEncConfigSliceNumbers.nPSliceNumber = 1;
- SetTypeHeader(&avcEncConfigSliceNumbers, sizeof(avcEncConfigSliceNumbers));
-
- avcEncConfigAir.nPortIndex = port_index;
- avcEncConfigAir.bAirEnable = OMX_FALSE;
- avcEncConfigAir.bAirAuto = OMX_FALSE;
- avcEncConfigAir.nAirMBs = 0;
- avcEncConfigAir.nAirThreshold = 0;
- SetTypeHeader(&avcEncConfigAir, sizeof(avcEncConfigAir));
-
- avcEncFramerate.nPortIndex = port_index;
- avcEncFramerate.xEncodeFramerate = 0; // Q16 format
- SetTypeHeader(&avcEncFramerate, sizeof(avcEncFramerate));
-
- } else {
-
- avcDecFrameWidth = 0;
- avcDecFrameHeight = 0;
- memset(&avcDecodeSettings, 0, sizeof(avcDecodeSettings));
- avcDecodeSettings.nMaxNumberOfReferenceFrame = 4;
- avcDecGotRes = OMX_FALSE;
-
- }
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, OMX_ErrorNone);
- return OMX_ErrorNone;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::__AllocateMpeg4Port(OMX_U32 port_index,
- OMX_DIRTYPE dir)
-{
- PortMpeg4 *mpeg4port;
-
- OMX_PARAM_PORTDEFINITIONTYPE mpeg4portdefinition;
- OMX_VIDEO_PARAM_MPEG4TYPE mpeg4portparam;
-
- LOGV("%s(): enter\n", __func__);
-
- ports[port_index] = new PortMpeg4;
- if (!ports[port_index]) {
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorInsufficientResources);
- return OMX_ErrorInsufficientResources;
- }
-
- mpeg4port = static_cast<PortMpeg4 *>(this->ports[port_index]);
-
- /* OMX_PARAM_PORTDEFINITIONTYPE */
- memset(&mpeg4portdefinition, 0, sizeof(mpeg4portdefinition));
- SetTypeHeader(&mpeg4portdefinition, sizeof(mpeg4portdefinition));
- mpeg4portdefinition.nPortIndex = port_index;
- mpeg4portdefinition.eDir = dir;
- if (dir == OMX_DirInput) {
- mpeg4portdefinition.nBufferCountActual =
- INPORT_MPEG4_ACTUAL_BUFFER_COUNT;
- mpeg4portdefinition.nBufferCountMin = INPORT_MPEG4_MIN_BUFFER_COUNT;
- mpeg4portdefinition.nBufferSize = INPORT_MPEG4_BUFFER_SIZE;
- } else {
- mpeg4portdefinition.nBufferCountActual =
- OUTPORT_MPEG4_ACTUAL_BUFFER_COUNT;
- mpeg4portdefinition.nBufferCountMin = OUTPORT_MPEG4_MIN_BUFFER_COUNT;
- mpeg4portdefinition.nBufferSize = OUTPORT_MPEG4_BUFFER_SIZE;
- }
- mpeg4portdefinition.bEnabled = OMX_TRUE;
- mpeg4portdefinition.bPopulated = OMX_FALSE;
- mpeg4portdefinition.eDomain = OMX_PortDomainVideo;
- mpeg4portdefinition.format.video.cMIMEType = (OMX_STRING)"video/mpeg4";
- mpeg4portdefinition.format.video.pNativeRender = NULL;
- mpeg4portdefinition.format.video.nFrameWidth = 176;
- mpeg4portdefinition.format.video.nFrameHeight = 144;
- mpeg4portdefinition.format.video.nStride = 0;
- mpeg4portdefinition.format.video.nSliceHeight = 0;
- mpeg4portdefinition.format.video.nBitrate = 64000;
- mpeg4portdefinition.format.video.xFramerate = 15 << 16;
- mpeg4portdefinition.format.video.bFlagErrorConcealment = OMX_FALSE;
- mpeg4portdefinition.format.video.eCompressionFormat =
- OMX_VIDEO_CodingMPEG4;
- mpeg4portdefinition.format.video.eColorFormat = OMX_COLOR_FormatUnused;
- mpeg4portdefinition.format.video.pNativeWindow = NULL;
- mpeg4portdefinition.bBuffersContiguous = OMX_FALSE;
- mpeg4portdefinition.nBufferAlignment = 0;
-
- mpeg4port->SetPortDefinition(&mpeg4portdefinition, true);
-
- /* end of OMX_PARAM_PORTDEFINITIONTYPE */
-
- /* OMX_VIDEO_PARAM_MPEG4TYPE */
- memset(&mpeg4portparam, 0, sizeof(mpeg4portparam));
- SetTypeHeader(&mpeg4portparam, sizeof(mpeg4portparam));
- mpeg4portparam.nPortIndex = port_index;
- mpeg4portparam.eProfile = OMX_VIDEO_MPEG4ProfileSimple;
- mpeg4portparam.eLevel = OMX_VIDEO_MPEG4Level3;
-
- mpeg4port->SetPortMpeg4Param(&mpeg4portparam, true);
- /* end of OMX_VIDEO_PARAM_MPEG4TYPE */
-
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, OMX_ErrorNone);
- return OMX_ErrorNone;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::__AllocateH263Port(OMX_U32 port_index, OMX_DIRTYPE dir) {
-
- PortH263 *h263port;
-
- OMX_PARAM_PORTDEFINITIONTYPE h263portdefinition;
- OMX_VIDEO_PARAM_H263TYPE h263portparam;
-
- LOGV("%s(): enter\n", __func__);
-
- ports[port_index] = new PortH263;
- if (!ports[port_index]) {
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorInsufficientResources);
- return OMX_ErrorInsufficientResources;
- }
-
- h263port = static_cast<PortH263 *>(this->ports[port_index]);
-
- /* OMX_PARAM_PORTDEFINITIONTYPE */
- memset(&h263portdefinition, 0, sizeof(h263portdefinition));
- SetTypeHeader(&h263portdefinition, sizeof(h263portdefinition));
- h263portdefinition.nPortIndex = port_index;
- h263portdefinition.eDir = dir;
- if (dir == OMX_DirInput) {
- h263portdefinition.nBufferCountActual =
- INPORT_H263_ACTUAL_BUFFER_COUNT;
- h263portdefinition.nBufferCountMin = INPORT_H263_MIN_BUFFER_COUNT;
- h263portdefinition.nBufferSize = INPORT_H263_BUFFER_SIZE;
- } else {
- h263portdefinition.nBufferCountActual =
- OUTPORT_H263_ACTUAL_BUFFER_COUNT;
- h263portdefinition.nBufferCountMin = OUTPORT_H263_MIN_BUFFER_COUNT;
- h263portdefinition.nBufferSize = OUTPORT_H263_BUFFER_SIZE;
- }
- h263portdefinition.bEnabled = OMX_TRUE;
- h263portdefinition.bPopulated = OMX_FALSE;
- h263portdefinition.eDomain = OMX_PortDomainVideo;
- h263portdefinition.format.video.cMIMEType = (OMX_STRING)"video/h263";
- h263portdefinition.format.video.pNativeRender = NULL;
- h263portdefinition.format.video.nFrameWidth = 176;
- h263portdefinition.format.video.nFrameHeight = 144;
- h263portdefinition.format.video.nStride = 0;
- h263portdefinition.format.video.nSliceHeight = 0;
- h263portdefinition.format.video.nBitrate = 64000;
- h263portdefinition.format.video.xFramerate = 15 << 16;
- h263portdefinition.format.video.bFlagErrorConcealment = OMX_FALSE;
- h263portdefinition.format.video.eCompressionFormat = OMX_VIDEO_CodingH263;
- h263portdefinition.format.video.eColorFormat = OMX_COLOR_FormatUnused;
- h263portdefinition.format.video.pNativeWindow = NULL;
- h263portdefinition.bBuffersContiguous = OMX_FALSE;
- h263portdefinition.nBufferAlignment = 0;
-
- h263port->SetPortDefinition(&h263portdefinition, true);
-
- /* end of OMX_PARAM_PORTDEFINITIONTYPE */
-
- /* OMX_VIDEO_PARAM_H263TYPE */
- memset(&h263portparam, 0, sizeof(h263portparam));
- SetTypeHeader(&h263portparam, sizeof(h263portparam));
- h263portparam.nPortIndex = port_index;
- h263portparam.eProfile = OMX_VIDEO_H263ProfileBaseline;
- h263portparam.eLevel = OMX_VIDEO_H263Level10;
-
- h263port->SetPortH263Param(&h263portparam, true);
-
- /* end of OMX_VIDEO_PARAM_H263TYPE */
-
- /* encoder */
- if (dir == OMX_DirOutput) {
- /* OMX_VIDEO_PARAM_BITRATETYPE */
- OMX_VIDEO_PARAM_BITRATETYPE bitrateparam;
-
- memset(&bitrateparam, 0, sizeof(bitrateparam));
- SetTypeHeader(&bitrateparam, sizeof(bitrateparam));
-
- bitrateparam.nPortIndex = port_index;
- bitrateparam.eControlRate = OMX_Video_ControlRateConstant;
- bitrateparam.nTargetBitrate = 64000;
-
- h263port->SetPortBitrateParam(&bitrateparam, true);
- /* end of OMX_VIDEO_PARAM_BITRATETYPE */
-
- /* OMX_VIDEO_CONFIG_PRI_INFOTYPE */
- OMX_VIDEO_CONFIG_PRI_INFOTYPE privateinfoparam;
-
- memset(&privateinfoparam, 0, sizeof(privateinfoparam));
- SetTypeHeader(&privateinfoparam, sizeof(privateinfoparam));
-
- privateinfoparam.nPortIndex = port_index;
- privateinfoparam.nCapacity = 0;
- privateinfoparam.nHolder = NULL;
-
- h263port->SetPortPrivateInfoParam(&privateinfoparam, true);
- }
-
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, OMX_ErrorNone);
- return OMX_ErrorNone;
-}
-
-
-OMX_ERRORTYPE MrstPsbComponent::__AllocateRawPort(OMX_U32 port_index,
- OMX_DIRTYPE dir)
-{
- PortVideo *rawport;
-
- OMX_PARAM_PORTDEFINITIONTYPE rawportdefinition;
- OMX_VIDEO_PARAM_PORTFORMATTYPE rawvideoparam;
-
- LOGV("%s(): enter\n", __func__);
-
- ports[port_index] = new PortVideo;
- if (!ports[port_index]) {
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__,
- OMX_ErrorInsufficientResources);
- return OMX_ErrorInsufficientResources;
- }
-
- rawport = static_cast<PortVideo *>(this->ports[port_index]);
-
- /* OMX_PARAM_PORTDEFINITIONTYPE */
- memset(&rawportdefinition, 0, sizeof(rawportdefinition));
- SetTypeHeader(&rawportdefinition, sizeof(rawportdefinition));
- rawportdefinition.nPortIndex = port_index;
- rawportdefinition.eDir = dir;
- if (dir == OMX_DirInput) {
- rawportdefinition.nBufferCountActual = INPORT_RAW_ACTUAL_BUFFER_COUNT;
- rawportdefinition.nBufferCountMin = INPORT_RAW_MIN_BUFFER_COUNT;
- rawportdefinition.nBufferSize = INPORT_RAW_BUFFER_SIZE;
- }
- else {
- rawportdefinition.nBufferCountActual = OUTPORT_RAW_ACTUAL_BUFFER_COUNT;
- rawportdefinition.nBufferCountMin = OUTPORT_RAW_MIN_BUFFER_COUNT;
- rawportdefinition.nBufferSize = OUTPORT_RAW_BUFFER_SIZE;
- }
- rawportdefinition.bEnabled = OMX_TRUE;
- rawportdefinition.bPopulated = OMX_FALSE;
- rawportdefinition.eDomain = OMX_PortDomainVideo;
- rawportdefinition.format.video.cMIMEType = (char *)"video/raw";
- rawportdefinition.format.video.pNativeRender = NULL;
- rawportdefinition.format.video.nFrameWidth = 176;
- rawportdefinition.format.video.nFrameHeight = 144;
- rawportdefinition.format.video.nStride = 176;
- rawportdefinition.format.video.nSliceHeight = 144;
- rawportdefinition.format.video.nBitrate = 64000;
- rawportdefinition.format.video.xFramerate = 15 << 16;
- rawportdefinition.format.video.bFlagErrorConcealment = OMX_FALSE;
- rawportdefinition.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused;
- rawportdefinition.format.video.eColorFormat =
- OMX_COLOR_FormatYUV420SemiPlanar;
- rawportdefinition.format.video.pNativeWindow = NULL;
- rawportdefinition.bBuffersContiguous = OMX_FALSE;
- rawportdefinition.nBufferAlignment = 0;
-
- rawport->SetPortDefinition(&rawportdefinition, true);
-
- /* end of OMX_PARAM_PORTDEFINITIONTYPE */
-
- /* OMX_VIDEO_PARAM_PORTFORMATTYPE */
- rawvideoparam.nPortIndex = port_index;
- rawvideoparam.nIndex = 0;
- rawvideoparam.eCompressionFormat = OMX_VIDEO_CodingUnused;
- rawvideoparam.eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar;
-
- rawport->SetPortVideoParam(&rawvideoparam, true);
-
- /* end of OMX_VIDEO_PARAM_PORTFORMATTYPE */
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, OMX_ErrorNone);
- return OMX_ErrorNone;
-}
-
-/*
- Add OMX_COLOR_FormatVendorStartUnused + 0xA00E00 -> PVMF_MIME_RAWVA in file
- external/opencore/nodes/pvomxvideodecnode/src/pvmf_omx_videodec_node.cpp
-
-*/
-OMX_ERRORTYPE MrstPsbComponent::__AllocateRawVAPort(OMX_U32 port_index,
- OMX_DIRTYPE dir)
-{
- PortVideo *rawport;
-
- OMX_PARAM_PORTDEFINITIONTYPE rawportdefinition;
- OMX_VIDEO_PARAM_PORTFORMATTYPE rawvideoparam;
-
- LOGV("%s(): enter\n", __func__);
-
- if(dir != OMX_DirOutput) {
- return OMX_ErrorBadParameter;
- }
-
- ports[port_index] = new PortVideo;
- if (!ports[port_index]) {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__,
- OMX_ErrorInsufficientResources);
- return OMX_ErrorInsufficientResources;
- }
-
- rawport = static_cast<PortVideo *>(this->ports[port_index]);
-
- /* OMX_PARAM_PORTDEFINITIONTYPE */
- memset(&rawportdefinition, 0, sizeof(rawportdefinition));
- SetTypeHeader(&rawportdefinition, sizeof(rawportdefinition));
- rawportdefinition.nPortIndex = port_index;
- rawportdefinition.eDir = dir;
-
- rawportdefinition.nBufferCountActual = OUTPORT_RAW_ACTUAL_BUFFER_COUNT;
- rawportdefinition.nBufferCountMin = OUTPORT_RAW_MIN_BUFFER_COUNT;
- rawportdefinition.nBufferSize = sizeof(VABuffer) + 16; /* OUTPORT_RAW_BUFFER_SIZE; */
-
- rawportdefinition.bEnabled = OMX_TRUE;
- rawportdefinition.bPopulated = OMX_FALSE;
- rawportdefinition.eDomain = OMX_PortDomainVideo;
- rawportdefinition.format.video.cMIMEType = (char *)"video/x-raw-va"; // (char *)"video/raw";
- rawportdefinition.format.video.pNativeRender = NULL;
- rawportdefinition.format.video.nFrameWidth = 176;
- rawportdefinition.format.video.nFrameHeight = 144;
- rawportdefinition.format.video.nStride = 176;
- rawportdefinition.format.video.nSliceHeight = 144;
- rawportdefinition.format.video.nBitrate = 64000;
- rawportdefinition.format.video.xFramerate = 15 << 16;
- rawportdefinition.format.video.bFlagErrorConcealment = OMX_FALSE;
- rawportdefinition.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused;
- rawportdefinition.format.video.eColorFormat = (OMX_COLOR_FORMATTYPE)0x7FA00E00;
- rawportdefinition.format.video.pNativeWindow = NULL;
- rawportdefinition.bBuffersContiguous = OMX_FALSE;
- rawportdefinition.nBufferAlignment = 0;
-
- rawport->SetPortDefinition(&rawportdefinition, true);
-
- /* end of OMX_PARAM_PORTDEFINITIONTYPE */
-
- /* OMX_VIDEO_PARAM_PORTFORMATTYPE */
- rawvideoparam.nPortIndex = port_index;
- rawvideoparam.nIndex = 0;
- rawvideoparam.eCompressionFormat = OMX_VIDEO_CodingUnused;
- rawvideoparam.eColorFormat = (OMX_COLOR_FORMATTYPE)0x7FA00E00;
-
- rawport->SetPortVideoParam(&rawvideoparam, true);
-
- /* end of OMX_VIDEO_PARAM_PORTFORMATTYPE */
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, OMX_ErrorNone);
- return OMX_ErrorNone;
-}
-/* end of core methods & helpers */
-
-
-#define AVC_ENCODE_ERROR_CHECKING(p) \
-if (!p) { \
- LOGE("%s(), NULL pointer", __func__); \
- return OMX_ErrorBadParameter; \
-} \
-ret = CheckTypeHeader(p, sizeof(*p)); \
-if (ret != OMX_ErrorNone) { \
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret); \
- return ret; \
-} \
-if (codec_mode != MIX_CODEC_MODE_ENCODE) { \
- LOGE("%s(), wrong codec mode", __func__); \
- return OMX_ErrorUnsupportedIndex; \
-} \
-if (coding_type != OMX_VIDEO_CodingAVC) { \
- LOGE("%s(), wrong coding type", __func__); \
- return OMX_ErrorUnsupportedIndex; \
-} \
-OMX_U32 index = p->nPortIndex; \
-if (index != OUTPORT_INDEX) { \
- LOGE("%s(), wrong port index", __func__); \
- return OMX_ErrorBadPortIndex; \
-} \
-PortAvc *port = static_cast<PortAvc *> (ports[index]); \
-if (!port) { \
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, \
- OMX_ErrorBadPortIndex); \
- return OMX_ErrorBadPortIndex; \
-} \
-LOGV("%s(), about to get native or supported nal format", __func__); \
-if (!port->IsEnabled()) { \
- LOGE("%s() : port is not enabled", __func__); \
- return OMX_ErrorNotReady; \
-} \
-
-/*
- * component methods & helpers
- */
-/* Get/SetParameter */
-OMX_ERRORTYPE MrstPsbComponent::ComponentGetParameter(
- OMX_INDEXTYPE nParamIndex,
- OMX_PTR pComponentParameterStructure)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
-
- LOGV("%s(): enter (index = 0x%08x)\n", __func__, nParamIndex);
-
- switch (nParamIndex) {
- case OMX_IndexParamVideoPortFormat: {
- OMX_VIDEO_PARAM_PORTFORMATTYPE *p =
- (OMX_VIDEO_PARAM_PORTFORMATTYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortVideo *port = NULL;
-
- LOGV("%s(): port index : %lu\n", __func__, index);
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortVideo *>(ports[index]);
-
- if (!port) {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- memcpy(p, port->GetPortVideoParam(), sizeof(*p));
-
- LOGV("%s(), p->eColorFormat = %x\n", __func__, p->eColorFormat);
- break;
- }
- case OMX_IndexParamVideoAvc: {
- OMX_VIDEO_PARAM_AVCTYPE *p =
- (OMX_VIDEO_PARAM_AVCTYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortAvc *port = NULL;
-
- LOGV("%s(): port index : %lu\n", __func__, index);
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortAvc *>(ports[index]);
-
- if (!port) {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- memcpy(p, port->GetPortAvcParam(), sizeof(*p));
- break;
- }
- case OMX_IndexParamVideoMpeg4: {
- OMX_VIDEO_PARAM_MPEG4TYPE *p =
- (OMX_VIDEO_PARAM_MPEG4TYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortMpeg4 *port = NULL;
-
- LOGV("%s(): port index : %lu\n", __func__, index);
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortMpeg4 *>(ports[index]);
-
- if (!port) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- memcpy(p, port->GetPortMpeg4Param(), sizeof(*p));
- break;
- }
- case OMX_IndexParamVideoH263: {
- OMX_VIDEO_PARAM_H263TYPE *p =
- (OMX_VIDEO_PARAM_H263TYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortH263 *port = NULL;
-
- LOGV("%s(): port index : %lu\n", __func__, index);
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortH263 *>(ports[index]);
-
- if (!port) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- memcpy(p, port->GetPortH263Param(), sizeof(*p));
- break;
- }
- case OMX_IndexParamVideoBitrate: {
-
- if (avcEncParamIntelBitrateType.eControlRate
- != OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
-
- OMX_VIDEO_PARAM_BITRATETYPE *p =
- (OMX_VIDEO_PARAM_BITRATETYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortVideo *port = NULL;
-
- LOGV("%s(): port index : %lu\n", __func__, index);
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortVideo *>(ports[index]);
-
- if (!port) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- memcpy(p, port->GetPortBitrateParam(), sizeof(*p));
- break;
- }
- case OMX_IndexIntelPrivateInfo: {
- OMX_VIDEO_CONFIG_PRI_INFOTYPE *p =
- (OMX_VIDEO_CONFIG_PRI_INFOTYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortVideo *port = NULL;
-
- LOGV("%s(): port index : %lu\n", __func__, index);
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortVideo *>(ports[index]);
-
- if (!port) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- memcpy(p, port->GetPortPrivateInfoParam(), sizeof(*p));
- break;
- }
- case OMX_IndexParamNalStreamFormat:
- case OMX_IndexParamNalStreamFormatSupported: {
- OMX_NALSTREAMFORMATTYPE *p =
- (OMX_NALSTREAMFORMATTYPE *)pComponentParameterStructure;
-
- LOGV("%s(), OMX_IndexParamNalStreamFormat or OMX_IndexParamNalStreamFormatSupported", __func__);
-
- AVC_ENCODE_ERROR_CHECKING(p)
-
-#if 0
- OMX_STATETYPE state;
- CBaseGetState((void *)GetComponentHandle(), &state);
- if (state != OMX_StateLoaded &&
- state != OMX_StateWaitForResources) {
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorIncorrectStateOperation);
- return OMX_ErrorIncorrectStateOperation;
- }
-#endif
- if(nParamIndex == OMX_IndexParamNalStreamFormat) {
- p->eNaluFormat = OMX_NaluFormatStartCodes;
- LOGV("%s(), OMX_IndexParamNalStreamFormat 0x%x", __func__,
- p->eNaluFormat);
- } else {
- p->eNaluFormat = (OMX_NALUFORMATSTYPE)(OMX_NaluFormatStartCodes |
- OMX_NaluFormatFourByteInterleaveLength |
- OMX_NaluFormatZeroByteInterleaveLength);
- LOGV("%s(), OMX_IndexParamNalStreamFormatSupported 0x%x",
- __func__, p->eNaluFormat);
- }
- break;
- }
-
- case OMX_IndexConfigVideoAVCIntraPeriod: {
- OMX_VIDEO_CONFIG_AVCINTRAPERIOD *pVideoIDRInterval =
- (OMX_VIDEO_CONFIG_AVCINTRAPERIOD *) pComponentParameterStructure;
-
- LOGV("%s(), OMX_IndexConfigVideoAVCIntraPeriod", __func__);
-
- if(!vcp) {
- LOGE("%s(), vcp is NULL", __func__);
- return OMX_ErrorNotReady;
- }
-
- AVC_ENCODE_ERROR_CHECKING(pVideoIDRInterval)
- ret = ComponentGetConfig(OMX_IndexConfigVideoAVCIntraPeriod,
- pComponentParameterStructure);
-
- break;
- }
- case OMX_IndexParamIntelBitrate: {
-
- if (avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
- LOGV("%s(), OMX_IndexParamIntelBitrate", __func__);
-
- OMX_VIDEO_PARAM_INTEL_BITRATETYPE *pIntelBitrate =
- (OMX_VIDEO_PARAM_INTEL_BITRATETYPE *) pComponentParameterStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pIntelBitrate)
-
- *pIntelBitrate = avcEncParamIntelBitrateType;
-
- break;
- }
-
- case OMX_IndexConfigIntelBitrate: {
-
- LOGV("%s(), OMX_IndexConfigIntelBitrate", __func__);
- ret = ComponentGetConfig((OMX_INDEXTYPE)OMX_IndexConfigIntelBitrate,
- (OMX_PTR)pComponentParameterStructure);
- break;
-
- }
-
- case OMX_IndexConfigVideoNalSize: {
-
- LOGV("%s(), OMX_IndexConfigVideoNalSize", __func__);
- ret = ComponentGetConfig(OMX_IndexConfigVideoNalSize,
- pComponentParameterStructure);
-
- break;
- }
-
- case OMX_IndexConfigIntelSliceNumbers: {
-
- LOGV("%s(), OMX_IndexConfigIntelSliceNumbers", __func__);
- ret = ComponentGetConfig((OMX_INDEXTYPE)OMX_IndexConfigIntelSliceNumbers,
- pComponentParameterStructure);
-
- break;
- }
-
- case OMX_IndexConfigIntelAIR: {
-
- LOGV("%s(), OMX_IndexConfigIntelAIR", __func__);
- ret = ComponentGetConfig((OMX_INDEXTYPE)OMX_IndexConfigIntelAIR,
- pComponentParameterStructure);
-
- break;
- }
-
- case OMX_IndexConfigVideoFramerate: {
-
- LOGV("%s(), OMX_IndexConfigVideoFramerate", __func__);
- ret = ComponentGetConfig((OMX_INDEXTYPE)OMX_IndexConfigVideoFramerate,
- pComponentParameterStructure);
-
- break;
- }
-
- default:
- ret = OMX_ErrorUnsupportedIndex;
- } /* switch */
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::ComponentSetParameter(
- OMX_INDEXTYPE nIndex,
- OMX_PTR pComponentParameterStructure)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
-
- LOGV("%s(): enter (index = 0x%08x)\n", __func__, nIndex);
-
- switch (nIndex) {
- case OMX_IndexParamVideoPortFormat: {
- OMX_VIDEO_PARAM_PORTFORMATTYPE *p =
- (OMX_VIDEO_PARAM_PORTFORMATTYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortVideo *port = NULL;
-
- LOGV("%s(): port index : %lu\n", __func__, index);
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortVideo *>(ports[index]);
-
- if (!port) {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- if (port->IsEnabled()) {
- OMX_STATETYPE state;
-
- CBaseGetState((void *)GetComponentHandle(), &state);
- if (state != OMX_StateLoaded &&
- state != OMX_StateWaitForResources) {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__,
- OMX_ErrorIncorrectStateOperation);
- return OMX_ErrorIncorrectStateOperation;
- }
- }
-
- ret = port->SetPortVideoParam(p, false);
- break;
- }
- case OMX_IndexParamVideoAvc: {
- OMX_VIDEO_PARAM_AVCTYPE *p =
- (OMX_VIDEO_PARAM_AVCTYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortAvc *port = NULL;
-
- LOGV("%s(): port index : %lu\n", __func__, index);
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortAvc *>(ports[index]);
-
- if (!port) {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- if (port->IsEnabled()) {
- OMX_STATETYPE state;
-
- CBaseGetState((void *)GetComponentHandle(), &state);
- if (state != OMX_StateLoaded &&
- state != OMX_StateWaitForResources) {
- LOGE("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__,
- OMX_ErrorIncorrectStateOperation);
- return OMX_ErrorIncorrectStateOperation;
- }
- }
-
- ret = port->SetPortAvcParam(p, false);
- break;
- }
- case OMX_IndexParamVideoMpeg4: {
- OMX_VIDEO_PARAM_MPEG4TYPE *p =
- (OMX_VIDEO_PARAM_MPEG4TYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortMpeg4 *port = NULL;
-
- LOGV("%s(): port index : %lu\n", __func__, index);
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortMpeg4 *>(ports[index]);
-
- if (!port) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- if (port->IsEnabled()) {
- OMX_STATETYPE state;
-
- CBaseGetState((void *)GetComponentHandle(), &state);
- if (state != OMX_StateLoaded &&
- state != OMX_StateWaitForResources) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorIncorrectStateOperation);
- return OMX_ErrorIncorrectStateOperation;
- }
- }
-
- ret = port->SetPortMpeg4Param(p, false);
- break;
- }
- case OMX_IndexParamVideoH263: {
- OMX_VIDEO_PARAM_H263TYPE *p =
- (OMX_VIDEO_PARAM_H263TYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortH263 *port = NULL;
-
- LOGV("%s(): port index : %lu\n", __func__, index);
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortH263 *>(ports[index]);
-
- if (!port) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- if (port->IsEnabled()) {
- OMX_STATETYPE state;
-
- CBaseGetState((void *)GetComponentHandle(), &state);
- if (state != OMX_StateLoaded &&
- state != OMX_StateWaitForResources) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorIncorrectStateOperation);
- return OMX_ErrorIncorrectStateOperation;
- }
- }
-
- ret = port->SetPortH263Param(p, false);
- break;
- }
- case OMX_IndexParamVideoBitrate: {
-
- LOGV("%s(), OMX_IndexParamVideoBitrate", __func__);
- avcEncParamIntelBitrateType.eControlRate
- = OMX_Video_Intel_ControlRateMax;
-
- OMX_VIDEO_PARAM_BITRATETYPE *p =
- (OMX_VIDEO_PARAM_BITRATETYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortVideo *port = NULL;
-
- LOGV("%s(): port index : %lu\n", __func__, index);
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortVideo *>(ports[index]);
-
- if (!port) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- if (port->IsEnabled()) {
- OMX_STATETYPE state;
- CBaseGetState((void *)GetComponentHandle(), &state);
- if (state != OMX_StateLoaded &&
- state != OMX_StateWaitForResources) {
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorIncorrectStateOperation);
- return OMX_ErrorIncorrectStateOperation;
- }
- }
-
- ret = port->SetPortBitrateParam(p, false);
- break;
- }
- case OMX_IndexIntelPrivateInfo: {
-
- LOGV("%s(), OMX_IndexIntelPrivateInfo", __func__);
- OMX_VIDEO_CONFIG_PRI_INFOTYPE *p =
- (OMX_VIDEO_CONFIG_PRI_INFOTYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortVideo *port = NULL;
-
- LOGV("%s(): port index : %lu\n", __func__, index);
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortVideo *>(ports[index]);
-
- if (!port) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- if (port->IsEnabled()) {
- OMX_STATETYPE state;
-
- CBaseGetState((void *)GetComponentHandle(), &state);
- if (state != OMX_StateLoaded &&
- state != OMX_StateWaitForResources) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorIncorrectStateOperation);
- return OMX_ErrorIncorrectStateOperation;
- }
- }
-
- ret = port->SetPortPrivateInfoParam(p, false);
- break;
- }
-
- case OMX_IndexParamVideoBytestream: {
-
- LOGV("%s(), OMX_IndexParamVideoBytestream", __func__);
-
- OMX_VIDEO_PARAM_BYTESTREAMTYPE *p =
- (OMX_VIDEO_PARAM_BYTESTREAMTYPE *) pComponentParameterStructure;
-
- AVC_ENCODE_ERROR_CHECKING(p)
-
- OMX_STATETYPE state;
- CBaseGetState((void *) GetComponentHandle(), &state);
- if (state != OMX_StateLoaded && state != OMX_StateWaitForResources) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorIncorrectStateOperation);
- return OMX_ErrorIncorrectStateOperation;
- }
-
- break;
- }
- case OMX_IndexParamNalStreamFormatSelect: {
-
- LOGV("%s() : OMX_IndexParamNalStreamFormatSelect", __func__);
- OMX_NALSTREAMFORMATTYPE *p =
- (OMX_NALSTREAMFORMATTYPE *) pComponentParameterStructure;
-
- AVC_ENCODE_ERROR_CHECKING(p)
-
- if (p->eNaluFormat == OMX_NaluFormatStartCodes || p->eNaluFormat
- == OMX_NaluFormatFourByteInterleaveLength || p->eNaluFormat
- == OMX_NaluFormatZeroByteInterleaveLength) {
- OMX_STATETYPE state;
- CBaseGetState((void *) GetComponentHandle(), &state);
- if (state != OMX_StateLoaded && state != OMX_StateWaitForResources) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorIncorrectStateOperation);
- return OMX_ErrorIncorrectStateOperation;
- }
-
- avcEncNaluFormatType = p->eNaluFormat;
- LOGE("%s(), OMX_IndexParamNalStreamFormatSelect : 0x%x",
- __func__, avcEncNaluFormatType);
- }
- break;
- }
-
- case OMX_IndexConfigVideoAVCIntraPeriod: {
-
- LOGV("%s() : OMX_IndexConfigVideoAVCIntraPeriod", __func__);
-
- OMX_VIDEO_CONFIG_AVCINTRAPERIOD *pVideoIDRInterval =
- (OMX_VIDEO_CONFIG_AVCINTRAPERIOD *) pComponentParameterStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pVideoIDRInterval)
-
- avcEncIDRPeriod = pVideoIDRInterval->nIDRPeriod;
- avcEncPFrames = pVideoIDRInterval->nPFrames;
- LOGV("%s(), OMX_IndexConfigVideoAVCIntraPeriod : avcEncIDRPeriod = %d avcEncPFrames = %d",
- __func__, avcEncIDRPeriod, avcEncPFrames);
- break;
- }
- case OMX_IndexParamIntelBitrate: {
- OMX_VIDEO_PARAM_INTEL_BITRATETYPE *pIntelBitrate =
- (OMX_VIDEO_PARAM_INTEL_BITRATETYPE *) pComponentParameterStructure;
-
- LOGV("%s(), OMX_IndexParamIntelBitrate", __func__);
-
- AVC_ENCODE_ERROR_CHECKING(pIntelBitrate)
- avcEncParamIntelBitrateType = *pIntelBitrate;
-
- break;
- }
-
- case OMX_IndexConfigIntelBitrate: {
-
- LOGV("%s(), OMX_IndexParamIntelBitrate", __func__);
-
- if (avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
-
- OMX_VIDEO_CONFIG_INTEL_BITRATETYPE *pIntelBitrate =
- (OMX_VIDEO_CONFIG_INTEL_BITRATETYPE *) pComponentParameterStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pIntelBitrate)
- avcEncConfigIntelBitrateType = *pIntelBitrate;
-
- break;
- }
- case OMX_IndexConfigVideoNalSize: {
-
- LOGV("%s() : OMX_IndexConfigVideoNalSize", __func__);
-
- if (avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
-
- OMX_VIDEO_CONFIG_NALSIZE *pNalSize =
- (OMX_VIDEO_CONFIG_NALSIZE *) pComponentParameterStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pNalSize)
-
- avcEncConfigNalSize = *pNalSize;
-
- break;
- }
-
- case OMX_IndexConfigIntelSliceNumbers: {
-
- LOGV("%s() : OMX_IndexConfigIntelSliceNumbers", __func__);
-
- if (avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
-
- OMX_VIDEO_CONFIG_INTEL_SLICE_NUMBERS *pSliceNumbers =
- (OMX_VIDEO_CONFIG_INTEL_SLICE_NUMBERS *) pComponentParameterStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pSliceNumbers)
-
- avcEncConfigSliceNumbers = *pSliceNumbers;
-
- LOGV("%s(), nISliceNumber = %d nPSliceNumber = %d", __func__,
- pSliceNumbers->nISliceNumber, pSliceNumbers->nPSliceNumber);
-
- break;
- }
-
- case OMX_IndexConfigIntelAIR: {
-
- LOGV("%s() : OMX_IndexConfigIntelAIR", __func__);
-
- if (avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
-
- OMX_VIDEO_CONFIG_INTEL_AIR *pIntelAir =
- (OMX_VIDEO_CONFIG_INTEL_AIR *) pComponentParameterStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pIntelAir)
-
- avcEncConfigAir = *pIntelAir;
-
- break;
- }
-
- case OMX_IndexConfigVideoFramerate: {
-
- LOGV("%s() : OMX_IndexConfigVideoFramerate", __func__);
-
- if (avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
-
- OMX_CONFIG_FRAMERATETYPE *pxFramerate =
- (OMX_CONFIG_FRAMERATETYPE *) pComponentParameterStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pxFramerate)
-
- avcEncFramerate = *pxFramerate;
-
- break;
- }
-
- case OMX_IndexParamIntelAVCDecodeSettings: {
- OMX_VIDEO_PARAM_INTEL_AVC_DECODE_SETTINGS *pAvcDecodeSettings =
- (OMX_VIDEO_PARAM_INTEL_AVC_DECODE_SETTINGS *) pComponentParameterStructure;
-
- LOGV("%s(), OMX_IndexParamIntelAVCDecodeSettings", __func__);
-
- ret = CheckTypeHeader(pAvcDecodeSettings, sizeof(*pAvcDecodeSettings));
- if (ret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (coding_type != OMX_VIDEO_CodingAVC) {
- LOGE("%s(), wrong coding type", __func__);
- return OMX_ErrorUnsupportedIndex;
- }
-
- OMX_U32 index = pAvcDecodeSettings->nPortIndex;
- /* if (index != OUTPORT_INDEX) {
- LOGE("%s(), wrong port index", __func__);
- return OMX_ErrorBadPortIndex;
- }
- */
- PortAvc *port = static_cast<PortAvc *> (ports[index]);
- if (!port) {
- LOGE("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- if (port->IsEnabled()) {
- if(pAvcDecodeSettings->nMaxNumberOfReferenceFrame != 0)
- avcDecodeSettings = *pAvcDecodeSettings;
- }
-
- break;
- }
-
-
- default:
- ret = OMX_ErrorUnsupportedIndex;
- } /* switch */
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-/* Get/SetConfig */
-OMX_ERRORTYPE MrstPsbComponent::ComponentGetConfig(
- OMX_INDEXTYPE nIndex,
- OMX_PTR pComponentConfigStructure)
-{
- OMX_ERRORTYPE ret = OMX_ErrorUnsupportedIndex;
- OMX_CONFIG_INTRAREFRESHVOPTYPE* pVideoIFrame;
- OMX_VIDEO_CONFIG_AVCINTRAPERIOD *pVideoIDRInterval;
-
- LOGV("%s(): enter\n", __func__);
-
- LOGV("%s() : nIndex = %d\n", __func__, nIndex);
-
- switch (nIndex)
- {
- case OMX_IndexConfigVideoAVCIntraPeriod:
- {
- if(!vcp) {
- return OMX_ErrorNotReady;
- }
- pVideoIDRInterval = (OMX_VIDEO_CONFIG_AVCINTRAPERIOD *) pComponentConfigStructure;
- if(!pVideoIDRInterval) {
- LOGE("%s(), NULL pointer", __func__);
- return OMX_ErrorBadParameter;
- }
-
- AVC_ENCODE_ERROR_CHECKING(pVideoIDRInterval)
-
-
- if(!mix) {
- LOGE("%s(), MixVideo is not created", __func__);
- return OMX_ErrorUndefined;
- }
-
- MixVideoConfigParams *mixbaseconfig = NULL;
- MIX_RESULT mret = mix_video_get_config(mix, &mixbaseconfig);
- if(mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(), failed to get config", __func__);
- return OMX_ErrorUndefined;
- }
-
- uint intra_period = 0;
- mret = mix_videoconfigparamsenc_get_intra_period(MIX_VIDEOCONFIGPARAMSENC(mixbaseconfig), &intra_period);
- if(mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(), failed to get intra period", __func__);
- return OMX_ErrorUndefined;
- }
-
- uint idr_interval = 0;
- mret = mix_videoconfigparamsenc_h264_get_IDR_interval(MIX_VIDEOCONFIGPARAMSENC_H264(mixbaseconfig), &idr_interval);
- if(mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(), failed to get IDR interval", __func__);
- return OMX_ErrorUndefined;
- }
-
- mix_videoconfigparams_unref(mixbaseconfig);
-
- pVideoIDRInterval->nIDRPeriod = idr_interval;
- pVideoIDRInterval->nPFrames = intra_period;
-
- LOGV("%s(), OMX_IndexConfigVideoAVCIntraPeriod : nIDRPeriod = %d, nPFrames = %d",
- __func__, pVideoIDRInterval->nIDRPeriod, pVideoIDRInterval->nPFrames);
-
- SetTypeHeader(pVideoIDRInterval, sizeof(OMX_VIDEO_CONFIG_AVCINTRAPERIOD));
- }
- break;
-
- case OMX_IndexConfigIntelBitrate: {
-
- LOGV("%s() : OMX_IndexParamIntelBitrate", __func__);
-
- if (avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
-
- OMX_VIDEO_CONFIG_INTEL_BITRATETYPE *pIntelBitrate =
- (OMX_VIDEO_CONFIG_INTEL_BITRATETYPE *) pComponentConfigStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pIntelBitrate)
-
- *pIntelBitrate = avcEncConfigIntelBitrateType;
-
- break;
- }
- case OMX_IndexConfigVideoNalSize: {
-
- LOGV("%s() : OMX_IndexConfigVideoNalSize", __func__);
-
- if (avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
-
- OMX_VIDEO_CONFIG_NALSIZE *pNalSize =
- (OMX_VIDEO_CONFIG_NALSIZE *) pComponentConfigStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pNalSize)
-
- *pNalSize = avcEncConfigNalSize;
- break;
- }
-
- case OMX_IndexConfigIntelSliceNumbers: {
-
- LOGV("%s() : OMX_IndexConfigIntelSliceNumbers", __func__);
-
- if (avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
-
- OMX_VIDEO_CONFIG_INTEL_SLICE_NUMBERS *pSliceNumbers =
- (OMX_VIDEO_CONFIG_INTEL_SLICE_NUMBERS *) pComponentConfigStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pSliceNumbers)
-
- *pSliceNumbers = avcEncConfigSliceNumbers;
- break;
- }
-
- case OMX_IndexConfigIntelAIR: {
-
- LOGV("%s() : OMX_IndexConfigIntelAIR", __func__);
-
- if (avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
-
- OMX_VIDEO_CONFIG_INTEL_AIR *pIntelAir =
- (OMX_VIDEO_CONFIG_INTEL_AIR *) pComponentConfigStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pIntelAir)
-
- *pIntelAir = avcEncConfigAir;
- break;
- }
- case OMX_IndexConfigVideoFramerate: {
-
- LOGV("%s() : OMX_IndexConfigVideoFramerate", __func__);
-
- if (avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
-
- OMX_CONFIG_FRAMERATETYPE *pxFramerate =
- (OMX_CONFIG_FRAMERATETYPE *) pComponentConfigStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pxFramerate)
-
- *pxFramerate = avcEncFramerate;
- break;
- }
-
- default:
- {
- return OMX_ErrorUnsupportedIndex;
- }
- }
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return OMX_ErrorNone;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::ComponentSetConfig(
- OMX_INDEXTYPE nParamIndex,
- OMX_PTR pComponentConfigStructure)
-{
- OMX_ERRORTYPE ret = OMX_ErrorUnsupportedIndex;
- OMX_CONFIG_INTRAREFRESHVOPTYPE* pVideoIFrame;
- OMX_VIDEO_CONFIG_AVCINTRAPERIOD *pVideoIDRInterval;
-
- MIX_RESULT mret;
-
- LOGV("%s(): enter\n", __func__);
-
- LOGV("%s() : nIndex = %d\n", __func__, nParamIndex);
-
- switch (nParamIndex)
- {
- case OMX_IndexConfigVideoIntraVOPRefresh:
- {
- LOGV("%s(), OMX_IndexConfigVideoIntraVOPRefresh", __func__);
-
- pVideoIFrame = (OMX_CONFIG_INTRAREFRESHVOPTYPE*) pComponentConfigStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pVideoIFrame)
-
- LOGV("%s(), OMX_IndexConfigVideoIntraVOPRefresh", __func__);
- if(pVideoIFrame->IntraRefreshVOP == OMX_TRUE) {
- LOGV("%s(), pVideoIFrame->IntraRefreshVOP == OMX_TRUE", __func__);
-
- MixEncDynamicParams encdynareq;
- oscl_memset(&encdynareq, 0, sizeof(encdynareq));
- encdynareq.force_idr = TRUE;
- if(mix) {
- mret = mix_video_set_dynamic_enc_config (mix,
- MIX_ENC_PARAMS_FORCE_KEY_FRAME, &encdynareq);
- if(mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), failed to set IDR interval", __func__);
- }
- }
- }
- }
- break;
-
- case OMX_IndexConfigVideoAVCIntraPeriod:
- {
- LOGV("%s(), OMX_IndexConfigVideoAVCIntraPeriod", __func__);
-
- pVideoIDRInterval = (OMX_VIDEO_CONFIG_AVCINTRAPERIOD *) pComponentConfigStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pVideoIDRInterval)
-
- LOGV("%s(), OMX_IndexConfigVideoAVCIntraPeriod : nIDRPeriod = %d, nPFrames = %d",
- __func__, pVideoIDRInterval->nIDRPeriod, pVideoIDRInterval->nPFrames);
-
- MixEncDynamicParams encdynareq;
- oscl_memset(&encdynareq, 0, sizeof(encdynareq));
- encdynareq.idr_interval = pVideoIDRInterval->nIDRPeriod;
- encdynareq.intra_period = pVideoIDRInterval->nPFrames;
- if(mix) {
-
- // Ignore the return code
- mret = mix_video_set_dynamic_enc_config (mix, MIX_ENC_PARAMS_IDR_INTERVAL, &encdynareq);
- if(mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), failed to set IDR interval", __func__);
- }
-
- mret = mix_video_set_dynamic_enc_config (mix, MIX_ENC_PARAMS_GOP_SIZE, &encdynareq);
- if(mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), failed to set GOP size", __func__);
- }
- }
- }
- break;
- case OMX_IndexConfigIntelBitrate: {
-
- LOGV("%s(), OMX_IndexConfigIntelBitrate", __func__);
- if (avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- LOGE("%s(), eControlRate == OMX_Video_Intel_ControlRateMax");
- break;
- }
-
- OMX_VIDEO_CONFIG_INTEL_BITRATETYPE *pIntelBitrate =
- (OMX_VIDEO_CONFIG_INTEL_BITRATETYPE *) pComponentConfigStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pIntelBitrate)
-
- avcEncConfigIntelBitrateType = *pIntelBitrate;
-
- if (mix && avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateVideoConferencingMode) {
-
- LOGV("%s(), avcEncConfigIntelBitrateType.nInitialQP = %d", __func__,
- avcEncConfigIntelBitrateType.nInitialQP);
-
- LOGV("%s(), avcEncConfigIntelBitrateType.nMinQP = %d", __func__,
- avcEncConfigIntelBitrateType.nMinQP);
-
- LOGV("%s(), avcEncConfigIntelBitrateType.nMaxEncodeBitrate = %d", __func__,
- avcEncConfigIntelBitrateType.nMaxEncodeBitrate);
-
- LOGV("%s(), avcEncConfigIntelBitrateType.nTargetPercentage = %d", __func__,
- avcEncConfigIntelBitrateType.nTargetPercentage);
-
- LOGV("%s(), avcEncConfigIntelBitrateType.nWindowSize = %d", __func__,
- avcEncConfigIntelBitrateType.nWindowSize);
-
- MixEncParamsType params_type;
- MixEncDynamicParams dynamic_params;
- oscl_memset(&dynamic_params, 0, sizeof(dynamic_params));
-
-
- params_type = MIX_ENC_PARAMS_INIT_QP;
- dynamic_params.init_QP = avcEncConfigIntelBitrateType.nInitialQP;
- mret = mix_video_set_dynamic_enc_config(mix, params_type,
- &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
-
- params_type = MIX_ENC_PARAMS_MIN_QP;
- dynamic_params.min_QP = avcEncConfigIntelBitrateType.nMinQP;
- mret = mix_video_set_dynamic_enc_config(mix, params_type,
- &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
-
- params_type = MIX_ENC_PARAMS_BITRATE;
- dynamic_params.bitrate
- = avcEncConfigIntelBitrateType.nMaxEncodeBitrate;
- mret = mix_video_set_dynamic_enc_config(mix, params_type,
- &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
-
- params_type = MIX_ENC_PARAMS_TARGET_PERCENTAGE;
- dynamic_params.target_percentage
- = avcEncConfigIntelBitrateType.nTargetPercentage;
- mret = mix_video_set_dynamic_enc_config(mix, params_type,
- &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
-
- params_type = MIX_ENC_PARAMS_WINDOW_SIZE;
- dynamic_params.window_size
- = avcEncConfigIntelBitrateType.nWindowSize;
- mret = mix_video_set_dynamic_enc_config(mix, params_type,
- &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
- }
- break;
- }
-
- case OMX_IndexConfigVideoNalSize: {
- if (avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
-
- OMX_VIDEO_CONFIG_NALSIZE *pNalSize =
- (OMX_VIDEO_CONFIG_NALSIZE *) pComponentConfigStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pNalSize)
-
- avcEncConfigNalSize = *pNalSize;
-
- if (mix && avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateVideoConferencingMode) {
-
- MixEncParamsType params_type;
- MixEncDynamicParams dynamic_params;
- oscl_memset(&dynamic_params, 0, sizeof(dynamic_params));
-
- params_type = MIX_ENC_PARAMS_MTU_SLICE_SIZE;
- dynamic_params.max_slice_size = avcEncConfigNalSize.nNaluBytes * 8; // bits
- mret = mix_video_set_dynamic_enc_config (mix,
- params_type, &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
- }
- break;
- }
-
- case OMX_IndexConfigIntelSliceNumbers: {
- if (avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
-
- OMX_VIDEO_CONFIG_INTEL_SLICE_NUMBERS *pSliceNumbers =
- (OMX_VIDEO_CONFIG_INTEL_SLICE_NUMBERS *) pComponentConfigStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pSliceNumbers)
-
- avcEncConfigSliceNumbers = *pSliceNumbers;
-
- LOGV("%s(), OMX_IndexConfigIntelSliceNumbers", __func__);
- LOGV("%s(), nISliceNumber = %d nPSliceNumber = %d", __func__,
- pSliceNumbers->nISliceNumber, pSliceNumbers->nPSliceNumber);
-
- if (mix && avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateVideoConferencingMode) {
-
- MixEncParamsType params_type;
- MixEncDynamicParams dynamic_params;
- oscl_memset(&dynamic_params, 0, sizeof(dynamic_params));
-
- params_type = MIX_ENC_PARAMS_I_SLICE_NUM;
- dynamic_params.I_slice_num = pSliceNumbers->nISliceNumber;
- mret = mix_video_set_dynamic_enc_config (mix,
- params_type, &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
- params_type = MIX_ENC_PARAMS_P_SLICE_NUM;
- dynamic_params.P_slice_num = pSliceNumbers->nPSliceNumber;
- mret = mix_video_set_dynamic_enc_config (mix,
- params_type, &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
- }
- break;
- }
- case OMX_IndexConfigIntelAIR: {
- if (avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
-
- OMX_VIDEO_CONFIG_INTEL_AIR *pIntelAir =
- (OMX_VIDEO_CONFIG_INTEL_AIR *) pComponentConfigStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pIntelAir)
-
- avcEncConfigAir = *pIntelAir;
-
- if (mix && avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateVideoConferencingMode) {
-
- MixEncParamsType params_type;
- MixEncDynamicParams dynamic_params;
- oscl_memset(&dynamic_params, 0, sizeof(dynamic_params));
-
- if(pIntelAir->bAirEnable) {
-
- params_type = MIX_ENC_PARAMS_REFRESH_TYPE;
- dynamic_params.refresh_type = MIX_VIDEO_AIR;
- mret = mix_video_set_dynamic_enc_config (mix, params_type, &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
-
- params_type = MIX_ENC_PARAMS_AIR;
- dynamic_params.air_params.air_auto = pIntelAir->bAirAuto;
- dynamic_params.air_params.air_MBs = pIntelAir->nAirMBs;
- dynamic_params.air_params.air_threshold = pIntelAir->nAirThreshold;
- mret = mix_video_set_dynamic_enc_config (mix, params_type, &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
-
- } else {
-
- params_type = MIX_ENC_PARAMS_REFRESH_TYPE;
- dynamic_params.refresh_type = MIX_VIDEO_NONIR;
- mret = mix_video_set_dynamic_enc_config (mix, params_type, &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
- }
- }
- break;
- }
-
- case OMX_IndexConfigVideoFramerate: {
- if (avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateMax) {
- ret = OMX_ErrorUnsupportedIndex;
- break;
- }
-
- OMX_CONFIG_FRAMERATETYPE *pxFramerate =
- (OMX_CONFIG_FRAMERATETYPE *) pComponentConfigStructure;
-
- AVC_ENCODE_ERROR_CHECKING(pxFramerate)
-
- avcEncFramerate = *pxFramerate;
-
- if (mix && avcEncParamIntelBitrateType.eControlRate
- == OMX_Video_Intel_ControlRateVideoConferencingMode) {
-
- MixEncParamsType params_type;
- MixEncDynamicParams dynamic_params;
- oscl_memset(&dynamic_params, 0, sizeof(dynamic_params));
-
- params_type = MIX_ENC_PARAMS_FRAME_RATE;
- dynamic_params.frame_rate_denom = 1;
- dynamic_params.frame_rate_num = avcEncFramerate.xEncodeFramerate >> 16; // Q16 format
- mret = mix_video_set_dynamic_enc_config (mix, params_type, &dynamic_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGW("%s(), mixvideo return error : 0x%x", __func__, mret);
- }
- }
- break;
- }
-
- default:
- {
- return OMX_ErrorUnsupportedIndex;
- }
- }
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return OMX_ErrorNone;
-}
-
-
-/* end of component methods & helpers */
-
-/*
- * implement ComponentBase::Processor[*]
- */
-OMX_ERRORTYPE MrstPsbComponent::ProcessorInit(void)
-{
- MixVideo *mix = NULL;
- MixVideoInitParams *vip = NULL;
- MixParams *mvp = NULL;
- MixVideoConfigParams *vcp = NULL;
- MixDisplayAndroid *display = NULL;
-
- OMX_U32 port_index = (OMX_U32)-1;
-
- uint major, minor;
-
- OMX_ERRORTYPE oret = OMX_ErrorNone;
- MIX_RESULT mret;
-
- LOGV("%s(): enter\n", __func__);
-
- mix = mix_video_new();
- LOGV("%s(): called to mix_video_new()", __func__);
-
- if (!mix) {
- LOGE("%s(),%d: exit, mix_video_new failed", __func__, __LINE__);
- goto error_out;
- }
-
- mix_video_get_version(mix, &major, &minor);
- LOGV("MixVideo version: %d.%d", major, minor);
-
- /* decoder */
- if (coding_type == OMX_VIDEO_CodingAVC) {
- vcp = MIX_VIDEOCONFIGPARAMS(mix_videoconfigparamsdec_h264_new());
- }
- else if (coding_type == OMX_VIDEO_CodingMPEG4 || coding_type == OMX_VIDEO_CodingH263) {
- vcp = MIX_VIDEOCONFIGPARAMS(mix_videoconfigparamsdec_mp42_new());
- }
-
- mvp = MIX_PARAMS(mix_videodecodeparams_new());
- port_index = INPORT_INDEX;
-
- if (!vcp || !mvp || (port_index == (OMX_U32)-1)) {
- LOGE("%s(),%d: exit, failed to allocate vcp, mvp, port_index\n",
- __func__, __LINE__);
- goto error_out;
- }
-
- oret = ChangeVcpWithPortParam(vcp,
- static_cast<PortVideo *>(ports[port_index]),
- NULL);
- if (oret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit, ChangeVcpWithPortParam failed (ret == 0x%08x)\n",
- __func__, __LINE__, oret);
- goto error_out;
- }
-
- display = mix_displayandroid_new();
- if (!display) {
- LOGE("%s(),%d: exit, mix_displayandroid_new failed", __func__, __LINE__);
- goto error_out;
- }
-
- vip = mix_videoinitparams_new();
- if (!vip) {
- LOGE("%s(),%d: exit, mix_videoinitparams_new failed", __func__,
- __LINE__);
- goto error_out;
- }
-
- {
- Display *android_display = (Display*)malloc(sizeof(Display));
- *(android_display) = 0x18c34078;
-
- LOGV("*android_display = %d", *android_display);
-
- mret = mix_displayandroid_set_display(display, android_display);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(),%d: exit, mix_displayandroid_set_display failed "
- "(ret == 0x%08x)", __func__, __LINE__, mret);
- goto error_out;
- }
- }
-
- mret = mix_videoinitparams_set_display(vip, MIX_DISPLAY(display));
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(),%d: exit, mix_videoinitparams_set_display failed "
- "(ret == 0x%08x)", __func__, __LINE__, mret);
- goto error_out;
- }
-
- mret = mix_videodecodeparams_set_discontinuity(
- MIX_VIDEODECODEPARAMS(mvp), FALSE);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(),%d: exit, mix_videodecodeparams_set_discontinuity "
- "(ret == 0x%08x)", __func__, __LINE__, mret);
- goto error_out;
- }
-
- mret = mix_video_initialize(mix, codec_mode, vip, NULL);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(),%d: exit, mix_video_initialize failed (ret == 0x%08x)",
- __func__, __LINE__, mret);
- goto error_out;
- }
-
- this->mix = mix;
- this->vip = vip;
- this->mvp = mvp;
- this->vcp = vcp;
- this->display = display;
- this->mixbuffer_in[0] = NULL;
-
- inframe_counter = 0;
- outframe_counter = 0;
- is_mixvideodec_configured = OMX_FALSE;
-
- last_ts = 0;
- last_fps = 0.0;
-
- avc_enc_frame_size_left = 0;
-
- avc_enc_buffer = NULL;
- avc_enc_buffer_length = 0;
- avc_enc_buffer_offset = 0;
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, oret);
- return oret;
-
-error_out:
- mix_params_unref(mvp);
- mix_videoconfigparams_unref(vcp);
- mix_displayandroid_unref(display);
- mix_videoinitparams_unref(vip);
- mix_video_unref(mix);
-
- return OMX_ErrorUndefined;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::ProcessorDeinit(void)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
- MIX_RESULT mret;
-
- LOGV("%s(): enter\n", __func__);
-
- mix_video_eos(mix);
- mix_video_flush(mix);
-
- mix_params_unref(mvp);
- mix_videoconfigparams_unref(vcp);
- mix_displayandroid_unref(display);
- mix_videoinitparams_unref(vip);
-
- if (mixbuffer_in[0]) {
- mix_video_release_mixbuffer(mix, mixbuffer_in[0]);
- mixbuffer_in[0] = NULL;
- }
-
- mix_video_deinitialize(mix);
- mix_video_unref(mix);
-
- //to release glib thread resource;
- //g_thread_deinit();
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::ProcessorStart(void)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
-
- LOGV("%s(): enter\n", __func__);
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::ProcessorStop(void)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
-
- LOGV("%s(): enter\n", __func__);
-
-#if 0
- if (codec_mode == MIX_CODEC_MODE_ENCODE && coding_type
- == OMX_VIDEO_CodingAVC) {
-
- ports[OUTPORT_INDEX]->ReturnAllRetainedBuffers();
- inframe_counter = 0;
- outframe_counter = 0;
- }
-#endif
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::ProcessorPause(void)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
-
- LOGV("%s(): enter\n", __func__);
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::ProcessorResume(void)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
-
- LOGV("%s(): enter\n", __func__);
-
- LOGV("%s(),%d: exit (ret:0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-
-/* implement ComponentBase::ProcessorProcess */
-OMX_ERRORTYPE MrstPsbComponent::ProcessorProcess(
- OMX_BUFFERHEADERTYPE ***pBuffers,
- buffer_retain_t *retain,
- OMX_U32 nr_buffers)
-{
- MixIOVec buffer_in, buffer_out;
- OMX_U32 outfilledlen = 0;
- OMX_S64 outtimestamp = 0;
- OMX_U32 outflags = 0;
-
- OMX_ERRORTYPE oret = OMX_ErrorNone;
- MIX_RESULT mret;
-
- VABuffer *vaBuf;
- int retry_decode_count;
-
- LOGV_IF((*pBuffers[INPORT_INDEX])->nFlags & OMX_BUFFERFLAG_EOS,
- "%s(),%d: got OMX_BUFFERFLAG_EOS\n", __func__, __LINE__);
-
- if (!(*pBuffers[INPORT_INDEX])->nFilledLen) {
- LOGV("%s(),%d: input buffer's nFilledLen is zero\n",
- __func__, __LINE__);
- goto out;
- }
-
- buffer_in.data =
- (*pBuffers[INPORT_INDEX])->pBuffer + (*pBuffers[INPORT_INDEX])->nOffset;
- buffer_in.data_size = (*pBuffers[INPORT_INDEX])->nFilledLen;
- buffer_in.buffer_size = (*pBuffers[INPORT_INDEX])->nFilledLen;
-
- LOGV("buffer_in.data=%x, data_size=%d, buffer_size=%d",
- (unsigned)buffer_in.data, buffer_in.data_size, buffer_in.buffer_size);
-
- buffer_out.data =
- (*pBuffers[OUTPORT_INDEX])->pBuffer + (*pBuffers[OUTPORT_INDEX])->nOffset;
- buffer_out.data_size = 0;
- buffer_out.buffer_size = (*pBuffers[OUTPORT_INDEX])->nAllocLen - (*pBuffers[OUTPORT_INDEX])->nOffset;
-
- mixiovec_out[0] = &buffer_out;
-
- if(is_mixvideodec_configured) {
- MixVideoFrame *frame = NULL;
- vaBuf = (VABuffer *)(mixiovec_out[0]->data);
-
- mret = mix_video_get_frame(mix, &frame);
- if (mret != MIX_RESULT_SUCCESS) {
- if (mret == MIX_RESULT_FRAME_NOTAVAIL) {
- LOGV("%s(), no more frames, continue to decode "
- "(ret == 0x%08x)", __func__, mret);
- goto normal_start;
- }
- else {
- LOGE("%s(), %d mix_video_get_frame() failed (ret == 0x%08x)",
- __func__, __LINE__, mret);
- oret = OMX_ErrorUndefined;
- goto local_cleanup;
- }
- }
-
- mret = mix_videoframe_get_frame_id(frame, (ulong *)&vaBuf->surface);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(), %d mix_videoframe_get_frame_id() failed (ret == 0x%08x)",
- __func__, __LINE__, mret);
- oret = OMX_ErrorUndefined;
- goto local_cleanup;
- }
- mret = mix_videoframe_get_vadisplay(frame, (void **)&vaBuf->display);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(), %d mix_videoframe_get_vadisplay() failed (ret == 0x%08x)",
- __func__, __LINE__, mret);
- oret = OMX_ErrorUndefined;
- goto local_cleanup;
- }
-
- mret = mix_videoframe_get_timestamp(frame, (uint64 *)&outtimestamp);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(), %d mix_videoframe_get_timestamp() failed (ret == 0x%08x)",
- __func__, __LINE__, mret);
- oret = OMX_ErrorUndefined;
- goto local_cleanup;
- }
-
- LOGV("--- Output timestamp = %"G_GINT64_FORMAT"\n ---", outtimestamp);
-
- mret = mix_videoframe_get_frame_structure(frame, (uint32 *)&vaBuf->frame_structure);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(), %d mix_videoframe_get_frame_structure() failed (ret == 0x%08x)",
- __func__, __LINE__, mret);
- oret = OMX_ErrorUndefined;
- goto local_cleanup;
- }
-
- LOGV(" frame_structure = %d \n", vaBuf->frame_structure);
-
- outfilledlen = sizeof(VABuffer);
- LOGV("In OMX DEC vadisplay = %x surfaceid = %x outfilledlen = %d\n",
- vaBuf->display, vaBuf->surface, outfilledlen);
-
- outflags |= OMX_BUFFERFLAG_ENDOFFRAME;
- retain[INPORT_INDEX] = BUFFER_RETAIN_GETAGAIN;
-
- (*pBuffers[OUTPORT_INDEX])->nFilledLen = outfilledlen;
- (*pBuffers[OUTPORT_INDEX])->nTimeStamp = outtimestamp;
- (*pBuffers[OUTPORT_INDEX])->nFlags = outflags;
-
- outframe_counter++;
-
-local_cleanup:
-
- if(frame) {
- mix_video_release_frame(mix, frame);
- }
-
- LOGV("%s(),%d: exit, done\n", __func__, __LINE__);
- return oret;
- }
-
-normal_start:
-
- if (coding_type == OMX_VIDEO_CodingH263) {
-
- LOGV("data = 0x%x size = %d inframe_counter = %d", buffer_in.data, buffer_in.data_size, inframe_counter);
-
- int min_size = buffer_in.data_size;
- if(min_size > 8 ) {
- min_size = 8;
- }
- for(int i = 0; i < min_size; i++) {
- LOGV("0x%x ", buffer_in.data[i]);
- }
-
- if (inframe_counter == 0) {
- oret = ChangePortParamWithCodecData(buffer_in.data,
- buffer_in.data_size,
- ports);
- if (oret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit ChangePortParamWithCodecData failed "
- "(ret:0x%08x)\n",
- __func__, __LINE__, oret);
- goto out;
- }
-
- oret = ChangeVcpWithPortParam(vcp,
- static_cast<PortVideo *>(ports[INPORT_INDEX]),
- NULL);
- if (oret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit ChangeVcpWithPortParam failed "
- "(ret:0x%08x)\n", __func__, __LINE__, oret);
- goto out;
- }
-
- mret = mix_videoconfigparamsdec_set_header(
- MIX_VIDEOCONFIGPARAMSDEC(vcp), &buffer_in);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(), %d: exit, "
- "mix_videoconfigparamsdec_set_header failed "
- "(ret:0x%08x)", __func__, __LINE__, mret);
- oret = OMX_ErrorUndefined;
- goto out;
- }
- mret = mix_video_configure(mix, vcp, NULL);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(), %d: exit, mix_video_configure failed "
- "(ret:0x%08x)", __func__, __LINE__, mret);
- oret = OMX_ErrorUndefined;
- if(mret == MIX_RESULT_NO_MEMORY) {
- oret = OMX_ErrorInsufficientResources;
- } else if(mret == MIX_RESULT_NOT_PERMITTED) {
- oret = (OMX_ERRORTYPE)OMX_ErrorIntelVideoNotPermitted;;
- }
- goto out;
- }
- is_mixvideodec_configured = OMX_TRUE;
- LOGV("%s(): mix video configured", __func__);
-
- /*
- * port reconfigure
- */
- ports[OUTPORT_INDEX]->ReportPortSettingsChanged();
- }
- }
-
- /* only in case of decode mode */
- if (((*pBuffers[INPORT_INDEX])->nFlags & OMX_BUFFERFLAG_ENDOFFRAME) &&
- ((*pBuffers[INPORT_INDEX])->nFlags & OMX_BUFFERFLAG_CODECCONFIG)) {
-
- if (coding_type == OMX_VIDEO_CodingAVC) {
- if (inframe_counter == 0) {
-
-#if 0
- oret = ChangePortParamWithCodecData(buffer_in.data,
- buffer_in.data_size, ports);
- if (oret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit ChangePortParamWithCodecData failed "
- "(ret:0x%08x)\n", __func__, __LINE__, oret);
- goto out;
- }
-#endif
-
- oret = ChangeVcpWithPortParam(vcp,
- static_cast<PortVideo *> (ports[INPORT_INDEX]), NULL);
- if (oret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit ChangeVcpWithPortParam failed "
- "(ret:0x%08x)\n", __func__, __LINE__, oret);
- goto out;
- }
-
- mret = mix_video_configure(mix, vcp, NULL);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(), %d: exit, mix_video_configure failed "
- "(ret:0x%08x)", __func__, __LINE__, mret);
- oret = OMX_ErrorUndefined;
- if(mret == MIX_RESULT_NO_MEMORY) {
- oret = OMX_ErrorInsufficientResources;
- } else if(mret == MIX_RESULT_NOT_PERMITTED) {
- oret = (OMX_ERRORTYPE)OMX_ErrorIntelVideoNotPermitted;;
- }
- goto out;
- }
- is_mixvideodec_configured = OMX_TRUE;
- LOGV("%s(): mix video configured", __func__);
-
-#if 0
- /*
- * port reconfigure
- */
- ports[OUTPORT_INDEX]->ReportPortSettingsChanged();
-#endif
- } /* inframe_counter */
- } /* OMX_VIDEO_CodingAVC */
- else if (coding_type == OMX_VIDEO_CodingMPEG4) {
- if (inframe_counter == 0) {
- oret = ChangePortParamWithCodecData(buffer_in.data,
- buffer_in.data_size,
- ports);
- if (oret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit ChangePortParamWithCodecData failed "
- "(ret:0x%08x)\n",
- __func__, __LINE__, oret);
- goto out;
- }
-
- oret = ChangeVcpWithPortParam(vcp,
- static_cast<PortVideo *>(ports[INPORT_INDEX]),
- NULL);
- if (oret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit ChangeVcpWithPortParam failed "
- "(ret:0x%08x)\n", __func__, __LINE__, oret);
- goto out;
- }
-
- mret = mix_videoconfigparamsdec_set_header(
- MIX_VIDEOCONFIGPARAMSDEC(vcp), &buffer_in);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(), %d: exit, "
- "mix_videoconfigparamsdec_set_header failed "
- "(ret:0x%08x)", __func__, __LINE__, mret);
- oret = OMX_ErrorUndefined;
- goto out;
- }
- mret = mix_video_configure(mix, vcp, NULL);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(), %d: exit, mix_video_configure failed "
- "(ret:0x%08x)", __func__, __LINE__, mret);
- oret = OMX_ErrorUndefined;
- if(mret == MIX_RESULT_NO_MEMORY) {
- oret = OMX_ErrorInsufficientResources;
- } else if(mret == MIX_RESULT_NOT_PERMITTED) {
- oret = (OMX_ERRORTYPE)OMX_ErrorIntelVideoNotPermitted;;
- }
- goto out;
- }
- is_mixvideodec_configured = OMX_TRUE;
- LOGV("%s(): mix video configured", __func__);
-
- /*
- * port reconfigure
- */
- ports[OUTPORT_INDEX]->ReportPortSettingsChanged();
- goto out;
- }
- } /* OMX VIDEO_CodingMPEG4 */
- } /* OMX_BUFFERFLAG_ENDOFFRAME && OMX_BUFFERFLAG_CODECCONFIG */
-
- /* get MixBuffer */
- mret = mix_video_get_mixbuffer(mix, &mixbuffer_in[0]);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(), %d: exit, mix_video_get_mixbuffer failed (ret:0x%08x)",
- __func__, __LINE__, mret);
- oret = OMX_ErrorUndefined;
- goto out;
- }
-
- /* fill MixBuffer */
- mret = mix_buffer_set_data(mixbuffer_in[0],
- buffer_in.data, buffer_in.data_size,
- 0, NULL);
-
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(), %d: exit, mix_buffer_set_data failed (ret:0x%08x)",
- __func__, __LINE__, mret);
- oret = OMX_ErrorUndefined;
- goto out;
- }
-
- /* decoder */
- MixVideoFrame *frame;
-
- /* set timestamp */
- outtimestamp = (*pBuffers[INPORT_INDEX])->nTimeStamp;
-
- mix_videodecodeparams_set_timestamp(MIX_VIDEODECODEPARAMS(mvp),
- outtimestamp);
- LOGV("--- Input timestamp = %"G_GINT64_FORMAT" ---\n", outtimestamp);
-
- {
- unsigned char *nal = buffer_in.data;
- LOGV("%s(), nal_type = 0x%x", __func__, *nal & 0x1F);
- }
-
- retry_decode_count = 0;
-
-retry_decode:
- mret = mix_video_decode(mix,
- mixbuffer_in, 1,
- MIX_VIDEODECODEPARAMS(mvp));
- if (mret != MIX_RESULT_SUCCESS) {
- if (mret == MIX_RESULT_OUTOFSURFACES) {
- LOGV("%s(),%d: mix_video_decode() failed, "
- "out of surfaces waits 10000 us and try again\n",
- __func__, __LINE__);
-
- if(retry_decode_count ++ > 100) {
- oret = OMX_ErrorUndefined;
- goto out;
- }
-
- usleep(10000);
- goto retry_decode;
- } else if (mret != MIX_RESULT_DROPFRAME &&
- mret != MIX_RESULT_ERROR_PROCESS_STREAM &&
- mret != MIX_RESULT_MISSING_CONFIG) {
-
- LOGE("%s(),%d: exit, mix_video_decode() failed\n",
- __func__, __LINE__);
-
- oret = OMX_ErrorUndefined;
- if(mret == MIX_RESULT_NO_MEMORY) {
- oret = OMX_ErrorInsufficientResources;
- } else if(mret == MIX_RESULT_NOT_PERMITTED) {
- oret = (OMX_ERRORTYPE)OMX_ErrorIntelVideoNotPermitted;;
- }
- goto out;
- }
- }
-
- {
- MixVideoDecodeParams * decode_params = MIX_VIDEODECODEPARAMS(mvp);
- LOGV("%s(), decode_params->new_sequence = %d", __func__, decode_params->new_sequence);
- }
-
- /* decide whether or not to send port setting change event */
- if (coding_type == OMX_VIDEO_CodingAVC) {
- if (mret == MIX_RESULT_SUCCESS) {
-
- MixVideoDecodeParams * decode_params = MIX_VIDEODECODEPARAMS(mvp);
- if (avcDecGotRes == OMX_FALSE || decode_params->new_sequence) {
- LOGV("%s(), avcDecGotRes == OMX_FALSE || decode_params->new_sequence", __func__);
-
- avcDecGotRes = OMX_TRUE;
- MixVideoConfigParams *config_params = NULL;
- mret = mix_video_get_config(mix, &config_params);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(),%d: exit, mix_video_get_config() failed\n",
- __func__, __LINE__);
- oret = OMX_ErrorUndefined;
- goto out;
- }
-
- PortAvc *avcport =
- static_cast<PortAvc *> (ports[INPORT_INDEX]);
- OMX_PARAM_PORTDEFINITIONTYPE avcpd;
- memcpy(&avcpd, avcport->GetPortDefinition(),
- sizeof(OMX_PARAM_PORTDEFINITIONTYPE));
-
- MixVideoConfigParamsDec *config_params_dec =
- MIX_VIDEOCONFIGPARAMSDEC(config_params);
- avcDecFrameWidth = config_params_dec->picture_width -
- config_params_dec->crop_left - config_params_dec->crop_right;
- avcDecFrameHeight = config_params_dec->picture_height -
- config_params_dec->crop_top - config_params_dec->crop_bottom;
-
- if(avcDecodeSettings.nMaxWidth != 0 && avcDecodeSettings.nMaxHeight != 0) {
- if(avcDecFrameWidth > avcDecodeSettings.nMaxWidth ||
- avcDecFrameHeight > avcDecodeSettings.nMaxHeight) {
- oret = (OMX_ERRORTYPE)OMX_ErrorIntelVideoNotPermitted;
- goto out;
- }
- }
-
- LOGV("%s(), avcDecFrameWidth = %d avcDecFrameHeight = %d",
- __func__, avcDecFrameWidth, avcDecFrameHeight);
- LOGV("%s(), avcpd.format.video.nFrameWidth = %d avcpd.format.video.nFrameHeight = %d",
- __func__, avcpd.format.video.nFrameWidth, avcpd.format.video.nFrameHeight);
-
- if (avcDecFrameWidth != avcpd.format.video.nFrameWidth ||
- avcDecFrameHeight != avcpd.format.video.nFrameHeight) {
-
- LOGV("%s(), calls to ChangePortParamWithCodecData", __func__);
- oret = ChangePortParamWithCodecData(buffer_in.data,
- buffer_in.data_size, ports);
- if (oret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit ChangePortParamWithCodecData failed "
- "(ret:0x%08x)\n", __func__, __LINE__, oret);
- goto out;
- }
-
- LOGV("%s(), resolution change is detected!", __func__);
- LOGV("%s(), calls to ReportPortSettingsChanged", __func__);
- ports[OUTPORT_INDEX]->ReportPortSettingsChanged();
- }
- mix_videoconfigparams_unref(config_params);
- }
- }
- }
-
- LOGV("%s(), mix_video_decode() returns 0x%x", __func__, mret);
- if(mret == MIX_RESULT_DROPFRAME ||
- mret == MIX_RESULT_ERROR_PROCESS_STREAM ||
- mret == MIX_RESULT_MISSING_CONFIG ) {
- LOGE("%s(),%d: mix_video_decode() failed, "
- "frame dropped\n",
- __func__, __LINE__);
- /* not an error */
- oret = OMX_ErrorNone;
- retain[OUTPORT_INDEX] = BUFFER_RETAIN_GETAGAIN;
- if (mret == MIX_RESULT_ERROR_PROCESS_STREAM) {
- oret = (OMX_ERRORTYPE)OMX_ErrorIntelProcessStream;
- } else if (mret == MIX_RESULT_MISSING_CONFIG) {
- oret = (OMX_ERRORTYPE)OMX_ErrorIntelMissingConfig;
- }
- goto out;
- }
-
- mret = mix_video_get_frame(mix, &frame);
- if (mret != MIX_RESULT_SUCCESS) {
- if (mret == MIX_RESULT_FRAME_NOTAVAIL) {
- LOGV("%s(), partial frame, waits for next turn "
- "(ret == 0x%08x)", __func__, mret);
- retain[OUTPORT_INDEX] = BUFFER_RETAIN_GETAGAIN;
- oret = OMX_ErrorNone;
- goto out;
- }
- else {
- LOGE("%s(), %d mix_video_get_frame() failed (ret == 0x%08x)",
- __func__, __LINE__, mret);
- oret = OMX_ErrorUndefined;
- goto out;
- }
- }
-
- vaBuf = (VABuffer *)(mixiovec_out[0]->data);
- mret = mix_videoframe_get_frame_id(frame, (ulong *)&vaBuf->surface);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(), %d mix_videoframe_get_frame_id() failed (ret == 0x%08x)",
- __func__, __LINE__, mret);
- oret = OMX_ErrorUndefined;
- goto out;
- }
- mret = mix_videoframe_get_vadisplay(frame, (void **)&vaBuf->display);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(), %d mix_videoframe_get_vadisplay() failed (ret == 0x%08x)",
- __func__, __LINE__, mret);
- oret = OMX_ErrorUndefined;
- goto out;
- }
-
-#if 1
- mret = mix_videoframe_get_timestamp(frame, (uint64 *)&outtimestamp);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(), %d mix_videoframe_get_timestamp() failed (ret == 0x%08x)",
- __func__, __LINE__, mret);
- oret = OMX_ErrorUndefined;
- goto out;
- }
-
- LOGV("--- Output timestamp = %"G_GINT64_FORMAT"\n ---", outtimestamp);
-#endif
- mret = mix_videoframe_get_frame_structure(frame, (uint32 *)&vaBuf->frame_structure);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(), %d mix_videoframe_get_frame_structure() failed (ret == 0x%08x)",
- __func__, __LINE__, mret);
- oret = OMX_ErrorUndefined;
- goto out;
- }
-
- LOGV(" frame_structure = %d \n", vaBuf->frame_structure);
-
- outfilledlen = sizeof(VABuffer);
- LOGV("In OMX DEC vadisplay = %x surfaceid = %x outfilledlen = %d\n",
- vaBuf->display, vaBuf->surface, outfilledlen);
-
-release_frame:
- mret = mix_video_release_frame(mix, frame);
- if (mret != MIX_RESULT_SUCCESS) {
- LOGE("%s(), %d mix_video_release_frame() failed (ret == 0x%08x)",
- __func__, __LINE__, mret);
- oret = OMX_ErrorUndefined;
- goto out;
- }
-
- outflags |= OMX_BUFFERFLAG_ENDOFFRAME;
-
-#if SHOW_FPS
- {
- struct timeval t;
- OMX_TICKS current_ts, interval_ts;
- float current_fps, average_fps;
-
- t.tv_sec = t.tv_usec = 0;
- gettimeofday(&t, NULL);
-
- current_ts =
- (nsecs_t)t.tv_sec * 1000000000 + (nsecs_t)t.tv_usec * 1000;
- interval_ts = current_ts - last_ts;
- last_ts = current_ts;
-
- current_fps = (float)1000000000 / (float)interval_ts;
- average_fps = (current_fps + last_fps) / 2;
- last_fps = current_fps;
-
- LOGD("FPS = %2.1f\n", average_fps);
- }
-#endif
-
-out:
- if (mixbuffer_in[0]) {
- mix_video_release_mixbuffer(mix, mixbuffer_in[0]);
- mixbuffer_in[0] = NULL;
- }
-
- if(retain[OUTPORT_INDEX] != BUFFER_RETAIN_GETAGAIN) {
- (*pBuffers[OUTPORT_INDEX])->nFilledLen = outfilledlen;
- (*pBuffers[OUTPORT_INDEX])->nTimeStamp = outtimestamp;
- (*pBuffers[OUTPORT_INDEX])->nFlags = outflags;
- }
-
- if (retain[INPORT_INDEX] == BUFFER_RETAIN_NOT_RETAIN ||
- retain[INPORT_INDEX] == BUFFER_RETAIN_ACCUMULATE ) {
- inframe_counter++;
-// buffers[INPORT_INDEX]->nFilledLen = 0;
- }
-
- if (retain[OUTPORT_INDEX] == BUFFER_RETAIN_NOT_RETAIN)
- outframe_counter++;
-
-#if 0
- if (retain[OUTPORT_INDEX] == BUFFER_RETAIN_NOT_RETAIN)
- DumpBuffer(buffers[OUTPORT_INDEX], false);
-#endif
-
- if (coding_type == OMX_VIDEO_CodingAVC) {
-
- // TODO: add a flag to differentiate VCM and normal decoding. For now, just to max res
- if (avcDecodeSettings.nMaxWidth == 0 ||
- avcDecodeSettings.nMaxHeight == 0) {
- if (oret == (OMX_ERRORTYPE) OMX_ErrorIntelProcessStream) {
- oret = OMX_ErrorNone;
- }
- if (oret == (OMX_ERRORTYPE) OMX_ErrorIntelMissingConfig) {
- oret = OMX_ErrorNone;
- }
- }
- }
-
- LOGV_IF(oret == OMX_ErrorNone,
- "%s(),%d: exit, decode is done\n", __func__, __LINE__);
-
- return oret;
-}
-
-/* end of implement ComponentBase::Processor[*] */
-
-/*
- * vcp setting helpers
- */
-OMX_ERRORTYPE MrstPsbComponent::__AvcChangePortParamWithCodecData(
- const OMX_U8 *codec_data, OMX_U32 size, PortBase **ports)
-{
- PortAvc *avcport = static_cast<PortAvc *>(ports[INPORT_INDEX]);
- PortVideo *rawport = static_cast<PortVideo *>(ports[OUTPORT_INDEX]);
-
- OMX_PARAM_PORTDEFINITIONTYPE avcpd, rawpd;
-
- unsigned int width, height, stride, sliceheight;
-
- int ret;
-
- memcpy(&avcpd, avcport->GetPortDefinition(),
- sizeof(OMX_PARAM_PORTDEFINITIONTYPE));
-
-#if 1
-
- width = avcDecFrameWidth;
- height = avcDecFrameHeight;
- stride = width;
- sliceheight = height;
-
-#else
- LOGV("nFrameWidth = %lu", avcpd.format.video.nFrameWidth);
- LOGV("nFrameHeight = %lu", avcpd.format.video.nFrameHeight);
- LOGV("nStride = %lu", avcpd.format.video.nStride);
- LOGV("nSliceHeight = %lu", avcpd.format.video.nSliceHeight);
-
- width = avcpd.format.video.nFrameWidth;
- height = avcpd.format.video.nFrameHeight;
- stride = width;
- sliceheight = height;
-#endif
-
- if (avcpd.format.video.nFrameWidth != width) {
- LOGV("%s(): width : %lu != %d", __func__,
- avcpd.format.video.nFrameWidth, width);
- avcpd.format.video.nFrameWidth = width;
- }
- if (avcpd.format.video.nFrameHeight != height) {
- LOGV("%s(): height : %lu != %d", __func__,
- avcpd.format.video.nFrameHeight, height);
- avcpd.format.video.nFrameHeight = height;
- }
- if (avcpd.format.video.nStride != (OMX_S32)stride) {
- LOGV("%s(): stride : %lu != %d", __func__,
- avcpd.format.video.nStride, stride);
- avcpd.format.video.nStride = stride;
- }
- if (avcpd.format.video.nSliceHeight != sliceheight) {
- LOGV("%s(): sliceheight : %ld != %d", __func__,
- avcpd.format.video.nSliceHeight, sliceheight);
- avcpd.format.video.nSliceHeight = sliceheight;
- }
-
- memcpy(&rawpd, rawport->GetPortDefinition(),
- sizeof(OMX_PARAM_PORTDEFINITIONTYPE));
-
- if (rawpd.format.video.nFrameWidth != width)
- rawpd.format.video.nFrameWidth = width;
- if (rawpd.format.video.nFrameHeight != height)
- rawpd.format.video.nFrameHeight = height;
- if (rawpd.format.video.nStride != (OMX_S32)stride)
- rawpd.format.video.nStride = stride;
- if (rawpd.format.video.nSliceHeight != sliceheight)
- rawpd.format.video.nSliceHeight = sliceheight;
-
- rawpd.nBufferSize = (stride * sliceheight * 3) >> 1;
-
- avcport->SetPortDefinition(&avcpd, true);
- rawport->SetPortDefinition(&rawpd, true);
-
- return OMX_ErrorNone;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::__Mpeg4ChangePortParamWithCodecData(
- const OMX_U8 *codec_data, OMX_U32 size, PortBase **ports)
-{
- PortMpeg4 *mpeg4port = static_cast<PortMpeg4 *>(ports[INPORT_INDEX]);
- PortVideo *rawport = static_cast<PortVideo *>(ports[OUTPORT_INDEX]);
-
- OMX_PARAM_PORTDEFINITIONTYPE mpeg4pd, rawpd;
-
- unsigned int width, height, stride, sliceheight;
-
- memcpy(&mpeg4pd, mpeg4port->GetPortDefinition(),
- sizeof(OMX_PARAM_PORTDEFINITIONTYPE));
-
- LOGV("nFrameWidth = %lu", mpeg4pd.format.video.nFrameWidth);
- LOGV("nFrameHeight = %lu", mpeg4pd.format.video.nFrameHeight);
- LOGV("nStride = %lu", mpeg4pd.format.video.nStride);
- LOGV("nSliceHeight = %lu", mpeg4pd.format.video.nSliceHeight);
-
- width = mpeg4pd.format.video.nFrameWidth;
- height = mpeg4pd.format.video.nFrameHeight;
- stride = width;
- sliceheight = height;
-
- if (mpeg4pd.format.video.nFrameWidth != width) {
- LOGV("%s(): width : %lu != %d", __func__,
- mpeg4pd.format.video.nFrameWidth, width);
- mpeg4pd.format.video.nFrameWidth = width;
- }
- if (mpeg4pd.format.video.nFrameHeight != height) {
- LOGV("%s(): height : %lu != %d", __func__,
- mpeg4pd.format.video.nFrameHeight, height);
- mpeg4pd.format.video.nFrameHeight = height;
- }
- if (mpeg4pd.format.video.nStride != (OMX_S32)stride) {
- LOGV("%s(): stride : %lu != %d", __func__,
- mpeg4pd.format.video.nStride, stride);
- mpeg4pd.format.video.nStride = stride;
- }
- if (mpeg4pd.format.video.nSliceHeight != sliceheight) {
- LOGV("%s(): sliceheight : %ld != %d", __func__,
- mpeg4pd.format.video.nSliceHeight, sliceheight);
- mpeg4pd.format.video.nSliceHeight = sliceheight;
- }
-
- memcpy(&rawpd, rawport->GetPortDefinition(),
- sizeof(OMX_PARAM_PORTDEFINITIONTYPE));
-
- if (rawpd.format.video.nFrameWidth != width)
- rawpd.format.video.nFrameWidth = width;
- if (rawpd.format.video.nFrameHeight != height)
- rawpd.format.video.nFrameHeight = height;
- if (rawpd.format.video.nStride != (OMX_S32)stride)
- rawpd.format.video.nStride = stride;
- if (rawpd.format.video.nSliceHeight != sliceheight)
- rawpd.format.video.nSliceHeight = sliceheight;
-
- rawpd.nBufferSize = (stride * sliceheight * 3) >> 1;
-
- mpeg4port->SetPortDefinition(&mpeg4pd, true);
- rawport->SetPortDefinition(&rawpd, true);
-
- return OMX_ErrorNone;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::__H263ChangePortParamWithCodecData(
- const OMX_U8 *codec_data, OMX_U32 size, PortBase **ports)
-{
- PortH263 *h263port = static_cast<PortH263 *>(ports[INPORT_INDEX]);
- PortVideo *rawport = static_cast<PortVideo *>(ports[OUTPORT_INDEX]);
-
- OMX_PARAM_PORTDEFINITIONTYPE h263pd, rawpd;
-
- unsigned int width, height, stride, sliceheight;
- unsigned int display_width, display_height;
-
- H263HeaderParser h263_header_parser;
- OMX_BOOL result;
- result = h263_header_parser.DecodeH263Header((OMX_U8 *) codec_data,
- (int32 *) &width, (int32 *) &height, (int32 *) &display_width,
- (int32 *) &display_height);
- if(OMX_FALSE ==result)
- return OMX_ErrorBadParameter;
-
- memcpy(&h263pd, h263port->GetPortDefinition(),
- sizeof(OMX_PARAM_PORTDEFINITIONTYPE));
-
- LOGV("width = %lu", width);
- LOGV("height = %lu", height);
- LOGV("nFrameWidth = %lu", h263pd.format.video.nFrameWidth);
- LOGV("nFrameHeight = %lu", h263pd.format.video.nFrameHeight);
- LOGV("nStride = %lu", h263pd.format.video.nStride);
- LOGV("nSliceHeight = %lu", h263pd.format.video.nSliceHeight);
-
-// width = h263pd.format.video.nFrameWidth;
-// height = h263pd.format.video.nFrameHeight;
-
- h263pd.format.video.nFrameWidth = width;
- h263pd.format.video.nFrameHeight = height;
- h263pd.format.video.nStride = width;
- h263pd.format.video.nSliceHeight = height;
-
- stride = width;
- sliceheight = height;
-
- if (h263pd.format.video.nFrameWidth != width) {
- LOGV("%s(): width : %lu != %d", __func__,
- h263pd.format.video.nFrameWidth, width);
- h263pd.format.video.nFrameWidth = width;
- }
- if (h263pd.format.video.nFrameHeight != height) {
- LOGV("%s(): height : %lu != %d", __func__,
- h263pd.format.video.nFrameHeight, height);
- h263pd.format.video.nFrameHeight = height;
- }
- if (h263pd.format.video.nStride != (OMX_S32)stride) {
- LOGV("%s(): stride : %lu != %d", __func__,
- h263pd.format.video.nStride, stride);
- h263pd.format.video.nStride = stride;
- }
- if (h263pd.format.video.nSliceHeight != sliceheight) {
- LOGV("%s(): sliceheight : %ld != %d", __func__,
- h263pd.format.video.nSliceHeight, sliceheight);
- h263pd.format.video.nSliceHeight = sliceheight;
- }
-
- memcpy(&rawpd, rawport->GetPortDefinition(),
- sizeof(OMX_PARAM_PORTDEFINITIONTYPE));
-
- if (rawpd.format.video.nFrameWidth != width)
- rawpd.format.video.nFrameWidth = width;
- if (rawpd.format.video.nFrameHeight != height)
- rawpd.format.video.nFrameHeight = height;
- if (rawpd.format.video.nStride != (OMX_S32)stride)
- rawpd.format.video.nStride = stride;
- if (rawpd.format.video.nSliceHeight != sliceheight)
- rawpd.format.video.nSliceHeight = sliceheight;
-
- rawpd.nBufferSize = (stride * sliceheight * 3) >> 1;
-
- h263port->SetPortDefinition(&h263pd, true);
- rawport->SetPortDefinition(&rawpd, true);
-
- return OMX_ErrorNone;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::ChangePortParamWithCodecData(
- const OMX_U8 *codec_data,
- OMX_U32 size,
- PortBase **ports)
-{
- OMX_ERRORTYPE ret = OMX_ErrorBadParameter;
-
- if (coding_type == OMX_VIDEO_CodingAVC) {
- ret = __AvcChangePortParamWithCodecData(codec_data, size, ports);
- }
- else if (coding_type == OMX_VIDEO_CodingMPEG4) {
- ret = __Mpeg4ChangePortParamWithCodecData(codec_data, size, ports);
- }
- else if (coding_type == OMX_VIDEO_CodingH263) {
- ret = __H263ChangePortParamWithCodecData(codec_data, size, ports);
- }
-
- return ret;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::__AvcChangeVcpWithPortParam(
- MixVideoConfigParams *vcp, PortAvc *port, bool *vcp_changed)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
-
- /* mime type */
- mix_videoconfigparamsdec_set_mime_type(MIX_VIDEOCONFIGPARAMSDEC(vcp),
- "video/x-h264");
-
- return ret;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::__Mpeg4ChangeVcpWithPortParam(
- MixVideoConfigParams *vcp, PortMpeg4 *port, bool *vcp_changed)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
-
- mix_videoconfigparamsdec_set_mime_type(MIX_VIDEOCONFIGPARAMSDEC(vcp),
- "video/mpeg");
- mix_videoconfigparamsdec_mp42_set_mpegversion(
- MIX_VIDEOCONFIGPARAMSDEC_MP42(vcp), 4);
-
- return ret;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::__H263ChangeVcpWithPortParam(
- MixVideoConfigParams *vcp, PortH263 *port, bool *vcp_changed)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
-
- mix_videoconfigparamsdec_set_mime_type(MIX_VIDEOCONFIGPARAMSDEC(vcp),
- "video/mpeg");
- mix_videoconfigparamsdec_mp42_set_mpegversion(
- MIX_VIDEOCONFIGPARAMSDEC_MP42(vcp), 4);
-
- return ret;
-}
-
-OMX_ERRORTYPE MrstPsbComponent::ChangeVcpWithPortParam(
- MixVideoConfigParams *vcp,
- PortVideo *port,
- bool *vcp_changed)
-{
- const OMX_PARAM_PORTDEFINITIONTYPE *pd = port->GetPortDefinition();
- OMX_ERRORTYPE ret;
-
- if (coding_type == OMX_VIDEO_CodingAVC)
- ret = __AvcChangeVcpWithPortParam(vcp,
- static_cast<PortAvc *>(port),
- vcp_changed);
- else if (coding_type == OMX_VIDEO_CodingMPEG4)
- ret = __Mpeg4ChangeVcpWithPortParam(vcp,
- static_cast<PortMpeg4 *>(port),
- vcp_changed);
- else if (coding_type == OMX_VIDEO_CodingH263)
- ret = __H263ChangeVcpWithPortParam(vcp,
- static_cast<PortH263 *>(port),
- vcp_changed);
- else
- ret = OMX_ErrorBadParameter;
-
-
- MixVideoConfigParamsDec *config = MIX_VIDEOCONFIGPARAMSDEC(vcp);
-
- if (config->frame_rate_num != (pd->format.video.xFramerate >> 16)) {
- LOGV("%s(): framerate : %u != %ld", __func__,
- config->frame_rate_num, pd->format.video.xFramerate >> 16);
- mix_videoconfigparamsdec_set_frame_rate(config,
- pd->format.video.xFramerate >> 16,
- 1);
- if (vcp_changed)
- *vcp_changed = true;
- }
-
- if ((config->picture_width != pd->format.video.nFrameWidth) ||
- (config->picture_height != pd->format.video.nFrameHeight)) {
- LOGV("%s(): width : %ld != %ld", __func__,
- config->picture_width, pd->format.video.nFrameWidth);
- LOGV("%s(): height : %ld != %ld", __func__,
- config->picture_height, pd->format.video.nFrameHeight);
-
- mix_videoconfigparamsdec_set_picture_res(config,
- pd->format.video.nFrameWidth,
- pd->format.video.nFrameHeight);
- if (vcp_changed)
- *vcp_changed = true;
- }
-
- if (coding_type == OMX_VIDEO_CodingAVC) {
- if(avcDecodeSettings.nMaxWidth > config->picture_width &&
- avcDecodeSettings.nMaxHeight > config->picture_height) {
- mix_videoconfigparamsdec_set_picture_res(config,
- avcDecodeSettings.nMaxWidth, avcDecodeSettings.nMaxHeight);
- }
- }
-
- /* hard coding */
- mix_videoconfigparamsdec_set_frame_order_mode(
-// MIX_VIDEOCONFIGPARAMSDEC(vcp), MIX_FRAMEORDER_MODE_DECODEORDER);
- MIX_VIDEOCONFIGPARAMSDEC(vcp), MIX_FRAMEORDER_MODE_DISPLAYORDER);
- mix_videoconfigparamsdec_set_buffer_pool_size(
- MIX_VIDEOCONFIGPARAMSDEC(vcp), 8);
-
- if (coding_type == OMX_VIDEO_CodingAVC) {
- mix_videoconfigparamsdec_set_extra_surface_allocation(
- MIX_VIDEOCONFIGPARAMSDEC(vcp), avcDecodeSettings.nMaxNumberOfReferenceFrame);
- } else {
- mix_videoconfigparamsdec_set_extra_surface_allocation(
- MIX_VIDEOCONFIGPARAMSDEC(vcp), 4);
- }
-
- return ret;
-}
-
-/* end of vcp setting helpers */
-
-OMX_ERRORTYPE MrstPsbComponent::ProcessorFlush(OMX_U32 port_index) {
-
- LOGV("port_index = %d Flushed!\n", port_index);
-
- if (port_index == INPORT_INDEX ||
- port_index == OMX_ALL) {
- mix_video_flush( mix);
- }
-
- return OMX_ErrorNone;
-}
-
-void MrstPsbComponent::AvcEncMixBufferCallback(ulong token, uchar *data) {
- MrstPsbComponent *_this = (MrstPsbComponent *) token;
-
- LOGV("AvcEncMixBufferCallback Begin\n");
-
- if(_this) {
- _this->ports[_this->INPORT_INDEX]->ReturnAllRetainedBuffers();
- }
-
- LOGV("AvcEncMixBufferCallback End\n");
-}
-
-/*
- * CModule Interface
- */
-#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
-
-static const char *g_name = (const char *)"OMX.Intel.Mrst.PSB.Dec";
-
-static const char *g_roles[] =
-{
- (const char *)"video_decoder.avc",
- (const char *)"video_decoder.mpeg4",
- (const char *)"video_decoder.h263",
-};
-
-OMX_ERRORTYPE wrs_omxil_cmodule_ops_instantiate(OMX_PTR *instance)
-{
- ComponentBase *cbase;
-
- cbase = new MrstPsbComponent;
- if (!cbase) {
- *instance = NULL;
- return OMX_ErrorInsufficientResources;
- }
-
- *instance = cbase;
- return OMX_ErrorNone;
-}
-
-struct wrs_omxil_cmodule_ops_s cmodule_ops = {
-instantiate:
- wrs_omxil_cmodule_ops_instantiate,
-};
-
-struct wrs_omxil_cmodule_s WRS_OMXIL_CMODULE_SYMBOL = {
-name:
- g_name,
-roles:
- &g_roles[0],
-nr_roles:
- ARRAY_SIZE(g_roles),
-ops:
- &cmodule_ops,
-};
diff --git a/psb-dec/psb.h b/psb-dec/psb.h
deleted file mode 100644
index a21b7d7..0000000
--- a/psb-dec/psb.h
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * psb.h, omx psb component header
- *
- * Copyright (c) 2009-2010 Wind River Systems, Inc.
- *
- * 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 __WRS_OMXIL_INTEL_MRST_PSB
-#define __WRS_OMXIL_INTEL_MRST_PSB
-
-#include <OMX_Core.h>
-#include <OMX_Component.h>
-
-#include <cmodule.h>
-#include <portbase.h>
-#include <componentbase.h>
-#define oscl_memset memset
-class MrstPsbComponent : public ComponentBase
-{
-public:
- /*
- * constructor & destructor
- */
- MrstPsbComponent();
- ~MrstPsbComponent();
-
-private:
- /*
- * component methods & helpers
- */
- /* implement ComponentBase::ComponentAllocatePorts */
- virtual OMX_ERRORTYPE ComponentAllocatePorts(void);
-
- OMX_ERRORTYPE __AllocateAvcPort(OMX_U32 port_index, OMX_DIRTYPE dir);
- OMX_ERRORTYPE __AllocateMpeg4Port(OMX_U32 port_index, OMX_DIRTYPE dir);
- OMX_ERRORTYPE __AllocateH263Port(OMX_U32 port_index, OMX_DIRTYPE dir);
- OMX_ERRORTYPE __AllocateRawPort(OMX_U32 port_index, OMX_DIRTYPE dir);
- OMX_ERRORTYPE __AllocateRawVAPort(OMX_U32 port_index, OMX_DIRTYPE dir);
-
- /* implement ComponentBase::ComponentGet/SetPatameter */
- virtual OMX_ERRORTYPE
- ComponentGetParameter(OMX_INDEXTYPE nParamIndex,
- OMX_PTR pComponentParameterStructure);
- virtual OMX_ERRORTYPE
- ComponentSetParameter(OMX_INDEXTYPE nIndex,
- OMX_PTR pComponentParameterStructure);
-
- /* implement ComponentBase::ComponentGet/SetConfig */
- virtual OMX_ERRORTYPE
- ComponentGetConfig(OMX_INDEXTYPE nIndex,
- OMX_PTR pComponentConfigStructure);
- virtual OMX_ERRORTYPE
- ComponentSetConfig(OMX_INDEXTYPE nIndex,
- OMX_PTR pComponentConfigStructure);
-
- /* implement ComponentBase::Processor[*] */
- virtual OMX_ERRORTYPE ProcessorInit(void); /* Loaded to Idle */
- virtual OMX_ERRORTYPE ProcessorDeinit(void);/* Idle to Loaded */
- virtual OMX_ERRORTYPE ProcessorStart(void); /* Idle to Executing/Pause */
- virtual OMX_ERRORTYPE ProcessorStop(void); /* Executing/Pause to Idle */
- virtual OMX_ERRORTYPE ProcessorPause(void); /* Executing to Pause */
- virtual OMX_ERRORTYPE ProcessorResume(void);/* Pause to Executing */
- virtual OMX_ERRORTYPE ProcessorFlush(OMX_U32 port_index);
- virtual OMX_ERRORTYPE ProcessorProcess(OMX_BUFFERHEADERTYPE ***pBuffers,
- buffer_retain_t *retain,
- OMX_U32 nr_buffers);
-
- /* end of component methods & helpers */
-
- /*
- * vcp setting helpers
- */
- OMX_ERRORTYPE __RawChangePortParamWithVcp(MixVideoConfigParams *vcp,
- PortVideo *port);
- OMX_ERRORTYPE __AvcChangePortParamWithVcp(MixVideoConfigParams *vcp,
- PortAvc *port);
- OMX_ERRORTYPE __Mpeg4ChangePortParamWithVcp(MixVideoConfigParams *vcp,
- PortMpeg4 *port);
- OMX_ERRORTYPE ChangePortParamWithVcp(void);
-
- OMX_ERRORTYPE __AvcChangeVcpWithPortParam(MixVideoConfigParams *vcp,
- PortAvc *port, bool *vcp_changed);
- OMX_ERRORTYPE __Mpeg4ChangeVcpWithPortParam(MixVideoConfigParams *vcp,
- PortMpeg4 *port, bool *vcp_changed);
- OMX_ERRORTYPE __H263ChangeVcpWithPortParam(MixVideoConfigParams *vcp,
- PortH263 *port, bool *vcp_changed);
- OMX_ERRORTYPE ChangeVcpWithPortParam(MixVideoConfigParams *vcp,
- PortVideo *port, bool *vcp_changed);
-
- OMX_ERRORTYPE __AvcChangePortParamWithCodecData(const OMX_U8 *codec_data,
- OMX_U32 size,
- PortBase **ports);
- OMX_ERRORTYPE __Mpeg4ChangePortParamWithCodecData(const OMX_U8 *codec_data,
- OMX_U32 size,
- PortBase **ports);
- OMX_ERRORTYPE __H263ChangePortParamWithCodecData(const OMX_U8 *codec_data,
- OMX_U32 size,
- PortBase **ports);
- OMX_ERRORTYPE ChangePortParamWithCodecData(const OMX_U8 *codec_data,
- OMX_U32 size,
- PortBase **ports);
-
- static void AvcEncMixBufferCallback(ulong token, uchar *data);
-
- /* end of vcp setting helpers */
-
- /* mix video */
- MixVideo *mix;
- MixVideoInitParams *vip;
- MixParams *mvp;
- MixVideoConfigParams *vcp;
- MixDisplayAndroid *display;
- MixBuffer *mixbuffer_in[1];
- MixIOVec *mixiovec_out[1];
-
- OMX_VIDEO_CODINGTYPE coding_type;
- MixCodecMode codec_mode;
-
- OMX_BOOL is_mixvideodec_configured;
-
- OMX_U32 inframe_counter;
- OMX_U32 outframe_counter;
-
- /* for fps */
- OMX_TICKS last_ts;
- float last_fps;
-
- OMX_U8 *avc_enc_buffer;
- OMX_U32 avc_enc_buffer_offset;
- OMX_U32 avc_enc_buffer_length;
- OMX_U32 avc_enc_frame_size_left;
-
- OMX_NALUFORMATSTYPE avcEncNaluFormatType;
- OMX_U32 avcEncIDRPeriod;
- OMX_U32 avcEncPFrames;
-
- OMX_VIDEO_PARAM_INTEL_BITRATETYPE avcEncParamIntelBitrateType;
- OMX_VIDEO_CONFIG_INTEL_BITRATETYPE avcEncConfigIntelBitrateType;
- OMX_VIDEO_CONFIG_NALSIZE avcEncConfigNalSize;
- OMX_VIDEO_CONFIG_INTEL_SLICE_NUMBERS avcEncConfigSliceNumbers;
- OMX_VIDEO_CONFIG_INTEL_AIR avcEncConfigAir;
- OMX_CONFIG_FRAMERATETYPE avcEncFramerate;
-
- OMX_VIDEO_PARAM_INTEL_AVC_DECODE_SETTINGS avcDecodeSettings;
- OMX_U32 avcDecFrameWidth;
- OMX_U32 avcDecFrameHeight;
- OMX_BOOL avcDecGotRes;
-
- /* constant */
- /* ports */
- const static OMX_U32 NR_PORTS = 2;
- const static OMX_U32 INPORT_INDEX = 0;
- const static OMX_U32 OUTPORT_INDEX = 1;
-
- /* default buffer */
- //BZ 1286: change inport buffer number from 256 to 10 to cut down buffering time
- const static OMX_U32 INPORT_AVC_ACTUAL_BUFFER_COUNT = 10;
- const static OMX_U32 INPORT_AVC_MIN_BUFFER_COUNT = 1;
- const static OMX_U32 INPORT_AVC_BUFFER_SIZE = 1382400; //40960;
- const static OMX_U32 OUTPORT_AVC_ACTUAL_BUFFER_COUNT = 10;
- const static OMX_U32 OUTPORT_AVC_MIN_BUFFER_COUNT = 1;
- const static OMX_U32 OUTPORT_AVC_BUFFER_SIZE = 1382400; //480000;
-
- const static OMX_U32 INPORT_RAW_ACTUAL_BUFFER_COUNT = 5; //2;
- const static OMX_U32 INPORT_RAW_MIN_BUFFER_COUNT = 1;
- const static OMX_U32 INPORT_RAW_BUFFER_SIZE = 1382400;
- const static OMX_U32 OUTPORT_RAW_ACTUAL_BUFFER_COUNT = 2;
- const static OMX_U32 OUTPORT_RAW_MIN_BUFFER_COUNT = 1;
- const static OMX_U32 OUTPORT_RAW_BUFFER_SIZE = 1382400;
-
- const static OMX_U32 INPORT_MPEG4_ACTUAL_BUFFER_COUNT = 10;
- const static OMX_U32 INPORT_MPEG4_MIN_BUFFER_COUNT = 1;
-// const static OMX_U32 INPORT_MPEG4_BUFFER_SIZE = 16000;
- const static OMX_U32 INPORT_MPEG4_BUFFER_SIZE = 1382400;
- const static OMX_U32 OUTPORT_MPEG4_ACTUAL_BUFFER_COUNT = 2;
- const static OMX_U32 OUTPORT_MPEG4_MIN_BUFFER_COUNT = 1;
- const static OMX_U32 OUTPORT_MPEG4_BUFFER_SIZE = 1382400;
-
- const static OMX_U32 INPORT_H263_ACTUAL_BUFFER_COUNT = 10;
- const static OMX_U32 INPORT_H263_MIN_BUFFER_COUNT = 1;
- const static OMX_U32 INPORT_H263_BUFFER_SIZE = 1382400;
- const static OMX_U32 OUTPORT_H263_ACTUAL_BUFFER_COUNT = 2;
- const static OMX_U32 OUTPORT_H263_MIN_BUFFER_COUNT = 1;
- const static OMX_U32 OUTPORT_H263_BUFFER_SIZE = 1382400;
-};
-
-#endif /* __WRS_OMXIL_INTEL_MRST_PSB */
diff --git a/psb-dec/vabuffer.h b/psb-dec/vabuffer.h
deleted file mode 100644
index 1b0196c..0000000
--- a/psb-dec/vabuffer.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * vabuffer.h, vabuffer structure header
- *
- * Copyright (c) 2009-2010 Wind River Systems, Inc.
- *
- * 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 __VA_BUFFER_H__
-#define __VA_BUFFER_H__
-
-struct VABuffer
-{
- VASurfaceID surface;
- VADisplay display;
- unsigned int frame_structure;
-};
-
-#endif /* __VA_BUFFER_H__ */
-
diff --git a/sst/Android.mk b/sst/Android.mk
deleted file mode 100644
index ca094a1..0000000
--- a/sst/Android.mk
+++ /dev/null
@@ -1,27 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- sst.cpp
-
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE := libwrs_omxil_intel_mrst_sst
-
-LOCAL_CPPFLAGS :=
-
-LOCAL_LDFLAGS :=
-
-LOCAL_SHARED_LIBRARIES := \
- libwrs_omxil_common \
- liblog \
- libmixcommon \
- libmixaudio
-
-LOCAL_C_INCLUDES := \
- $(TARGET_OUT_HEADERS)/wrs_omxil_core \
- $(TARGET_OUT_HEADERS)/khronos/openmax \
- $(PV_INCLUDES) \
- $(TARGET_OUT_HEADERS)/libmixcommon \
- $(TARGET_OUT_HEADERS)/libmixaudio
-
-include $(BUILD_SHARED_LIBRARY)
diff --git a/sst/ebuild.mk b/sst/ebuild.mk
deleted file mode 100644
index 7886eb6..0000000
--- a/sst/ebuild.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- sst.cpp
-
-LOCAL_MODULE := libwrs_omxil_intel_mrst_sst
-
-LOCAL_CPPFLAGS :=
-
-LOCAL_LDFLAGS :=
-
-LOCAL_SHARED_LIBRARIES := \
- libwrs_omxil_common
-
-LOCAL_C_INCLUDES := \
- $(WRS_OMXIL_CORE_ROOT)/utils/inc \
- $(WRS_OMXIL_CORE_ROOT)/base/inc \
- $(WRS_OMXIL_CORE_ROOT)/core/inc/khronos/openmax/include
-
-include $(BUILD_SHARED_LIBRARY)
diff --git a/sst/sst.cpp b/sst/sst.cpp
deleted file mode 100644
index 9134c8c..0000000
--- a/sst/sst.cpp
+++ /dev/null
@@ -1,1790 +0,0 @@
-/*
- * sst.cpp, omx sst component file
- *
- * Copyright (c) 2009-2010 Wind River Systems, Inc.
- *
- * 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 <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <pthread.h>
-
-#include <OMX_Core.h>
-
-#include <audio_parser.h>
-
-#include <cmodule.h>
-#include <portaudio.h>
-#include <componentbase.h>
-
-//#include <pv_omxcore.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <mixaudio.h>
-#include <mixacpaac.h>
-#include <mixacpmp3.h>
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#include "sst.h"
-
-//#define LOG_NDEBUG 0
-
-#define LOG_TAG "mrst_sst"
-#include <log.h>
-
-/*
- * TEST FEATURE
- * - need to be removed
- */
-#define TEST_USE_AAC_ENCODING_RAW 1 /* 1: RAW, 0: ATDS */
-/* 1:variable, 0:44100,12800,2 */
-#define TEST_USE_AAC_ENCODING_VARIABLE_PARAMETER 1
-
-/*
- * only decode mode
- * 0 : Decode Return
- * 1 : Direct Render
- */
-#define SST_RENDER_MODE_DIRECT_RENDER 1
-
-/*
- * MixAudioStreamCtrl
- */
-
-#define SST_USE_STREAM_CTRL_WORKQUEUE 1
-
-static const char *mix_audio_command_string
-[MixAudioStreamCtrl::MIX_STREAM_RESUME+2] = {
- "MIX_STREAM_START",
- "MIX_STREAM_STOP_DROP",
- "MIX_STREAM_STOP_DRAIN",
- "MIX_STREAM_PAUSE",
- "MIX_STREAM_RESUME",
- "MIX_STREAM_UNKNOWN",
-};
-
-inline static const char *
-get_mix_audio_command_string(MixAudioStreamCtrl::mix_audio_command_t command)
-{
- if (command > MixAudioStreamCtrl::MIX_STREAM_RESUME)
- command = (MixAudioStreamCtrl::mix_audio_command_t)
- (MixAudioStreamCtrl::MIX_STREAM_RESUME+1);
-
- return mix_audio_command_string[command];
-}
-
-MixAudioStreamCtrl::MixAudioStreamCtrl(MixAudio *mix)
-{
- __queue_init(&q);
- pthread_mutex_init(&lock, NULL);
-
- this->mix = mix;
-
- StartWork(true);
-}
-
-MixAudioStreamCtrl::~MixAudioStreamCtrl()
-{
- mix_audio_command_t *temp;
-
- CancelScheduledWork(this);
- StopWork();
-
- while ((temp = PopCommand()))
- free(temp);
-
- pthread_mutex_destroy(&lock);
-}
-
-void MixAudioStreamCtrl::SendCommand(mix_audio_command_t command)
-{
- mix_audio_command_t *copy;
-
- if (command > MIX_STREAM_RESUME)
- return;
-
- copy = (mix_audio_command_t *)malloc(sizeof(*copy));
- if (!copy)
- return;
- *copy = command;
-
- LOGV("send mix audio stream command %s\n",
- get_mix_audio_command_string(command));
-
- pthread_mutex_lock(&lock);
- queue_push_tail(&q, copy);
- pthread_mutex_unlock(&lock);
-
- ScheduleWork();
-}
-
-MixAudioStreamCtrl::mix_audio_command_t *MixAudioStreamCtrl::PopCommand(void)
-{
- mix_audio_command_t *command;
-
- pthread_mutex_lock(&lock);
- command = (mix_audio_command_t *)queue_pop_head(&q);
- pthread_mutex_unlock(&lock);
-
- return command;
-}
-
-void MixAudioStreamCtrl::Work(void)
-{
- mix_audio_command_t *command;
- MIX_RESULT ret;
-
- command = PopCommand();
- if (command) {
- switch ((int)*command) {
- case MIX_STREAM_START:
- usleep(50000);
- ret = mix_audio_start(mix);
- break;
- case MIX_STREAM_STOP_DROP:
- ret = mix_audio_stop_drop(mix);
- break;
- case MIX_STREAM_STOP_DRAIN:
- ret = mix_audio_stop_drain(mix);
- break;
- case MIX_STREAM_PAUSE:
- ret = mix_audio_pause(mix);
- break;
- case MIX_STREAM_RESUME:
- ret = mix_audio_resume(mix);
- break;
- default:
- ret = MIX_RESULT_FAIL;
- LOGE("cannot handle mix audio stream command (%d)", *command);
- }
-
- if (MIX_SUCCEEDED(ret))
- LOGV("done mix audio stream command %s\n",
- get_mix_audio_command_string(*command));
- else
- LOGE("failed mix audio stream command %s (ret : 0x%08x)\n",
- get_mix_audio_command_string(*command), ret);
-
- free(command);
- }
-}
-
-/* end of MixAudioStreamCtrl */
-
-/*
- * constructor & destructor
- */
-MrstSstComponent::MrstSstComponent()
-{
- LOGV("%s(): enter\n", __func__);
-
- LOGV("%s(),%d: exit (ret = void)\n", __func__, __LINE__);
-}
-
-MrstSstComponent::~MrstSstComponent()
-{
- LOGV("%s(): enter\n", __func__);
-
- LOGV("%s(),%d: exit (ret = void)\n", __func__, __LINE__);
-}
-
-/* end of constructor & destructor */
-
-/* core methods & helpers */
-OMX_ERRORTYPE MrstSstComponent::ComponentAllocatePorts(void)
-{
- PortBase **ports;
-
- OMX_U32 codec_port_index, pcm_port_index;
- OMX_DIRTYPE codec_port_dir, pcm_port_dir;
-
- OMX_PORT_PARAM_TYPE portparam;
-
- bool isencoder;
- const char *working_role;
-
- OMX_U32 i;
- OMX_ERRORTYPE ret;
-
- LOGV("%s(): enter\n", __func__);
-
- ports = new PortBase *[NR_PORTS];
- if (!ports)
- return OMX_ErrorInsufficientResources;
-
- this->nr_ports = NR_PORTS;
- this->ports = ports;
-
- working_role = GetWorkingRole();
- if (!strncmp(working_role, "audio_decoder", strlen("audio_decoder")))
- isencoder = false;
- else
- isencoder = true;
-
- if (isencoder) {
- pcm_port_index = INPORT_INDEX;
- codec_port_index = OUTPORT_INDEX;
- pcm_port_dir = OMX_DirInput;
- codec_port_dir = OMX_DirOutput;
- }
- else {
- codec_port_index = INPORT_INDEX;
- pcm_port_index = OUTPORT_INDEX;
- codec_port_dir = OMX_DirInput;
- pcm_port_dir = OMX_DirOutput;
- }
-
- working_role = strpbrk(working_role, ".");
- if (!working_role)
- return OMX_ErrorUndefined;
- working_role++;
-
- if (!strcmp(working_role, "mp3")) {
- ret = __AllocateMp3Port(codec_port_index, codec_port_dir);
- coding_type = OMX_AUDIO_CodingMP3;
- }
- else if(!strcmp(working_role, "aac")) {
- ret = __AllocateAacPort(codec_port_index, codec_port_dir);
- coding_type = OMX_AUDIO_CodingAAC;
- }
- else
- ret = OMX_ErrorUndefined;
-
- if (ret != OMX_ErrorNone)
- goto free_ports;
-
- ret = __AllocatePcmPort(pcm_port_index, pcm_port_dir);
- if (ret != OMX_ErrorNone)
- goto free_codecport;
-
- /* OMX_PORT_PARAM_TYPE */
- memset(&portparam, 0, sizeof(portparam));
- SetTypeHeader(&portparam, sizeof(portparam));
- portparam.nPorts = NR_PORTS;
- portparam.nStartPortNumber = INPORT_INDEX;
-
- memcpy(&this->portparam, &portparam, sizeof(portparam));
- /* end of OMX_PORT_PARAM_TYPE */
-
- codec_mode = isencoder ? MIX_CODING_ENCODE : MIX_CODING_DECODE;
-
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, OMX_ErrorNone);
- return OMX_ErrorNone;
-
-free_codecport:
- delete ports[codec_port_index];
- ports[codec_port_index] = NULL;
-
-free_ports:
- coding_type = OMX_AUDIO_CodingUnused;
-
- delete []ports;
- ports = NULL;
-
- this->ports = NULL;
- this->nr_ports = 0;
-
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-OMX_ERRORTYPE MrstSstComponent::__AllocateMp3Port(OMX_U32 port_index,
- OMX_DIRTYPE dir)
-{
- PortMp3 *mp3port;
-
- OMX_PARAM_PORTDEFINITIONTYPE mp3portdefinition;
- OMX_AUDIO_PARAM_MP3TYPE mp3portparam;
- OMX_U32 i;
-
- LOGV("%s(): enter\n", __func__);
-
- ports[port_index] = new PortMp3;
- if (!ports[port_index]) {
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorInsufficientResources);
- return OMX_ErrorInsufficientResources;
- }
-
- mp3port = static_cast<PortMp3 *>(this->ports[port_index]);
-
- /* MP3 - OMX_PARAM_PORTDEFINITIONTYPE */
- memset(&mp3portdefinition, 0, sizeof(mp3portdefinition));
- SetTypeHeader(&mp3portdefinition, sizeof(mp3portdefinition));
- mp3portdefinition.nPortIndex = port_index;
- mp3portdefinition.eDir = dir;
- if (dir == OMX_DirInput) {
- mp3portdefinition.nBufferCountActual = INPORT_MP3_ACTUAL_BUFFER_COUNT;
- mp3portdefinition.nBufferCountMin = INPORT_MP3_MIN_BUFFER_COUNT;
- mp3portdefinition.nBufferSize = INPORT_MP3_BUFFER_SIZE;
- }
- else {
- mp3portdefinition.nBufferCountActual = OUTPORT_MP3_ACTUAL_BUFFER_COUNT;
- mp3portdefinition.nBufferCountMin = OUTPORT_MP3_MIN_BUFFER_COUNT;
- mp3portdefinition.nBufferSize = OUTPORT_MP3_BUFFER_SIZE;
- }
- mp3portdefinition.bEnabled = OMX_TRUE;
- mp3portdefinition.bPopulated = OMX_FALSE;
- mp3portdefinition.eDomain = OMX_PortDomainAudio;
- mp3portdefinition.format.audio.cMIMEType = (char *)"audio/mpeg";
- mp3portdefinition.format.audio.pNativeRender = NULL;
- mp3portdefinition.format.audio.bFlagErrorConcealment = OMX_FALSE;
- mp3portdefinition.format.audio.eEncoding = OMX_AUDIO_CodingMP3;
- mp3portdefinition.bBuffersContiguous = OMX_FALSE;
- mp3portdefinition.nBufferAlignment = 0;
-
- mp3port->SetPortDefinition(&mp3portdefinition, true);
-
- /* end of MP3 - OMX_PARAM_PORTDEFINITIONTYPE */
-
- /* OMX_AUDIO_PARAM_MP3TYPE */
- memset(&mp3portparam, 0, sizeof(mp3portparam));
- SetTypeHeader(&mp3portparam, sizeof(mp3portparam));
- mp3portparam.nPortIndex = port_index;
- mp3portparam.nChannels = 2;
- mp3portparam.nBitRate = 128000;
- mp3portparam.nSampleRate = 44100;
- mp3portparam.nAudioBandWidth = 0;
- mp3portparam.eChannelMode = OMX_AUDIO_ChannelModeStereo;
- mp3portparam.eFormat = OMX_AUDIO_MP3StreamFormatMP1Layer3;
-
- mp3port->SetPortMp3Param(&mp3portparam, true);
- /* end of OMX_AUDIO_PARAM_MP3TYPE */
-
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, OMX_ErrorNone);
- return OMX_ErrorNone;
-}
-
-OMX_ERRORTYPE MrstSstComponent::__AllocateAacPort(OMX_U32 port_index,
- OMX_DIRTYPE dir)
-{
- PortAac *aacport;
-
- OMX_PARAM_PORTDEFINITIONTYPE aacportdefinition;
- OMX_AUDIO_PARAM_AACPROFILETYPE aacportparam;
- OMX_U32 i;
-
- LOGV("%s(): enter\n", __func__);
-
- ports[port_index] = new PortAac;
- if (!ports[port_index]) {
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorInsufficientResources);
- return OMX_ErrorInsufficientResources;
- }
-
- aacport = static_cast<PortAac *>(this->ports[port_index]);
-
- /* AAC - OMX_PARAM_PORTDEFINITIONTYPE */
- memset(&aacportdefinition, 0, sizeof(aacportdefinition));
- SetTypeHeader(&aacportdefinition, sizeof(aacportdefinition));
- aacportdefinition.nPortIndex = port_index;
- aacportdefinition.eDir = dir;
- if (dir == OMX_DirInput) {
- aacportdefinition.nBufferCountActual = INPORT_AAC_ACTUAL_BUFFER_COUNT;
- aacportdefinition.nBufferCountMin = INPORT_AAC_MIN_BUFFER_COUNT;
- aacportdefinition.nBufferSize = INPORT_AAC_BUFFER_SIZE;
- }
- else {
- aacportdefinition.nBufferCountActual = OUTPORT_AAC_ACTUAL_BUFFER_COUNT;
- aacportdefinition.nBufferCountMin = OUTPORT_AAC_MIN_BUFFER_COUNT;
- aacportdefinition.nBufferSize = OUTPORT_AAC_BUFFER_SIZE;
- }
- aacportdefinition.bEnabled = OMX_TRUE;
- aacportdefinition.bPopulated = OMX_FALSE;
- aacportdefinition.eDomain = OMX_PortDomainAudio;
- aacportdefinition.format.audio.cMIMEType = (char *)"audio/mp4";
- aacportdefinition.format.audio.pNativeRender = NULL;
- aacportdefinition.format.audio.bFlagErrorConcealment = OMX_FALSE;
- aacportdefinition.format.audio.eEncoding = OMX_AUDIO_CodingAAC;
- aacportdefinition.bBuffersContiguous = OMX_FALSE;
- aacportdefinition.nBufferAlignment = 0;
-
- aacport->SetPortDefinition(&aacportdefinition, true);
-
- /* end of AAC - OMX_PARAM_PORTDEFINITIONTYPE */
-
- /* OMX_AUDIO_PARAM_AACPROFILETYPE */
- memset(&aacportparam, 0, sizeof(aacportparam));
- SetTypeHeader(&aacportparam, sizeof(aacportparam));
- aacportparam.nPortIndex = port_index;
- aacportparam.nChannels = 2;
- aacportparam.nBitRate = 128000;
- aacportparam.nSampleRate = 44100;
- aacportparam.nAudioBandWidth = 0;
- aacportparam.nFrameLength = 1024; /* default for LC */
- aacportparam.nAACtools = OMX_AUDIO_AACToolNone;
- aacportparam.nAACERtools = OMX_AUDIO_AACERNone;
- aacportparam.eAACProfile = OMX_AUDIO_AACObjectLC;
- aacportparam.eChannelMode = OMX_AUDIO_ChannelModeStereo;
-
- aacport->SetPortAacParam(&aacportparam, true);
- /* end of OMX_AUDIO_PARAM_AACPROFILETYPE */
-
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, OMX_ErrorNone);
- return OMX_ErrorNone;
-}
-
-OMX_ERRORTYPE MrstSstComponent::__AllocatePcmPort(OMX_U32 port_index,
- OMX_DIRTYPE dir)
-{
- PortPcm *pcmport;
-
- OMX_PARAM_PORTDEFINITIONTYPE pcmportdefinition;
- OMX_AUDIO_PARAM_PCMMODETYPE pcmportparam;
- OMX_U32 i;
-
- LOGV("%s(): enter\n", __func__);
-
- ports[port_index] = new PortPcm;
- if (!ports[port_index]) {
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorInsufficientResources);
- return OMX_ErrorInsufficientResources;
- }
- pcmport = static_cast<PortPcm *>(this->ports[port_index]);
-
- /* PCM - OMX_PARAM_PORTDEFINITIONTYPE */
- memset(&pcmportdefinition, 0, sizeof(pcmportdefinition));
- SetTypeHeader(&pcmportdefinition, sizeof(pcmportdefinition));
- pcmportdefinition.nPortIndex = port_index;
- pcmportdefinition.eDir = dir;
- if (dir == OMX_DirInput) {
- pcmportdefinition.nBufferCountActual = INPORT_PCM_ACTUAL_BUFFER_COUNT;
- pcmportdefinition.nBufferCountMin = INPORT_PCM_MIN_BUFFER_COUNT;
- pcmportdefinition.nBufferSize = INPORT_PCM_BUFFER_SIZE;
- }
- else {
- pcmportdefinition.nBufferCountActual = OUTPORT_PCM_ACTUAL_BUFFER_COUNT;
- pcmportdefinition.nBufferCountMin = OUTPORT_PCM_MIN_BUFFER_COUNT;
- pcmportdefinition.nBufferSize = OUTPORT_PCM_BUFFER_SIZE;
- }
- pcmportdefinition.bEnabled = OMX_TRUE;
- pcmportdefinition.bPopulated = OMX_FALSE;
- pcmportdefinition.eDomain = OMX_PortDomainAudio;
- pcmportdefinition.format.audio.cMIMEType = (char *)"raw";
- pcmportdefinition.format.audio.pNativeRender = NULL;
- pcmportdefinition.format.audio.bFlagErrorConcealment = OMX_FALSE;
- pcmportdefinition.format.audio.eEncoding = OMX_AUDIO_CodingPCM;
- pcmportdefinition.bBuffersContiguous = OMX_FALSE;
- pcmportdefinition.nBufferAlignment = 0;
-
- pcmport->SetPortDefinition(&pcmportdefinition, true);
- /* end of PCM - OMX_PARAM_PORTDEFINITIONTYPE */
-
- /* OMX_AUDIO_PARAM_PCMMODETYPE */
- memset(&pcmportparam, 0, sizeof(pcmportparam));
- SetTypeHeader(&pcmportparam, sizeof(pcmportparam));
- pcmportparam.nPortIndex = port_index;
- pcmportparam.nChannels = 2;
- pcmportparam.eNumData = OMX_NumericalDataUnsigned;
- pcmportparam.eEndian = OMX_EndianLittle;
- pcmportparam.bInterleaved = OMX_FALSE;
- pcmportparam.nBitPerSample = 16;
- pcmportparam.nSamplingRate = 44100;
- pcmportparam.ePCMMode = OMX_AUDIO_PCMModeLinear;
- pcmportparam.eChannelMapping[0] = OMX_AUDIO_ChannelLF;
- pcmportparam.eChannelMapping[1] = OMX_AUDIO_ChannelRF;
-
- pcmport->SetPortPcmParam(&pcmportparam, true);
- /* end of OMX_AUDIO_PARAM_PCMMODETYPE */
-
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, OMX_ErrorNone);
- return OMX_ErrorNone;
-}
-
-/* end of core methods & helpers */
-
-/*
- * component methods & helpers
- */
-/* Get/SetParameter */
-OMX_ERRORTYPE MrstSstComponent::ComponentGetParameter(
- OMX_INDEXTYPE nParamIndex,
- OMX_PTR pComponentParameterStructure)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
-
- LOGV("%s(): enter (index = 0x%08x)\n", __func__, nParamIndex);
-
- switch (nParamIndex) {
- case OMX_IndexParamAudioPortFormat: {
- OMX_AUDIO_PARAM_PORTFORMATTYPE *p =
- (OMX_AUDIO_PARAM_PORTFORMATTYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortAudio *port = NULL;
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortAudio *>(ports[index]);
-
- if (!port) {
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- memcpy(p, port->GetPortAudioParam(), sizeof(*p));
- break;
- }
- case OMX_IndexParamAudioPcm: {
- OMX_AUDIO_PARAM_PCMMODETYPE *p =
- (OMX_AUDIO_PARAM_PCMMODETYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortPcm *port = NULL;
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortPcm *>(ports[index]);
-
- if (!port) {
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- memcpy(p, port->GetPortPcmParam(), sizeof(*p));
- break;
- }
- case OMX_IndexParamAudioMp3: {
- OMX_AUDIO_PARAM_MP3TYPE *p =
- (OMX_AUDIO_PARAM_MP3TYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortMp3 *port = NULL;
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortMp3 *>(ports[index]);
-
- if (!port) {
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- memcpy(p, port->GetPortMp3Param(), sizeof(*p));
- break;
- }
- case OMX_IndexParamAudioAac: {
- OMX_AUDIO_PARAM_AACPROFILETYPE *p =
- (OMX_AUDIO_PARAM_AACPROFILETYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortAac *port = NULL;
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortAac *>(ports[index]);
-
- if (!port) {
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- memcpy(p, port->GetPortAacParam(), sizeof(*p));
- break;
- }
-#if 0
- case (OMX_INDEXTYPE) PV_OMX_COMPONENT_CAPABILITY_TYPE_INDEX: {
- PV_OMXComponentCapabilityFlagsType *p =
- (PV_OMXComponentCapabilityFlagsType *)pComponentParameterStructure;
-
- p->iIsOMXComponentMultiThreaded = OMX_TRUE;
- p->iOMXComponentSupportsExternalInputBufferAlloc = OMX_TRUE;
- p->iOMXComponentSupportsExternalOutputBufferAlloc = OMX_TRUE;
- p->iOMXComponentSupportsMovableInputBuffers = OMX_TRUE;
- p->iOMXComponentUsesNALStartCodes = OMX_TRUE;
- p->iOMXComponentSupportsPartialFrames = OMX_FALSE;
- p->iOMXComponentCanHandleIncompleteFrames = OMX_TRUE;
- p->iOMXComponentUsesFullAVCFrames = OMX_FALSE;
- break;
- }
-#endif
- default:
- ret = OMX_ErrorUnsupportedIndex;
- } /* switch */
-
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-OMX_ERRORTYPE MrstSstComponent::ComponentSetParameter(
- OMX_INDEXTYPE nIndex,
- OMX_PTR pComponentParameterStructure)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
-
- LOGV("%s(): enter (index = 0x%08x)\n", __func__, nIndex);
-
- switch (nIndex) {
- case OMX_IndexParamAudioPortFormat: {
- OMX_AUDIO_PARAM_PORTFORMATTYPE *p =
- (OMX_AUDIO_PARAM_PORTFORMATTYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortAudio *port = NULL;
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortPcm *>(ports[index]);
-
- if (!port) {
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- if (port->IsEnabled()) {
- OMX_STATETYPE state;
-
- CBaseGetState((void *)GetComponentHandle(), &state);
- if (state != OMX_StateLoaded &&
- state != OMX_StateWaitForResources) {
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorIncorrectStateOperation);
- return OMX_ErrorIncorrectStateOperation;
- }
- }
-
- ret = port->SetPortAudioParam(p, false);
- break;
- }
- case OMX_IndexParamAudioPcm: {
- OMX_AUDIO_PARAM_PCMMODETYPE *p =
- (OMX_AUDIO_PARAM_PCMMODETYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortPcm *port = NULL;
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortPcm *>(ports[index]);
-
- if (!port) {
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- if (port->IsEnabled()) {
- OMX_STATETYPE state;
-
- CBaseGetState((void *)GetComponentHandle(), &state);
- if (state != OMX_StateLoaded &&
- state != OMX_StateWaitForResources) {
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorIncorrectStateOperation);
- return OMX_ErrorIncorrectStateOperation;
- }
- }
-
- ret = port->SetPortPcmParam(p, false);
- break;
- }
- case OMX_IndexParamAudioMp3: {
- OMX_AUDIO_PARAM_MP3TYPE *p =
- (OMX_AUDIO_PARAM_MP3TYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortMp3 *port = NULL;
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortMp3 *>(ports[index]);
-
- if (!port) {
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- if (port->IsEnabled()) {
- OMX_STATETYPE state;
-
- CBaseGetState((void *)GetComponentHandle(), &state);
- if (state != OMX_StateLoaded &&
- state != OMX_StateWaitForResources) {
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorIncorrectStateOperation);
- return OMX_ErrorIncorrectStateOperation;
- }
- }
-
- ret = port->SetPortMp3Param(p, false);
- break;
- }
- case OMX_IndexParamAudioAac: {
- OMX_AUDIO_PARAM_AACPROFILETYPE *p =
- (OMX_AUDIO_PARAM_AACPROFILETYPE *)pComponentParameterStructure;
- OMX_U32 index = p->nPortIndex;
- PortAac *port = NULL;
-
- ret = CheckTypeHeader(p, sizeof(*p));
- if (ret != OMX_ErrorNone) {
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
- }
-
- if (index < nr_ports)
- port = static_cast<PortAac *>(ports[index]);
-
- if (!port) {
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorBadPortIndex);
- return OMX_ErrorBadPortIndex;
- }
-
- if (port->IsEnabled()) {
- OMX_STATETYPE state;
-
- CBaseGetState((void *)GetComponentHandle(), &state);
- if (state != OMX_StateLoaded &&
- state != OMX_StateWaitForResources) {
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__,
- OMX_ErrorIncorrectStateOperation);
- return OMX_ErrorIncorrectStateOperation;
- }
- }
-
- ret = port->SetPortAacParam(p, false);
- break;
- }
- default:
- ret = OMX_ErrorUnsupportedIndex;
- } /* switch */
-
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-/* Get/SetConfig */
-OMX_ERRORTYPE MrstSstComponent::ComponentGetConfig(
- OMX_INDEXTYPE nIndex,
- OMX_PTR pComponentConfigStructure)
-{
- OMX_ERRORTYPE ret = OMX_ErrorUnsupportedIndex;
- LOGV("%s(): enter\n", __func__);
-
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-OMX_ERRORTYPE MrstSstComponent::ComponentSetConfig(
- OMX_INDEXTYPE nParamIndex,
- OMX_PTR pComponentConfigStructure)
-{
- OMX_ERRORTYPE ret = OMX_ErrorUnsupportedIndex;
- LOGV("%s(): enter\n", __func__);
-
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-/* implement ComponentBase::Processor[*] */
-OMX_ERRORTYPE MrstSstComponent::ProcessorInit(void)
-{
- MixAudio *mix;
- MixAudioConfigParams *acp;
- bool acp_changed;
- MixIOVec *mixio_in, *mixio_out;
- OMX_ERRORTYPE oret;
- MIX_RESULT mret;
-
- LOGV("%s(): enter\n", __func__);
-
- g_type_init();
-
- mix = mix_audio_new();
- if (!mix) {
- LOGE("%s(),%d: exit, mix_audio_new failed", __func__, __LINE__);
- goto error_out;
- }
-
- if (coding_type == OMX_AUDIO_CodingMP3) {
- MixAudioConfigParamsMP3 *acp_mp3 = mix_acp_mp3_new();
- if (!acp_mp3) {
- LOGE("%s(),%d: exit, mix_acp_mp3_new failed", __func__, __LINE__);
- goto free_mix;
- }
- acp = MIX_AUDIOCONFIGPARAMS(acp_mp3);
- }
- else if (coding_type == OMX_AUDIO_CodingAAC) {
- MixAudioConfigParamsAAC *acp_aac = mix_acp_aac_new();
- if (!acp_aac) {
- LOGE("%s(),%d: exit, mix_acp_aac_new failed", __func__, __LINE__);
- goto free_mix;
- }
- acp = MIX_AUDIOCONFIGPARAMS(acp_aac);
- }
- else {
- LOGE("%s(),%d: exit, unkown role (ret == 0x%08x)\n",
- __func__, __LINE__, OMX_ErrorInvalidState);
- goto free_mix;
- }
-
- if (codec_mode == MIX_CODING_DECODE) {
-#if SST_RENDER_MODE_DIRECT_RENDER
- MIX_ACP_DECODEMODE(acp) = MIX_DECODE_DIRECTRENDER;
-#else
- MIX_ACP_DECODEMODE(acp) = MIX_DECODE_DECODERETURN;
-#endif
- oret = ChangeAcpWithPortParam(acp, ports[INPORT_INDEX], &acp_changed);
- if (oret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit, ChangeAcpWithPortParam failed "
- "(ret == 0x%08x)\n", __func__, __LINE__, oret);
- goto free_acp;
- }
- }
- else if (codec_mode == MIX_CODING_ENCODE) {
- MIX_ACP_DECODEMODE(acp) = MIX_DECODE_NULL;
- oret = ChangeAcpWithPortParam(acp, ports[OUTPORT_INDEX], &acp_changed);
- if (oret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit, ChangeAcpWithPortParam failed "
- "(ret == 0x%08x)\n", __func__, __LINE__, oret);
- goto free_acp;
- }
- }
-
- mret = mix_acp_set_streamname(acp, GetWorkingRole());
- if (!MIX_SUCCEEDED(mret)) {
- LOGE("%s(),%d: exit, mix_acp_set_streamname failed (ret == 0x%08x)",
- __func__, __LINE__, mret);
- goto free_acp;
- }
-
- mret = mix_audio_initialize(mix, codec_mode, NULL, NULL);
- if (!(MIX_SUCCEEDED(mret))) {
- LOGE("%s(),%d: exit, mix_audio_initialize failed (ret == 0x%08x)",
- __func__, __LINE__, mret);
- goto free_acp;
- }
- LOGV("%s(): mix audio initialized", __func__);
-
- LOGV("%s: call mix_audio_configure() with the following acp\n",
- __func__);
- LOGV("%s: decode mode : %d\n", __func__, acp->decode_mode);
- LOGV("%s: stream name : %s\n", __func__, acp->stream_name);
- LOGV("%s: nr of channels : %d\n", __func__, MIX_ACP_NUM_CHANNELS(acp));
- LOGV("%s: bitrate : %d\n", __func__, MIX_ACP_BITRATE(acp));
- LOGV("%s: samplerate : %d\n", __func__, MIX_ACP_SAMPLE_FREQ(acp));
- if (coding_type == OMX_AUDIO_CodingMP3) {
- LOGV("%s: format : %d\n", __func__,
- MIX_ACP_MP3_MPEG_FORMAT(acp));
- LOGV("%s: layer : %d\n", __func__,
- MIX_ACP_MP3_MPEG_LAYER(acp));
- LOGV("%s: crc : %d\n", __func__, MIX_ACP_MP3_CRC(acp));
- }
- else if (coding_type == OMX_AUDIO_CodingAAC) {
- LOGV("%s: aot : %d", __func__,
- mix_acp_aac_get_aot(MIX_AUDIOCONFIGPARAMSAAC(acp)));
- LOGV("%s: aac profile : %d", __func__,
- mix_acp_aac_get_aac_profile(MIX_AUDIOCONFIGPARAMSAAC(acp)));
- LOGV("%s: MPEG id : %d", __func__,
- mix_acp_aac_get_mpeg_id(MIX_AUDIOCONFIGPARAMSAAC(acp)));
- LOGV("%s: bitstream format : %d", __func__,
- mix_acp_aac_get_bit_stream_format(MIX_AUDIOCONFIGPARAMSAAC(acp)));
- LOGV("%s: bitrate type : %d", __func__,
- mix_acp_aac_get_bit_rate_type(MIX_AUDIOCONFIGPARAMSAAC(acp)));
- }
-
- mret = mix_audio_configure(mix, acp, NULL);
- if (!MIX_SUCCEEDED(mret)) {
- LOGE("%s(),%d: exit, mix_audio_configure failed (ret == 0x%08x)",
- __func__, __LINE__, mret);
- goto deinitialize_mix;
- }
- LOGV("%s(): mix audio configured", __func__);
-
-#if SST_USE_STREAM_CTRL_WORKQUEUE
- if ((MIX_ACP_DECODEMODE(acp) == MIX_DECODE_DIRECTRENDER) ||
- (MIX_ACP_DECODEMODE(acp) == MIX_DECODE_NULL)) {
- mix_stream_ctrl = new MixAudioStreamCtrl(mix);
- if (!mix_stream_ctrl) {
- LOGE("%s(),%d: exit, failed to new MixAudioStreamCtrl",
- __func__, __LINE__);
- goto deinitialize_mix;
- }
- }
-#endif
-
- mixio_in = (MixIOVec *)malloc(sizeof(MixIOVec));
- if (!mixio_in) {
- LOGE("%s(),%d: exit, failed to allocate mbuffer (ret == 0x%08x)",
- __func__, __LINE__, mret);
- goto deinitialize_mix;
- }
-
- mixio_out = (MixIOVec *)malloc(sizeof(MixIOVec));
- if (!mixio_out) {
- LOGE("%s(),%d: exit, failed to allocate mbuffer (ret == 0x%08x)",
- __func__, __LINE__, mret);
- goto free_mixio_in;
- }
-
- this->mix = mix;
- this->acp = acp;
- this->mixio_in = mixio_in;
- this->mixio_out = mixio_out;
-
- LOGV("%s(),%d: exit, done\n", __func__, __LINE__);
- return OMX_ErrorNone;
-
-free_mixio_in:
- free(mixio_in);
-
-deinitialize_mix:
- mix_audio_deinitialize(mix);
-
-free_acp:
- mix_acp_unref(acp);
-
-free_mix:
- mix_audio_unref(mix);
-
-error_out:
- LOGV("%s(),%d: exit, (ret = 0x%08x)\n", __func__, __LINE__, oret);
- return OMX_ErrorUndefined;
-}
-
-OMX_ERRORTYPE MrstSstComponent::ProcessorDeinit(void)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
- LOGV("%s(): enter\n", __func__);
-
-#if SST_USE_STREAM_CTRL_WORKQUEUE
- if ((MIX_ACP_DECODEMODE(acp) == MIX_DECODE_DIRECTRENDER) ||
- (MIX_ACP_DECODEMODE(acp) == MIX_DECODE_NULL))
- delete mix_stream_ctrl;
-#endif
-
- if ((MIX_ACP_DECODEMODE(acp) == MIX_DECODE_DIRECTRENDER) ||
- (MIX_ACP_DECODEMODE(acp) == MIX_DECODE_NULL))
- mix_audio_stop_drop(mix);
-
- mix_audio_deinitialize(mix);
- LOGV("%s(): mix audio deinitialized", __func__);
-
- mix_acp_unref(acp);
- mix_audio_unref(mix);
-
- free(mixio_in);
- free(mixio_out);
-
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-OMX_ERRORTYPE MrstSstComponent::ProcessorStart(void)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
- LOGV("%s(): enter\n", __func__);
-
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-OMX_ERRORTYPE MrstSstComponent::ProcessorStop(void)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
- LOGV("%s(): enter\n", __func__);
-
- if ((MIX_ACP_DECODEMODE(acp) == MIX_DECODE_DIRECTRENDER) ||
- (MIX_ACP_DECODEMODE(acp) == MIX_DECODE_NULL))
- mix_audio_stop_drop(mix);
-
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-OMX_ERRORTYPE MrstSstComponent::ProcessorPause(void)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
- LOGV("%s(): enter\n", __func__);
-
- //if ((MIX_ACP_DECODEMODE(acp) == MIX_DECODE_DIRECTRENDER) ||
- // (MIX_ACP_DECODEMODE(acp) == MIX_DECODE_NULL))
- // mix_audio_pause(mix)
-
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-OMX_ERRORTYPE MrstSstComponent::ProcessorResume(void)
-{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
- LOGV("%s(): enter\n", __func__);
-
- //if ((MIX_ACP_DECODEMODE(acp) == MIX_DECODE_DIRECTRENDER) ||
- // (MIX_ACP_DECODEMODE(acp) == MIX_DECODE_NULL))
- // mix_audio_resume(mix);
-
- LOGV("%s(),%d: exit (ret = 0x%08x)\n", __func__, __LINE__, ret);
- return ret;
-}
-
-/* implement ComponentBase::ProcessorProcess */
-OMX_ERRORTYPE MrstSstComponent::ProcessorProcess(
- OMX_BUFFERHEADERTYPE ***pBuffers,
- buffer_retain_t *retain,
- OMX_U32 nr_buffers)
-{
- OMX_U64 consumed = 0, produced = 0;
- OMX_U32 outfilledlen = 0;
- OMX_S64 outtimestamp = 0;
- OMX_U32 outflags = 0;
-
- MixStreamState mstream_state = MIX_STREAM_NULL;
- MixState mstate;
- bool acp_changed = false;
-
- OMX_ERRORTYPE oret = OMX_ErrorNone;
- MIX_RESULT mret;
-
- LOGV("%s(): enter\n", __func__);
-
-#if !LOG_NDEBUG
- DumpBuffer(*pBuffers[INPORT_INDEX], false);
-#endif
-
- LOGV_IF((*pBuffers[INPORT_INDEX])->nFlags & OMX_BUFFERFLAG_EOS,
- "%s(),%d: got OMX_BUFFERFLAG_EOS\n", __func__, __LINE__);
-
- if (!(*pBuffers[INPORT_INDEX])->nFilledLen) {
- LOGV("%s(),%d: exit, input buffer's nFilledLen is zero (ret = void)\n",
- __func__, __LINE__);
- goto out;
- }
-
- mixio_in->data = (*pBuffers[INPORT_INDEX])->pBuffer +
- (*pBuffers[INPORT_INDEX])->nOffset;
- mixio_in->data_size = (*pBuffers[INPORT_INDEX])->nFilledLen;
- mixio_in->buffer_size = (*pBuffers[INPORT_INDEX])->nAllocLen;
-
- mixio_out->data = (*pBuffers[OUTPORT_INDEX])->pBuffer +
- (*pBuffers[OUTPORT_INDEX])->nOffset;
- mixio_out->data_size = 0;
- mixio_out->buffer_size = (*pBuffers[OUTPORT_INDEX])->nAllocLen;
-
- if (codec_mode == MIX_CODING_DECODE) {
- if (((coding_type == OMX_AUDIO_CodingMP3) &&
- ((*pBuffers[INPORT_INDEX])->nFlags & OMX_BUFFERFLAG_SYNCFRAME))
- ||
- ((coding_type == OMX_AUDIO_CodingAAC) &&
- ((*pBuffers[INPORT_INDEX])->nFlags & OMX_BUFFERFLAG_CODECCONFIG))) {
-
- oret = ChangeAcpWithConfigHeader(mixio_in->data,
- &acp_changed);
- if (oret != OMX_ErrorNone) {
- LOGE("%s(),%d: exit, ret == 0x%08x\n", __func__, __LINE__,
- oret);
- goto out;
- }
- }
-
- /*
- * reconfigure acp with parsed parameter
- * 1. if started, stop
- * 2. reset mix audio
- * 3. configure
- */
- if (acp_changed) {
- mix_audio_get_state(mix, &mstate);
- if (mstate == MIX_STATE_CONFIGURED) {
- if ((MIX_ACP_DECODEMODE(acp) == MIX_DECODE_DIRECTRENDER) ||
- (MIX_ACP_DECODEMODE(acp) == MIX_DECODE_NULL)) {
- mix_audio_get_stream_state(mix, &mstream_state);
- if (mstream_state == MIX_STREAM_PLAYING)
- mix_audio_stop_drop(mix);
- }
- mix_audio_deinitialize(mix);
- mix_audio_initialize(mix, codec_mode, NULL, NULL);
- }
-
- mret = mix_audio_configure(mix, acp, NULL);
- if (!MIX_SUCCEEDED(mret)) {
- LOGE("%s(),%d: exit, mix_audio_configure failed "
- "(ret == 0x%08x)", __func__, __LINE__, mret);
- oret = OMX_ErrorUndefined;
- goto out;
- }
- LOGV("%s(): mix audio configured", __func__);
-
- /*
- * port reconfigure
- */
- ChangePortParamWithAcp();
- goto out;
- }
- }
- else {
- if (coding_type == OMX_AUDIO_CodingAAC) {
-#if TEST_USE_AAC_ENCODING_RAW
- if (codecdata) {
- memcpy((*pBuffers[OUTPORT_INDEX])->pBuffer, codecdata, 2);
-
- free(codecdata);
- codecdata = NULL;
-
- outfilledlen = 2;
- outflags |=
- OMX_BUFFERFLAG_CODECCONFIG | OMX_BUFFERFLAG_ENDOFFRAME;
-
- retain[INPORT_INDEX] = BUFFER_RETAIN_GETAGAIN;
- goto out;
- }
-#endif
- }
- }
-
- if ((MIX_ACP_DECODEMODE(acp) == MIX_DECODE_DIRECTRENDER) ||
- (MIX_ACP_DECODEMODE(acp) == MIX_DECODE_NULL)) {
- mix_audio_get_stream_state(mix, &mstream_state);
- if (mstream_state != MIX_STREAM_PLAYING) {
-#if SST_USE_STREAM_CTRL_WORKQUEUE
- if ((MIX_ACP_DECODEMODE(acp) == MIX_DECODE_DIRECTRENDER) ||
- (MIX_ACP_DECODEMODE(acp) == MIX_DECODE_NULL))
- mix_stream_ctrl->SendCommand(
- MixAudioStreamCtrl::MIX_STREAM_START);
-#else
- LOGV("%s(): mix current stream state = %d, call mix_audio_start\n",
- __func__, mstream_state);
- mret = mix_audio_start(mix);
- if (!MIX_SUCCEEDED(mret)) {
- LOGE("%s(),%d: faild to mix_audio_start (ret == 0x%08x)",
- __func__, __LINE__, mret);
- oret = OMX_ErrorUndefined;
- goto out;
- }
-#endif
- }
- }
-
- if (codec_mode == MIX_CODING_DECODE) {
- if ((*pBuffers[INPORT_INDEX])->nFlags & OMX_BUFFERFLAG_CODECCONFIG) {
- retain[OUTPORT_INDEX] = BUFFER_RETAIN_GETAGAIN;
- goto out;
- }
-
- //LOGV("%s(): call mix_audio_decode()\n", __func__);
- mret = mix_audio_decode(mix,
- (const MixIOVec *)mixio_in, 1, &consumed,
- mixio_out, 1);
- if (!MIX_SUCCEEDED(mret)) {
- LOGE("%s(), %d: exit, mix_audio_decode failed (ret == 0x%08x)",
- __func__, __LINE__, mret);
- oret = OMX_ErrorUndefined;
- goto out;
- }
- produced = mixio_out->data_size;
- //LOGV("%s(): returned from mix_audio_decode()\n", __func__);
- }
- else {
- //LOGV("%s(): call mix_audio_capture_encode()\n", __func__);
- mret = mix_audio_capture_encode(mix, mixio_out, 1);
- if (!MIX_SUCCEEDED(mret)) {
- LOGE("%s(), %d: exit, mix_audio_decode failed (ret == 0x%08x)",
- __func__, __LINE__, mret);
- oret = OMX_ErrorUndefined;
- goto out;
- }
- //LOGV("%s(): returned from mix_audio_capture_encode()\n", __func__);
-
- outflags |= OMX_BUFFERFLAG_ENDOFFRAME;
-
- /* direct encode workaround */
- consumed = mixio_in->data_size;
- produced = mixio_out->data_size;
-
-#if 0
- mix_audio_get_timestamp(mix, (OMX_U64 *)&outtimestamp);
- outtimestamp *= 1000;
- buffers[INPORT_INDEX]->nTimeStamp = outtimestamp;
-#endif
- }
-
- outfilledlen = produced;
- LOGV("%s(): %lu bytes produced\n", __func__, outfilledlen);
-
- (*pBuffers[INPORT_INDEX])->nFilledLen -= (OMX_U32)consumed;
- if ((*pBuffers[INPORT_INDEX])->nFilledLen) {
- LOGV("%s(): input buffer NOT fully consumed %lu bytes consumed\n",
- __func__, (OMX_U32)consumed);
-
- if (!consumed && !produced) {
- LOGV("%s(): just return\n", __func__);
- goto out;
- }
-
- LOGV("%s(): %lu bytes remained, waits for next turn\n",
- __func__, (*pBuffers[INPORT_INDEX])->nFilledLen);
-
- (*pBuffers[INPORT_INDEX])->nOffset += (OMX_U32)consumed;
- retain[INPORT_INDEX] = BUFFER_RETAIN_GETAGAIN;
- /* FIXME */
- outtimestamp = (*pBuffers[INPORT_INDEX])->nTimeStamp;
- }
- else {
- (*pBuffers[INPORT_INDEX])->nOffset = 0;
- outtimestamp = (*pBuffers[INPORT_INDEX])->nTimeStamp;
-
- LOGV("%s(): %lu bytes fully consumed\n", __func__,
- (OMX_U32)consumed);
- }
-
-out:
- (*pBuffers[OUTPORT_INDEX])->nFilledLen = outfilledlen;
- (*pBuffers[OUTPORT_INDEX])->nTimeStamp = outtimestamp;
- (*pBuffers[OUTPORT_INDEX])->nFlags = outflags;
-
-#if !LOG_NDEBUG
- if (retain[OUTPORT_INDEX] == BUFFER_RETAIN_NOT_RETAIN)
- DumpBuffer(*pBuffers[OUTPORT_INDEX], false);
-#endif
-
- LOGV("%s(),%d: exit, done\n", __func__, __LINE__);
-
- return oret;
-}
-
-/* end of implement ComponentBase::Processor[*] */
-
-/* end of component methods & helpers */
-
-/*
- * acp setting helpers
- */
-
-static inline OMX_ERRORTYPE __Mp3ChangeAcp(MixAudioConfigParams *acp,
- bool *acp_changed,
- int channel, int samplingrate,
- int bitrate,
- int version, int layer, int crc)
-{
- if (!acp_changed)
- return OMX_ErrorBadParameter;
-
- if ((MIX_ACP_NUM_CHANNELS(acp) != channel) ||
- /* mix_audio doesn't care bitrate change */
- //(MIX_ACP_BITRATE(acp) != bitrate) ||
- (MIX_ACP_SAMPLE_FREQ(acp) != samplingrate) ||
- (MIX_ACP_MP3_CRC(acp) != crc) ||
- (MIX_ACP_MP3_MPEG_FORMAT(acp) != version) ||
- (MIX_ACP_MP3_MPEG_LAYER(acp) != layer)) {
-
- *acp_changed = true;
-
- LOGV_IF(MIX_ACP_NUM_CHANNELS(acp) != channel,
- "%s(): channel : %d != %d\n", __func__,
- MIX_ACP_NUM_CHANNELS(acp), channel);
- LOGV_IF(MIX_ACP_BITRATE(acp) != bitrate,
- "%s(): bitrate : %d != %d\n", __func__,
- MIX_ACP_BITRATE(acp), bitrate);
- LOGV_IF(MIX_ACP_SAMPLE_FREQ(acp) != samplingrate,
- "%s(): frequency : %d != %d\n", __func__,
- MIX_ACP_SAMPLE_FREQ(acp), samplingrate);
- LOGV_IF(MIX_ACP_MP3_CRC(acp) != crc,
- "%s(): crc : %d != %d\n", __func__, MIX_ACP_MP3_CRC(acp), crc);
- LOGV_IF(MIX_ACP_MP3_MPEG_FORMAT(acp) != version,
- "%s(): version : %d != %d\n", __func__,
- MIX_ACP_MP3_MPEG_FORMAT(acp), version);
- LOGV_IF(MIX_ACP_MP3_MPEG_LAYER(acp) != layer,
- "%s(): layer : %d != %d\n", __func__,
- MIX_ACP_MP3_MPEG_LAYER(acp), layer);
-
- MIX_ACP_NUM_CHANNELS(acp) = channel;
- MIX_ACP_BITRATE(acp) = bitrate;
- MIX_ACP_SAMPLE_FREQ(acp) = samplingrate;
-
- MIX_ACP_MP3_CRC(acp) = crc;
- MIX_ACP_MP3_MPEG_FORMAT(acp) = version;
- MIX_ACP_MP3_MPEG_LAYER(acp) = layer;
-
- LOGV("%s(): mp3 configration parameter has been changed\n", __func__);
- LOGV("%s(): format : %d\n", __func__, MIX_ACP_MP3_MPEG_FORMAT(acp));
- LOGV("%s(): layer : %d\n", __func__, MIX_ACP_MP3_MPEG_LAYER(acp));
- LOGV("%s(): crc : %d\n", __func__, MIX_ACP_MP3_CRC(acp));
- LOGV("%s(): frequency : %d\n", __func__, MIX_ACP_SAMPLE_FREQ(acp));
- LOGV("%s(): bitrate : %d\n", __func__, MIX_ACP_BITRATE(acp));
- LOGV("%s(): channel : %d\n", __func__, MIX_ACP_NUM_CHANNELS(acp));
- }
-
- mix_acp_set_op_align(acp, MIX_ACP_OUTPUT_ALIGN_LSB);
- mix_acp_set_bps(acp, MIX_ACP_BPS_16);
-
- return OMX_ErrorNone;
-}
-
-static inline OMX_ERRORTYPE __AacChangeAcp(MixAudioConfigParams *acp,
- bool *acp_changed,
- int channel, int frequency,
- int bitrate, int aot)
-{
- if (!acp_changed)
- return OMX_ErrorBadParameter;
-
- if ((MIX_ACP_NUM_CHANNELS(acp) != channel) ||
- (MIX_ACP_SAMPLE_FREQ(acp) != frequency) ||
- (mix_acp_aac_get_aot(MIX_AUDIOCONFIGPARAMSAAC(acp)) !=
- (unsigned)aot) ||
- (mix_acp_aac_get_aac_profile(MIX_AUDIOCONFIGPARAMSAAC(acp)) !=
- (aot - 1))) {
-
- *acp_changed = true;
-
- LOGV_IF("%s(): channel : %d != %d\n", __func__,
- MIX_ACP_NUM_CHANNELS(acp), channel);
- LOGV_IF("%s(): samplingrate : %d != %d\n", __func__,
- MIX_ACP_SAMPLE_FREQ(acp), frequency);
- LOGV_IF("%s(): aot : %d != %d\n", __func__,
- mix_acp_aac_get_aot(MIX_AUDIOCONFIGPARAMSAAC(acp)), aot);
- LOGV_IF("%s(): profile : %d != %d\n", __func__,
- mix_acp_aac_get_aac_profile(MIX_AUDIOCONFIGPARAMSAAC(acp)),
- (aot - 1));
-
- MIX_ACP_NUM_CHANNELS(acp) = channel;
- MIX_ACP_SAMPLE_FREQ(acp) = frequency;
- MIX_ACP_BITRATE(acp) = bitrate;
-
- MIX_ACP_AAC_SAMPLE_RATE(acp) = frequency;
- MIX_ACP_AAC_CHANNELS(acp) = channel;
-
- /* 1:Main, 2:LC, 3:SSR, 4:SBR */
- mix_acp_aac_set_aot(MIX_AUDIOCONFIGPARAMSAAC(acp), aot);
- /* 0:Main, 1:LC, 2:SSR, 3:SBR */
- mix_acp_aac_set_aac_profile(MIX_AUDIOCONFIGPARAMSAAC(acp),
- (MixAACProfile)(aot - 1));
-
- LOGV("%s(): audio configration parameter has been chagned\n",
- __func__);
- LOGV("%s(): aot : %d\n", __func__,
- mix_acp_aac_get_aot(MIX_AUDIOCONFIGPARAMSAAC(acp)));
- LOGV("%s(): frequency : %d\n", __func__, MIX_ACP_SAMPLE_FREQ(acp));
- LOGV("%s(): channel : %d\n", __func__, MIX_ACP_NUM_CHANNELS(acp));
- }
-
- mix_acp_aac_set_mpeg_id(MIX_AUDIOCONFIGPARAMSAAC(acp), MIX_AAC_MPEG_4_ID);
- MIX_ACP_AAC_CRC(acp) = 0; /* 0:disabled, 1:enabled */
- /* 0:CBR, 1:VBR */
- mix_acp_aac_set_bit_rate_type(MIX_AUDIOCONFIGPARAMSAAC(acp),
- (MixAACBitrateType)0);
-#if TEST_USE_AAC_ENCODING_RAW
- mix_acp_aac_set_bit_stream_format(MIX_AUDIOCONFIGPARAMSAAC(acp),
- MIX_AAC_BS_RAW);
-#else /* encoding: adts, decoding:raw */
- if (MIX_ACP_DECODEMODE(acp) != MIX_DECODE_NULL) /* decoding */
- mix_acp_aac_set_bit_stream_format(MIX_AUDIOCONFIGPARAMSAAC(acp),
- MIX_AAC_BS_RAW);
- else /* encoding */
- mix_acp_aac_set_bit_stream_format(MIX_AUDIOCONFIGPARAMSAAC(acp),
- MIX_AAC_BS_ADTS);
-#endif
-
- mix_acp_set_op_align(acp, MIX_ACP_OUTPUT_ALIGN_LSB);
- mix_acp_set_bps(acp, MIX_ACP_BPS_16);
-
- return OMX_ErrorNone;
-}
-
-OMX_ERRORTYPE MrstSstComponent::__Mp3ChangeAcpWithConfigHeader(
- const unsigned char *buffer, bool *acp_changed)
-{
- int version, layer, crc, bitrate, samplingrate, channel,
- mode_extension, frame_length, frame_duration;
- int ret;
-
- ret = mp3_header_parse(buffer,
- &version, &layer,
- &crc, &bitrate,
- &samplingrate, &channel,
- &mode_extension, &frame_length, &frame_duration);
- if (ret)
- return OMX_ErrorBadParameter;
-
- if (version == MP3_HEADER_VERSION_1)
- version = 1;
- else if ((version == MP3_HEADER_VERSION_2) ||
- (version == MP3_HEADER_VERSION_25))
- version = 2;
- else
- return OMX_ErrorUndefined;
-
- if (layer == MP3_HEADER_LAYER_1)
- layer = 1;
- else if (layer == MP3_HEADER_LAYER_2)
- layer = 2;
- else if (layer == MP3_HEADER_LAYER_3)
- layer = 3;
- else
- return OMX_ErrorUndefined;
-
- if (crc == MP3_HEADER_CRC_PROTECTED)
- crc = 1;
- else if (crc == MP3_HEADER_NOT_PROTECTED)
- crc = 0;
- else
- return OMX_ErrorUndefined;
-
- if ((channel == MP3_HEADER_STEREO) ||
- (channel == MP3_HEADER_JOINT_STEREO) ||
- (channel == MP3_HEADER_DUAL_CHANNEL))
- channel = 2;
- else if (channel == MP3_HEADER_SINGLE_CHANNEL)
- channel = 1;
- else
- return OMX_ErrorUndefined;
-
- return __Mp3ChangeAcp(acp, acp_changed,
- channel, samplingrate, bitrate,
- version, layer, crc);
-}
-
-OMX_ERRORTYPE MrstSstComponent::__AacChangeAcpWithConfigHeader(
- const unsigned char *buffer, bool *acp_changed)
-{
- int aot, frequency, channel;
- int ret;
- OMX_ERRORTYPE oret;
-
- ret = audio_specific_config_parse(buffer,
- &aot, &frequency, &channel);
- if (ret)
- return OMX_ErrorBadParameter;
-
- if (aot < 1 || aot > 4)
- return OMX_ErrorUndefined;
-
- oret = __AacChangeAcp(acp, acp_changed, channel, frequency, 128000, aot);
- if (oret != OMX_ErrorNone) {
- LOGE("%s(): __AacChangAcp() failed (ret : 0x%08x)\n", __func__, oret);
- return oret;
- }
-
- return OMX_ErrorNone;
-}
-
-OMX_ERRORTYPE MrstSstComponent::ChangeAcpWithConfigHeader(
- const unsigned char *buffer,
- bool *acp_changed)
-{
- OMX_ERRORTYPE ret;
-
- if (coding_type == OMX_AUDIO_CodingMP3)
- ret = __Mp3ChangeAcpWithConfigHeader(buffer, acp_changed);
- else if (coding_type == OMX_AUDIO_CodingAAC)
- ret = __AacChangeAcpWithConfigHeader(buffer, acp_changed);
- else
- return OMX_ErrorBadParameter;
-
- if (ret != OMX_ErrorNone)
- return ret;
-
- return OMX_ErrorNone;
-}
-
-OMX_ERRORTYPE MrstSstComponent::__Mp3ChangeAcpWithPortParam(
- MixAudioConfigParams *acp, PortMp3 *port, bool *acp_changed)
-{
- OMX_AUDIO_PARAM_MP3TYPE p;
- int format;
- OMX_ERRORTYPE ret;
-
- memcpy(&p, port->GetPortMp3Param(), sizeof(OMX_AUDIO_PARAM_MP3TYPE));
-
- ret = ComponentBase::CheckTypeHeader(&p, sizeof(p));
- if (ret != OMX_ErrorNone)
- return ret;
-
- LOGV("%s(): eFormat = %d\n", __func__, p.eFormat);
- LOGV("%s(): nBitRate = %lu\n", __func__, p.nBitRate);
- LOGV("%s(): nSampleRate = %lu\n", __func__, p.nSampleRate);
- LOGV("%s(): nChannels = %lu\n", __func__, p.nChannels);
-
- if (p.eFormat == OMX_AUDIO_MP3StreamFormatMP1Layer3)
- format = 1;
- else if ((p.eFormat == OMX_AUDIO_MP3StreamFormatMP2Layer3) ||
- (p.eFormat == OMX_AUDIO_MP3StreamFormatMP2_5Layer3))
- format = 2;
- else
- return OMX_ErrorBadParameter;
-
- return __Mp3ChangeAcp(acp, acp_changed,
- p.nChannels, p.nSampleRate, p.nBitRate,
- format, 3, 0);
-}
-
-OMX_ERRORTYPE MrstSstComponent::__AacChangeAcpWithPortParam(
- MixAudioConfigParams *acp, PortAac *port, bool *acp_changed)
-{
- OMX_AUDIO_PARAM_AACPROFILETYPE p;
- int aot;
- OMX_ERRORTYPE ret;
-
- memcpy(&p, port->GetPortAacParam(), sizeof(p));
-
- ret = ComponentBase::CheckTypeHeader(&p, sizeof(p));
- if (ret != OMX_ErrorNone)
- return ret;
-
- LOGV("%s(): eAACProfile = %d\n", __func__, p.eAACProfile);
- LOGV("%s(): nSampleRate = %lu\n", __func__, p.nSampleRate);
- LOGV("%s(): nBitRate = %lu\n", __func__, p.nBitRate);
- LOGV("%s(): nChannels = %lu\n", __func__, p.nChannels);
-
- if (p.eAACProfile == OMX_AUDIO_AACObjectMain)
- aot = 1;
- else if (p.eAACProfile == OMX_AUDIO_AACObjectLC)
- aot = 2;
- else if (p.eAACProfile == OMX_AUDIO_AACObjectSSR)
- aot = 3;
- else
- return OMX_ErrorBadParameter;
-
-#if TEST_USE_AAC_ENCODING_RAW
-#if TEST_USE_AAC_ENCODING_VARIABLE_PARAMETER
- if (codec_mode == MIX_CODING_ENCODE) {
- /* freed at ProcessorProcess */
- codecdata = (unsigned char *)calloc(2, sizeof(unsigned char));
- if (codecdata)
- audio_specific_config_bitcoding(codecdata,
- aot, p.nSampleRate, p.nChannels);
- }
-
- return __AacChangeAcp(acp, acp_changed, p.nChannels, p.nSampleRate,
- p.nBitRate, aot);
-#else /* 44100,12800,2 */
- if (codec_mode == MIX_CODING_ENCODE) {
- /* freed at ProcessorProcess */
- codecdata = (unsigned char *)calloc(2, sizeof(unsigned char));
- if (codecdata)
- audio_specific_config_bitcoding(codecdata,
- aot, 44100, 2);
- }
-
- return __AacChangeAcp(acp, acp_changed, 2, 44100,
- 128000, aot);
-#endif
-#else /* ADTS */
- if (codec_mode == MIX_CODING_ENCODE)
- codecdata = NULL;
-
-#if TEST_USE_AAC_ENCODING_VARIABLE_PARAMETER
- return __AacChangeAcp(acp, acp_changed, p.nChannels, p.nSampleRate,
- p.nBitRate, aot);
-#else /* 44100,12800,2 */
- return __AacChangeAcp(acp, acp_changed, 2, 44100,
- 128000, aot);
-#endif
-#endif
-}
-
-OMX_ERRORTYPE MrstSstComponent::ChangeAcpWithPortParam(
- MixAudioConfigParams *acp,
- PortBase *port,
- bool *acp_changed)
-{
- OMX_ERRORTYPE ret;
-
- if (coding_type == OMX_AUDIO_CodingMP3)
- ret = __Mp3ChangeAcpWithPortParam(
- acp, static_cast<PortMp3 *>(port), acp_changed);
- else if (coding_type == OMX_AUDIO_CodingAAC)
- ret = __AacChangeAcpWithPortParam(
- acp, static_cast<PortAac *>(port), acp_changed);
- else
- return OMX_ErrorBadParameter;
-
- if (ret != OMX_ErrorNone)
- return ret;
-
- return OMX_ErrorNone;
-}
-
-OMX_ERRORTYPE MrstSstComponent::__PcmChangePortParamWithAcp(
- MixAudioConfigParams *acp, PortPcm *port)
-{
- OMX_AUDIO_PARAM_PCMMODETYPE p;
- OMX_ERRORTYPE ret;
-
- memcpy(&p, port->GetPortPcmParam(), sizeof(OMX_AUDIO_PARAM_PCMMODETYPE));
-
- if ((MIX_ACP_NUM_CHANNELS(acp) != (int)p.nChannels) ||
- (MIX_ACP_SAMPLE_FREQ(acp) != (int)p.nSamplingRate)) {
-
- p.nChannels = MIX_ACP_NUM_CHANNELS(acp);
- p.nSamplingRate = MIX_ACP_SAMPLE_FREQ(acp);
- }
-
- port->SetPortPcmParam(&p, false);
- return OMX_ErrorNone;
-}
-
-OMX_ERRORTYPE MrstSstComponent::__Mp3ChangePortParamWithAcp(
- MixAudioConfigParams *acp, PortMp3 *port)
-{
- OMX_AUDIO_PARAM_MP3TYPE p;
- OMX_ERRORTYPE ret;
-
- memcpy(&p, port->GetPortMp3Param(), sizeof(OMX_AUDIO_PARAM_MP3TYPE));
-
- if ((MIX_ACP_NUM_CHANNELS(acp) != (int)p.nChannels) ||
- (MIX_ACP_BITRATE(acp) != (int)p.nBitRate) ||
- (MIX_ACP_SAMPLE_FREQ(acp) != (int)p.nSampleRate)) {
-
- p.nChannels = MIX_ACP_NUM_CHANNELS(acp);
- p.nBitRate = MIX_ACP_BITRATE(acp);
- p.nSampleRate = MIX_ACP_SAMPLE_FREQ(acp);
- }
-
- port->SetPortMp3Param(&p, false);
- return OMX_ErrorNone;
-}
-
-OMX_ERRORTYPE MrstSstComponent::__AacChangePortParamWithAcp(
- MixAudioConfigParams *acp, PortAac *port)
-{
- OMX_AUDIO_PARAM_AACPROFILETYPE p;
- OMX_ERRORTYPE ret;
-
- memcpy(&p, port->GetPortAacParam(), sizeof(p));
-
- if ((MIX_ACP_NUM_CHANNELS(acp) != (int)p.nChannels) ||
- (MIX_ACP_SAMPLE_FREQ(acp) != (int)p.nSampleRate)) {
-
- p.nChannels = MIX_ACP_NUM_CHANNELS(acp);
- p.nSampleRate = MIX_ACP_SAMPLE_FREQ(acp);
- }
-
- port->SetPortAacParam(&p, false);
- return OMX_ErrorNone;
-}
-
-/* used only decode mode */
-OMX_ERRORTYPE MrstSstComponent::ChangePortParamWithAcp(void)
-{
- OMX_ERRORTYPE ret;
-
- if (coding_type == OMX_AUDIO_CodingMP3)
- ret = __Mp3ChangePortParamWithAcp(
- acp, static_cast<PortMp3 *>(ports[INPORT_INDEX]));
- else if (coding_type == OMX_AUDIO_CodingAAC)
- ret = __AacChangePortParamWithAcp(
- acp, static_cast<PortAac *>(ports[INPORT_INDEX]));
- else
- return OMX_ErrorBadParameter;
-
- if (ret != OMX_ErrorNone)
- return ret;
-
- ret = __PcmChangePortParamWithAcp(
- acp, static_cast<PortPcm *>(ports[OUTPORT_INDEX]));
- if (ret != OMX_ErrorNone)
- return ret;
-
- LOGV("%s(): report OMX_EventPortSettingsChanged event on %luth port",
- __func__, OUTPORT_INDEX);
-
- ret = static_cast<PortPcm *>(ports[OUTPORT_INDEX])->
- ReportPortSettingsChanged();
-
- LOGV("%s(): returned from event handler (ret : 0x%08x)\n", __func__, ret);
-
- return OMX_ErrorNone;
-}
-
-/* end of acp setting helpers */
-
-/*
- * CModule Interface
- */
-#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
-
-static const char *g_name = (const char *)"OMX.Intel.Mrst.SST";
-
-static const char *g_roles[] =
-{
- (const char *)"audio_decoder.mp3",
- (const char *)"audio_decoder.aac",
- (const char *)"audio_encoder.aac",
-};
-
-OMX_ERRORTYPE wrs_omxil_cmodule_ops_instantiate(OMX_PTR *instance)
-{
- ComponentBase *cbase;
-
- cbase = new MrstSstComponent;
- if (!cbase) {
- *instance = NULL;
- return OMX_ErrorInsufficientResources;
- }
-
- *instance = cbase;
- return OMX_ErrorNone;
-}
-
-struct wrs_omxil_cmodule_ops_s cmodule_ops = {
-instantiate:
- wrs_omxil_cmodule_ops_instantiate,
-};
-
-struct wrs_omxil_cmodule_s WRS_OMXIL_CMODULE_SYMBOL = {
-name:
- g_name,
-roles:
- &g_roles[0],
-nr_roles:
- ARRAY_SIZE(g_roles),
-ops:
- &cmodule_ops,
-};
diff --git a/sst/sst.h b/sst/sst.h
deleted file mode 100644
index 26952cf..0000000
--- a/sst/sst.h
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * sst.h, omx sst component header
- *
- * Copyright (c) 2009-2010 Wind River Systems, Inc.
- *
- * 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 __WRS_OMXIL_INTEL_MRST_SST
-#define __WRS_OMXIL_INTEL_MRST_SST
-
-#include <OMX_Core.h>
-#include <OMX_Component.h>
-
-#include <cmodule.h>
-#include <portbase.h>
-#include <componentbase.h>
-
-class MixAudioStreamCtrl : public WorkQueue
-{
-public:
- MixAudioStreamCtrl(MixAudio *mix);
- ~MixAudioStreamCtrl();
-
- typedef enum mix_audio_command_e {
- MIX_STREAM_START = 0,
- MIX_STREAM_STOP_DROP,
- MIX_STREAM_STOP_DRAIN,
- MIX_STREAM_PAUSE,
- MIX_STREAM_RESUME,
- } mix_audio_command_t;
-
- void SendCommand(mix_audio_command_t command);
-
-private:
- mix_audio_command_t *PopCommand(void);
-
- virtual void Work(void);
-
- struct queue q;
- pthread_mutex_t lock;
-
- MixAudio *mix;
-};
-
-class MrstSstComponent : public ComponentBase
-{
-public:
- /*
- * constructor & destructor
- */
- MrstSstComponent();
- ~MrstSstComponent();
-
-private:
- /*
- * component methods & helpers
- */
- /* implement ComponentBase::ComponentAllocatePorts */
- virtual OMX_ERRORTYPE ComponentAllocatePorts(void);
-
- /* implement ComponentBase::ComponentGet/SetPatameter */
- virtual OMX_ERRORTYPE
- ComponentGetParameter(OMX_INDEXTYPE nParamIndex,
- OMX_PTR pComponentParameterStructure);
- virtual OMX_ERRORTYPE
- ComponentSetParameter(OMX_INDEXTYPE nIndex,
- OMX_PTR pComponentParameterStructure);
-
- /* implement ComponentBase::ComponentGet/SetConfig */
- virtual OMX_ERRORTYPE
- ComponentGetConfig(OMX_INDEXTYPE nIndex,
- OMX_PTR pComponentConfigStructure);
- virtual OMX_ERRORTYPE
- ComponentSetConfig(OMX_INDEXTYPE nIndex,
- OMX_PTR pComponentConfigStructure);
-
- /* implement ComponentBase::Processor[*] */
- virtual OMX_ERRORTYPE ProcessorInit(void); /* Loaded to Idle */
- virtual OMX_ERRORTYPE ProcessorDeinit(void);/* Idle to Loaded */
- virtual OMX_ERRORTYPE ProcessorStart(void); /* Idle to Executing/Pause */
- virtual OMX_ERRORTYPE ProcessorStop(void); /* Executing/Pause to Idle */
- virtual OMX_ERRORTYPE ProcessorPause(void); /* Executing to Pause */
- virtual OMX_ERRORTYPE ProcessorResume(void);/* Pause to Executing */
- virtual OMX_ERRORTYPE ProcessorProcess(OMX_BUFFERHEADERTYPE ***pBuffers,
- buffer_retain_t *retain,
- OMX_U32 nr_buffers);
-
- OMX_ERRORTYPE __AllocateMp3Port(OMX_U32 port_index, OMX_DIRTYPE dir);
- OMX_ERRORTYPE __AllocateAacPort(OMX_U32 port_index, OMX_DIRTYPE dir);
- OMX_ERRORTYPE __AllocatePcmPort(OMX_U32 port_index, OMX_DIRTYPE dir);
-
- /* end of component methods & helpers */
-
- /*
- * acp setting helpers
- */
- OMX_ERRORTYPE __Mp3ChangeAcpWithConfigHeader(const unsigned char *buffer,
- bool *acp_changed);
- OMX_ERRORTYPE __AacChangeAcpWithConfigHeader(const unsigned char *buffer,
- bool *acp_changed);
- OMX_ERRORTYPE ChangeAcpWithConfigHeader(const unsigned char *buffer,
- bool *acp_changed);
-
- OMX_ERRORTYPE __Mp3ChangeAcpWithPortParam(MixAudioConfigParams *acp,
- PortMp3 *port,
- bool *acp_changed);
- OMX_ERRORTYPE __AacChangeAcpWithPortParam(MixAudioConfigParams *acp,
- PortAac *port,
- bool *acp_changed);
- OMX_ERRORTYPE ChangeAcpWithPortParam(MixAudioConfigParams *acp,
- PortBase *port,
- bool *acp_changed);
-
- OMX_ERRORTYPE __PcmChangePortParamWithAcp(MixAudioConfigParams *acp,
- PortPcm *port);
- OMX_ERRORTYPE __Mp3ChangePortParamWithAcp(MixAudioConfigParams *acp,
- PortMp3 *port);
- OMX_ERRORTYPE __AacChangePortParamWithAcp(MixAudioConfigParams *acp,
- PortAac *port);
- OMX_ERRORTYPE ChangePortParamWithAcp(void);
-
- /* end of acp setting helpers */
-
- /* mix audio */
- MixAudio *mix;
- MixAudioConfigParams *acp;
- MixIOVec *mixio_in, *mixio_out;
-
- MixAudioStreamCtrl *mix_stream_ctrl;
-
- OMX_AUDIO_CODINGTYPE coding_type;
- MixCodecMode codec_mode;
-
- OMX_U8 *codecdata;
-
- /* constant */
- /* ports */
- const static OMX_U32 NR_PORTS = 2;
- const static OMX_U32 INPORT_INDEX = 0;
- const static OMX_U32 OUTPORT_INDEX = 1;
-
- /* buffer */
- const static OMX_U32 INPORT_MP3_ACTUAL_BUFFER_COUNT = 5;
- const static OMX_U32 INPORT_MP3_MIN_BUFFER_COUNT = 1;
- const static OMX_U32 INPORT_MP3_BUFFER_SIZE = 4096;
- const static OMX_U32 OUTPORT_MP3_ACTUAL_BUFFER_COUNT = 2;
- const static OMX_U32 OUTPORT_MP3_MIN_BUFFER_COUNT = 1;
- const static OMX_U32 OUTPORT_MP3_BUFFER_SIZE = 1024;
- const static OMX_U32 INPORT_AAC_ACTUAL_BUFFER_COUNT = 5;
- const static OMX_U32 INPORT_AAC_MIN_BUFFER_COUNT = 1;
- const static OMX_U32 INPORT_AAC_BUFFER_SIZE = 4096;
- const static OMX_U32 OUTPORT_AAC_ACTUAL_BUFFER_COUNT = 2;
- const static OMX_U32 OUTPORT_AAC_MIN_BUFFER_COUNT = 1;
- const static OMX_U32 OUTPORT_AAC_BUFFER_SIZE = 2048;
- const static OMX_U32 INPORT_PCM_ACTUAL_BUFFER_COUNT = 2;
- const static OMX_U32 INPORT_PCM_MIN_BUFFER_COUNT = 1;
- const static OMX_U32 INPORT_PCM_BUFFER_SIZE = 4096;
- const static OMX_U32 OUTPORT_PCM_ACTUAL_BUFFER_COUNT = 5;
- const static OMX_U32 OUTPORT_PCM_MIN_BUFFER_COUNT = 1;
- const static OMX_U32 OUTPORT_PCM_BUFFER_SIZE = 16384;
-};
-
-#endif /* __WRS_OMXIL_INTEL_MRST_SST */
diff --git a/videocodec/OMXComponentCodecBase.cpp b/videocodec/OMXComponentCodecBase.cpp
index 29a4beb..3b4e40e 100644
--- a/videocodec/OMXComponentCodecBase.cpp
+++ b/videocodec/OMXComponentCodecBase.cpp
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-#define LOG_NDEBUG 0
+#define LOG_NDEBUG 1
#define LOG_TAG "OMXComponentCodecBase"
#include <utils/Log.h>
#include "OMXComponentCodecBase.h"
diff --git a/wrs_omxil_components.list b/wrs_omxil_components.list
deleted file mode 100644
index 1565a42..0000000
--- a/wrs_omxil_components.list
+++ /dev/null
@@ -1,21 +0,0 @@
-#libwrs_omxil_intel_mrst_sst.so
-libwrs_omxil_intel_mrst_psb_avc_enc.so
-libwrs_omxil_intel_mrst_psb_h263_enc.so
-libwrs_omxil_intel_mrst_psb_m4v_enc.so
-libwrs_omxil_intel_mrst_psb_dec.so
-libomx_ipp_aacdec.so
-libomx_ipp_mp3dec.so
-libomx_ipp_aacenc.so
-libomx_ipp_amrwbenc.so
-libomx_ipp_amrnbenc.so
-libomx_ipp_amrwbdec.so
-libomx_ipp_amrnbdec.so
-libOMXVideoDecoderAVC.so
-libOMXVideoDecoderH263.so
-libOMXVideoDecoderWMV.so
-libOMXVideoDecoderMPEG4.so
-libOMXVideoDecoderPAVC.so
-libOMXVideoDecoderAVCSecure.so
-libOMXVideoEncoderAVC.so
-libOMXVideoEncoderH263.so
-libOMXVideoEncoderMPEG4.so