147e37c4428509524ee576920a98381f3e4872493Nick Pelly/*-------------------------------------------------------------------------- 261a2c6a19dbd06a317a419623020e02056661876Praveen ChavanCopyright (c) 2010-2013, The Linux Foundation. All rights reserved. 347e37c4428509524ee576920a98381f3e4872493Nick Pelly 447e37c4428509524ee576920a98381f3e4872493Nick PellyRedistribution and use in source and binary forms, with or without 547e37c4428509524ee576920a98381f3e4872493Nick Pellymodification, are permitted provided that the following conditions are met: 647e37c4428509524ee576920a98381f3e4872493Nick Pelly * Redistributions of source code must retain the above copyright 747e37c4428509524ee576920a98381f3e4872493Nick Pelly notice, this list of conditions and the following disclaimer. 847e37c4428509524ee576920a98381f3e4872493Nick Pelly * Redistributions in binary form must reproduce the above copyright 947e37c4428509524ee576920a98381f3e4872493Nick Pelly notice, this list of conditions and the following disclaimer in the 1047e37c4428509524ee576920a98381f3e4872493Nick Pelly documentation and/or other materials provided with the distribution. 116eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal * Neither the name of The Linux Foundation nor 1247e37c4428509524ee576920a98381f3e4872493Nick Pelly the names of its contributors may be used to endorse or promote 1347e37c4428509524ee576920a98381f3e4872493Nick Pelly products derived from this software without specific prior written 1447e37c4428509524ee576920a98381f3e4872493Nick Pelly permission. 1547e37c4428509524ee576920a98381f3e4872493Nick Pelly 1647e37c4428509524ee576920a98381f3e4872493Nick PellyTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 1747e37c4428509524ee576920a98381f3e4872493Nick PellyAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1847e37c4428509524ee576920a98381f3e4872493Nick PellyIMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 1947e37c4428509524ee576920a98381f3e4872493Nick PellyNON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 2047e37c4428509524ee576920a98381f3e4872493Nick PellyCONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 2147e37c4428509524ee576920a98381f3e4872493Nick PellyEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 2247e37c4428509524ee576920a98381f3e4872493Nick PellyPROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 2347e37c4428509524ee576920a98381f3e4872493Nick PellyOR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 2447e37c4428509524ee576920a98381f3e4872493Nick PellyWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 2547e37c4428509524ee576920a98381f3e4872493Nick PellyOTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 2647e37c4428509524ee576920a98381f3e4872493Nick PellyADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2747e37c4428509524ee576920a98381f3e4872493Nick Pelly--------------------------------------------------------------------------*/ 2847e37c4428509524ee576920a98381f3e4872493Nick Pelly#include<string.h> 2947e37c4428509524ee576920a98381f3e4872493Nick Pelly#include <sys/ioctl.h> 30826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <sys/prctl.h> 3147e37c4428509524ee576920a98381f3e4872493Nick Pelly#include<unistd.h> 3247e37c4428509524ee576920a98381f3e4872493Nick Pelly#include <fcntl.h> 3347e37c4428509524ee576920a98381f3e4872493Nick Pelly#include "video_encoder_device.h" 3447e37c4428509524ee576920a98381f3e4872493Nick Pelly#include "omx_video_encoder.h" 35826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 36278952ff92fab2da0c47b912daeb662130676be1Haynes Mathew George#include <linux/msm_ion.h> 37826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 3847e37c4428509524ee576920a98381f3e4872493Nick Pelly 3947e37c4428509524ee576920a98381f3e4872493Nick Pelly#define MPEG4_SP_START 0 4047e37c4428509524ee576920a98381f3e4872493Nick Pelly#define MPEG4_ASP_START (MPEG4_SP_START + 8) 4147e37c4428509524ee576920a98381f3e4872493Nick Pelly#define MPEG4_720P_LEVEL 6 4247e37c4428509524ee576920a98381f3e4872493Nick Pelly#define H263_BP_START 0 4347e37c4428509524ee576920a98381f3e4872493Nick Pelly#define H264_BP_START 0 44826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define H264_HP_START (H264_BP_START + 13) 45826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define H264_MP_START (H264_BP_START + 26) 4647e37c4428509524ee576920a98381f3e4872493Nick Pelly 4747e37c4428509524ee576920a98381f3e4872493Nick Pelly/* MPEG4 profile and level table*/ 4861a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstatic const unsigned int mpeg4_profile_level_table[][5]= { 4947e37c4428509524ee576920a98381f3e4872493Nick Pelly /*max mb per frame, max mb per sec, max bitrate, level, profile*/ 5047e37c4428509524ee576920a98381f3e4872493Nick Pelly {99,1485,64000,OMX_VIDEO_MPEG4Level0,OMX_VIDEO_MPEG4ProfileSimple}, 51826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {99,1485,64000,OMX_VIDEO_MPEG4Level1,OMX_VIDEO_MPEG4ProfileSimple}, 5247e37c4428509524ee576920a98381f3e4872493Nick Pelly {396,5940,128000,OMX_VIDEO_MPEG4Level2,OMX_VIDEO_MPEG4ProfileSimple}, 5347e37c4428509524ee576920a98381f3e4872493Nick Pelly {396,11880,384000,OMX_VIDEO_MPEG4Level3,OMX_VIDEO_MPEG4ProfileSimple}, 5447e37c4428509524ee576920a98381f3e4872493Nick Pelly {1200,36000,4000000,OMX_VIDEO_MPEG4Level4a,OMX_VIDEO_MPEG4ProfileSimple}, 5547e37c4428509524ee576920a98381f3e4872493Nick Pelly {1620,40500,8000000,OMX_VIDEO_MPEG4Level5,OMX_VIDEO_MPEG4ProfileSimple}, 56826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {3600,108000,12000000,OMX_VIDEO_MPEG4Level5,OMX_VIDEO_MPEG4ProfileSimple}, 5747e37c4428509524ee576920a98381f3e4872493Nick Pelly {0,0,0,0,0}, 5847e37c4428509524ee576920a98381f3e4872493Nick Pelly 59826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {99,1485,128000,OMX_VIDEO_MPEG4Level0,OMX_VIDEO_MPEG4ProfileAdvancedSimple}, 60826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {99,1485,128000,OMX_VIDEO_MPEG4Level1,OMX_VIDEO_MPEG4ProfileAdvancedSimple}, 6147e37c4428509524ee576920a98381f3e4872493Nick Pelly {396,5940,384000,OMX_VIDEO_MPEG4Level2,OMX_VIDEO_MPEG4ProfileAdvancedSimple}, 6247e37c4428509524ee576920a98381f3e4872493Nick Pelly {396,11880,768000,OMX_VIDEO_MPEG4Level3,OMX_VIDEO_MPEG4ProfileAdvancedSimple}, 6347e37c4428509524ee576920a98381f3e4872493Nick Pelly {792,23760,3000000,OMX_VIDEO_MPEG4Level4,OMX_VIDEO_MPEG4ProfileAdvancedSimple}, 6447e37c4428509524ee576920a98381f3e4872493Nick Pelly {1620,48600,8000000,OMX_VIDEO_MPEG4Level5,OMX_VIDEO_MPEG4ProfileAdvancedSimple}, 65826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {0,0,0,0,0}, 6647e37c4428509524ee576920a98381f3e4872493Nick Pelly}; 6747e37c4428509524ee576920a98381f3e4872493Nick Pelly 6847e37c4428509524ee576920a98381f3e4872493Nick Pelly/* H264 profile and level table*/ 6961a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstatic const unsigned int h264_profile_level_table[][5]= { 7061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*max mb per frame, max mb per sec, max bitrate, level, profile*/ 7147e37c4428509524ee576920a98381f3e4872493Nick Pelly {99,1485,64000,OMX_VIDEO_AVCLevel1,OMX_VIDEO_AVCProfileBaseline}, 7247e37c4428509524ee576920a98381f3e4872493Nick Pelly {99,1485,128000,OMX_VIDEO_AVCLevel1b,OMX_VIDEO_AVCProfileBaseline}, 7347e37c4428509524ee576920a98381f3e4872493Nick Pelly {396,3000,192000,OMX_VIDEO_AVCLevel11,OMX_VIDEO_AVCProfileBaseline}, 7447e37c4428509524ee576920a98381f3e4872493Nick Pelly {396,6000,384000,OMX_VIDEO_AVCLevel12,OMX_VIDEO_AVCProfileBaseline}, 7547e37c4428509524ee576920a98381f3e4872493Nick Pelly {396,11880,768000,OMX_VIDEO_AVCLevel13,OMX_VIDEO_AVCProfileBaseline}, 7647e37c4428509524ee576920a98381f3e4872493Nick Pelly {396,11880,2000000,OMX_VIDEO_AVCLevel2,OMX_VIDEO_AVCProfileBaseline}, 7747e37c4428509524ee576920a98381f3e4872493Nick Pelly {792,19800,4000000,OMX_VIDEO_AVCLevel21,OMX_VIDEO_AVCProfileBaseline}, 7847e37c4428509524ee576920a98381f3e4872493Nick Pelly {1620,20250,4000000,OMX_VIDEO_AVCLevel22,OMX_VIDEO_AVCProfileBaseline}, 7947e37c4428509524ee576920a98381f3e4872493Nick Pelly {1620,40500,10000000,OMX_VIDEO_AVCLevel3,OMX_VIDEO_AVCProfileBaseline}, 8047e37c4428509524ee576920a98381f3e4872493Nick Pelly {3600,108000,14000000,OMX_VIDEO_AVCLevel31,OMX_VIDEO_AVCProfileBaseline}, 81826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {5120,216000,20000000,OMX_VIDEO_AVCLevel32,OMX_VIDEO_AVCProfileBaseline}, 82826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {8192,245760,20000000,OMX_VIDEO_AVCLevel4,OMX_VIDEO_AVCProfileBaseline}, 8347e37c4428509524ee576920a98381f3e4872493Nick Pelly {0,0,0,0,0}, 8447e37c4428509524ee576920a98381f3e4872493Nick Pelly 8547e37c4428509524ee576920a98381f3e4872493Nick Pelly {99,1485,64000,OMX_VIDEO_AVCLevel1,OMX_VIDEO_AVCProfileHigh}, 8647e37c4428509524ee576920a98381f3e4872493Nick Pelly {99,1485,160000,OMX_VIDEO_AVCLevel1b,OMX_VIDEO_AVCProfileHigh}, 8747e37c4428509524ee576920a98381f3e4872493Nick Pelly {396,3000,240000,OMX_VIDEO_AVCLevel11,OMX_VIDEO_AVCProfileHigh}, 8847e37c4428509524ee576920a98381f3e4872493Nick Pelly {396,6000,480000,OMX_VIDEO_AVCLevel12,OMX_VIDEO_AVCProfileHigh}, 8947e37c4428509524ee576920a98381f3e4872493Nick Pelly {396,11880,960000,OMX_VIDEO_AVCLevel13,OMX_VIDEO_AVCProfileHigh}, 9047e37c4428509524ee576920a98381f3e4872493Nick Pelly {396,11880,2500000,OMX_VIDEO_AVCLevel2,OMX_VIDEO_AVCProfileHigh}, 9147e37c4428509524ee576920a98381f3e4872493Nick Pelly {792,19800,5000000,OMX_VIDEO_AVCLevel21,OMX_VIDEO_AVCProfileHigh}, 9247e37c4428509524ee576920a98381f3e4872493Nick Pelly {1620,20250,5000000,OMX_VIDEO_AVCLevel22,OMX_VIDEO_AVCProfileHigh}, 9347e37c4428509524ee576920a98381f3e4872493Nick Pelly {1620,40500,12500000,OMX_VIDEO_AVCLevel3,OMX_VIDEO_AVCProfileHigh}, 9447e37c4428509524ee576920a98381f3e4872493Nick Pelly {3600,108000,17500000,OMX_VIDEO_AVCLevel31,OMX_VIDEO_AVCProfileHigh}, 95826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {5120,216000,25000000,OMX_VIDEO_AVCLevel32,OMX_VIDEO_AVCProfileHigh}, 96826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {8192,245760,25000000,OMX_VIDEO_AVCLevel4,OMX_VIDEO_AVCProfileHigh}, 9747e37c4428509524ee576920a98381f3e4872493Nick Pelly {0,0,0,0,0}, 9847e37c4428509524ee576920a98381f3e4872493Nick Pelly 9947e37c4428509524ee576920a98381f3e4872493Nick Pelly {99,1485,64000,OMX_VIDEO_AVCLevel1,OMX_VIDEO_AVCProfileMain}, 100826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {99,1485,128000,OMX_VIDEO_AVCLevel1b,OMX_VIDEO_AVCProfileMain}, 101826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {396,3000,192000,OMX_VIDEO_AVCLevel11,OMX_VIDEO_AVCProfileMain}, 102826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {396,6000,384000,OMX_VIDEO_AVCLevel12,OMX_VIDEO_AVCProfileMain}, 103826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {396,11880,768000,OMX_VIDEO_AVCLevel13,OMX_VIDEO_AVCProfileMain}, 104826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {396,11880,2000000,OMX_VIDEO_AVCLevel2,OMX_VIDEO_AVCProfileMain}, 105826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {792,19800,4000000,OMX_VIDEO_AVCLevel21,OMX_VIDEO_AVCProfileMain}, 106826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {1620,20250,4000000,OMX_VIDEO_AVCLevel22,OMX_VIDEO_AVCProfileMain}, 107826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {1620,40500,10000000,OMX_VIDEO_AVCLevel3,OMX_VIDEO_AVCProfileMain}, 108826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {3600,108000,14000000,OMX_VIDEO_AVCLevel31,OMX_VIDEO_AVCProfileMain}, 109826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {5120,216000,20000000,OMX_VIDEO_AVCLevel32,OMX_VIDEO_AVCProfileMain}, 110826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {8192,245760,20000000,OMX_VIDEO_AVCLevel4,OMX_VIDEO_AVCProfileMain}, 11147e37c4428509524ee576920a98381f3e4872493Nick Pelly {0,0,0,0,0} 112826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 11347e37c4428509524ee576920a98381f3e4872493Nick Pelly}; 11447e37c4428509524ee576920a98381f3e4872493Nick Pelly 11547e37c4428509524ee576920a98381f3e4872493Nick Pelly/* H263 profile and level table*/ 11661a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstatic const unsigned int h263_profile_level_table[][5]= { 11747e37c4428509524ee576920a98381f3e4872493Nick Pelly /*max mb per frame, max mb per sec, max bitrate, level, profile*/ 11847e37c4428509524ee576920a98381f3e4872493Nick Pelly {99,1485,64000,OMX_VIDEO_H263Level10,OMX_VIDEO_H263ProfileBaseline}, 11947e37c4428509524ee576920a98381f3e4872493Nick Pelly {396,5940,128000,OMX_VIDEO_H263Level20,OMX_VIDEO_H263ProfileBaseline}, 12047e37c4428509524ee576920a98381f3e4872493Nick Pelly {396,11880,384000,OMX_VIDEO_H263Level30,OMX_VIDEO_H263ProfileBaseline}, 12147e37c4428509524ee576920a98381f3e4872493Nick Pelly {396,11880,2048000,OMX_VIDEO_H263Level40,OMX_VIDEO_H263ProfileBaseline}, 12247e37c4428509524ee576920a98381f3e4872493Nick Pelly {99,1485,128000,OMX_VIDEO_H263Level45,OMX_VIDEO_H263ProfileBaseline}, 12347e37c4428509524ee576920a98381f3e4872493Nick Pelly {396,19800,4096000,OMX_VIDEO_H263Level50,OMX_VIDEO_H263ProfileBaseline}, 12447e37c4428509524ee576920a98381f3e4872493Nick Pelly {810,40500,8192000,OMX_VIDEO_H263Level60,OMX_VIDEO_H263ProfileBaseline}, 12547e37c4428509524ee576920a98381f3e4872493Nick Pelly {1620,81000,16384000,OMX_VIDEO_H263Level70,OMX_VIDEO_H263ProfileBaseline}, 12647e37c4428509524ee576920a98381f3e4872493Nick Pelly {0,0,0,0,0} 12747e37c4428509524ee576920a98381f3e4872493Nick Pelly}; 12847e37c4428509524ee576920a98381f3e4872493Nick Pelly 129826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define Log2(number, power) { OMX_U32 temp = number; power = 0; while( (0 == (temp & 0x1)) && power < 16) { temp >>=0x1; power++; } } 130826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define Q16ToFraction(q,num,den) { OMX_U32 power; Log2(q,power); num = q >> power; den = 0x1 << (16 - power); } 131826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 1328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define BUFFER_LOG_LOC "/data/misc/media" 1338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 13447e37c4428509524ee576920a98381f3e4872493Nick Pelly//constructor 135826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevvenc_dev::venc_dev(class omx_venc *venc_class) 13647e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 13761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_max_allowed_bitrate_check = false; 13861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_eLevel = 0; 13961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_eProfile = 0; 14061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_init(&loaded_start_stop_mlock, NULL); 14161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_cond_init (&loaded_start_stop_cond, NULL); 1428767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan memset(&m_debug,0,sizeof(m_debug)); 1438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 1448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan char property_value[PROPERTY_VALUE_MAX] = {0}; 1458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan property_value[0] = '\0'; 1468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan property_get("vidc.enc.log.in", property_value, "0"); 1478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_debug.in_buffer_log = atoi(property_value); 1488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 1498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan property_value[0] = '\0'; 1508767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan property_get("vidc.enc.log.out", property_value, "0"); 1518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_debug.out_buffer_log = atoi(property_value); 1528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan snprintf(m_debug.log_loc, PROPERTY_VAL_MAX, 1538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan "%s", BUFFER_LOG_LOC); 1548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 15561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("venc_dev constructor"); 15647e37c4428509524ee576920a98381f3e4872493Nick Pelly} 15747e37c4428509524ee576920a98381f3e4872493Nick Pelly 15847e37c4428509524ee576920a98381f3e4872493Nick Pellyvenc_dev::~venc_dev() 15947e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 16061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_cond_destroy(&loaded_start_stop_cond); 16161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_destroy(&loaded_start_stop_mlock); 16261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("venc_dev distructor"); 16347e37c4428509524ee576920a98381f3e4872493Nick Pelly} 16447e37c4428509524ee576920a98381f3e4872493Nick Pelly 16547e37c4428509524ee576920a98381f3e4872493Nick Pellyvoid* async_venc_message_thread (void *input) 16647e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 16761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_ioctl_msg ioctl_msg ={NULL,NULL}; 16861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_timeout timeout; 16961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_msg venc_msg; 17061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int error_code = 0; 17161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc *omx = reinterpret_cast<omx_venc*>(input); 17261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 17361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan prctl(PR_SET_NAME, (unsigned long)"VideoEncCallBackThread", 0, 0, 0); 17461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan timeout.millisec = VEN_TIMEOUT_INFINITE; 17561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 17661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan while (1) { 17761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = NULL; 17861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = (void*)&venc_msg; 17961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 18061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Wait for a message from the video decoder driver*/ 18161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan error_code = ioctl(omx->handle->m_nDriver_fd,VEN_IOCTL_CMD_READ_NEXT_MSG,(void *)&ioctl_msg); 18261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 18361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (error_code == -512) { // ERESTARTSYS 1848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERESTARTSYS received in ioctl read next msg!"); 18561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (error_code <0) { 1868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("ioctl VEN_IOCTL_CMD_READ_NEXT_MSG failed"); 18761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 18861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (omx->async_message_process(input,&venc_msg) < 0) { 1898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Wrong ioctl message"); 19061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 19161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 19261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 1938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("omx_venc: Async Thread exit"); 194073c5e91be587a9f90fe39719e1e9fa7cd2a3525Vineeta Srivastava return NULL; 195a66301743224ed885fc1b5275acd16f4843a03f5Vineeta Srivastava} 196a66301743224ed885fc1b5275acd16f4843a03f5Vineeta Srivastava 1978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanint venc_dev::venc_extradata_log_buffers(char *buffer_addr) 1988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan{ 1998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return OMX_ErrorUnsupportedSetting; 2008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan} 2018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 2028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanint venc_dev::venc_output_log_buffers(const char *buffer_addr, int buffer_len) 2038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan{ 2048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (m_debug.out_buffer_log && !m_debug.outfile) { 2058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan int size = 0; 2068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if(m_sVenc_cfg.codectype == VEN_CODEC_MPEG4) { 2078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan size = snprintf(m_debug.outfile_name, PROPERTY_VALUE_MAX, "%s/output_enc_%d_%d_%p.m4v", 2088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_debug.log_loc, m_sVenc_cfg.input_width, m_sVenc_cfg.input_height, this); 2098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else if(m_sVenc_cfg.codectype == VEN_CODEC_H264) { 2108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan size = snprintf(m_debug.outfile_name, PROPERTY_VALUE_MAX, "%s/output_enc_%d_%d_%p.264", 2118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_debug.log_loc, m_sVenc_cfg.input_width, m_sVenc_cfg.input_height, this); 2128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else if(m_sVenc_cfg.codectype == VENC_CODEC_H263) { 2138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan size = snprintf(m_debug.outfile_name, PROPERTY_VALUE_MAX, "%s/output_enc_%d_%d_%p.263", 2148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_debug.log_loc, m_sVenc_cfg.input_width, m_sVenc_cfg.input_height, this); 2158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else if(m_sVenc_cfg.codectype == VENC_CODEC_VP8) { 2168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan size = snprintf(m_debug.outfile_name, PROPERTY_VALUE_MAX, "%s/output_enc_%d_%d_%p.ivf", 2178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_debug.log_loc, m_sVenc_cfg.input_width, m_sVenc_cfg.input_height, this); 2188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 2198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if ((size > PROPERTY_VALUE_MAX) || (size < 0)) { 2208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Failed to open output file: %s for logging as size:%d", 2218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_debug.outfile_name, size); 2228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return -1; 2238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 2248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_debug.outfile = fopen(m_debug.outfile_name, "ab"); 2258767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (!m_debug.outfile) { 2268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Failed to open output file: %s for logging errno:%d", 2278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_debug.outfile_name, errno); 2288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_debug.outfile_name[0] = '\0'; 2298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return -1; 2308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 2318767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 2328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (m_debug.outfile && buffer_len) { 2338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("%s buffer_len:%d", __func__, buffer_len); 2348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan fwrite(buffer_addr, buffer_len, 1, m_debug.outfile); 2358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 2368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return 0; 2378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan} 2388767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 2398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanbool venc_dev::venc_get_output_log_flag() 2408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan{ 2418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return (m_debug.out_buffer_log == 1); 2428767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan} 2438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 2448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanint venc_dev::venc_input_log_buffers(OMX_BUFFERHEADERTYPE *pbuffer, void *pmem_data_buf, int framelen) { 2458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (!m_debug.infile) { 2468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan int size = snprintf(m_debug.infile_name, PROPERTY_VALUE_MAX, "%s/input_enc_%d_%d_%p.yuv", 2478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_debug.log_loc, m_sVenc_cfg.input_width, 2488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_sVenc_cfg.input_height, this); 2498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if ((size > PROPERTY_VALUE_MAX) || (size < 0)) { 2508767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Failed to open input file: %s for logging size:%d", 2518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_debug.infile_name, size); 2528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return -1; 2538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 2548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_debug.infile = fopen (m_debug.infile_name, "ab"); 2558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (!m_debug.infile) { 2568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("Failed to open input file: %s for logging", m_debug.infile); 2578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_debug.infile_name[0] = '\0'; 2588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return -1; 2598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 2608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 2618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (m_debug.infile && pbuffer && pbuffer->nFilledLen) { 2628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#ifdef MAX_RES_1080P 2638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan int y_size = 0; 2648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan int c_offset = 0; 2658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned char *buf_addr = NULL; 2668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 2678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan y_size = m_sVenc_cfg.input_width * m_sVenc_cfg.input_height; 2688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan //chroma offset is y_size aligned to the 2k boundary 2698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan c_offset= (y_size + 2047) & (~(2047)); 2708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 2718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (pmem_data_buf) { 2728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Internal PMEM addr for i/p Heap UseBuf: %p", pmem_data_buf); 2738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan buf_addr = (OMX_U8 *)pmem_data_buf; 2748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else { 2758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Shared PMEM addr for i/p PMEM UseBuf/AllocateBuf: %p", bufhdr->pBuffer); 2768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan buf_addr = (unsigned char *)mmap(NULL, 2778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan ((encoder_media_buffer_type *)pbuffer->pBuffer)->meta_handle->data[2], 2788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan PROT_READ|PROT_WRITE, MAP_SHARED, 2798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan ((encoder_media_buffer_type *)pbuffer->pBuffer)->meta_handle->data[0], 0); 2808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 2818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 2828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (m_debug.infile) { 2838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan fwrite((const char *)buf_addr, y_size, 1, m_debug.infile); 2848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan fwrite((const char *)(buf_addr + c_offset), (y_size>>1), 1, m_debug.infile); 2858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 2868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 2878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (!pmem_data_buf) { 2888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan munmap (buf_addr, ((encoder_media_buffer_type *)pbuffer->pBuffer)->meta_handle->data[2]); 2898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 2908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#else 2918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (m_debug.infile) { 2928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_U8* ptrbuffer = NULL; 2938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (pmem_data_buf) { 2948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Internal PMEM addr for i/p Heap UseBuf: %p", pmem_data_buf); 2958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan ptrbuffer = (OMX_U8 *)pmem_data_buf; 2968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else { 2978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Shared PMEM addr for i/p PMEM UseBuf/AllocateBuf: %p", bufhdr->pBuffer); 2988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan ptrbuffer = (OMX_U8 *)bufhdr->pBuffer; 2998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 3008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan fwrite((const char *)ptrbuffer, framelen, 1, m_debug.infile); 3018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 3028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 3038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#endif 3048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 3058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return 0; 3068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan} 3078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 30847e37c4428509524ee576920a98381f3e4872493Nick Pellybool venc_dev::venc_open(OMX_U32 codec) 30947e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 31061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_ioctl_msg ioctl_msg = {NULL,NULL}; 31161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int r; 31261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int alignment = 0,buffer_size = 0, temp =0; 31361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 3146eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal m_nDriver_fd = open ("/dev/msm_vidc_enc",O_RDWR|O_NONBLOCK); 31547e37c4428509524ee576920a98381f3e4872493Nick Pelly 31661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_nDriver_fd == 0) { 3178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Got fd as 0 for msm_vidc_enc, Opening again"); 31861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_nDriver_fd = open ("/dev/msm_vidc_enc",O_RDWR|O_NONBLOCK); 31961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 32061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 32161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((int)m_nDriver_fd < 0) { 3228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Omx_venc::Comp Init Returning failure"); 32361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 32461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 32547e37c4428509524ee576920a98381f3e4872493Nick Pelly 3268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("m_nDriver_fd = %d", m_nDriver_fd); 327826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef SINGLE_ENCODER_INSTANCE 32861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 num_instances = 0; 32961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = NULL; 33061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = &num_instances; 33161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 33261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd, VEN_IOCTL_GET_NUMBER_INSTANCES, (void*)&ioctl_msg) < 0 ) { 3338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request number of encoder instances failed"); 33461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (num_instances > 1) { 3358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Second encoder instance rejected!"); 33661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_close(); 33761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 33861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 33961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 340826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 34161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // set the basic configuration of the video encoder driver 34261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.input_width = OMX_CORE_QCIF_WIDTH; 34361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.input_height= OMX_CORE_QCIF_HEIGHT; 34461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.dvs_width = OMX_CORE_QCIF_WIDTH; 34561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.dvs_height = OMX_CORE_QCIF_HEIGHT; 34661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.fps_num = 30; 34761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.fps_den = 1; 34861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.targetbitrate = 64000; 349826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P 35061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.inputformat= VEN_INPUTFMT_NV12_16M2KA; 351826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else 35261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.inputformat= VEN_INPUTFMT_NV12; 353826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 35461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // initializing QP range parameters 35561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan qp_range.minqp = 2; 35661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 35761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (codec == OMX_VIDEO_CodingAVC) 35861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan qp_range.maxqp = 51; 35961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else 36061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan qp_range.maxqp = 31; 36161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 36261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (codec == OMX_VIDEO_CodingMPEG4) { 36361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.codectype = VEN_CODEC_MPEG4; 36461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan codec_profile.profile = VEN_PROFILE_MPEG4_SP; 36561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_level.level = VEN_LEVEL_MPEG4_2; 36661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (codec == OMX_VIDEO_CodingH263) { 36761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.codectype = VEN_CODEC_H263; 36861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan codec_profile.profile = VEN_PROFILE_H263_BASELINE; 36961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_level.level = VEN_LEVEL_H263_20; 37061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 37161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 37261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (codec == OMX_VIDEO_CodingAVC) { 37361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.codectype = VEN_CODEC_H264; 37461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan codec_profile.profile = VEN_PROFILE_H264_BASELINE; 37561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_level.level = VEN_LEVEL_H264_1p1; 37661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 37761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 37861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&m_sVenc_cfg; 37961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 38061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 38161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_BASE_CFG,(void*)&ioctl_msg) < 0 ) { 3828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting base configuration failed"); 38361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 38461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 38561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 38661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Get the I/P and O/P buffer requirements 38761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = NULL; 38861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = (void*)&m_sInput_buff_property; 38961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 39061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_GET_INPUT_BUFFER_REQ,(void*)&ioctl_msg) < 0) { 3918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for getting i/p buffer requirement failed"); 39261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 39361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 39461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 39561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = NULL; 39661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = (void*)&m_sOutput_buff_property; 39761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 39861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_GET_OUTPUT_BUFFER_REQ,(void*)&ioctl_msg) < 0) { 3998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for getting o/p buffer requirement failed"); 40061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 40161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 40261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 40361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_profile_set = false; 40461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_level_set = false; 40561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 40661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (venc_set_profile_level(0, 0)) { 4078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("%s(): Init Profile/Level setting success", 40861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan __func__); 40961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 41061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 41161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buffers_count = MAX_RECON_BUFFERS; 41261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ltrmode.ltr_mode = 0; 41361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ltrcount.ltr_count = 0; 41461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ltrperiod.ltr_period = 0; 41561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 41661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 41747e37c4428509524ee576920a98381f3e4872493Nick Pelly} 41847e37c4428509524ee576920a98381f3e4872493Nick Pelly 41947e37c4428509524ee576920a98381f3e4872493Nick Pellyvoid venc_dev::venc_close() 42047e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 4218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_close: fd = %d", m_nDriver_fd); 42261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 42361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((int)m_nDriver_fd >= 0) { 4248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("venc_close(): Calling VEN_IOCTL_CMD_STOP_READ_MSG"); 42561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (void)ioctl(m_nDriver_fd, VEN_IOCTL_CMD_STOP_READ_MSG, 42661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan NULL); 4278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Calling close()"); 42861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan close(m_nDriver_fd); 42961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_nDriver_fd = -1; 43061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 43161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 4328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (m_debug.infile) { 4338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan fclose(m_debug.infile); 4348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_debug.infile = NULL; 4358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 4368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (m_debug.outfile) { 4378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan fclose(m_debug.outfile); 4388767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_debug.outfile = NULL; 4398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 4408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 44147e37c4428509524ee576920a98381f3e4872493Nick Pelly} 44247e37c4428509524ee576920a98381f3e4872493Nick Pelly 44347e37c4428509524ee576920a98381f3e4872493Nick Pellybool venc_dev::venc_set_buf_req(unsigned long *min_buff_count, 44461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long *actual_buff_count, 44561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long *buff_size, 44661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long port) 44747e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 44861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_ioctl_msg ioctl_msg = {NULL,NULL}; 44961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long temp_count = 0; 45061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 45161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (port == 0) { 45261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (*actual_buff_count > m_sInput_buff_property.mincount) { 45361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan temp_count = m_sInput_buff_property.actualcount; 45461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInput_buff_property.actualcount = *actual_buff_count; 45561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&m_sInput_buff_property; 45661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 45761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 45861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_INPUT_BUFFER_REQ,(void*)&ioctl_msg) < 0) { 4598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting i/p buffer requirement failed"); 46061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInput_buff_property.actualcount = temp_count; 46161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 46261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 46361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 4648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("I/P Count set to %lu", *actual_buff_count); 46561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 46661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 46761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (*actual_buff_count > m_sOutput_buff_property.mincount) { 46861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan temp_count = m_sOutput_buff_property.actualcount; 46961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutput_buff_property.actualcount = *actual_buff_count; 47061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&m_sOutput_buff_property; 47161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 47261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 47361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_OUTPUT_BUFFER_REQ,(void*)&ioctl_msg) < 0) { 4748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting o/p buffer requirement failed"); 47561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutput_buff_property.actualcount = temp_count; 47661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 47761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 47861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 4798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("O/P Count set to %lu", *actual_buff_count); 48061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 48147e37c4428509524ee576920a98381f3e4872493Nick Pelly } 48247e37c4428509524ee576920a98381f3e4872493Nick Pelly 48361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 48447e37c4428509524ee576920a98381f3e4872493Nick Pelly 48547e37c4428509524ee576920a98381f3e4872493Nick Pelly} 48647e37c4428509524ee576920a98381f3e4872493Nick Pelly 487826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_loaded_start() 488826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 48961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct timespec ts; 49061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int status = 0; 49161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 49261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_CMD_START, NULL) < 0) { 49361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: VEN_IOCTL_CMD_START failed"); 49461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 49561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 49661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 49761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (clock_gettime(CLOCK_REALTIME, &ts) < 0) { 49861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("%s: clock_gettime failed", __func__); 49961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 50061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 50161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 50261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ts.tv_sec += 1; 50361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_lock(&loaded_start_stop_mlock); 50461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("%s: wait on start done", __func__); 50561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status = pthread_cond_timedwait(&loaded_start_stop_cond, 50661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &loaded_start_stop_mlock, &ts); 50761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 50861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (status != 0) { 50961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("%s: error status = %d, %s", __func__, 51061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status, strerror(status)); 51161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_unlock(&loaded_start_stop_mlock); 51261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 51361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 51461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 51561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("%s: wait over on start done", __func__); 516826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev pthread_mutex_unlock(&loaded_start_stop_mlock); 51761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("%s: venc_loaded_start success", __func__); 51861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 519826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 520826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 521826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_loaded_stop() 522826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 52361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct timespec ts; 52461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int status = 0; 52561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 52661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_CMD_STOP, NULL) < 0) { 52761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: VEN_IOCTL_CMD_STOP failed"); 52861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 52961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 53061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 53161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (clock_gettime(CLOCK_REALTIME, &ts) < 0) { 53261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("%s: clock_gettime failed", __func__); 53361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 53461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 53561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 53661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ts.tv_sec += 1; 53761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_lock(&loaded_start_stop_mlock); 53861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("%s: wait on stop done", __func__); 53961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status = pthread_cond_timedwait(&loaded_start_stop_cond, 54061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &loaded_start_stop_mlock, &ts); 54161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 54261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (status != 0) { 54361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("%s: error status = %d, %s", __func__, 54461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status, strerror(status)); 54561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_unlock(&loaded_start_stop_mlock); 54661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 54761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 54861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 54961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("%s: wait over on stop done", __func__); 550826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev pthread_mutex_unlock(&loaded_start_stop_mlock); 55161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("%s: venc_loaded_stop success", __func__); 55261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 553826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 554826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 555826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_loaded_start_done() 556826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 55761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_lock(&loaded_start_stop_mlock); 55861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("%s: signal start done", __func__); 55961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_cond_signal(&loaded_start_stop_cond); 56061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_unlock(&loaded_start_stop_mlock); 56161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 562826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 563826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 564826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_loaded_stop_done() 565826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 56661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_lock(&loaded_start_stop_mlock); 56761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("%s: signal stop done", __func__); 56861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_cond_signal(&loaded_start_stop_cond); 56961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_unlock(&loaded_start_stop_mlock); 57061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 571826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 572826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 573826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_get_seq_hdr(void *buffer, 5748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned buffer_size, OMX_U32 *header_len) 575826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 57661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_ioctl_msg ioctl_msg = {NULL,NULL}; 57761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int i = 0; 57861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("venc_dev::venc_get_seq_hdr"); 57961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_seqheader seq_in, seq_out; 58061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan seq_in.hdrlen = 0; 58161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan seq_in.bufsize = buffer_size; 58261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan seq_in.hdrbufptr = (unsigned char*)buffer; 58361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 58461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (seq_in.hdrbufptr == NULL) { 58561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: malloc for sequence header failed"); 58661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 58761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 588826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 58961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("seq_in: buf=%x, sz=%d, hdrlen=%d", seq_in.hdrbufptr, 59061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan seq_in.bufsize, seq_in.hdrlen); 5916eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 59261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&seq_in; 59361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = (void*)&seq_out; 59447e37c4428509524ee576920a98381f3e4872493Nick Pelly 59561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_GET_SEQUENCE_HDR,(void*)&ioctl_msg) < 0) { 59661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for getting sequence header failed"); 59761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 59847e37c4428509524ee576920a98381f3e4872493Nick Pelly } 59961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 60061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (seq_out.hdrlen == 0) { 60161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Seq header returned zero length header"); 60261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("seq_out: buf=%x, sz=%d, hdrlen=%d", seq_out.hdrbufptr, 60361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan seq_out.bufsize, seq_out.hdrlen); 60461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 60547e37c4428509524ee576920a98381f3e4872493Nick Pelly } 60647e37c4428509524ee576920a98381f3e4872493Nick Pelly 60761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *header_len = seq_out.hdrlen; 60861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("seq_out: buf=%x, sz=%d, hdrlen=%d", seq_out.hdrbufptr, 60961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan seq_out.bufsize, seq_out.hdrlen); 61047e37c4428509524ee576920a98381f3e4872493Nick Pelly 61161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 61247e37c4428509524ee576920a98381f3e4872493Nick Pelly} 61347e37c4428509524ee576920a98381f3e4872493Nick Pelly 61461a2c6a19dbd06a317a419623020e02056661876Praveen Chavanbool venc_dev::venc_get_capability_ltrcount(unsigned long *min, 61561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long *max, unsigned long *step_size) 61647e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 61761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_ioctl_msg ioctl_msg = {NULL,NULL}; 61861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_range cap_ltr_count; 61961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = NULL; 62061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = (void*)&cap_ltr_count; 621826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 62261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd, VEN_IOCTL_GET_CAPABILITY_LTRCOUNT, 62361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (void*)&ioctl_msg) < 0) { 62461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Get LTR Capability failed"); 62561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 62661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 62761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *min = cap_ltr_count.min; 62861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *max = cap_ltr_count.max; 62961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *step_size = cap_ltr_count.step_size; 63061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("LTR Capability: min=%x, max=%d, step_size=%d", 63161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *min, *max, *step_size); 63261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 633058dcdbfe54a3294a2713ba9993e6024f3f3a6a0Haynes Mathew George 63461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 63561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 636058dcdbfe54a3294a2713ba9993e6024f3f3a6a0Haynes Mathew George 63761a2c6a19dbd06a317a419623020e02056661876Praveen Chavanbool venc_dev::venc_get_buf_req(unsigned long *min_buff_count, 63861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long *actual_buff_count, 63961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long *buff_size, 64061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long port) 64161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 64261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_ioctl_msg ioctl_msg = {NULL,NULL}; 64347e37c4428509524ee576920a98381f3e4872493Nick Pelly 64461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (port == 0) { 645058dcdbfe54a3294a2713ba9993e6024f3f3a6a0Haynes Mathew George ioctl_msg.in = NULL; 646058dcdbfe54a3294a2713ba9993e6024f3f3a6a0Haynes Mathew George ioctl_msg.out = (void*)&m_sInput_buff_property; 64761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 64861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_GET_INPUT_BUFFER_REQ,(void*)&ioctl_msg) < 0) { 6498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for getting i/p buffer requirement failed"); 65047e37c4428509524ee576920a98381f3e4872493Nick Pelly return false; 651058dcdbfe54a3294a2713ba9993e6024f3f3a6a0Haynes Mathew George } 652058dcdbfe54a3294a2713ba9993e6024f3f3a6a0Haynes Mathew George 65361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *min_buff_count = m_sInput_buff_property.mincount; 65461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *actual_buff_count = m_sInput_buff_property.actualcount; 65561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#ifdef USE_ION 65661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // For ION memory allocations of the allocated buffer size 65761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // must be 4k aligned, hence aligning the input buffer 65861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // size to 4k. 65961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInput_buff_property.datasize = (m_sInput_buff_property.datasize + 4095) 66061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan & (~4095); 66161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#endif 66261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *buff_size = m_sInput_buff_property.datasize; 66361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 664058dcdbfe54a3294a2713ba9993e6024f3f3a6a0Haynes Mathew George ioctl_msg.in = NULL; 665058dcdbfe54a3294a2713ba9993e6024f3f3a6a0Haynes Mathew George ioctl_msg.out = (void*)&m_sOutput_buff_property; 66661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 66761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_GET_OUTPUT_BUFFER_REQ,(void*)&ioctl_msg) < 0) { 6688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for getting o/p buffer requirement failed"); 66947e37c4428509524ee576920a98381f3e4872493Nick Pelly return false; 670058dcdbfe54a3294a2713ba9993e6024f3f3a6a0Haynes Mathew George } 671058dcdbfe54a3294a2713ba9993e6024f3f3a6a0Haynes Mathew George 67261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *min_buff_count = m_sOutput_buff_property.mincount; 67361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *actual_buff_count = m_sOutput_buff_property.actualcount; 67461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *buff_size = m_sOutput_buff_property.datasize; 67561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 676058dcdbfe54a3294a2713ba9993e6024f3f3a6a0Haynes Mathew George 67761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 67847e37c4428509524ee576920a98381f3e4872493Nick Pelly 67961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 68047e37c4428509524ee576920a98381f3e4872493Nick Pelly 68161a2c6a19dbd06a317a419623020e02056661876Praveen Chavanbool venc_dev::venc_set_param(void *paramData,OMX_INDEXTYPE index ) 68261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 68361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 6848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_set_param:: venc-720p"); 68561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 68661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (index) { 68761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamPortDefinition: 688826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev { 68961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PARAM_PORTDEFINITIONTYPE *portDefn; 69061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan portDefn = (OMX_PARAM_PORTDEFINITIONTYPE *) paramData; 69161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("venc_set_param: OMX_IndexParamPortDefinition"); 69261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 69361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (portDefn->nPortIndex == PORT_INDEX_IN) { 69461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 69561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_encode_framerate(portDefn->format.video.xFramerate, 0)) { 69661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 69761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 69861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 69961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_color_format(portDefn->format.video.eColorFormat)) { 70061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 70161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 70261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 70361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("Basic parameter has changed"); 70461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.input_height = portDefn->format.video.nFrameHeight; 70561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.input_width = portDefn->format.video.nFrameWidth; 70661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 70761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&m_sVenc_cfg; 70861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 70961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 71061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_BASE_CFG,(void*)&ioctl_msg) < 0) { 7118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting base config failed"); 71261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 71361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 71461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 71561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("WxH (%dx%d), codec (%d), fps(nr/dr) (%d/%d), bitrate (%d), " 71661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "color_format (%d)", m_sVenc_cfg.input_width, m_sVenc_cfg.input_height, 71761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.codectype, m_sVenc_cfg.fps_num, m_sVenc_cfg.fps_den, 71861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.targetbitrate, m_sVenc_cfg.inputformat); 71961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 72061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("Updating the buffer count/size for the new resolution"); 72161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = NULL; 72261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = (void*)&m_sInput_buff_property; 72361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 72461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd, VEN_IOCTL_GET_INPUT_BUFFER_REQ,(void*)&ioctl_msg) < 0) { 7258767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for getting i/p bufreq failed"); 72661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 72761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 72861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 72961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Got updated m_sInput_buff_property values: " 73061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "datasize = %u, maxcount = %u, actualcnt = %u, " 73161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "mincount = %u", m_sInput_buff_property.datasize, 73261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInput_buff_property.maxcount, m_sInput_buff_property.actualcount, 73361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInput_buff_property.mincount); 73461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 73561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = NULL; 73661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = (void*)&m_sOutput_buff_property; 73761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 73861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd, VEN_IOCTL_GET_OUTPUT_BUFFER_REQ,(void*)&ioctl_msg) < 0) { 7398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for getting o/p bufreq failed"); 74061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 74161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 74261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 74361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Got updated m_sOutput_buff_property values: " 74461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "datasize = %u, maxcount = %u, actualcnt = %u, " 74561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "mincount = %u", m_sOutput_buff_property.datasize, 74661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutput_buff_property.maxcount, m_sOutput_buff_property.actualcount, 74761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutput_buff_property.mincount); 74861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&m_sOutput_buff_property; 74961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 75061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 75161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd, VEN_IOCTL_SET_OUTPUT_BUFFER_REQ,(void*)&ioctl_msg) < 0) { 7528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting o/p bufreq failed"); 75361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 75461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 75561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 75661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((portDefn->nBufferCountActual >= m_sInput_buff_property.mincount) && 75761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (portDefn->nBufferCountActual <= m_sInput_buff_property.maxcount)) { 75861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInput_buff_property.actualcount = portDefn->nBufferCountActual; 75961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&m_sInput_buff_property; 76061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 76161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 76261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl(m_nDriver_fd,VEN_IOCTL_SET_INPUT_BUFFER_REQ,(void*)&ioctl_msg) < 0) { 7638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting i/p buffer requirements failed"); 76461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 76561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 76661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 76761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 76861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_sInput_buff_property.datasize != portDefn->nBufferSize) { 7698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("WARNING: Requested i/p bufsize[%u]," 77061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "Driver's updated i/p bufsize = %u", portDefn->nBufferSize, 77161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInput_buff_property.datasize); 77261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 77361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 77461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_level_set = false; 77561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 77661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (venc_set_profile_level(0, 0)) { 77761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("%s(): Profile/Level setting success", __func__); 77861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 77961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (portDefn->nPortIndex == PORT_INDEX_OUT) { 78061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_target_bitrate(portDefn->format.video.nBitrate, 0)) { 78161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 78261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 78361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 78461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ( (portDefn->nBufferCountActual >= m_sOutput_buff_property.mincount) 78561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan && 78661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (m_sOutput_buff_property.maxcount >= portDefn->nBufferCountActual) 78761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan && 78861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (m_sOutput_buff_property.datasize == portDefn->nBufferSize) 78961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ) { 79061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutput_buff_property.actualcount = portDefn->nBufferCountActual; 79161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&m_sOutput_buff_property; 79261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 79361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 79461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_OUTPUT_BUFFER_REQ,(void*)&ioctl_msg) < 0) { 7958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: ioctl VEN_IOCTL_SET_OUTPUT_BUFFER_REQ failed"); 79661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 79761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 79861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 7998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting Output buffer requirements failed"); 80061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 80161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 80261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 8038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid Port Index for OMX_IndexParamPortDefinition"); 80461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 80561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 80661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 807826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev } 80861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoPortFormat: 809826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev { 81061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_PORTFORMATTYPE *portFmt; 81161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan portFmt =(OMX_VIDEO_PARAM_PORTFORMATTYPE *)paramData; 8128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_set_param: OMX_IndexParamVideoPortFormat"); 81361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 81461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (portFmt->nPortIndex == (OMX_U32) PORT_INDEX_IN) { 81561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_color_format(portFmt->eColorFormat)) { 81661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 81761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 81861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (portFmt->nPortIndex == (OMX_U32) PORT_INDEX_OUT) { 81961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_encode_framerate(portFmt->xFramerate, 0)) { 82061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 82161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 82261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 8238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid Port Index for OMX_IndexParamVideoPortFormat"); 82461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 82561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 82661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 827826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev } 82861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoBitrate: 829826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev { 83061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_BITRATETYPE* pParam; 83161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam = (OMX_VIDEO_PARAM_BITRATETYPE*)paramData; 8328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_set_param: OMX_IndexParamVideoBitrate"); 83361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 83461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == (OMX_U32) PORT_INDEX_OUT) { 83561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_target_bitrate(pParam->nTargetBitrate, 0)) { 8368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Target Bit Rate setting failed"); 83761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 83861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 83961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 84061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_ratectrl_cfg(pParam->eControlRate)) { 8418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Rate Control setting failed"); 84261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 84361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 84461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 8458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid Port Index for OMX_IndexParamVideoBitrate"); 84661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 84761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 84861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 849826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev } 85061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoMpeg4: 851826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev { 85261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_MPEG4TYPE* pParam; 85361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 bFrames = 0; 85447e37c4428509524ee576920a98381f3e4872493Nick Pelly 85561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam = (OMX_VIDEO_PARAM_MPEG4TYPE*)paramData; 8568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_set_param: OMX_IndexParamVideoMpeg4"); 85761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 85861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == (OMX_U32) PORT_INDEX_OUT) { 85961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_voptiming_cfg(pParam->nTimeIncRes)) { 8608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting vop_timing failed"); 86161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 86261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 86361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 86461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_profile_set = false; 86561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_level_set = false; 86661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 86761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_profile_level (pParam->eProfile, pParam->eLevel)) { 8688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Unsuccessful in updating Profile and level"); 86961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 87061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 87147e37c4428509524ee576920a98381f3e4872493Nick Pelly 872826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P 87361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else { 87461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->eProfile == OMX_VIDEO_MPEG4ProfileAdvancedSimple) { 87561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nBFrames) { 87661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("INFO: Only 1 Bframe is supported"); 87761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bFrames = 1; 87861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 87961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 88061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nBFrames) { 8818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Warning: B frames not supported"); 88261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bFrames = 0; 88361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 88461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 88561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 88661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 887826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 88847e37c4428509524ee576920a98381f3e4872493Nick Pelly 88961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_intra_period (pParam->nPFrames,bFrames)) { 8908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting intra period failed"); 89161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 89261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 89347e37c4428509524ee576920a98381f3e4872493Nick Pelly 89461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_multislice_cfg(OMX_IndexParamVideoMpeg4,pParam->nSliceHeaderSpacing)) { 8958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Unsuccessful in updating slice_config"); 89661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 89761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 89861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 8998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid Port Index for OMX_IndexParamVideoMpeg4"); 90061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 90161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 90261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 90361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 90461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoH263: 90561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 90661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_H263TYPE* pParam = (OMX_VIDEO_PARAM_H263TYPE*)paramData; 9078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_set_param: OMX_IndexParamVideoH263"); 90861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 bFrames = 0; 90961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 91061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == (OMX_U32) PORT_INDEX_OUT) { 91161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_profile_set = false; 91261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_level_set = false; 91361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 91461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_profile_level (pParam->eProfile, pParam->eLevel)) { 9158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Unsuccessful in updating Profile and level"); 91661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 91761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 91861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 91961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nBFrames) 9208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("WARNING: B frame not supported for H.263"); 92161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 92261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (venc_set_intra_period (pParam->nPFrames, bFrames) == false) { 9238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting intra period failed"); 92461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 92561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 92661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 9278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid Port Index for OMX_IndexParamVideoH263"); 92861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 92961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 93061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 93161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 93261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoAvc: 93361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 9348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_set_param:OMX_IndexParamVideoAvc"); 93561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_AVCTYPE* pParam = (OMX_VIDEO_PARAM_AVCTYPE*)paramData; 93661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 bFrames = 0; 93761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 93861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == (OMX_U32) PORT_INDEX_OUT) { 9398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("pParam->eProfile :%d ,pParam->eLevel %d", 94061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->eProfile,pParam->eLevel); 94161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 94261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_profile_set = false; 94361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_level_set = false; 94461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 94561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_profile_level (pParam->eProfile,pParam->eLevel)) { 9468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Unsuccessful in updating Profile and level %d, %d", 94761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->eProfile, pParam->eLevel); 94861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 94961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 95061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 95161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#ifdef MAX_RES_1080P 95261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else { 95361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->eProfile != OMX_VIDEO_AVCProfileBaseline) { 95461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nBFrames) { 95561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("INFO: Only 1 Bframe is supported"); 95661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bFrames = 1; 95761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 95861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 95961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nBFrames) { 9608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Warning: B frames not supported"); 96161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bFrames = 0; 96261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 96361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 96461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 96561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 96661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#endif 96761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 96861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_intra_period (pParam->nPFrames, bFrames)) { 9698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting intra period failed"); 97061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 97161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 97261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 97361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_entropy_config (pParam->bEntropyCodingCABAC, pParam->nCabacInitIdc)) { 9748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting Entropy failed"); 97561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 97661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 97761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 97861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_inloop_filter (pParam->eLoopFilterMode)) { 9798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting Inloop filter failed"); 98061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 98161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 98261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 98361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_multislice_cfg(OMX_IndexParamVideoAvc, pParam->nSliceHeaderSpacing)) { 9848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("WARNING: Unsuccessful in updating slice_config"); 98561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 98661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 98761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 9888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid Port Index for OMX_IndexParamVideoAvc"); 98961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 99061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 99161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //TBD, lot of other variables to be updated, yet to decide 99261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 99361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 99461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoIntraRefresh: 99561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 9968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_set_param:OMX_IndexParamVideoIntraRefresh"); 99761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_INTRAREFRESHTYPE *intra_refresh = 99861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_VIDEO_PARAM_INTRAREFRESHTYPE *)paramData; 99961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 100061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (intra_refresh->nPortIndex == (OMX_U32) PORT_INDEX_OUT) { 100161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (venc_set_intra_refresh(intra_refresh->eRefreshMode, intra_refresh->nCirMBs) == false) { 10028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting Intra refresh failed"); 100361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 100461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 100561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 10068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid Port Index for OMX_IndexParamVideoIntraRefresh"); 100761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 100861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 100961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 101061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 101161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoErrorCorrection: 101261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 10138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_set_param:OMX_IndexParamVideoErrorCorrection"); 101461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE *error_resilience = 101561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE *)paramData; 101661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 101761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (error_resilience->nPortIndex == (OMX_U32) PORT_INDEX_OUT) { 101861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (venc_set_error_resilience(error_resilience) == false) { 10198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting Intra refresh failed"); 102061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 102161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 102261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 10238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid Port Index for OMX_IndexParamVideoErrorCorrection"); 102461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 102561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 102661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 102761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 102861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoProfileLevelCurrent: 102961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 10308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_set_param:OMX_IndexParamVideoProfileLevelCurrent"); 103161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_PROFILELEVELTYPE *profile_level = 103261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_VIDEO_PARAM_PROFILELEVELTYPE *)paramData; 103361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 103461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (profile_level->nPortIndex == (OMX_U32) PORT_INDEX_OUT) { 103561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_profile_set = false; 103661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_level_set = false; 103761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 103861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_profile_level (profile_level->eProfile, 103961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_level->eLevel)) { 10408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("WARNING: Unsuccessful in updating Profile and level"); 104161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 104261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 104361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 10448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid Port Index for OMX_IndexParamVideoProfileLevelCurrent"); 104561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 104661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 104761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 104861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 104961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoQuantization: 105061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 10518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_set_param:OMX_IndexParamVideoQuantization"); 105261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_QUANTIZATIONTYPE *session_qp = 105361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_VIDEO_PARAM_QUANTIZATIONTYPE *)paramData; 105461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 105561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (session_qp->nPortIndex == (OMX_U32) PORT_INDEX_OUT) { 105661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (venc_set_session_qp (session_qp->nQpI, 105761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan session_qp->nQpP) == false) { 10588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting Session QP failed"); 105961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 106061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 106161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 10628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid Port Index for OMX_IndexParamVideoQuantization"); 106361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 106461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 106561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 106661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 106761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 106861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_QcomIndexParamVideoQPRange: 106961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 10708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_set_param:OMX_QcomIndexParamVideoQPRange"); 107161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_QCOM_VIDEO_PARAM_QPRANGETYPE *qp_range = 107261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_QCOM_VIDEO_PARAM_QPRANGETYPE *)paramData; 107361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 107461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (qp_range->nPortIndex == (OMX_U32) PORT_INDEX_OUT) { 107561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (venc_set_qp_range (qp_range->minQP, 107661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan qp_range->maxQP) == false) { 10778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting QP Range failed"); 107861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 107961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 108061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 10818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid Port Index for OMX_QcomIndexParamVideoQPRange"); 108261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 108361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 108461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 108561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 108661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 108761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_ExtraDataVideoEncoderSliceInfo: 108861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 108961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("venc_set_param: OMX_ExtraDataVideoEncoderSliceInfo"); 109061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 extra_data = *(OMX_U32 *)paramData; 109161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 109261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (venc_set_extradata(extra_data) == false) { 109361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting " 109461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "OMX_ExtraDataVideoEncoderSliceInfo failed"); 109561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 109661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 109761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 109861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 109961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 110061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_ExtraDataVideoLTRInfo: 110161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 110261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("venc_set_param: OMX_ExtraDataVideoLTRInfo"); 110361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 extra_data = *(OMX_U32 *)paramData; 110461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 110561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (venc_set_extradata(extra_data) == false) { 110661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting " 110761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "OMX_ExtraDataVideoLTRInfo failed"); 110861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 110961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 111061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 111161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 111261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 111361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_QcomIndexEnableSliceDeliveryMode: 111461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 111561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_EXTNINDEX_PARAMTYPE* pParam = 111661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (QOMX_EXTNINDEX_PARAMTYPE*)paramData; 111761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 111861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 111961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (venc_set_slice_delivery_mode(pParam->bEnable) == false) { 112061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Setting slice delivery mode failed"); 112161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 112261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 112361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 112461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("OMX_QcomIndexEnableSliceDeliveryMode " 112561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "called on wrong port(%d)", pParam->nPortIndex); 112661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 112761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 112861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 112961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 113061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 113161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_QcomIndexEnableH263PlusPType: 113261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 113361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_EXTNINDEX_PARAMTYPE* pParam = 113461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (QOMX_EXTNINDEX_PARAMTYPE*)paramData; 113561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("OMX_QcomIndexEnableH263PlusPType"); 113661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 113761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 113861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (venc_set_plusptype(pParam->bEnable) == false) { 113961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Setting PlusPType failed for H263"); 114061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 114161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 114261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 114361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("OMX_QcomIndexEnableH263PlusPType " 114461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "called on wrong port(%d)", pParam->nPortIndex); 114561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 114661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 114761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 114861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 114961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 115061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case QOMX_IndexParamVideoLTRMode: 115161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 115261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_VIDEO_PARAM_LTRMODE_TYPE* pParam = 115361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (QOMX_VIDEO_PARAM_LTRMODE_TYPE*)paramData; 115461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 115561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 115661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_ltrmode(pParam->eLTRMode)) { 115761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Setting ltr mode failed"); 115861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 115961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 116061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 116161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("QOMX_IndexParamVideoLTRMode " 116261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "called on wrong port(%d)", pParam->nPortIndex); 116361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 116461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 116561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 116661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 116761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 116861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case QOMX_IndexParamVideoLTRCount: 116961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 117061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_VIDEO_PARAM_LTRCOUNT_TYPE* pParam = 117161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (QOMX_VIDEO_PARAM_LTRCOUNT_TYPE*)paramData; 117261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 117361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 117461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_ltrcount(pParam->nCount)) { 117561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Setting ltr count failed"); 117661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 117761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 117861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 117961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("QOMX_IndexParamVideoLTRCount " 118061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "called on wrong port(%d)", pParam->nPortIndex); 118161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 118261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 118361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 118461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 118561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 118661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoSliceFMO: 118761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 118861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("venc_set_param: Unsupported index 0x%x", index); 118961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 119061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 119161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 119261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 119361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 119461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 119561a2c6a19dbd06a317a419623020e02056661876Praveen Chavanbool venc_dev::venc_set_config(void *configData, OMX_INDEXTYPE index) 119661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 119761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 11988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Inside venc_set_config"); 119961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 120061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (index) { 120161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexConfigVideoBitrate: 120261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 120361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_CONFIG_BITRATETYPE *bit_rate = (OMX_VIDEO_CONFIG_BITRATETYPE *) 120461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan configData; 120561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 120661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_max_allowed_bitrate_check && 120761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan !venc_max_allowed_bitrate_check(bit_rate->nEncodeBitrate)) { 120861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Max Allowed Bitrate Check failed"); 120961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 121061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 121161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 12128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_set_config: OMX_IndexConfigVideoBitrate"); 121361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 121461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (bit_rate->nPortIndex == (OMX_U32)PORT_INDEX_OUT) { 121561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (venc_set_target_bitrate(bit_rate->nEncodeBitrate, 1) == false) { 12168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting Target Bit rate failed"); 121761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 121861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 121961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 12208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid Port Index for OMX_IndexConfigVideoBitrate"); 122161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 122261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 122361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 122461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 122561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexConfigVideoFramerate: 122661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 122761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_CONFIG_FRAMERATETYPE *frame_rate = (OMX_CONFIG_FRAMERATETYPE *) 122861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan configData; 12298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_set_config: OMX_IndexConfigVideoFramerate"); 123061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 123161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (frame_rate->nPortIndex == (OMX_U32)PORT_INDEX_OUT) { 123261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (venc_set_encode_framerate(frame_rate->xEncodeFramerate, 1) == false) { 12338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting Encode Framerate failed"); 123461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 123561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 123661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 12378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid Port Index for OMX_IndexConfigVideoFramerate"); 123861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 123961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 124061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 124161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 124261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case QOMX_IndexConfigVideoIntraperiod: 124361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 12448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_set_param:QOMX_IndexConfigVideoIntraperiod"); 124561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_VIDEO_INTRAPERIODTYPE *intraperiod = 124661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (QOMX_VIDEO_INTRAPERIODTYPE *)configData; 124761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 124861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (intraperiod->nPortIndex == (OMX_U32) PORT_INDEX_OUT) { 124961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (venc_set_intra_period(intraperiod->nPFrames, intraperiod->nBFrames) == false) { 12508767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting intra period failed"); 125161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 125261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 125361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 125461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 125561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 125661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 125761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexConfigVideoIntraVOPRefresh: 125861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 125961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_CONFIG_INTRAREFRESHVOPTYPE *intra_vop_refresh = (OMX_CONFIG_INTRAREFRESHVOPTYPE *) 126061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan configData; 12618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_set_config: OMX_IndexConfigVideoIntraVOPRefresh"); 126261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 126361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (intra_vop_refresh->nPortIndex == (OMX_U32)PORT_INDEX_OUT) { 126461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (venc_set_intra_vop_refresh(intra_vop_refresh->IntraRefreshVOP) == false) { 12658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting Encode Framerate failed"); 126661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 126761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 126861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 12698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid Port Index for OMX_IndexConfigVideoFramerate"); 127061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 127161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 127261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 127361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 127461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexConfigCommonRotate: 127561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 127661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_CONFIG_ROTATIONTYPE *config_rotation = 127761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan reinterpret_cast<OMX_CONFIG_ROTATIONTYPE*>(configData); 127861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 127961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 nFrameWidth; 128061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 12818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("venc_set_config: updating the new Dims"); 128261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan nFrameWidth = m_sVenc_cfg.input_width; 128361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.input_width = m_sVenc_cfg.input_height; 128461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.input_height = nFrameWidth; 128561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&m_sVenc_cfg; 128661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 128761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 128861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_BASE_CFG,(void*)&ioctl_msg) < 0) { 12898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Dimension Change for Rotation failed"); 129061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 129161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 129261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 129361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 129461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 129561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case QOMX_IndexConfigVideoLTRPeriod: 129661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 129761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_VIDEO_CONFIG_LTRPERIOD_TYPE* pParam = 129861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (QOMX_VIDEO_CONFIG_LTRPERIOD_TYPE*)configData; 129961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 130061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 130161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_ltrperiod(pParam->nFrames)) { 130261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Setting ltr period failed"); 130361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 130461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 130561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 130661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("QOMX_IndexConfigVideoLTRPeriod " 130761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "called on wrong port(%d)", pParam->nPortIndex); 130861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 130961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 131061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 131161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 131261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 131361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case QOMX_IndexConfigVideoLTRUse: 131461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 131561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_VIDEO_CONFIG_LTRUSE_TYPE* pParam = 131661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (QOMX_VIDEO_CONFIG_LTRUSE_TYPE*)configData; 131761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 131861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 131961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_ltruse(pParam->nID, pParam->nFrames)) { 132061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Setting ltr use failed"); 132161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 132261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 132361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 132461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("QOMX_IndexConfigVideoLTRUse " 132561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "called on wrong port(%d)", pParam->nPortIndex); 132661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 132761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 132861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 132961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 133061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 133161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 133261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("venc_set_config: Unsupported index = 0x%x", index); 133361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 133461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 133561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 133661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 133761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 133861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 133961a2c6a19dbd06a317a419623020e02056661876Praveen Chavanunsigned venc_dev::venc_stop( void) 134061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 134161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#ifdef MAX_RES_1080P 134261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pmem_free(); 134361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#endif 134461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return ioctl(m_nDriver_fd,VEN_IOCTL_CMD_STOP,NULL); 134561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 134661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 134761a2c6a19dbd06a317a419623020e02056661876Praveen Chavanunsigned venc_dev::venc_pause(void) 134861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 134961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return ioctl(m_nDriver_fd,VEN_IOCTL_CMD_PAUSE,NULL); 135061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 135161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 135261a2c6a19dbd06a317a419623020e02056661876Praveen Chavanunsigned venc_dev::venc_resume(void) 135361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 135461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return ioctl(m_nDriver_fd,VEN_IOCTL_CMD_RESUME,NULL) ; 135547e37c4428509524ee576920a98381f3e4872493Nick Pelly} 135647e37c4428509524ee576920a98381f3e4872493Nick Pelly 1357826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevunsigned venc_dev::venc_start_done(void) 1358826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 135961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return 0; 1360826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 1361826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 13626eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalunsigned venc_dev::venc_set_message_thread_id(pthread_t) 1363826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 136461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return 0; 1365826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 1366826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 136747e37c4428509524ee576920a98381f3e4872493Nick Pellyunsigned venc_dev::venc_start(void) 136847e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 13698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("%s(): Check Profile/Level set in driver before start", 137061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan __func__); 137161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 137261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_profile_level(0, 0)) { 13738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: %s(): Driver Profile/Level is NOT SET", 137461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan __func__); 137561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 13768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("%s(): Driver Profile[%lu]/Level[%lu] successfully SET", 137761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan __func__, codec_profile.profile, profile_level.level); 137861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 137961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 138061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_max_allowed_bitrate_check && 138161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan !venc_max_allowed_bitrate_check(bitrate.target_bitrate)) { 138261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Maximum Allowed Bitrate Check failed"); 138361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return -1; 138461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 138561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 138661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_config_print(); 1387826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 1388826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P 1389826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 139061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((codec_profile.profile == VEN_PROFILE_MPEG4_SP) || 139161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (codec_profile.profile == VEN_PROFILE_H264_BASELINE) || 139261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (codec_profile.profile == VEN_PROFILE_H263_BASELINE)) 139361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buffers_count = MAX_RECON_BUFFERS - 2; 139461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else 139561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buffers_count = MAX_RECON_BUFFERS; 139661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 139761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ltrmode.ltr_mode == (unsigned long)QOMX_VIDEO_LTRMode_Auto) { 139861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buffers_count = MAX_RECON_BUFFERS; 139961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("ltr mode enabled, so set recon buffers " 140061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "count to %d", recon_buffers_count); 140161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 140261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 140361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_allocate_recon_buffers()) 140461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return ioctl(m_nDriver_fd, VEN_IOCTL_CMD_START, NULL); 140561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else { 14068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Failed in creating Recon buffers"); 140761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return -1; 140861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 14096eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 1410826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else 1411826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev return ioctl(m_nDriver_fd, VEN_IOCTL_CMD_START, NULL); 1412826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 1413826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 1414826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 1415826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P 1416826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevOMX_U32 venc_dev::venc_allocate_recon_buffers() 1417826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 141861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 yuv_size; 141961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_ioctl_msg ioctl_msg; 142061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_recon_buff_size recon_buff_size; 142161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 142261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff_size.width = ((m_sVenc_cfg.input_width + 15) / 16) * 16; 142361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff_size.height = ((m_sVenc_cfg.input_height + 15) / 16 ) * 16; 142461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 14258767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Width %d, Height %d, w_round %d, h_round %d", m_sVenc_cfg.input_width, 142661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.input_height, recon_buff_size.width, recon_buff_size.height); 142761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 142861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = NULL; 142961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = (void*)&recon_buff_size; 143061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 143161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_GET_RECON_BUFFER_SIZE, (void*)&ioctl_msg) < 0) { 14328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("VEN_IOCTL_GET_RECON_BUFFER_SIZE Failed for width: %d, Height %d" , 143361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff_size.width, recon_buff_size.height); 143461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 143561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 143661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 14378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("Width %d, Height %d, w_round %d, h_round %d, yuv_size %d alignment %d count %d", 143861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.input_width, m_sVenc_cfg.input_height, recon_buff_size.width, 143961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff_size.height, recon_buff_size.size, recon_buff_size.alignment, 144061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buffers_count); 144161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 144261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan for (int i = 0; i < recon_buffers_count; i++) { 144361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pmem_allocate(recon_buff_size.size, recon_buff_size.alignment,i)) { 14448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Error returned in allocating recon buffers"); 144561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return -1; 144661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 144761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 144861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 144961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return 0; 1450826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 1451826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevOMX_U32 venc_dev::pmem_allocate(OMX_U32 size, OMX_U32 alignment, OMX_U32 count) 1452826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 145361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 pmem_fd = -1; 145461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 width, height; 145561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void *buf_addr = NULL; 145661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_ioctl_msg ioctl_msg; 145761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_recon_addr recon_addr; 145861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int rc = 0; 1459826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 1460826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 146161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[count].ion_device_fd = open (MEM_DEVICE,O_RDONLY); 146261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 146361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (recon_buff[count].ion_device_fd < 0) { 14648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: ION Device open() Failed"); 146561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return -1; 146661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 146761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 146861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[count].alloc_data.len = size; 14696eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef MAX_RES_720P 14709157b7d2c90c853713840ce85a78f5d22600fe1ePraveen Chavan recon_buff[count].alloc_data.ION_HEAP_MASK = ION_HEAP(MEM_HEAP_ID); 14716eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else 14729157b7d2c90c853713840ce85a78f5d22600fe1ePraveen Chavan recon_buff[count].alloc_data.ION_HEAP_MASK = (ION_HEAP(MEM_HEAP_ID) | 147361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ION_HEAP(ION_IOMMU_HEAP_ID)); 14746eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 147561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[count].alloc_data.flags = ION_FLAG_CACHED; 147661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[count].alloc_data.align = clip2(alignment); 147761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 147861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (recon_buff[count].alloc_data.align != 8192) 147961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[count].alloc_data.align = 8192; 148061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 148161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan rc = ioctl(recon_buff[count].ion_device_fd,ION_IOC_ALLOC,&recon_buff[count].alloc_data); 148261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 148361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (rc || !recon_buff[count].alloc_data.handle) { 14848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ION ALLOC memory failed "); 148561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[count].alloc_data.handle=NULL; 148661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return -1; 148761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 148861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 148961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[count].ion_alloc_fd.handle = recon_buff[count].alloc_data.handle; 149061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan rc = ioctl(recon_buff[count].ion_device_fd,ION_IOC_MAP,&recon_buff[count].ion_alloc_fd); 149161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 149261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (rc) { 14938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ION MAP failed "); 1494826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev recon_buff[count].ion_alloc_fd.fd =-1; 1495826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev recon_buff[count].ion_alloc_fd.fd =-1; 1496826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev return -1; 149761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 149861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 149961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pmem_fd = recon_buff[count].ion_alloc_fd.fd; 1500826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else 150161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct pmem_allocation allocation; 150261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pmem_fd = open(MEM_DEVICE, O_RDWR); 150361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 150461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((int)(pmem_fd) < 0) { 15058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Failed to get an pmem handle"); 150661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return -1; 150761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 150861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 150961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan allocation.size = size; 151061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan allocation.align = clip2(alignment); 151161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 151261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (allocation.align != 8192) 151361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan allocation.align = 8192; 151461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 151561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl(pmem_fd, PMEM_ALLOCATE_ALIGNED, &allocation) < 0) { 15168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Aligment(%u) failed with pmem driver Sz(%lu)", 151761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan allocation.align, allocation.size); 151861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return -1; 151961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 152061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 1521826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 152261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan buf_addr = mmap(NULL, size, 152361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PROT_READ | PROT_WRITE, 152461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MAP_SHARED, pmem_fd, 0); 152561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 152661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (buf_addr == (void*) MAP_FAILED) { 152761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan close(pmem_fd); 152861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pmem_fd = -1; 15298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Error returned in allocating recon buffers buf_addr: %p",buf_addr); 15306eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef USE_ION 153161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 153261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl(recon_buff[count].ion_device_fd,ION_IOC_FREE, 153361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &recon_buff[count].alloc_data.handle)) { 153461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("ion recon buffer free failed"); 153561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 153661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 153761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[count].alloc_data.handle = NULL; 153861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[count].ion_alloc_fd.fd =-1; 153961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan close(recon_buff[count].ion_device_fd); 154061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[count].ion_device_fd =-1; 15416eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 154261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return -1; 154361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 1544826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 15458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("Allocated virt:%p, FD: %d of size %d", buf_addr, pmem_fd, size); 1546826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 154761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_addr.buffer_size = size; 154861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_addr.pmem_fd = pmem_fd; 154961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_addr.offset = 0; 155061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_addr.pbuffer = (unsigned char *)buf_addr; 1551826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 155261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&recon_addr; 155361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 1554826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 155561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_RECON_BUFFER, (void*)&ioctl_msg) < 0) { 15568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Failed to set the Recon_buffers"); 155761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return -1; 155861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 1559826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 156061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[count].virtual_address = (unsigned char *) buf_addr; 156161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[count].size = size; 156261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[count].offset = 0; 156361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[count].pmem_fd = pmem_fd; 1564826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 15658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Allocated virt:%p, FD: %d of size %d at index: %d", recon_buff[count].virtual_address, 156661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[count].pmem_fd, recon_buff[count].size, count); 156761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return 0; 1568826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 1569826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 1570826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevOMX_U32 venc_dev::pmem_free() 1571826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 157261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int cnt = 0; 157361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_ioctl_msg ioctl_msg; 157461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_recon_addr recon_addr; 157561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 157661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan for (cnt = 0; cnt < recon_buffers_count; cnt++) { 157761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (recon_buff[cnt].pmem_fd) { 157861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_addr.pbuffer = recon_buff[cnt].virtual_address; 157961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_addr.offset = recon_buff[cnt].offset; 158061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_addr.pmem_fd = recon_buff[cnt].pmem_fd; 158161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_addr.buffer_size = recon_buff[cnt].size; 158261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&recon_addr; 158361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 158461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 158561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl(m_nDriver_fd, VEN_IOCTL_FREE_RECON_BUFFER ,&ioctl_msg) < 0) 158661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("VEN_IOCTL_FREE_RECON_BUFFER failed"); 158761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 158861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan munmap(recon_buff[cnt].virtual_address, recon_buff[cnt].size); 158961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan close(recon_buff[cnt].pmem_fd); 1590826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 159161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 159261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl(recon_buff[cnt].ion_device_fd,ION_IOC_FREE, 159361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &recon_buff[cnt].alloc_data.handle)) { 159461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("ion recon buffer free failed"); 159561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 159661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 159761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[cnt].alloc_data.handle = NULL; 159861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[cnt].ion_alloc_fd.fd =-1; 159961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan close(recon_buff[cnt].ion_device_fd); 160061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[cnt].ion_device_fd =-1; 1601826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 16028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("cleaning Index %d of size %d",cnt,recon_buff[cnt].size); 160361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[cnt].pmem_fd = -1; 160461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[cnt].virtual_address = NULL; 160561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[cnt].offset = 0; 160661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[cnt].alignment = 0; 160761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[cnt].size = 0; 160861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 160961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 161061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 161161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return 0; 1612826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 1613826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 1614826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 1615826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevvoid venc_dev::venc_config_print() 1616826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 1617826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 16188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("ENC_CONFIG: Codec: %d, Profile %d, level : %d", 161961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.codectype, codec_profile.profile, profile_level.level); 1620826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 16218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("ENC_CONFIG: Width: %d, Height:%d, Fps: %d", 162261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.input_width, m_sVenc_cfg.input_height, 162361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.fps_num/m_sVenc_cfg.fps_den); 1624826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 16258767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("ENC_CONFIG: Bitrate: %d, RC: %d, I-Period: %d", 162661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bitrate.target_bitrate, rate_ctrl.rcmode, intra_period.num_pframes); 1627826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 16288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("ENC_CONFIG: qpI: %d, qpP: %d, qpb: 0", 162961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan session_qp.iframeqp, session_qp.pframqp); 1630826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 16318767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("ENC_CONFIG: minQP: %d, maxQP: %d", 163261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan qp_range.minqp, qp_range.maxqp); 16336eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 16348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("ENC_CONFIG: VOP_Resolution: %d, Slice-Mode: %d, Slize_Size: %d", 163561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan voptimecfg.voptime_resolution, multislice.mslice_mode, 163661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan multislice.mslice_size); 1637826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 16388767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("ENC_CONFIG: EntropyMode: %d, CabacModel: %d", 163961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan entropy.longentropysel, entropy.cabacmodel); 1640826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 16418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("ENC_CONFIG: DB-Mode: %d, alpha: %d, Beta: %d", 164261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dbkfilter.db_mode, dbkfilter.slicealpha_offset, 164361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dbkfilter.slicebeta_offset); 1644826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 16458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("ENC_CONFIG: IntraMB/Frame: %d, HEC: %d", 164661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan intra_refresh.mbcount, hec.header_extension); 164747e37c4428509524ee576920a98381f3e4872493Nick Pelly} 164847e37c4428509524ee576920a98381f3e4872493Nick Pelly 164947e37c4428509524ee576920a98381f3e4872493Nick Pellyunsigned venc_dev::venc_flush( unsigned port) 165047e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 165161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_ioctl_msg ioctl_msg; 165261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_bufferflush buffer_index; 165347e37c4428509524ee576920a98381f3e4872493Nick Pelly 165461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (port == PORT_INDEX_IN) { 165561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Calling Input Flush"); 165661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan buffer_index.flush_mode = VEN_FLUSH_INPUT; 165761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&buffer_index; 165861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 165961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 166061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return ioctl (m_nDriver_fd,VEN_IOCTL_CMD_FLUSH,(void*)&ioctl_msg); 166161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (port == PORT_INDEX_OUT) { 166261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Calling Output Flush"); 166361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan buffer_index.flush_mode = VEN_FLUSH_OUTPUT; 166461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&buffer_index; 166561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 166661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return ioctl (m_nDriver_fd,VEN_IOCTL_CMD_FLUSH,(void*)&ioctl_msg); 166761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 166861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return -1; 166961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 167047e37c4428509524ee576920a98381f3e4872493Nick Pelly} 167147e37c4428509524ee576920a98381f3e4872493Nick Pelly 167247e37c4428509524ee576920a98381f3e4872493Nick Pelly//allocating I/P memory from pmem and register with the device 167347e37c4428509524ee576920a98381f3e4872493Nick Pelly 167447e37c4428509524ee576920a98381f3e4872493Nick Pelly 1675826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_use_buf(void *buf_addr, unsigned port,unsigned) 167647e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 167761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_ioctl_msg ioctl_msg = {NULL,NULL}; 167861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct pmem *pmem_tmp; 167961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_bufferpayload dev_buffer = {0}; 168061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_allocatorproperty buff_alloc_property = {0}; 168147e37c4428509524ee576920a98381f3e4872493Nick Pelly 168261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pmem_tmp = (struct pmem *)buf_addr; 168347e37c4428509524ee576920a98381f3e4872493Nick Pelly 16848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_use_buf:: pmem_tmp = %p", pmem_tmp); 168547e37c4428509524ee576920a98381f3e4872493Nick Pelly 168661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (port == PORT_INDEX_IN) { 168761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.pbuffer = (OMX_U8 *)pmem_tmp->buffer; 168861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.fd = pmem_tmp->fd; 168961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.maped_size = pmem_tmp->size; 169061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.sz = pmem_tmp->size; 169161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.offset = pmem_tmp->offset; 169247e37c4428509524ee576920a98381f3e4872493Nick Pelly 169361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((m_sVenc_cfg.input_height %16 !=0) || (m_sVenc_cfg.input_width%16 != 0)) { 169461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long ht = m_sVenc_cfg.input_height; 169561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long wd = m_sVenc_cfg.input_width; 169661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int luma_size, luma_size_2k; 1697120b7e44bc2419b5f9f03bc2af39c92d134189b7Ajay Dudani 169861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ht = (ht + 15) & ~15; 169961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan wd = (wd + 15) & ~15; 1700120b7e44bc2419b5f9f03bc2af39c92d134189b7Ajay Dudani 170161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan luma_size = ht * wd; 170261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan luma_size_2k = (luma_size + 2047) & ~2047; 1703120b7e44bc2419b5f9f03bc2af39c92d134189b7Ajay Dudani 170461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.sz = luma_size_2k + ((luma_size/2 + 2047) & ~2047); 17052fd0565a057f63bff8abca2a4a5ce2a77a004fe8Haynes Mathew George#ifdef USE_ION 170661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = NULL; 170761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = (void*)&buff_alloc_property; 170861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 170961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_GET_INPUT_BUFFER_REQ,(void*)&ioctl_msg) < 0) { 17108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: venc_use_buf:get input buffer failed "); 171161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 171261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 171361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 171461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (buff_alloc_property.alignment < 4096) { 171561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.sz = ((dev_buffer.sz + 4095) & ~4095); 171661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 171761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.sz = ((dev_buffer.sz + (buff_alloc_property.alignment - 1)) & 171861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ~(buff_alloc_property.alignment - 1)); 171961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 172061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 17212fd0565a057f63bff8abca2a4a5ce2a77a004fe8Haynes Mathew George#endif 172261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.maped_size = dev_buffer.sz; 172361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 1724120b7e44bc2419b5f9f03bc2af39c92d134189b7Ajay Dudani 172561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&dev_buffer; 172661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 17272fd0565a057f63bff8abca2a4a5ce2a77a004fe8Haynes Mathew George 17288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_use_buf:pbuffer = %x,fd = %x, offset = %d, maped_size = %d", \ 172947e37c4428509524ee576920a98381f3e4872493Nick Pelly dev_buffer.pbuffer, \ 173047e37c4428509524ee576920a98381f3e4872493Nick Pelly dev_buffer.fd, \ 173147e37c4428509524ee576920a98381f3e4872493Nick Pelly dev_buffer.offset, \ 173247e37c4428509524ee576920a98381f3e4872493Nick Pelly dev_buffer.maped_size); 173347e37c4428509524ee576920a98381f3e4872493Nick Pelly 173461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_INPUT_BUFFER,&ioctl_msg) < 0) { 17358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: venc_use_buf:set input buffer failed "); 173661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 173761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 173861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (port == PORT_INDEX_OUT) { 173961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.pbuffer = (OMX_U8 *)pmem_tmp->buffer; 174061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.fd = pmem_tmp->fd; 174161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.sz = pmem_tmp->size; 174261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.maped_size = pmem_tmp->size; 174361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.offset = pmem_tmp->offset; 174461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&dev_buffer; 174561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 174647e37c4428509524ee576920a98381f3e4872493Nick Pelly 17478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_use_buf:pbuffer = %x,fd = %x, offset = %d, maped_size = %d", \ 174847e37c4428509524ee576920a98381f3e4872493Nick Pelly dev_buffer.pbuffer, \ 174947e37c4428509524ee576920a98381f3e4872493Nick Pelly dev_buffer.fd, \ 175047e37c4428509524ee576920a98381f3e4872493Nick Pelly dev_buffer.offset, \ 175147e37c4428509524ee576920a98381f3e4872493Nick Pelly dev_buffer.maped_size); 175247e37c4428509524ee576920a98381f3e4872493Nick Pelly 175361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_OUTPUT_BUFFER,&ioctl_msg) < 0) { 17548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: venc_use_buf:set output buffer failed "); 175561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 175661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 175761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 17588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: venc_use_buf:Invalid Port Index "); 175961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 176047e37c4428509524ee576920a98381f3e4872493Nick Pelly } 176147e37c4428509524ee576920a98381f3e4872493Nick Pelly 176261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 176347e37c4428509524ee576920a98381f3e4872493Nick Pelly} 176447e37c4428509524ee576920a98381f3e4872493Nick Pelly 176547e37c4428509524ee576920a98381f3e4872493Nick Pellybool venc_dev::venc_free_buf(void *buf_addr, unsigned port) 176647e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 176761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_ioctl_msg ioctl_msg = {NULL,NULL}; 176861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct pmem *pmem_tmp; 176961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_bufferpayload dev_buffer = {0}; 177061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 177161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pmem_tmp = (struct pmem *)buf_addr; 177247e37c4428509524ee576920a98381f3e4872493Nick Pelly 17738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_use_buf:: pmem_tmp = %p", pmem_tmp); 177461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 177561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (port == PORT_INDEX_IN) { 177661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.pbuffer = (OMX_U8 *)pmem_tmp->buffer; 177761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.fd = pmem_tmp->fd; 177861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.maped_size = pmem_tmp->size; 177961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.sz = pmem_tmp->size; 178061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.offset = pmem_tmp->offset; 178161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&dev_buffer; 178261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 178361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 17848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_free_buf:pbuffer = %x,fd = %x, offset = %d, maped_size = %d", \ 178547e37c4428509524ee576920a98381f3e4872493Nick Pelly dev_buffer.pbuffer, \ 178647e37c4428509524ee576920a98381f3e4872493Nick Pelly dev_buffer.fd, \ 178747e37c4428509524ee576920a98381f3e4872493Nick Pelly dev_buffer.offset, \ 178847e37c4428509524ee576920a98381f3e4872493Nick Pelly dev_buffer.maped_size); 178947e37c4428509524ee576920a98381f3e4872493Nick Pelly 179061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_CMD_FREE_INPUT_BUFFER,&ioctl_msg) < 0) { 17918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: venc_free_buf: free input buffer failed "); 179261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 179361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 179461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (port == PORT_INDEX_OUT) { 179561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.pbuffer = (OMX_U8 *)pmem_tmp->buffer; 179661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.fd = pmem_tmp->fd; 179761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.sz = pmem_tmp->size; 179861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.maped_size = pmem_tmp->size; 179961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.offset = pmem_tmp->offset; 180061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&dev_buffer; 180161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 180247e37c4428509524ee576920a98381f3e4872493Nick Pelly 18038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_free_buf:pbuffer = %x,fd = %x, offset = %d, maped_size = %d", \ 180447e37c4428509524ee576920a98381f3e4872493Nick Pelly dev_buffer.pbuffer, \ 180547e37c4428509524ee576920a98381f3e4872493Nick Pelly dev_buffer.fd, \ 180647e37c4428509524ee576920a98381f3e4872493Nick Pelly dev_buffer.offset, \ 180747e37c4428509524ee576920a98381f3e4872493Nick Pelly dev_buffer.maped_size); 180847e37c4428509524ee576920a98381f3e4872493Nick Pelly 180961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_CMD_FREE_OUTPUT_BUFFER,&ioctl_msg) < 0) { 18108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: venc_free_buf: free output buffer failed "); 181161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 181261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 181361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 18148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: venc_free_buf:Invalid Port Index "); 181561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 181647e37c4428509524ee576920a98381f3e4872493Nick Pelly } 181747e37c4428509524ee576920a98381f3e4872493Nick Pelly 181861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 181947e37c4428509524ee576920a98381f3e4872493Nick Pelly} 182047e37c4428509524ee576920a98381f3e4872493Nick Pelly 1821c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavanbool venc_dev::venc_color_align(OMX_BUFFERHEADERTYPE *buffer, 1822c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan OMX_U32 width, OMX_U32 height) 1823c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan{ 1824c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan DEBUG_PRINT_ERROR("%s not implemented!", __func__); 1825c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan return OMX_ErrorUnsupportedSetting; 1826c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan} 1827c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan 1828826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_empty_buf(void *buffer, void *pmem_data_buf,unsigned,unsigned) 182947e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 183061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_buffer frameinfo; 183161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct pmem *temp_buffer; 183261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_ioctl_msg ioctl_msg; 183361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct OMX_BUFFERHEADERTYPE *bufhdr; 183461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 183561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (buffer == NULL) { 18368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: venc_etb: buffer is NULL"); 183761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 183861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 183961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 184061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufhdr = (OMX_BUFFERHEADERTYPE *)buffer; 184161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 18428767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Input buffer length %d",bufhdr->nFilledLen); 184361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 184461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pmem_data_buf) { 18458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Internal PMEM addr for i/p Heap UseBuf: %p", pmem_data_buf); 184661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan frameinfo.ptrbuffer = (OMX_U8 *)pmem_data_buf; 184761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 18488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Shared PMEM addr for i/p PMEM UseBuf/AllocateBuf: %p", bufhdr->pBuffer); 184961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan frameinfo.ptrbuffer = (OMX_U8 *)bufhdr->pBuffer; 185061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 185161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 185261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan frameinfo.clientdata = (void *) buffer; 185361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan frameinfo.sz = bufhdr->nFilledLen; 185461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan frameinfo.len = bufhdr->nFilledLen; 185561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan frameinfo.flags = bufhdr->nFlags; 185661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan frameinfo.offset = bufhdr->nOffset; 185761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan frameinfo.timestamp = bufhdr->nTimeStamp; 18588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("i/p TS = %u", (OMX_U32)frameinfo.timestamp); 185961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = &frameinfo; 186061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 186161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 186261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("DBG: i/p frameinfo: bufhdr->pBuffer = %p, ptrbuffer = %p, offset = %u, len = %u", 186361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufhdr->pBuffer, frameinfo.ptrbuffer, frameinfo.offset, frameinfo.len); 186461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 186561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl(m_nDriver_fd,VEN_IOCTL_CMD_ENCODE_FRAME,&ioctl_msg) < 0) { 186661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Generate an async error and move to invalid state*/ 186761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 186861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 186961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 18708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (m_debug.in_buffer_log) { 18718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan venc_input_log_buffers(bufhdr, pmem_data_bufr, frameinfo.len); 187261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 187361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 187461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 187547e37c4428509524ee576920a98381f3e4872493Nick Pelly} 1876826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_fill_buf(void *buffer, void *pmem_data_buf,unsigned,unsigned) 187747e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 187861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_ioctl_msg ioctl_msg = {NULL,NULL}; 187961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct pmem *temp_buffer = NULL; 188061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_buffer frameinfo; 188161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct OMX_BUFFERHEADERTYPE *bufhdr; 188261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 188361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (buffer == NULL) { 188461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 188561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 188661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 188761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufhdr = (OMX_BUFFERHEADERTYPE *)buffer; 188861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 188961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pmem_data_buf) { 18908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Internal PMEM addr for o/p Heap UseBuf: %p", pmem_data_buf); 189161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan frameinfo.ptrbuffer = (OMX_U8 *)pmem_data_buf; 189261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 18938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Shared PMEM addr for o/p PMEM UseBuf/AllocateBuf: %p", bufhdr->pBuffer); 189461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan frameinfo.ptrbuffer = (OMX_U8 *)bufhdr->pBuffer; 189561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 189661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 189761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan frameinfo.clientdata = buffer; 189861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan frameinfo.sz = bufhdr->nAllocLen; 189961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan frameinfo.flags = bufhdr->nFlags; 190061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan frameinfo.offset = bufhdr->nOffset; 190161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 190261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = &frameinfo; 190361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 190461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("DBG: o/p frameinfo: bufhdr->pBuffer = %p, ptrbuffer = %p, offset = %u, len = %u", 190561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufhdr->pBuffer, frameinfo.ptrbuffer, frameinfo.offset, frameinfo.len); 190661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 190761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_CMD_FILL_OUTPUT_BUFFER,&ioctl_msg) < 0) { 19088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: ioctl VEN_IOCTL_CMD_FILL_OUTPUT_BUFFER failed"); 190961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 191061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 191161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 191261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 1913826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 1914826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 1915826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_set_slice_delivery_mode(OMX_BOOL enable) 1916826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 191761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 191861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Set slice_delivery_mode: %d", enable); 191961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 192061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (multislice.mslice_mode == VEN_MSLICE_CNT_MB) { 192161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl(m_nDriver_fd, VEN_IOCTL_SET_SLICE_DELIVERY_MODE) < 0) { 192261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Request for setting slice delivery mode failed"); 192361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 192461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 192561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 192661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("WARNING: slice_mode[%d] is not VEN_MSLICE_CNT_MB to set " 192761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "slice delivery mode to the driver.", multislice.mslice_mode); 192861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 192961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 193061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 1931826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 1932826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 19336eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalbool venc_dev::venc_set_plusptype(OMX_BOOL enable) 1934b79c7e8bccc229ae7d431392c0cd7c5fe24f1cd0Rom Lemarchand{ 193561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 193661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_plusptype plusptype = {0}; 193761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("Set plusptype: %d", enable); 193861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan plusptype.plusptype_enable = enable; 193961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&plusptype; 194061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 194161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 194261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl(m_nDriver_fd, VEN_IOCTL_SET_H263_PLUSPTYPE,(void*)&ioctl_msg) < 0) { 194361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Request for setting plusptype for h263 failed"); 194461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 194561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 194661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 194761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 1948b79c7e8bccc229ae7d431392c0cd7c5fe24f1cd0Rom Lemarchand} 1949b79c7e8bccc229ae7d431392c0cd7c5fe24f1cd0Rom Lemarchand 19506eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalbool venc_dev::venc_set_ltrmode(QOMX_VIDEO_LTRMODETYPE mode) 1951b79c7e8bccc229ae7d431392c0cd7c5fe24f1cd0Rom Lemarchand{ 195261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 195361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ltrmode ltr_mode; 195461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ltr_mode.ltr_mode = (unsigned long)mode; 195561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Set ltr mode: %d", mode); 195661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)<r_mode; 195761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 195861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 195961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd, VEN_IOCTL_SET_LTRMODE, (void*)&ioctl_msg) < 0) { 196061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting ltrmode failed"); 196161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 196261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 196361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 196461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ltrmode.ltr_mode = (unsigned long)mode; 196561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 19666eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal} 19676eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 19686eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalbool venc_dev::venc_set_ltrcount(OMX_U32 count) 19696eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal{ 197061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 197161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ltrcount ltr_count; 197261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ltr_count.ltr_count = (unsigned long)count; 197361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Set ltr count: %d", count); 197461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)<r_count; 197561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 197661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 197761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd, VEN_IOCTL_SET_LTRCOUNT, (void*)&ioctl_msg) < 0) { 197861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting ltrcount failed"); 197961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 198061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 198161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 198261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ltrcount.ltr_count = (unsigned long)count; 198361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 19846eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal} 19856eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 19866eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalbool venc_dev::venc_set_ltrperiod(OMX_U32 period) 19876eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal{ 198861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 198961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ltrperiod ltr_period; 199061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ltr_period.ltr_period = (unsigned long)period; 199161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Set ltr period: %d", period); 199261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)<r_period; 199361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 199461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 199561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd, VEN_IOCTL_SET_LTRPERIOD, (void*)&ioctl_msg) < 0) { 199661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting ltrperiod failed"); 199761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 199861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 199961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 200061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ltrperiod.ltr_period = (unsigned long)period; 200161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 20026eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal} 20036eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 20046eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalbool venc_dev::venc_set_ltruse(OMX_U32 id, OMX_U32 frames) 20056eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal{ 200661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 200761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ltruse ltr_use; 200861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ltr_use.ltr_id = (unsigned long)id; 200961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ltr_use.ltr_frames = (unsigned long)frames; 201061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Set ltr use: id = %d, ltr_frames = %d", id, frames); 201161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)<r_use; 201261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 201361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 201461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd, VEN_IOCTL_SET_LTRUSE, (void*)&ioctl_msg) < 0) { 201561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting ltruse failed"); 201661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 201761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 201861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 201961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 202061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 20213145f89c1398e32bb7fc6cc03866388f42d2bad3Deva Ramasubramanian 2022826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_set_extradata(OMX_U32 extra_data) 2023826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 202461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 202561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("venc_set_extradata:: %x", extra_data); 202661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&extra_data; 202761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 202861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 202961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd, VEN_IOCTL_SET_EXTRADATA, (void*)&ioctl_msg) < 0) { 203061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting extradata failed"); 203161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 203261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 203361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 203461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 203547e37c4428509524ee576920a98381f3e4872493Nick Pelly} 203647e37c4428509524ee576920a98381f3e4872493Nick Pelly 203747e37c4428509524ee576920a98381f3e4872493Nick Pellybool venc_dev::venc_set_session_qp(OMX_U32 i_frame_qp, OMX_U32 p_frame_qp) 203847e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 203961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 204061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_sessionqp qp = {0, 0}; 204161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("venc_set_session_qp:: i_frame_qp = %d, p_frame_qp = %d", i_frame_qp, 204261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan p_frame_qp); 204361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 204461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan qp.iframeqp = i_frame_qp; 204561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan qp.pframqp = p_frame_qp; 204661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 204761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&qp; 204861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 204961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 205061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_SESSION_QP,(void*)&ioctl_msg)< 0) { 20518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting session qp failed"); 205261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 205361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 205461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 205561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan session_qp.iframeqp = i_frame_qp; 205661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan session_qp.pframqp = p_frame_qp; 205761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 205861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 205947e37c4428509524ee576920a98381f3e4872493Nick Pelly} 206047e37c4428509524ee576920a98381f3e4872493Nick Pelly 20616eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalbool venc_dev::venc_set_qp_range(OMX_U32 min_qp, OMX_U32 max_qp) 20626eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal{ 206361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 206461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_qprange qp = {0, 0}; 206561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("venc_set_qp_range:: min_qp = %d, max_qp = %d", min_qp, 206661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan max_qp); 206761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 206861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan qp.minqp = min_qp; 206961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan qp.maxqp = max_qp; 207061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 207161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&qp; 207261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 207361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 207461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_QP_RANGE,(void*)&ioctl_msg)< 0) { 20758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting qp range failed"); 207661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 207761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 207861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 207961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan qp_range.minqp= min_qp; 208061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan qp_range.maxqp= max_qp; 208161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 208261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 20836eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal} 20846eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 208547e37c4428509524ee576920a98381f3e4872493Nick Pellybool venc_dev::venc_set_profile_level(OMX_U32 eProfile,OMX_U32 eLevel) 208647e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 208761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 208861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_profile requested_profile; 208961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct ven_profilelevel requested_level; 209061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned const int *profile_tbl = NULL; 209161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long mb_per_frame = 0, mb_per_sec = 0; 209261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("venc_set_profile_level:: eProfile = %d, Level = %d", 209361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eProfile, eLevel); 209461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mb_per_frame = ((m_sVenc_cfg.input_height + 15) >> 4)* 209561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ((m_sVenc_cfg.input_width + 15) >> 4); 209661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 209761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((eProfile == 0) && (eLevel == 0) && m_profile_set && m_level_set) { 209861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Set profile/level was done already"); 209961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 210047e37c4428509524ee576920a98381f3e4872493Nick Pelly } 210161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 210261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eProfile && eLevel) { 210361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* non-zero values will be set by user, saving the same*/ 210461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_eProfile = eProfile; 210561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_eLevel = eLevel; 210661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Save profile/level (%d/%d) for max allowed bitrate check", 210761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_eProfile, m_eLevel); 210847e37c4428509524ee576920a98381f3e4872493Nick Pelly } 210947e37c4428509524ee576920a98381f3e4872493Nick Pelly 211061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("Validating Profile/Level from table"); 211147e37c4428509524ee576920a98381f3e4872493Nick Pelly 211261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_validate_profile_level(&eProfile, &eLevel)) { 21138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("ERROR: Profile/Level validation failed"); 211461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 2115826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev } 211661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 211761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_sVenc_cfg.codectype == VEN_CODEC_MPEG4) { 211861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("eProfile = %d, OMX_VIDEO_MPEG4ProfileSimple = %d and " 211961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "OMX_VIDEO_MPEG4ProfileAdvancedSimple = %d", eProfile, 212061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4ProfileAdvancedSimple); 212161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 212261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eProfile == OMX_VIDEO_MPEG4ProfileSimple) { 212361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_profile.profile = VEN_PROFILE_MPEG4_SP; 212461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_tbl = (unsigned int const *) 212561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (&mpeg4_profile_level_table[MPEG4_SP_START]); 212661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_tbl += MPEG4_720P_LEVEL*5; 212761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (eProfile == OMX_VIDEO_MPEG4ProfileAdvancedSimple) { 212861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_profile.profile = VEN_PROFILE_MPEG4_ASP; 212961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_tbl = (unsigned int const *) 213061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (&mpeg4_profile_level_table[MPEG4_ASP_START]); 213161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_tbl += MPEG4_720P_LEVEL*5; 213261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 21338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("ERROR: Unsupported MPEG4 profile = %u", 213461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eProfile); 213561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 2136826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev } 213761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 213861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("eLevel = %d, OMX_VIDEO_MPEG4Level0 = %d, OMX_VIDEO_MPEG4Level1 = %d," 213961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "OMX_VIDEO_MPEG4Level2 = %d, OMX_VIDEO_MPEG4Level3 = %d, OMX_VIDEO_MPEG4Level4 = %d," 214061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "OMX_VIDEO_MPEG4Level5 = %d", eLevel, OMX_VIDEO_MPEG4Level0, OMX_VIDEO_MPEG4Level1, 214161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_MPEG4Level2, OMX_VIDEO_MPEG4Level3, OMX_VIDEO_MPEG4Level4, OMX_VIDEO_MPEG4Level5); 214261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 214361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (mb_per_frame >= 3600) { 214461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (requested_profile.profile == VEN_PROFILE_MPEG4_ASP) 214561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_MPEG4_5; 214661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 214761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (requested_profile.profile == VEN_PROFILE_MPEG4_SP) 214861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_MPEG4_6; 214961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 215061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (eLevel) { 215161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_MPEG4Level0: 215261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_MPEG4_0; 215361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 215461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_MPEG4Level1: 215561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_MPEG4_1; 215661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 215761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_MPEG4Level2: 215861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_MPEG4_2; 215961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 216061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_MPEG4Level3: 216161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_MPEG4_3; 216261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 216361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_MPEG4Level4a: 216461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_MPEG4_4; 216561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 216661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_MPEG4Level5: 216761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mb_per_sec = mb_per_frame * (m_sVenc_cfg.fps_num / m_sVenc_cfg.fps_den); 216861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 216961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((requested_profile.profile == VEN_PROFILE_MPEG4_SP) && (mb_per_frame >= profile_tbl[0]) && 217061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (mb_per_sec >= profile_tbl[1])) { 21718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("MPEG4 Level 6 is set for 720p resolution"); 217261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_MPEG4_6; 217361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 21748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("MPEG4 Level 5 is set for non-720p resolution"); 217561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_MPEG4_5; 217661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 217761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 217861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 217961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 218061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 218161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // TODO update corresponding levels for MPEG4_LEVEL_3b,MPEG4_LEVEL_6 218261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 218361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 218461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 218561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (m_sVenc_cfg.codectype == VEN_CODEC_H263) { 218661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eProfile == OMX_VIDEO_H263ProfileBaseline) { 218761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_profile.profile = VEN_PROFILE_H263_BASELINE; 218861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 21898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("ERROR: Unsupported H.263 profile = %u", 219061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_profile.profile); 219161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 219261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 219361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 219461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //profile level 219561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (eLevel) { 219661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_H263Level10: 219761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H263_10; 219861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 219961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_H263Level20: 220061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H263_20; 220161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 220261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_H263Level30: 220361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H263_30; 220461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 220561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_H263Level40: 220661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H263_40; 220761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 220861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_H263Level45: 220961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H263_45; 221061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 221161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_H263Level50: 221261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H263_50; 221361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 221461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_H263Level60: 221561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H263_60; 221661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 221761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_H263Level70: 221861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H263_70; 221961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 222061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 222161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 222261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 222361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 222461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (m_sVenc_cfg.codectype == VEN_CODEC_H264) { 222561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eProfile == OMX_VIDEO_AVCProfileBaseline) { 222661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_profile.profile = VEN_PROFILE_H264_BASELINE; 222761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (eProfile == OMX_VIDEO_AVCProfileMain) { 222861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_profile.profile = VEN_PROFILE_H264_MAIN; 222961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (eProfile == OMX_VIDEO_AVCProfileHigh) { 223061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_profile.profile = VEN_PROFILE_H264_HIGH; 223161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 22328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("ERROR: Unsupported H.264 profile = %u", 223361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_profile.profile); 223461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 223561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 223661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 223761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //profile level 223861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (eLevel) { 223961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_AVCLevel1: 224061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H264_1; 224161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 224261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_AVCLevel1b: 224361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H264_1b; 224461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 224561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_AVCLevel11: 224661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H264_1p1; 224761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 224861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_AVCLevel12: 224961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H264_1p2; 225061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 225161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_AVCLevel13: 225261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H264_1p3; 225361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 225461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_AVCLevel2: 225561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H264_2; 225661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 225761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_AVCLevel21: 225861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H264_2p1; 225961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 226061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_AVCLevel22: 226161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H264_2p2; 226261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 226361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_AVCLevel3: 226461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H264_3; 226561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 226661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_AVCLevel31: 226761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H264_3p1; 226861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 226961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_AVCLevel32: 227061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H264_3p2; 227161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 227261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_AVCLevel4: 227361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H264_4; 227461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 227561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default : 22768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Unsupported H.264 level= %u", 227761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level); 227861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 227961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 2280826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev } 228147e37c4428509524ee576920a98381f3e4872493Nick Pelly } 228261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 228361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!m_profile_set) { 228461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&requested_profile; 228561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 228661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 228761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_CODEC_PROFILE,(void*)&ioctl_msg)< 0) { 22888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting profile failed"); 228961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 229061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 229161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 229261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan codec_profile.profile = requested_profile.profile; 229361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_profile_set = true; 229461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Set codec profile = 0x%x", codec_profile.profile); 229547e37c4428509524ee576920a98381f3e4872493Nick Pelly } 229661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 229761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!m_level_set) { 229861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&requested_level; 229961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 230061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 230161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_PROFILE_LEVEL,(void*)&ioctl_msg)< 0) { 23028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting profile level failed"); 230361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 230461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 230561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 230661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_level.level = requested_level.level; 230761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_level_set = true; 230861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Set codec level = 0x%x", profile_level.level); 230947e37c4428509524ee576920a98381f3e4872493Nick Pelly } 231047e37c4428509524ee576920a98381f3e4872493Nick Pelly 231161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 231247e37c4428509524ee576920a98381f3e4872493Nick Pelly} 231347e37c4428509524ee576920a98381f3e4872493Nick Pelly 2314826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_set_voptiming_cfg( OMX_U32 TimeIncRes) 2315826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 231661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 231761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_voptimingcfg vop_timing_cfg; 2318826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 231961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("venc_set_voptiming_cfg: TimeRes = %u", 232061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan TimeIncRes); 2321826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 232261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan vop_timing_cfg.voptime_resolution = TimeIncRes; 2323826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 232461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&vop_timing_cfg; 232561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 2326826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 232761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_VOP_TIMING_CFG,(void*)&ioctl_msg)< 0) { 23288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting Vop Timing failed"); 232961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 233061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 233161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 233261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan voptimecfg.voptime_resolution = vop_timing_cfg.voptime_resolution; 233361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 2334826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 2335826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 2336826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_set_intra_period(OMX_U32 nPFrames, OMX_U32 nBFrames) 233747e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 233861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 233961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_intraperiod intraperiod_cfg; 234061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 234161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("venc_set_intra_period: nPFrames = %u", 234261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan nPFrames); 234361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan intraperiod_cfg.num_pframes = nPFrames; 234461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 234561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((codec_profile.profile == VEN_PROFILE_MPEG4_ASP) || 234661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (codec_profile.profile == VEN_PROFILE_H264_MAIN) || 234761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (codec_profile.profile == VEN_PROFILE_H264_HIGH)) { 2348826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P 234961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 235061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (nBFrames) { 235161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("INFO: Only 1 Bframe is supported"); 235261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan intraperiod_cfg.num_bframes = 1; 235361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else 235461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan intraperiod_cfg.num_bframes = 0; 235561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 2356826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else 235761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 235861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (nBFrames) { 235961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("B frames not supported"); 236061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan intraperiod_cfg.num_bframes = 0; 236161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 236261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("B frames not supported"); 236361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan intraperiod_cfg.num_bframes = 0; 236461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 236561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 2366826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 236761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else 236861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan intraperiod_cfg.num_bframes = 0; 236961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 237061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("venc_set_intra_period: nPFrames = %u nBFrames = %u", 237161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan intraperiod_cfg.num_pframes, intraperiod_cfg.num_bframes); 237261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&intraperiod_cfg; 237361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 237461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 237561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_INTRA_PERIOD,(void*)&ioctl_msg)< 0) { 23768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting intra period failed"); 237761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 237861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 237961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 238061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan intra_period.num_pframes = intraperiod_cfg.num_pframes; 238161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan intra_period.num_bframes = intraperiod_cfg.num_bframes; 238261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 238347e37c4428509524ee576920a98381f3e4872493Nick Pelly} 238447e37c4428509524ee576920a98381f3e4872493Nick Pelly 2385826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_set_entropy_config(OMX_BOOL enable, OMX_U32 i_cabac_level) 238647e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 238761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 238861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_entropycfg entropy_cfg; 238947e37c4428509524ee576920a98381f3e4872493Nick Pelly 239061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memset(&entropy_cfg,0,sizeof(entropy_cfg)); 23918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_set_entropy_config: CABAC = %u level: %u", enable, i_cabac_level); 239261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 239361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (enable &&(codec_profile.profile != VEN_PROFILE_H264_BASELINE)) { 239461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan entropy_cfg.longentropysel = VEN_ENTROPY_MODEL_CABAC; 239561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 239661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (i_cabac_level == 0) { 239761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan entropy_cfg.cabacmodel = VEN_CABAC_MODEL_0; 239861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 2399826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 2400826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P 240161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else { 240261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Invalid model set (%d) defaulting to model 0",i_cabac_level); 240361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan entropy_cfg.cabacmodel = VEN_CABAC_MODEL_0; 240461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 240561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 2406826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else 240761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (i_cabac_level == 1) { 240861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan entropy_cfg.cabacmodel = VEN_CABAC_MODEL_1; 240961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (i_cabac_level == 2) { 241061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan entropy_cfg.cabacmodel = VEN_CABAC_MODEL_2; 241161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 241261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 2413826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 241461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (!enable) { 241561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan entropy_cfg.longentropysel = VEN_ENTROPY_MODEL_CAVLC; 241661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 24178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Invalid Entropy mode for Baseline Profile"); 241861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 241961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 242061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 242161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&entropy_cfg; 242261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 242361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 242461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_ENTROPY_CFG,(void*)&ioctl_msg)< 0) { 24258767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting entropy config failed"); 242661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 242761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 242861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 242961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan entropy.longentropysel = entropy_cfg.longentropysel; 243061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan entropy.cabacmodel = entropy_cfg.cabacmodel; 243161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 243247e37c4428509524ee576920a98381f3e4872493Nick Pelly} 243347e37c4428509524ee576920a98381f3e4872493Nick Pelly 2434826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_set_multislice_cfg(OMX_INDEXTYPE Codec, OMX_U32 nSlicesize) // MB 243547e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 243661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL, NULL}; 243761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool status = true; 243861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_multiclicecfg multislice_cfg; 243961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 244061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((Codec != OMX_IndexParamVideoH263) && (nSlicesize)) { 244161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan multislice_cfg.mslice_mode = VEN_MSLICE_CNT_MB; 244261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan multislice_cfg.mslice_size = nSlicesize; 244361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 244461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan multislice_cfg.mslice_mode = VEN_MSLICE_OFF; 244561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan multislice_cfg.mslice_size = 0; 244661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 244761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 24488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("%s(): mode = %u, size = %u", __func__, multislice_cfg.mslice_mode, 244961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan multislice_cfg.mslice_size); 245061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 245161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&multislice_cfg; 245261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 245361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 245461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd, VEN_IOCTL_SET_MULTI_SLICE_CFG,(void*)&ioctl_msg) < 0) { 24558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting multi-slice cfg failed"); 245661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status = false; 245761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 245861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan multislice.mslice_mode = multislice_cfg.mslice_mode; 245961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan multislice.mslice_size = nSlicesize; 246061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 246161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 246261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return status; 2463826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 2464826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 2465826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_set_intra_refresh(OMX_VIDEO_INTRAREFRESHTYPE ir_mode, OMX_U32 irMBs) 2466826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 246761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL, NULL}; 246861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool status = true; 246961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_intrarefresh intraRefresh_cfg; 247061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 247161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // There is no disabled mode. Disabled mode is indicated by a 0 count. 247261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (irMBs == 0 || ir_mode == OMX_VIDEO_IntraRefreshMax) { 247361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan intraRefresh_cfg.irmode = VEN_IR_OFF; 247461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan intraRefresh_cfg.mbcount = 0; 247561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if ((ir_mode == OMX_VIDEO_IntraRefreshCyclic) && 247661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (irMBs < ((m_sVenc_cfg.input_width * m_sVenc_cfg.input_height)>>8))) { 247761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan intraRefresh_cfg.irmode = VEN_IR_CYCLIC; 247861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan intraRefresh_cfg.mbcount = irMBs; 247961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 24808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid IntraRefresh Parameters:" 248161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "mb count: %d, mb mode:%d", irMBs, ir_mode); 248261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 248361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 248461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 248561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&intraRefresh_cfg; 248661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 248761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 248861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_INTRA_REFRESH,(void*)&ioctl_msg) < 0) { 24898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting Intra Refresh failed"); 249061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status = false; 249161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 249261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan intra_refresh.irmode = intraRefresh_cfg.irmode; 249361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan intra_refresh.mbcount = intraRefresh_cfg.mbcount; 249461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 249561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 249661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return status; 2497826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 2498826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 2499826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_set_error_resilience(OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE* error_resilience) 2500826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 250161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL, NULL}; 250261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool status = true; 250361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_headerextension hec_cfg; 250461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_multiclicecfg multislice_cfg; 250561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 250661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_sVenc_cfg.codectype == OMX_VIDEO_CodingMPEG4) { 250761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (error_resilience->bEnableHEC) { 250861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan hec_cfg.header_extension = 1; 250961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 251061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan hec_cfg.header_extension = 0; 251161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 251261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 251361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&hec_cfg; 251461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 251561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 251661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_HEC,(void*)&ioctl_msg) < 0) { 25178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting HEader Error correction failed"); 251861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 251961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 252061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 252161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan hec.header_extension = error_resilience->bEnableHEC; 252261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 252361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 252461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (error_resilience->bEnableRVLC) { 25258767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("RVLC is not Supported"); 252661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 252761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 252861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 252961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (( m_sVenc_cfg.codectype != OMX_VIDEO_CodingH263) && 253061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (error_resilience->bEnableDataPartitioning)) { 25318767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("DataPartioning are not Supported for MPEG4/H264"); 253261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 253361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 253461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 253561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (( m_sVenc_cfg.codectype != OMX_VIDEO_CodingH263) && 2536826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev (error_resilience->nResynchMarkerSpacing)) { 253761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan multislice_cfg.mslice_mode = VEN_MSLICE_CNT_BYTE; 253861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan multislice_cfg.mslice_size = error_resilience->nResynchMarkerSpacing; 253961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (m_sVenc_cfg.codectype == OMX_VIDEO_CodingH263 && 2540826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev error_resilience->bEnableDataPartitioning) { 254161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan multislice_cfg.mslice_mode = VEN_MSLICE_GOB; 254261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan multislice_cfg.mslice_size = 0; 254361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 2544826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev multislice_cfg.mslice_mode = VEN_MSLICE_OFF; 2545826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev multislice_cfg.mslice_size = 0; 254661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 254761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 25488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("%s(): mode = %u, size = %u", __func__, multislice_cfg.mslice_mode, 254961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan multislice_cfg.mslice_size); 255061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&multislice_cfg; 255161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 255261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 255361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_MULTI_SLICE_CFG,(void*)&ioctl_msg) < 0) { 25548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting multi-slice cfg failed"); 255561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status = false; 255661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 255761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan multislice.mslice_mode = multislice_cfg.mslice_mode ; 255861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan multislice.mslice_size = multislice_cfg.mslice_size; 255961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 256061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 256161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 256261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return status; 2563826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 2564826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 2565826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_set_inloop_filter(OMX_VIDEO_AVCLOOPFILTERTYPE loopfilter) 2566826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 256761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 256861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_dbcfg filter_cfg; 256961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 257061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memset(&filter_cfg, 0, sizeof(filter_cfg)); 25718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_set_inloop_filter: %u",loopfilter); 257261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 257361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (loopfilter == OMX_VIDEO_AVCLoopFilterEnable) { 257461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan filter_cfg.db_mode = VEN_DB_ALL_BLKG_BNDRY; 257561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (loopfilter == OMX_VIDEO_AVCLoopFilterDisable) { 257661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan filter_cfg.db_mode = VEN_DB_DISABLE; 257761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (loopfilter == OMX_VIDEO_AVCLoopFilterDisableSliceBoundary) { 257861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan filter_cfg.db_mode = VEN_DB_SKIP_SLICE_BNDRY; 257961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 258061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 258161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan filter_cfg.slicealpha_offset = filter_cfg.slicebeta_offset = 0; 258261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 258361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&filter_cfg; 258461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 258561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 258661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_DEBLOCKING_CFG,(void*)&ioctl_msg)< 0) { 25878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting inloop filter failed"); 258861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 258961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 259061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 259161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dbkfilter.db_mode = filter_cfg.db_mode; 259261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dbkfilter.slicealpha_offset = dbkfilter.slicebeta_offset = 0; 259361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 2594826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 2595826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 2596826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_set_target_bitrate(OMX_U32 nTargetBitrate, OMX_U32 config) 2597826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 259861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL, NULL}; 259961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_targetbitrate bitrate_cfg; 260061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 260161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("venc_set_target_bitrate: bitrate = %u", 260261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan nTargetBitrate); 260361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bitrate_cfg.target_bitrate = nTargetBitrate ; 260461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&bitrate_cfg; 260561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 260661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 260761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_TARGET_BITRATE,(void*)&ioctl_msg) < 0) { 26088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting bit rate failed"); 260961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 2610826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev } 261161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 261261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.targetbitrate = nTargetBitrate; 261361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bitrate.target_bitrate = nTargetBitrate; 261461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 261561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!config) { 261661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_level_set = false; 261761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 261861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (venc_set_profile_level(0, 0)) { 26198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Calling set level (Bitrate) with %d",profile_level.level); 262061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 262161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 262261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 262361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 2624826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 2625826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 2626826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_set_encode_framerate(OMX_U32 encode_framerate, OMX_U32 config) 2627826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 262861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL, NULL}; 262961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_framerate frame_rate_cfg; 263061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 263161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Q16ToFraction(encode_framerate,frame_rate_cfg.fps_numerator,frame_rate_cfg.fps_denominator); 263261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 263361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("venc_set_encode_framerate: framerate(Q16) = %u, NR: %d, DR: %d", 263461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan encode_framerate,frame_rate_cfg.fps_numerator,frame_rate_cfg.fps_denominator); 263561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 263661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&frame_rate_cfg; 263761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 263861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 263961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl(m_nDriver_fd, VEN_IOCTL_SET_FRAME_RATE, 264061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (void*)&ioctl_msg) < 0) { 26418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting framerate failed"); 264261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 2643826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev } 264461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 264561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.fps_den = frame_rate_cfg.fps_denominator; 264661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.fps_num = frame_rate_cfg.fps_numerator; 264761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 264861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!config) { 264961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_level_set = false; 265061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 265161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (venc_set_profile_level(0, 0)) { 265261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("Calling set level (Framerate) with %d",profile_level.level); 265361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 265461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 265561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 265661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 265747e37c4428509524ee576920a98381f3e4872493Nick Pelly} 265847e37c4428509524ee576920a98381f3e4872493Nick Pelly 265947e37c4428509524ee576920a98381f3e4872493Nick Pellybool venc_dev::venc_set_color_format(OMX_COLOR_FORMATTYPE color_format) 266047e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 266161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL, NULL}; 266261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 266361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (color_format == OMX_COLOR_FormatYUV420SemiPlanar) { 2664826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P 266561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.inputformat= VEN_INPUTFMT_NV12_16M2KA; 2666826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else 266761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.inputformat = VEN_INPUTFMT_NV12; 2668826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 266961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 26708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("WARNING: Unsupported Color format [%d]", color_format); 2671826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P 267261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.inputformat= VEN_INPUTFMT_NV12_16M2KA; 2673826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else 267461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.inputformat = VEN_INPUTFMT_NV12; 2675826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 26768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("Default color format YUV420SemiPlanar is set"); 267761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 267861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 267961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&m_sVenc_cfg; 268061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 268161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 268261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl(m_nDriver_fd, VEN_IOCTL_SET_BASE_CFG, (void*)&ioctl_msg) < 0) { 26838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting color format failed"); 268461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 268561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 268661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 268761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 268847e37c4428509524ee576920a98381f3e4872493Nick Pelly} 268947e37c4428509524ee576920a98381f3e4872493Nick Pelly 269047e37c4428509524ee576920a98381f3e4872493Nick Pellybool venc_dev::venc_set_intra_vop_refresh(OMX_BOOL intra_vop_refresh) 269147e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 26928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_set_intra_vop_refresh: intra_vop = %uc", intra_vop_refresh); 269361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 269461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (intra_vop_refresh == OMX_TRUE) { 269561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl(m_nDriver_fd, VEN_IOCTL_CMD_REQUEST_IFRAME, NULL) < 0) { 26968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting Intra VOP Refresh failed"); 269761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 269861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 269961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 27008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: VOP Refresh is False, no effect"); 270161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 270261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 270361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 270447e37c4428509524ee576920a98381f3e4872493Nick Pelly} 270547e37c4428509524ee576920a98381f3e4872493Nick Pelly 270647e37c4428509524ee576920a98381f3e4872493Nick Pellybool venc_dev::venc_set_ratectrl_cfg(OMX_VIDEO_CONTROLRATETYPE eControlRate) 270747e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 270861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 270961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool status = true; 271061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_ratectrlcfg ratectrl_cfg; 271161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 271261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //rate control 271361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (eControlRate) { 271461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_Video_ControlRateDisable: 271561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ratectrl_cfg.rcmode = VEN_RC_OFF; 271661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 271761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_Video_ControlRateVariableSkipFrames: 271861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ratectrl_cfg.rcmode = VEN_RC_VBR_VFR; 271961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 272061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_Video_ControlRateVariable: 272161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ratectrl_cfg.rcmode = VEN_RC_VBR_CFR; 272261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 272361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_Video_ControlRateConstantSkipFrames: 272461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ratectrl_cfg.rcmode = VEN_RC_CBR_VFR; 272561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 272661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_Video_ControlRateConstant: 272761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ratectrl_cfg.rcmode = VEN_RC_CBR_CFR; 272861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 272961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 273061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status = false; 273161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 273247e37c4428509524ee576920a98381f3e4872493Nick Pelly } 273361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 273461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (status) { 273561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&ratectrl_cfg; 273661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 273761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 273861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_RATE_CTRL_CFG,(void*)&ioctl_msg) < 0) { 27398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting rate control failed"); 274061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status = false; 274161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else 274261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan rate_ctrl.rcmode = ratectrl_cfg.rcmode; 274361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 274461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 274561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return status; 274647e37c4428509524ee576920a98381f3e4872493Nick Pelly} 274747e37c4428509524ee576920a98381f3e4872493Nick Pelly 274847e37c4428509524ee576920a98381f3e4872493Nick Pellybool venc_dev::venc_get_profile_level(OMX_U32 *eProfile,OMX_U32 *eLevel) 274947e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 275061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool status = true; 275161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 275261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eProfile == NULL || eLevel == NULL) { 275361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 275447e37c4428509524ee576920a98381f3e4872493Nick Pelly } 275561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 275661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_sVenc_cfg.codectype == VEN_CODEC_MPEG4) { 275761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (codec_profile.profile) { 275861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_PROFILE_MPEG4_SP: 275961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eProfile = OMX_VIDEO_MPEG4ProfileSimple; 276061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 276161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_PROFILE_MPEG4_ASP: 276261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eProfile = OMX_VIDEO_MPEG4ProfileAdvancedSimple; 276361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 276461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 276561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eProfile = OMX_VIDEO_MPEG4ProfileMax; 276661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status = false; 276761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 276861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 276961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 277061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!status) { 277161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return status; 277261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 277361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 277461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //profile level 277561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (profile_level.level) { 277661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_MPEG4_0: 277761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_MPEG4Level0; 277861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 277961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_MPEG4_1: 278061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_MPEG4Level1; 278161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 278261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_MPEG4_2: 278361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_MPEG4Level2; 278461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 278561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_MPEG4_3: 278661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_MPEG4Level3; 278761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 278861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_MPEG4_4: 278961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_MPEG4Level4a; 279061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 279161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_MPEG4_5: 279261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_MPEG4_6: 279361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_MPEG4Level5; 279461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 279561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 279661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_MPEG4LevelMax; 279761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status = false; 279861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 279961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 280061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (m_sVenc_cfg.codectype == VEN_CODEC_H263) { 280161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (codec_profile.profile == VEN_PROFILE_H263_BASELINE) { 280261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eProfile = OMX_VIDEO_H263ProfileBaseline; 280361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 280461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eProfile = OMX_VIDEO_H263ProfileMax; 280561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 280661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 280761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 280861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (profile_level.level) { 280961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H263_10: 281061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_H263Level10; 281161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 281261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H263_20: 281361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_H263Level20; 281461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 281561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H263_30: 281661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_H263Level30; 281761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 281861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H263_40: 281961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_H263Level40; 282061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 282161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H263_45: 282261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_H263Level45; 282361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 282461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H263_50: 282561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_H263Level50; 282661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 282761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H263_60: 282861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_H263Level60; 282961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 283061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H263_70: 283161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_H263Level70; 283261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 283361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 283461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_H263LevelMax; 283561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status = false; 283661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 283761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 283861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (m_sVenc_cfg.codectype == VEN_CODEC_H264) { 283961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (codec_profile.profile) { 284061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_PROFILE_H264_BASELINE: 284161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eProfile = OMX_VIDEO_AVCProfileBaseline; 284261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 284361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_PROFILE_H264_MAIN: 284461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eProfile = OMX_VIDEO_AVCProfileMain; 284561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 284661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_PROFILE_H264_HIGH: 284761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eProfile = OMX_VIDEO_AVCProfileHigh; 284861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 284961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 285061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eProfile = OMX_VIDEO_AVCProfileMax; 285161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status = false; 285261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 285361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 285461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 285561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!status) { 285661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return status; 285761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 285861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 285961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (profile_level.level) { 286061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H264_1: 286161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_AVCLevel1; 286261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 286361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H264_1b: 286461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_AVCLevel1b; 286561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 286661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H264_1p1: 286761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_AVCLevel11; 286861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 286961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H264_1p2: 287061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_AVCLevel12; 287161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 287261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H264_1p3: 287361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_AVCLevel13; 287461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 287561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H264_2: 287661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_AVCLevel2; 287761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 287861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H264_2p1: 287961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_AVCLevel21; 288061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 288161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H264_2p2: 288261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_AVCLevel22; 288361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 288461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H264_3: 288561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_AVCLevel3; 288661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 288761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H264_3p1: 288861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_AVCLevel31; 288961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 289061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H264_3p2: 289161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_AVCLevel32; 289261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 289361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H264_4: 289461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_AVCLevel4; 289561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 289661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default : 289761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_AVCLevelMax; 289861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status = false; 289961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 290061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 290161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 290261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 290361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return status; 290447e37c4428509524ee576920a98381f3e4872493Nick Pelly} 290547e37c4428509524ee576920a98381f3e4872493Nick Pelly 290647e37c4428509524ee576920a98381f3e4872493Nick Pellybool venc_dev::venc_validate_profile_level(OMX_U32 *eProfile, OMX_U32 *eLevel) 290747e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 290861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 new_profile = 0, new_level = 0; 290961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned const int *profile_tbl = NULL; 291061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 mb_per_frame, mb_per_sec; 291161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool profile_level_found = false; 291261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 29138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Init profile table for respective codec"); 291461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 291561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //validate the ht,width,fps,bitrate and set the appropriate profile and level 291661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_sVenc_cfg.codectype == VEN_CODEC_MPEG4) { 291761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (*eProfile == 0) { 291861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!m_profile_set) { 291961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eProfile = OMX_VIDEO_MPEG4ProfileSimple; 292061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 292161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (codec_profile.profile) { 292261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_PROFILE_MPEG4_ASP: 292361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eProfile = OMX_VIDEO_MPEG4ProfileAdvancedSimple; 292461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 292561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_PROFILE_MPEG4_SP: 292661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eProfile = OMX_VIDEO_MPEG4ProfileSimple; 292761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 292861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 29298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("%s(): Unknown Error", __func__); 293061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 293161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 293261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 293347e37c4428509524ee576920a98381f3e4872493Nick Pelly } 293461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 293561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (*eLevel == 0 && !m_level_set) { 293661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_MPEG4LevelMax; 293761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 293861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 293961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (*eProfile == OMX_VIDEO_MPEG4ProfileSimple) { 294061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_tbl = (unsigned int const *)mpeg4_profile_level_table; 294161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (*eProfile == OMX_VIDEO_MPEG4ProfileAdvancedSimple) { 294261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_tbl = (unsigned int const *) 294361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (&mpeg4_profile_level_table[MPEG4_ASP_START]); 294461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 29458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Unsupported MPEG4 profile type %lu", *eProfile); 294647e37c4428509524ee576920a98381f3e4872493Nick Pelly return false; 294747e37c4428509524ee576920a98381f3e4872493Nick Pelly } 294861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (m_sVenc_cfg.codectype == VEN_CODEC_H264) { 294961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (*eProfile == 0) { 295061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!m_profile_set) { 295161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eProfile = OMX_VIDEO_AVCProfileBaseline; 295261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 295361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (codec_profile.profile) { 295461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_PROFILE_H264_BASELINE: 295561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eProfile = OMX_VIDEO_AVCProfileBaseline; 295661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 295761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_PROFILE_H264_MAIN: 295861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eProfile = OMX_VIDEO_AVCProfileMain; 295961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 296061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_PROFILE_H264_HIGH: 296161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eProfile = OMX_VIDEO_AVCProfileHigh; 296261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 296361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 29648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("%s(): Unknown Error", __func__); 296561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 296661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 296761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 296847e37c4428509524ee576920a98381f3e4872493Nick Pelly } 296961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 297061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (*eLevel == 0 && !m_level_set) { 297161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_AVCLevelMax; 297261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 297361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 297461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (*eProfile == OMX_VIDEO_AVCProfileBaseline) { 297561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_tbl = (unsigned int const *)h264_profile_level_table; 297661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (*eProfile == OMX_VIDEO_AVCProfileHigh) { 297761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_tbl = (unsigned int const *) 297861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (&h264_profile_level_table[H264_HP_START]); 297961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (*eProfile == OMX_VIDEO_AVCProfileMain) { 298061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_tbl = (unsigned int const *) 298161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (&h264_profile_level_table[H264_MP_START]); 298261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 29838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Unsupported AVC profile type %lu", *eProfile); 298447e37c4428509524ee576920a98381f3e4872493Nick Pelly return false; 298547e37c4428509524ee576920a98381f3e4872493Nick Pelly } 298661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (m_sVenc_cfg.codectype == VEN_CODEC_H263) { 298761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (*eProfile == 0) { 298861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!m_profile_set) { 298961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eProfile = OMX_VIDEO_H263ProfileBaseline; 299061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 299161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (codec_profile.profile) { 299261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_PROFILE_H263_BASELINE: 299361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eProfile = OMX_VIDEO_H263ProfileBaseline; 299461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 299561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 29968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("%s(): Unknown Error", __func__); 299761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 299861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 299961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 300047e37c4428509524ee576920a98381f3e4872493Nick Pelly } 300161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 300261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (*eLevel == 0 && !m_level_set) { 300361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_H263LevelMax; 300461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 300561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 300661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (*eProfile == OMX_VIDEO_H263ProfileBaseline) { 300761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_tbl = (unsigned int const *)h263_profile_level_table; 300861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 30098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Unsupported H.263 profile type %lu", *eProfile); 301047e37c4428509524ee576920a98381f3e4872493Nick Pelly return false; 301147e37c4428509524ee576920a98381f3e4872493Nick Pelly } 301261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 30138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Invalid codec type"); 301447e37c4428509524ee576920a98381f3e4872493Nick Pelly return false; 301561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 301661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 301761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mb_per_frame = ((m_sVenc_cfg.input_height + 15) >> 4)* 301861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ((m_sVenc_cfg.input_width + 15)>> 4); 301961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 302061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((mb_per_frame >= 3600) && (m_sVenc_cfg.codectype == VEN_CODEC_MPEG4)) { 302161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (codec_profile.profile == VEN_PROFILE_MPEG4_ASP) 302261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_level.level = VEN_LEVEL_MPEG4_5; 302361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 302461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (codec_profile.profile == VEN_PROFILE_MPEG4_SP) 302561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_level.level = VEN_LEVEL_MPEG4_6; 302661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 302747e37c4428509524ee576920a98381f3e4872493Nick Pelly { 302861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan new_level = profile_level.level; 302961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan new_profile = codec_profile.profile; 303061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 303161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 303261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 303361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 303461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mb_per_sec = mb_per_frame * m_sVenc_cfg.fps_num / m_sVenc_cfg.fps_den; 303561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 303661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan do { 303761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (mb_per_frame <= (int)profile_tbl[0]) { 303861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (mb_per_sec <= (int)profile_tbl[1]) { 303961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_sVenc_cfg.targetbitrate <= (int)profile_tbl[2]) { 304061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan new_level = (int)profile_tbl[3]; 304161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan new_profile = (int)profile_tbl[4]; 304261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_level_found = true; 30438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Appropriate profile/level found %d/%d", new_profile, new_level); 304461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 304561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 304661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 304747e37c4428509524ee576920a98381f3e4872493Nick Pelly } 304861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 304961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_tbl = profile_tbl + 5; 305061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } while (profile_tbl[0] != 0); 305161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 305261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (profile_level_found != true) { 30538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("ERROR: Unsupported profile/level"); 305461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 305561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 305661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 305761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((*eLevel == OMX_VIDEO_MPEG4LevelMax) || (*eLevel == OMX_VIDEO_AVCLevelMax) 305861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan || (*eLevel == OMX_VIDEO_H263LevelMax)) { 305961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = new_level; 306061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 306161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 306261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("%s: Returning with eProfile = %lu" 306361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "Level = %lu", __func__, *eProfile, *eLevel); 306461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 306561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 306647e37c4428509524ee576920a98381f3e4872493Nick Pelly} 3067826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 3068826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_max_allowed_bitrate_check(OMX_U32 nTargetBitrate) 306947e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 307061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned const int *profile_tbl = NULL; 307161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 307261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (m_sVenc_cfg.codectype) { 307361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_CODEC_MPEG4: 307461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 307561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_eProfile == OMX_VIDEO_MPEG4ProfileSimple) { 307661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_tbl = (unsigned int const *)mpeg4_profile_level_table; 307761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (m_eProfile == OMX_VIDEO_MPEG4ProfileAdvancedSimple) { 307861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_tbl = (unsigned int const *) 307961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (&mpeg4_profile_level_table[MPEG4_ASP_START]); 308061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 308161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Unsupported MPEG4 profile type %lu", m_eProfile); 308261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 308361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 308461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 308561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 308661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_CODEC_H264: 308761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 308861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_eProfile == OMX_VIDEO_AVCProfileBaseline) { 308961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_tbl = (unsigned int const *)h264_profile_level_table; 309061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (m_eProfile == OMX_VIDEO_AVCProfileHigh) { 309161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_tbl = (unsigned int const *) 309261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (&h264_profile_level_table[H264_HP_START]); 309361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (m_eProfile == OMX_VIDEO_AVCProfileMain) { 309461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_tbl = (unsigned int const *) 309561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (&h264_profile_level_table[H264_MP_START]); 309661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 309761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Unsupported AVC profile type %lu", m_eProfile); 309861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 309961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 310061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 310161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 310261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_CODEC_H263: 310361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 310461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_eProfile == OMX_VIDEO_H263ProfileBaseline) { 310561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_tbl = (unsigned int const *)h263_profile_level_table; 310661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 310761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Unsupported H.263 profile type %lu", m_eProfile); 310861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 310961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 311061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 311161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 311261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 311361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("%s: unknown codec type", __func__); 311461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 311547e37c4428509524ee576920a98381f3e4872493Nick Pelly } 311661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 311761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan while (profile_tbl[0] != 0) { 311861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (profile_tbl[3] == m_eLevel) { 311961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (nTargetBitrate > profile_tbl[2]) { 312061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Max. supported bitrate for Profile[%d] & Level[%d]" 312161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan " is %u", m_eProfile, m_eLevel, profile_tbl[2]); 312261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 312361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 312461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 312561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 312661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_tbl += 5; 312761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 312861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 312961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 3130826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 3131826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 3132826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_ 3133826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_set_meta_mode(bool mode) 3134826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 313561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 313661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = &mode; 313761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Set meta buffer mode: %d", mode); 313861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 313961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl(m_nDriver_fd,VEN_IOCTL_SET_METABUFFER_MODE,&ioctl_msg) < 0) { 314061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR(" Set meta buffer mode failed"); 314161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 314261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 314361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 314461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 314547e37c4428509524ee576920a98381f3e4872493Nick Pelly} 3146826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 3147