diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2019-02-09 02:20:09 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2019-02-09 02:20:09 +0000 |
commit | aacb3e82479482331f1bec0cc3a4dbba3ddf0238 (patch) | |
tree | 86178d8fc60260e3d7461bb2cb43b7622c5e1aa9 | |
parent | 47933827894995502df73c0ccf46cab191f92e9e (diff) | |
parent | abf357a0469170551a1e86520fdb67e9b3459b31 (diff) | |
download | media-aacb3e82479482331f1bec0cc3a4dbba3ddf0238.tar.gz |
Snap for 5180536 from abf357a0469170551a1e86520fdb67e9b3459b31 to pi-platform-release
Change-Id: Ica31011160b65cc62664be93f9af10869575514b
-rw-r--r-- | libplatformconfig/ConfigParser.cpp | 15 | ||||
-rw-r--r-- | libplatformconfig/ConfigParser.h | 4 | ||||
-rw-r--r-- | libplatformconfig/PlatformConfig.cpp | 7 | ||||
-rwxr-xr-x | mm-core/inc/OMX_QCOMExtns.h | 7 | ||||
-rw-r--r-- | mm-core/inc/OMX_Video.h | 4 | ||||
-rw-r--r-- | mm-core/inc/OMX_VideoExt.h | 6 | ||||
-rw-r--r-- | mm-core/src/sdm710/registry_table_android.c | 532 | ||||
-rw-r--r-- | mm-core/src/sdm845/registry_table_android.c | 530 | ||||
-rw-r--r-- | mm-video-v4l2/vidc/vdec/inc/omx_vdec.h | 1 | ||||
-rw-r--r-- | mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp | 57 | ||||
-rw-r--r-- | mm-video-v4l2/vidc/venc/inc/video_encoder_device_v4l2.h | 3 | ||||
-rw-r--r-- | mm-video-v4l2/vidc/venc/src/omx_video_base.cpp | 2 | ||||
-rw-r--r-- | mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp | 12 | ||||
-rw-r--r-- | mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp | 60 |
14 files changed, 117 insertions, 1123 deletions
diff --git a/libplatformconfig/ConfigParser.cpp b/libplatformconfig/ConfigParser.cpp index ef07d7c5..785c9533 100644 --- a/libplatformconfig/ConfigParser.cpp +++ b/libplatformconfig/ConfigParser.cpp @@ -32,7 +32,6 @@ #include <errno.h> #include <utils/Log.h> #include <sys/mman.h> -#include "vidc_debug.h" #include "PlatformConfig.h" #include "ConfigParser.h" @@ -42,14 +41,14 @@ namespace Platform { void ConfigParser::processProperty(const XML_Char **attr, ConfigMap &configMap) { if (strcmp(attr[0], "name") != 0) { - DEBUG_PRINT_HIGH("%s: Element 'name' not found!", __func__); + VIDC_PLAT_LOGH("%s: Element 'name' not found!", __func__); return; } std::string propName(attr[1]); if (strcmp(attr[2], "value") != 0) { - DEBUG_PRINT_HIGH("%s: Element 'value' not found for %s!", __func__, propName.c_str()); + VIDC_PLAT_LOGH("%s: Element 'value' not found for %s!", __func__, propName.c_str()); return; } @@ -78,7 +77,7 @@ int ConfigParser::initAndParse(std::string configFile, ConfigMap &configMap) { FILE *file; file = fopen(configFile.c_str(), "r"); if (!file) { - DEBUG_PRINT_HIGH("%s: Error: %d (%s). Using defaults!", + VIDC_PLAT_LOGH("%s: Error: %d (%s). Using defaults!", __func__, errno, strerror(errno)); return err; } @@ -86,7 +85,7 @@ int ConfigParser::initAndParse(std::string configFile, ConfigMap &configMap) { // Create Parser parser = XML_ParserCreate(NULL); if (!parser) { - DEBUG_PRINT_HIGH("%s: Failed to create XML parser!", __func__); + VIDC_PLAT_LOGH("%s: Failed to create XML parser!", __func__); err = -ENODEV; goto fileError; } @@ -101,21 +100,21 @@ int ConfigParser::initAndParse(std::string configFile, ConfigMap &configMap) { while (1) { buf = XML_GetBuffer(parser, BUF_SIZE); if (buf == NULL) { - DEBUG_PRINT_HIGH("%s: XML_GetBuffer failed", __func__); + VIDC_PLAT_LOGH("%s: XML_GetBuffer failed", __func__); err = -ENOMEM; goto parserError; } bytesRead = fread(buf, 1, BUF_SIZE, file); if (bytesRead < 0) { - DEBUG_PRINT_HIGH("%s: fread failed, bytes read = %d", __func__, bytesRead); + VIDC_PLAT_LOGH("%s: fread failed, bytes read = %d", __func__, bytesRead); err = bytesRead; goto parserError; } if (XML_ParseBuffer(parser, bytesRead, bytesRead == 0) == XML_STATUS_ERROR) { - DEBUG_PRINT_HIGH("%s: XML_ParseBuffer failed, for %s", + VIDC_PLAT_LOGH("%s: XML_ParseBuffer failed, for %s", __func__, configFile.c_str()); err = -EINVAL; goto parserError; diff --git a/libplatformconfig/ConfigParser.h b/libplatformconfig/ConfigParser.h index 1170b7ec..7aadc8f2 100644 --- a/libplatformconfig/ConfigParser.h +++ b/libplatformconfig/ConfigParser.h @@ -46,6 +46,10 @@ extern "C" { #endif +#define VIDC_PLAT_LOGH(fmt, args...) ({ \ + ALOGD(fmt,##args); \ + }) + namespace Platform { class ConfigParser { diff --git a/libplatformconfig/PlatformConfig.cpp b/libplatformconfig/PlatformConfig.cpp index df52fef6..35237e8f 100644 --- a/libplatformconfig/PlatformConfig.cpp +++ b/libplatformconfig/PlatformConfig.cpp @@ -32,7 +32,6 @@ #include <errno.h> #include <utils/Log.h> #include <sys/mman.h> -#include "vidc_debug.h" #include "PlatformConfig.h" #include "ConfigParser.h" @@ -47,7 +46,7 @@ Config::Config() { } Config* Config::getInstance() { - DEBUG_PRINT_LOW("%s: Enter", __func__); + VIDC_PLAT_LOGH("%s: Enter", __func__); if (!mInstance) { mInstance = new Config(); } @@ -62,12 +61,12 @@ ConfigError_t Config::getInt32(Config_t config, int32_t *value, return FAIL; } if (conf->mConfigMap.find(configStrMap[config].name) == conf->mConfigMap.end()) { - DEBUG_PRINT_HIGH("%s: Returning default", __func__); + VIDC_PLAT_LOGH("%s: Returning default", __func__); *value = defaultValue; return FAIL; } *value = (int32_t) atoi(conf->mConfigMap[configStrMap[config].name].c_str()); - DEBUG_PRINT_LOW("%s Config name: %s value: %d", + VIDC_PLAT_LOGH("%s Config name: %s value: %d", __func__, configStrMap[config].name, *value); return OK; } diff --git a/mm-core/inc/OMX_QCOMExtns.h b/mm-core/inc/OMX_QCOMExtns.h index a7571a74..47b87af3 100755 --- a/mm-core/inc/OMX_QCOMExtns.h +++ b/mm-core/inc/OMX_QCOMExtns.h @@ -46,6 +46,7 @@ extern "C" { #include "OMX_Core.h" #include "OMX_Video.h" #include "string.h" +#include "OMX_VideoExt.h" #define OMX_VIDEO_MAX_HP_LAYERS 6 @@ -1513,10 +1514,10 @@ typedef enum QOMX_VIDEO_AVCPROFILETYPE { QOMX_VIDEO_AVCProfileHigh10 = OMX_VIDEO_AVCProfileHigh10, QOMX_VIDEO_AVCProfileHigh422 = OMX_VIDEO_AVCProfileHigh422, QOMX_VIDEO_AVCProfileHigh444 = OMX_VIDEO_AVCProfileHigh444, + QOMX_VIDEO_AVCProfileConstrainedBaseline = OMX_VIDEO_AVCProfileConstrainedBaseline, + QOMX_VIDEO_AVCProfileConstrainedHigh = OMX_VIDEO_AVCProfileConstrainedHigh, /* QCom specific profile indexes */ - QOMX_VIDEO_AVCProfileConstrained = OMX_VIDEO_AVCProfileVendorStartUnused, - QOMX_VIDEO_AVCProfileConstrainedBaseline, - QOMX_VIDEO_AVCProfileConstrainedHigh, + QOMX_VIDEO_AVCProfileConstrained = OMX_VIDEO_AVCProfileVendorStartUnused } QOMX_VIDEO_AVCPROFILETYPE; diff --git a/mm-core/inc/OMX_Video.h b/mm-core/inc/OMX_Video.h index a5568fe3..4ac60716 100644 --- a/mm-core/inc/OMX_Video.h +++ b/mm-core/inc/OMX_Video.h @@ -1,5 +1,5 @@ /** - * Copyright (c) 2008, 2018 The Khronos Group Inc. + * Copyright (c) 2008 The Khronos Group Inc. * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the @@ -71,7 +71,7 @@ typedef enum OMX_VIDEO_CODINGTYPE { OMX_VIDEO_CodingVP8, /**< Google VP8, formerly known as On2 VP8 */ OMX_VIDEO_CodingVP9, /**< Google VP9 */ OMX_VIDEO_CodingHEVC, /**< HEVC */ - OMX_VIDEO_CodingHEIC = 13, /**< HEIC */ + OMX_VIDEO_CodingImageHEIC = 13, /**< HEIC */ OMX_VIDEO_CodingKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ OMX_VIDEO_CodingVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ OMX_VIDEO_CodingMax = 0x7FFFFFFF diff --git a/mm-core/inc/OMX_VideoExt.h b/mm-core/inc/OMX_VideoExt.h index 758b8be7..b77c6b39 100644 --- a/mm-core/inc/OMX_VideoExt.h +++ b/mm-core/inc/OMX_VideoExt.h @@ -58,6 +58,12 @@ typedef struct OMX_NALSTREAMFORMATTYPE{ OMX_NALUFORMATSTYPE eNaluFormat; } OMX_NALSTREAMFORMATTYPE; +/** AVC additional profiles */ +typedef enum OMX_VIDEO_AVCPROFILEEXTTYPE { + OMX_VIDEO_AVCProfileConstrainedBaseline = 0x10000, /**< Constrained baseline profile */ + OMX_VIDEO_AVCProfileConstrainedHigh = 0x80000, /**< Constrained high profile */ +} OMX_VIDEO_AVCPROFILEEXTTYPE; + /** VP8 profiles */ typedef enum OMX_VIDEO_VP8PROFILETYPE { OMX_VIDEO_VP8ProfileMain = 0x01, diff --git a/mm-core/src/sdm710/registry_table_android.c b/mm-core/src/sdm710/registry_table_android.c index 9155c198..94ac96a8 100644 --- a/mm-core/src/sdm710/registry_table_android.c +++ b/mm-core/src/sdm710/registry_table_android.c @@ -1,5 +1,5 @@ /*-------------------------------------------------------------------------- -Copyright (c) 2016-2017, The Linux Foundation. All rights reserved. +Copyright (c) 2016-2018, The Linux Foundation. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -72,54 +72,6 @@ omx_core_cb_type core[] = } }, { - "OMX.qcom.video.decoder.mpeg2", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxVdec.so", - { - "video_decoder.mpeg2" - } - }, - { - "OMX.qcom.video.decoder.mpeg2.secure", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxVdec.so", - { - "video_decoder.mpeg2" - } - }, - { - "OMX.qti.video.decoder.vc1sw", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxSwVdec.so", - { - "video_decoder.vc1" - } - }, - { "OMX.qcom.video.decoder.hevc", NULL, // Create instance function // Unique instance handle @@ -200,90 +152,6 @@ omx_core_cb_type core[] = } }, { - "OMX.qti.video.decoder.mpeg4sw", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxSwVdec.so", - { - "video_decoder.mpeg4" - } - }, - { - "OMX.qti.video.decoder.divxsw", - NULL, // Create instance function - // Unique instance handle - { - NULL - }, - NULL, // Shared object library handle - "libOmxSwVdec.so", - { - "video_decoder.divx" - } - }, - { - "OMX.qti.video.decoder.divx4sw", - NULL, // Create instance function - // Unique instance handle - { - NULL - }, - NULL, // Shared object library handle - "libOmxSwVdec.so", - { - "video_decoder.divx" - } - }, - { - "OMX.qti.video.decoder.h263sw", - NULL, // Create instance function - // Unique instance handle - { - NULL - }, - NULL, // Shared object library handle - "libOmxSwVdec.so", - { - "video_decoder.h263" - } - }, - { - "OMX.qcom.video.encoder.mpeg4sw", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxSwVencMpeg4.so", - { - "video_encoder.mpeg4" - } - }, - { - "OMX.qcom.video.encoder.h263sw", - NULL, // Create instance function - // Unique instance handle - { - NULL - }, - NULL, // Shared object library handle - "libOmxSwVencMpeg4.so", - { - "video_encoder.h263" - } - }, - { "OMX.qcom.video.encoder.avc", NULL, // Create instance function // Unique instance handle @@ -300,22 +168,6 @@ omx_core_cb_type core[] = } }, { - "OMX.qcom.video.encoder.avc.secure", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxVenc.so", - { - "video_encoder.avc" - } - }, - { "OMX.qcom.video.encoder.vp8", NULL, // Create instance function // Unique instance handle @@ -347,388 +199,6 @@ omx_core_cb_type core[] = "video_encoder.hevc" } }, - { - "OMX.qcom.audio.decoder.Qcelp13", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxQcelp13Dec.so", - { - "audio_decoder.Qcelp13" - } - }, - { - "OMX.qcom.audio.decoder.evrc", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxEvrcDec.so", - { - "audio_decoder.evrc" - } - }, - { - "OMX.qcom.audio.decoder.wma", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxWmaDec.so", - { - "audio_decoder.wma" - } - }, - { - "OMX.qcom.audio.decoder.wma10Pro", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxWmaDec.so", - { - "audio_decoder.wma" - } - }, - { - "OMX.qcom.audio.decoder.wmaLossLess", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxWmaDec.so", - { - "audio_decoder.wma" - } - }, - { - "OMX.qcom.audio.decoder.amrwbplus", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxAmrwbplusDec.so", - { - "audio_decoder.awbplus" - } - }, - { - "OMX.qcom.audio.decoder.alac", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxAlacDec.so", - { - "audio_decoder.alac" - } - }, - { - "OMX.qti.audio.decoder.alac.sw", - NULL, // Create instance function - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxAlacDecSw.so", - { - "audio_decoder.alac" - } - }, - { - "OMX.qcom.audio.decoder.ape", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxApeDec.so", - { - "audio_decoder.ape" - } - }, - { - "OMX.qti.audio.decoder.ape.sw", - NULL, // Create instance function - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxApeDecSw.so", - { - "audio_decoder.ape" - } - }, - { - "OMX.qti.audio.decoder.dsd", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxDsdDec.so", - { - "audio_decoder.dsd" - } - }, - { - "OMX.qcom.audio.encoder.aac", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxAacEnc.so", - { - "audio_encoder.aac" - } - }, - { - "OMX.qcom.audio.encoder.qcelp13", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxQcelp13Enc.so", - { - "audio_encoder.qcelp13" - } - }, - { - "OMX.qcom.audio.encoder.evrc", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxEvrcEnc.so", - { - "audio_encoder.evrc" - } - }, - { - "OMX.qcom.audio.encoder.amrnb", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxAmrEnc.so", - { - "audio_encoder.amrnb" - } - }, - { - "OMX.qcom.audio.decoder.aac", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxAacDec.so", - { - "audio_decoder.aac" - } - }, - { - "OMX.qcom.audio.decoder.multiaac", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxAacDec.so", - { - "audio_decoder.aac" - } - }, - { - "AIV.play.generic", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libAivPlay.so", - { - "AIV.play.role.generic" - } - }, - { - "OMX.QCOM.CUST.COMP.START", - NULL, //Create instance function - //Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, - NULL, // Shared object library handle - { - NULL - } - }, - { - "OMX.qcom.file.muxer", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxMux.so", - { - "container_muxer.mp2" - } - }, - { - "OMX.qcom.video.decoder.avc.secure.dsmode", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxVideoDSMode.so", - { - "video_decoder.avc" - } - }, - { - "OMX.qcom.video.decoder.avc.dsmode", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxVideoDSMode.so", - { - "video_decoder.avc" - } - }, - { - "OMX.qcom.video.encoder.hevc.secure", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxVenc.so", - { - "video_encoder.hevc" - } - }, - { - "OMX.qti.vdec.vpp", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxVpp.so", - { - "video_decoder.vpp" - } - } }; const unsigned int SIZE_OF_CORE = sizeof(core) / sizeof(omx_core_cb_type); diff --git a/mm-core/src/sdm845/registry_table_android.c b/mm-core/src/sdm845/registry_table_android.c index 82ea3e4f..a8239cf8 100644 --- a/mm-core/src/sdm845/registry_table_android.c +++ b/mm-core/src/sdm845/registry_table_android.c @@ -72,54 +72,6 @@ omx_core_cb_type core[] = } }, { - "OMX.qcom.video.decoder.mpeg2", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxVdec.so", - { - "video_decoder.mpeg2" - } - }, - { - "OMX.qcom.video.decoder.mpeg2.secure", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxVdec.so", - { - "video_decoder.mpeg2" - } - }, - { - "OMX.qti.video.decoder.vc1sw", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxSwVdec.so", - { - "video_decoder.vc1" - } - }, - { "OMX.qcom.video.decoder.hevc", NULL, // Create instance function // Unique instance handle @@ -200,90 +152,6 @@ omx_core_cb_type core[] = } }, { - "OMX.qti.video.decoder.mpeg4sw", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxSwVdec.so", - { - "video_decoder.mpeg4" - } - }, - { - "OMX.qti.video.decoder.divxsw", - NULL, // Create instance function - // Unique instance handle - { - NULL - }, - NULL, // Shared object library handle - "libOmxSwVdec.so", - { - "video_decoder.divx" - } - }, - { - "OMX.qti.video.decoder.divx4sw", - NULL, // Create instance function - // Unique instance handle - { - NULL - }, - NULL, // Shared object library handle - "libOmxSwVdec.so", - { - "video_decoder.divx" - } - }, - { - "OMX.qti.video.decoder.h263sw", - NULL, // Create instance function - // Unique instance handle - { - NULL - }, - NULL, // Shared object library handle - "libOmxSwVdec.so", - { - "video_decoder.h263" - } - }, - { - "OMX.qcom.video.encoder.mpeg4sw", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxSwVencMpeg4.so", - { - "video_encoder.mpeg4" - } - }, - { - "OMX.qcom.video.encoder.h263sw", - NULL, // Create instance function - // Unique instance handle - { - NULL - }, - NULL, // Shared object library handle - "libOmxSwVencMpeg4.so", - { - "video_encoder.h263" - } - }, - { "OMX.qcom.video.encoder.avc", NULL, // Create instance function // Unique instance handle @@ -300,22 +168,6 @@ omx_core_cb_type core[] = } }, { - "OMX.qcom.video.encoder.avc.secure", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxVenc.so", - { - "video_encoder.avc" - } - }, - { "OMX.qcom.video.encoder.vp8", NULL, // Create instance function // Unique instance handle @@ -363,388 +215,6 @@ omx_core_cb_type core[] = "image_encoder.heic" } }, - { - "OMX.qcom.video.encoder.tme", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxVenc.so", - { - "video_encoder.tme" - } - }, - { - "OMX.qcom.audio.decoder.Qcelp13", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxQcelp13Dec.so", - { - "audio_decoder.Qcelp13" - } - }, - { - "OMX.qcom.audio.decoder.evrc", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxEvrcDec.so", - { - "audio_decoder.evrc" - } - }, - { - "OMX.qcom.audio.decoder.wma", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxWmaDec.so", - { - "audio_decoder.wma" - } - }, - { - "OMX.qcom.audio.decoder.wma10Pro", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxWmaDec.so", - { - "audio_decoder.wma" - } - }, - { - "OMX.qcom.audio.decoder.wmaLossLess", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxWmaDec.so", - { - "audio_decoder.wma" - } - }, - { - "OMX.qcom.audio.decoder.amrwbplus", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxAmrwbplusDec.so", - { - "audio_decoder.awbplus" - } - }, - { - "OMX.qcom.audio.decoder.alac", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxAlacDec.so", - { - "audio_decoder.alac" - } - }, - { - "OMX.qti.audio.decoder.alac.sw", - NULL, // Create instance function - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxAlacDecSw.so", - { - "audio_decoder.alac" - } - }, - { - "OMX.qcom.audio.decoder.ape", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxApeDec.so", - { - "audio_decoder.ape" - } - }, - { - "OMX.qti.audio.decoder.ape.sw", - NULL, // Create instance function - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxApeDecSw.so", - { - "audio_decoder.ape" - } - }, - { - "OMX.qti.audio.decoder.dsd", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxDsdDec.so", - { - "audio_decoder.dsd" - } - }, - { - "OMX.qcom.audio.encoder.aac", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxAacEnc.so", - { - "audio_encoder.aac" - } - }, - { - "OMX.qcom.audio.encoder.qcelp13", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxQcelp13Enc.so", - { - "audio_encoder.qcelp13" - } - }, - { - "OMX.qcom.audio.encoder.evrc", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxEvrcEnc.so", - { - "audio_encoder.evrc" - } - }, - { - "OMX.qcom.audio.encoder.amrnb", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxAmrEnc.so", - { - "audio_encoder.amrnb" - } - }, - { - "OMX.qti.vdec.vpp", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxVpp.so", - { - "iv_processor.yuv" - } - }, - { - "OMX.qcom.audio.decoder.multiaac", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxAacDec.so", - { - "audio_decoder.aac" - } - }, - { - "OMX.QCOM.CUST.COMP.START", - NULL, //Create instance function - //Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, - NULL, // Shared object library handle - { - NULL - } - }, - { - "OMX.qcom.file.muxer", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxMux.so", - { - "container_muxer.mp2" - } - }, - { - "OMX.qcom.audio.decoder.aac", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxAacDec.so", - { - "audio_decoder.aac" - } - }, - { - "OMX.qcom.video.decoder.avc.secure.dsmode", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxVideoDSMode.so", - { - "video_decoder.avc" - } - }, - { - "OMX.qcom.video.decoder.avc.dsmode", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxVideoDSMode.so", - { - "video_decoder.avc" - } - }, - { - "OMX.qcom.video.encoder.hevc.secure", - NULL, // Create instance function - // Unique instance handle - { - NULL, - NULL, - NULL, - NULL - }, - NULL, // Shared object library handle - "libOmxVenc.so", - { - "video_encoder.hevc" - } - } }; const unsigned int SIZE_OF_CORE = sizeof(core) / sizeof(omx_core_cb_type); diff --git a/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h b/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h index 876119ab..40937e9f 100644 --- a/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h +++ b/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h @@ -1359,6 +1359,7 @@ class omx_vdec: public qc_omx_component public: bool is_down_scalar_enabled; bool m_is_split_mode; + bool m_buffer_error; }; enum instance_state { diff --git a/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp b/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp index 8e92cfe0..3548d082 100644 --- a/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp +++ b/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp @@ -729,7 +729,8 @@ omx_vdec::omx_vdec(): m_error_propogated(false), secure_scaling_to_non_secure_opb(false), m_force_compressed_for_dpb(true), m_is_display_session(false), - m_is_split_mode(false) + m_is_split_mode(false), + m_buffer_error(false) { m_poll_efd = -1; drv_ctx.video_driver_fd = -1; @@ -5565,6 +5566,7 @@ OMX_ERRORTYPE omx_vdec::use_output_buffer( eRet = allocate_output_headers(); if (eRet == OMX_ErrorNone) eRet = allocate_extradata(); + output_use_buffer = true; } if (eRet == OMX_ErrorNone) { @@ -6029,7 +6031,6 @@ OMX_ERRORTYPE omx_vdec::free_input_buffer(OMX_BUFFERHEADERTYPE *bufferHdr) index = bufferHdr - m_inp_mem_ptr; DEBUG_PRINT_LOW("Free Input Buffer index = %d",index); - auto_lock l(buf_lock); bufferHdr->pInputPortPrivate = NULL; if (index < drv_ctx.ip_buf.actualcount && drv_ctx.ptr_inputbuffer) { @@ -6158,6 +6159,7 @@ OMX_ERRORTYPE omx_vdec::allocate_input_buffer( unsigned i = 0; unsigned char *buf_addr = NULL; int pmem_fd = -1, ret = 0; + unsigned int align_size = 0; (void) hComp; (void) port; @@ -6235,8 +6237,10 @@ OMX_ERRORTYPE omx_vdec::allocate_input_buffer( int rc; DEBUG_PRINT_LOW("Allocate input Buffer"); #ifdef USE_ION + align_size = drv_ctx.ip_buf.buffer_size + 512; + align_size = (align_size + drv_ctx.ip_buf.alignment - 1)&(~(drv_ctx.ip_buf.alignment - 1)); drv_ctx.ip_buf_ion_info[i].ion_device_fd = alloc_map_ion_memory( - drv_ctx.ip_buf.buffer_size,drv_ctx.op_buf.alignment, + align_size, drv_ctx.op_buf.alignment, &drv_ctx.ip_buf_ion_info[i].ion_alloc_data, &drv_ctx.ip_buf_ion_info[i].fd_ion_data, secure_mode ? SECURE_FLAGS_INPUT_BUFFER : 0); @@ -6643,6 +6647,10 @@ OMX_ERRORTYPE omx_vdec::allocate_buffer(OMX_IN OMX_HANDLETYPE hC } eRet = allocate_input_buffer(hComp,bufferHdr,port,appData,bytes); } else if (port == OMX_CORE_OUTPUT_PORT_INDEX) { + if (output_use_buffer) { + DEBUG_PRINT_ERROR("Allocate output buffer not allowed after use buffer"); + return OMX_ErrorBadParameter; + } eRet = client_buffers.allocate_buffers_color_convert(hComp,bufferHdr,port, appData,bytes); } else { @@ -6701,6 +6709,7 @@ OMX_ERRORTYPE omx_vdec::free_buffer(OMX_IN OMX_HANDLETYPE hComp, unsigned int nPortIndex; (void) hComp; + auto_lock l(buf_lock); if (m_state == OMX_StateIdle && (BITMASK_PRESENT(&m_flags ,OMX_COMPONENT_LOADING_PENDING))) { DEBUG_PRINT_LOW(" free buffer while Component in Loading pending"); @@ -6717,7 +6726,7 @@ OMX_ERRORTYPE omx_vdec::free_buffer(OMX_IN OMX_HANDLETYPE hComp, post_event(OMX_EventError, OMX_ErrorPortUnpopulated, OMX_COMPONENT_GENERATE_EVENT); - + m_buffer_error = true; return OMX_ErrorIncorrectStateOperation; } else if (m_state != OMX_StateInvalid) { DEBUG_PRINT_ERROR("Invalid state to free buffer,port lost Buffers"); @@ -6825,6 +6834,7 @@ OMX_ERRORTYPE omx_vdec::free_buffer(OMX_IN OMX_HANDLETYPE hComp, BITMASK_CLEAR((&m_flags),OMX_COMPONENT_LOADING_PENDING); post_event(OMX_CommandStateSet, OMX_StateLoaded, OMX_COMPONENT_GENERATE_EVENT); + m_buffer_error = false; } } return eRet; @@ -6995,6 +7005,11 @@ OMX_ERRORTYPE omx_vdec::empty_this_buffer_proxy(OMX_IN OMX_HANDLETYPE hComp, return OMX_ErrorBadParameter; } + if (BITMASK_ABSENT(&m_inp_bm_count, nPortIndex) || m_buffer_error) { + DEBUG_PRINT_ERROR("ETBProxy: ERROR: invalid buffer, nPortIndex %u", nPortIndex); + return OMX_ErrorBadParameter; + } + VIDC_TRACE_INT_LOW("ETB-TS", buffer->nTimeStamp / 1000); VIDC_TRACE_INT_LOW("ETB-size", buffer->nFilledLen); /*for use buffer we need to memcpy the data*/ @@ -7276,6 +7291,7 @@ OMX_ERRORTYPE omx_vdec::fill_this_buffer_proxy( struct vdec_bufferpayload *ptr_outputbuffer = NULL; struct vdec_output_frameinfo *ptr_respbuffer = NULL; + auto_lock l(buf_lock); nPortIndex = buffer-((OMX_BUFFERHEADERTYPE *)client_buffers.get_il_buf_hdr()); if (bufferAdd == NULL || nPortIndex >= drv_ctx.op_buf.actualcount) { @@ -7284,6 +7300,11 @@ OMX_ERRORTYPE omx_vdec::fill_this_buffer_proxy( return OMX_ErrorBadParameter; } + if (BITMASK_ABSENT(&m_out_bm_count, nPortIndex) || m_buffer_error) { + DEBUG_PRINT_ERROR("FTBProxy: ERROR: invalid buffer, nPortIndex %u", nPortIndex); + return OMX_ErrorBadParameter; + } + /*Return back the output buffer to client*/ if (m_out_bEnabled != OMX_TRUE || output_flush_progress == true || in_reconfig) { DEBUG_PRINT_LOW("Output Buffers return flush/disable condition"); @@ -8537,7 +8558,7 @@ int omx_vdec::async_message_process (void *context, void* message) if (omxhdr->nFilledLen) omx->prev_n_filled_len = omxhdr->nFilledLen; - if (omx->output_use_buffer && omxhdr->pBuffer && + if (!omx->m_enable_android_native_buffers && omx->output_use_buffer && omxhdr->pBuffer && vdec_msg->msgdata.output_frame.bufferaddr) memcpy ( omxhdr->pBuffer, (void *) ((unsigned long)vdec_msg->msgdata.output_frame.bufferaddr + @@ -9670,12 +9691,12 @@ bool omx_vdec::handle_mastering_display_color_info(void* data) HDRStaticInfo* hdr_info = &m_internal_hdr_info.sInfo; bool internal_disp_changed_flag = false; - internal_disp_changed_flag |= (hdr_info->sType1.mR.x != mastering_display_payload->nDisplayPrimariesX[0]) || - (hdr_info->sType1.mR.y != mastering_display_payload->nDisplayPrimariesY[0]); - internal_disp_changed_flag |= (hdr_info->sType1.mG.x != mastering_display_payload->nDisplayPrimariesX[1]) || - (hdr_info->sType1.mG.y != mastering_display_payload->nDisplayPrimariesY[1]); - internal_disp_changed_flag |= (hdr_info->sType1.mB.x != mastering_display_payload->nDisplayPrimariesX[2]) || - (hdr_info->sType1.mB.y != mastering_display_payload->nDisplayPrimariesY[2]); + internal_disp_changed_flag |= (hdr_info->sType1.mG.x != mastering_display_payload->nDisplayPrimariesX[0]) || + (hdr_info->sType1.mG.y != mastering_display_payload->nDisplayPrimariesY[0]); + internal_disp_changed_flag |= (hdr_info->sType1.mB.x != mastering_display_payload->nDisplayPrimariesX[1]) || + (hdr_info->sType1.mB.y != mastering_display_payload->nDisplayPrimariesY[1]); + internal_disp_changed_flag |= (hdr_info->sType1.mR.x != mastering_display_payload->nDisplayPrimariesX[2]) || + (hdr_info->sType1.mR.y != mastering_display_payload->nDisplayPrimariesY[2]); internal_disp_changed_flag |= (hdr_info->sType1.mW.x != mastering_display_payload->nWhitePointX) || (hdr_info->sType1.mW.y != mastering_display_payload->nWhitePointY); @@ -9689,12 +9710,12 @@ bool omx_vdec::handle_mastering_display_color_info(void* data) (hdr_info->sType1.mMinDisplayLuminance != mastering_display_payload->nMinDisplayMasteringLuminance); if (internal_disp_changed_flag) { - hdr_info->sType1.mR.x = mastering_display_payload->nDisplayPrimariesX[0]; - hdr_info->sType1.mR.y = mastering_display_payload->nDisplayPrimariesY[0]; - hdr_info->sType1.mG.x = mastering_display_payload->nDisplayPrimariesX[1]; - hdr_info->sType1.mG.y = mastering_display_payload->nDisplayPrimariesY[1]; - hdr_info->sType1.mB.x = mastering_display_payload->nDisplayPrimariesX[2]; - hdr_info->sType1.mB.y = mastering_display_payload->nDisplayPrimariesY[2]; + hdr_info->sType1.mG.x = mastering_display_payload->nDisplayPrimariesX[0]; + hdr_info->sType1.mG.y = mastering_display_payload->nDisplayPrimariesY[0]; + hdr_info->sType1.mB.x = mastering_display_payload->nDisplayPrimariesX[1]; + hdr_info->sType1.mB.y = mastering_display_payload->nDisplayPrimariesY[1]; + hdr_info->sType1.mR.x = mastering_display_payload->nDisplayPrimariesX[2]; + hdr_info->sType1.mR.y = mastering_display_payload->nDisplayPrimariesY[2]; hdr_info->sType1.mW.x = mastering_display_payload->nWhitePointX; hdr_info->sType1.mW.y = mastering_display_payload->nWhitePointY; @@ -11735,7 +11756,7 @@ OMX_ERRORTYPE omx_vdec::describeColorFormat(OMX_PTR pParam) { MediaImage *img = &(params->sMediaImage); switch(params->eColorFormat) { - case QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m: + case static_cast <OMX_COLOR_FORMATTYPE> (QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m): { img->mType = MediaImage::MEDIA_IMAGE_TYPE_YUV; img->mNumPlanes = 3; diff --git a/mm-video-v4l2/vidc/venc/inc/video_encoder_device_v4l2.h b/mm-video-v4l2/vidc/venc/inc/video_encoder_device_v4l2.h index 1d2fc5ae..0c7ee4f8 100644 --- a/mm-video-v4l2/vidc/venc/inc/video_encoder_device_v4l2.h +++ b/mm-video-v4l2/vidc/venc/inc/video_encoder_device_v4l2.h @@ -406,6 +406,7 @@ class venc_dev #endif }; + int nPframes_cache; int stopped; int resume_in_stopped; bool m_max_allowed_bitrate_check; @@ -591,6 +592,8 @@ class venc_dev BatchInfo mBatchInfo; bool mUseAVTimerTimestamps; bool venc_set_hdr_info(const MasteringDisplay&, const ContentLightLevel&); + bool mIsGridset; + OMX_U32 mTileDimension; }; enum instance_state { diff --git a/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp b/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp index 016f5cb9..7fe1c977 100644 --- a/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp +++ b/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp @@ -1586,7 +1586,7 @@ OMX_ERRORTYPE omx_video::get_parameter(OMX_IN OMX_HANDLETYPE hComp, // At the same time, FWK needs original WxH for various purposes // Sending input WxH as output port def WxH to FWK if (m_sOutPortDef.format.video.eCompressionFormat == - OMX_VIDEO_CodingHEIC) { + OMX_VIDEO_CodingImageHEIC) { portDefn->format.video.nFrameWidth = m_sInPortDef.format.video.nFrameWidth; portDefn->format.video.nFrameHeight = diff --git a/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp b/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp index 8181347c..cd85448e 100644 --- a/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp +++ b/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp @@ -127,7 +127,7 @@ OMX_ERRORTYPE omx_venc::component_init(OMX_STRING role) } else if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.heic", \ OMX_MAX_STRINGNAME_SIZE)) { strlcpy((char *)m_cRole, "video_encoder.hevc", OMX_MAX_STRINGNAME_SIZE); - codec_type = OMX_VIDEO_CodingHEIC; + codec_type = OMX_VIDEO_CodingImageHEIC; } else if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.hevc.secure", \ OMX_MAX_STRINGNAME_SIZE)) { strlcpy((char *)m_cRole, "video_encoder.hevc", OMX_MAX_STRINGNAME_SIZE); @@ -268,7 +268,7 @@ OMX_ERRORTYPE omx_venc::component_init(OMX_STRING role) } else if (codec_type == OMX_VIDEO_CodingHEVC) { m_sParamProfileLevel.eProfile = (OMX_U32) OMX_VIDEO_HEVCProfileMain; m_sParamProfileLevel.eLevel = (OMX_U32) OMX_VIDEO_HEVCMainTierLevel1; - } else if (codec_type == OMX_VIDEO_CodingHEIC) { + } else if (codec_type == OMX_VIDEO_CodingImageHEIC) { m_sParamProfileLevel.eProfile = (OMX_U32) OMX_VIDEO_HEVCProfileMainStill; m_sParamProfileLevel.eLevel = (OMX_U32) OMX_VIDEO_HEVCMainTierLevel1; } @@ -320,8 +320,8 @@ OMX_ERRORTYPE omx_venc::component_init(OMX_STRING role) m_sOutPortDef.format.video.eCompressionFormat = OMX_VIDEO_CodingVP8; } else if (codec_type == OMX_VIDEO_CodingHEVC) { m_sOutPortDef.format.video.eCompressionFormat = OMX_VIDEO_CodingHEVC; - } else if (codec_type == OMX_VIDEO_CodingHEIC) { - m_sOutPortDef.format.video.eCompressionFormat = OMX_VIDEO_CodingHEIC; + } else if (codec_type == OMX_VIDEO_CodingImageHEIC) { + m_sOutPortDef.format.video.eCompressionFormat = OMX_VIDEO_CodingImageHEIC; } else if (codec_type == (OMX_VIDEO_CODINGTYPE)QOMX_VIDEO_CodingTME) { m_sOutPortDef.format.video.eCompressionFormat = (OMX_VIDEO_CODINGTYPE)QOMX_VIDEO_CodingTME; } @@ -353,8 +353,8 @@ OMX_ERRORTYPE omx_venc::component_init(OMX_STRING role) m_sOutPortFormat.eCompressionFormat = OMX_VIDEO_CodingVP8; } else if (codec_type == OMX_VIDEO_CodingHEVC) { m_sOutPortFormat.eCompressionFormat = OMX_VIDEO_CodingHEVC; - } else if (codec_type == OMX_VIDEO_CodingHEIC) { - m_sOutPortFormat.eCompressionFormat = OMX_VIDEO_CodingHEIC; + } else if (codec_type == OMX_VIDEO_CodingImageHEIC) { + m_sOutPortFormat.eCompressionFormat = OMX_VIDEO_CodingImageHEIC; } else if (codec_type == (OMX_VIDEO_CODINGTYPE)QOMX_VIDEO_CodingTME) { m_sOutPortFormat.eCompressionFormat = (OMX_VIDEO_CODINGTYPE)QOMX_VIDEO_CodingTME; } diff --git a/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp b/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp index e798d4ff..0f15a1ed 100644 --- a/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp +++ b/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp @@ -191,6 +191,8 @@ venc_dev::venc_dev(class omx_venc *venc_class) strlcpy(m_debug.log_loc, property_value, PROPERTY_VALUE_MAX); mUseAVTimerTimestamps = false; + mIsGridset = false; + mTileDimension = 0; profile_level_converter::init(); } @@ -1409,12 +1411,12 @@ bool venc_dev::venc_open(OMX_U32 codec) profile_level.level = V4L2_MPEG_VIDC_VIDEO_VP8_VERSION_0; minqp = 0; maxqp = 127; - } else if (codec == OMX_VIDEO_CodingHEVC || codec == OMX_VIDEO_CodingHEIC) { + } else if (codec == OMX_VIDEO_CodingHEVC || codec == OMX_VIDEO_CodingImageHEIC) { m_sVenc_cfg.codectype = V4L2_PIX_FMT_HEVC; idrperiod.idrperiod = 1; minqp = 0; maxqp = 51; - if (codec == OMX_VIDEO_CodingHEIC) + if (codec == OMX_VIDEO_CodingImageHEIC) codec_profile.profile = V4L2_MPEG_VIDC_VIDEO_HEVC_PROFILE_MAIN_STILL_PIC; else codec_profile.profile = V4L2_MPEG_VIDC_VIDEO_HEVC_PROFILE_MAIN; @@ -2013,13 +2015,6 @@ bool venc_dev::venc_set_param(void *paramData, OMX_INDEXTYPE index) } else if (portDefn->nPortIndex == PORT_INDEX_OUT) { unsigned long codectype = venc_get_codectype(portDefn->format.video.eCompressionFormat); - if (portDefn->format.video.eCompressionFormat == OMX_VIDEO_CodingHEIC) { - portDefn->format.video.nFrameWidth = DEFAULT_TILE_DIMENSION; - portDefn->format.video.nFrameHeight = DEFAULT_TILE_DIMENSION; - DEBUG_PRINT_HIGH("set_parameter: OMX_IndexParamPortDefinition: port %d, wxh (for HEIC coding type) %dx%d", - portDefn->nPortIndex, portDefn->format.video.nFrameWidth, - portDefn->format.video.nFrameHeight); - } //Don't worry about width/height if downscalar is enabled. if (((m_sVenc_cfg.dvs_height != portDefn->format.video.nFrameHeight || m_sVenc_cfg.dvs_width != portDefn->format.video.nFrameWidth) && !downscalar_enabled) || @@ -2115,13 +2110,13 @@ bool venc_dev::venc_set_param(void *paramData, OMX_INDEXTYPE index) DEBUG_PRINT_LOW("venc_set_param: OMX_IndexParamVideoBitrate"); if (pParam->nPortIndex == (OMX_U32) PORT_INDEX_OUT) { - if (!venc_set_target_bitrate(pParam->nTargetBitrate)) { - DEBUG_PRINT_ERROR("ERROR: Setting Target Bit Rate / Quality Factor failed"); + if (!venc_set_ratectrl_cfg(pParam->eControlRate)) { + DEBUG_PRINT_ERROR("ERROR: Rate Control setting failed"); return false; } - if (!venc_set_ratectrl_cfg(pParam->eControlRate)) { - DEBUG_PRINT_ERROR("ERROR: Rate Control setting failed"); + if (!venc_set_target_bitrate(pParam->nTargetBitrate)) { + DEBUG_PRINT_ERROR("ERROR: Setting Target Bit Rate / Quality Factor failed"); return false; } } else { @@ -2258,9 +2253,9 @@ bool venc_dev::venc_set_param(void *paramData, OMX_INDEXTYPE index) OMX_VIDEO_PARAM_ANDROID_IMAGEGRIDTYPE* pParam = (OMX_VIDEO_PARAM_ANDROID_IMAGEGRIDTYPE*)paramData; - if (m_codec != OMX_VIDEO_CodingHEIC) { - DEBUG_PRINT_ERROR("OMX_IndexParamVideoAndroidImageGrid is only supported for HEIC"); - return false; + if (m_codec != OMX_VIDEO_CodingImageHEIC) { + DEBUG_PRINT_ERROR("OMX_IndexParamVideoAndroidImageGrid is only set for HEIC Encode (HW tiling)"); + return true; } if (!venc_set_tile_dimension(pParam->nTileWidth)) { @@ -3446,6 +3441,27 @@ unsigned venc_dev::venc_start(void) return 1; } + if(m_codec == OMX_VIDEO_CodingImageHEIC && mIsGridset) { + struct v4l2_format fmt; + memset(&fmt, 0, sizeof(fmt)); + fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE; + fmt.fmt.pix_mp.height = mTileDimension; + fmt.fmt.pix_mp.width = mTileDimension; + fmt.fmt.pix_mp.pixelformat = m_sVenc_cfg.codectype; + DEBUG_PRINT_INFO("set format type %d, wxh %dx%d, pixelformat %#x", + fmt.type, fmt.fmt.pix_mp.width, fmt.fmt.pix_mp.height, + fmt.fmt.pix_mp.pixelformat); + if (ioctl(m_nDriver_fd, VIDIOC_S_FMT, &fmt)) { + DEBUG_PRINT_ERROR("set format failed, type %d, wxh %dx%d, pixelformat %#x", + fmt.type, fmt.fmt.pix_mp.width, fmt.fmt.pix_mp.height, + fmt.fmt.pix_mp.pixelformat); + hw_overload = errno == EBUSY; + return false; + } + + + } + buf_type=V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE; DEBUG_PRINT_LOW("send_command_proxy(): Idle-->Executing"); ret=ioctl(m_nDriver_fd, VIDIOC_STREAMON,&buf_type); @@ -4161,6 +4177,7 @@ bool venc_dev::venc_empty_buf(void *buffer, void *pmem_data_buf, unsigned index, m_sVenc_cfg.inputformat != V4L2_PIX_FMT_NV12_UBWC)) { if (bframe_implicitly_enabled) { DEBUG_PRINT_HIGH("Disabling implicitly enabled B-frames"); + intra_period.num_pframes = nPframes_cache; if (!_venc_set_intra_period(intra_period.num_pframes, 0)) { DEBUG_PRINT_ERROR("Failed to set nPframes/nBframes"); return OMX_ErrorUndefined; @@ -4253,7 +4270,7 @@ bool venc_dev::venc_empty_buf(void *buffer, void *pmem_data_buf, unsigned index, } // Tiling in HEIC requires output WxH to be Tile size; difference is permitted - if (!(m_codec == OMX_VIDEO_CodingHEIC) && + if (!(m_codec == OMX_VIDEO_CodingImageHEIC) && inp_width * inp_height != out_width * out_height) { DEBUG_PRINT_ERROR("Downscalar is disabled and input/output dimenstions don't match"); DEBUG_PRINT_ERROR("Input WxH : %dx%d Output WxH : %dx%d",inp_width, inp_height, out_width, out_height); @@ -5034,7 +5051,7 @@ bool venc_dev::venc_reconfigure_intra_period() ((codec_profile.profile == V4L2_MPEG_VIDC_VIDEO_HEVC_PROFILE_MAIN) || (codec_profile.profile == V4L2_MPEG_VIDC_VIDEO_HEVC_PROFILE_MAIN10) || (codec_profile.profile == V4L2_MPEG_VIDC_VIDEO_HEVC_PROFILE_MAIN_STILL_PIC)) && - (m_codec != OMX_VIDEO_CodingHEIC)) { + (m_codec != OMX_VIDEO_CodingImageHEIC)) { isValidCodec = true; } @@ -5081,6 +5098,7 @@ bool venc_dev::venc_reconfigure_intra_period() if (enableBframes && intra_period.num_bframes == 0) { intra_period.num_bframes = VENC_BFRAME_MAX_COUNT; + nPframes_cache = intra_period.num_pframes; intra_period.num_pframes = intra_period.num_pframes / (1 + intra_period.num_bframes); bframe_implicitly_enabled = true; } else if (!enableBframes && intra_period.num_bframes > 0) { @@ -5150,6 +5168,8 @@ bool venc_dev::venc_set_tile_dimension(OMX_U32 nTileDimension) } DEBUG_PRINT_LOW("Success IOCTL set control for id=%d, value=%d", control.id, control.value); + mIsGridset = true; + mTileDimension = nTileDimension; return true; } @@ -5173,7 +5193,7 @@ bool venc_dev::_venc_set_intra_period(OMX_U32 nPFrames, OMX_U32 nBFrames) if (m_sVenc_cfg.codectype != V4L2_PIX_FMT_H264 && m_sVenc_cfg.codectype != V4L2_PIX_FMT_HEVC && - m_codec == OMX_VIDEO_CodingHEIC) { + m_codec == OMX_VIDEO_CodingImageHEIC) { nBFrames = 0; } @@ -5636,7 +5656,7 @@ unsigned long venc_dev::venc_get_codectype(OMX_VIDEO_CODINGTYPE eCompressionForm case OMX_VIDEO_CodingVP9: codectype = V4L2_PIX_FMT_VP9; break; - case OMX_VIDEO_CodingHEIC: + case OMX_VIDEO_CodingImageHEIC: case OMX_VIDEO_CodingHEVC: codectype = V4L2_PIX_FMT_HEVC; break; |