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" 35e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#include <linux/android_pmem.h> 36826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 37278952ff92fab2da0c47b912daeb662130676be1Haynes Mathew George#include <linux/msm_ion.h> 38826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 3947e37c4428509524ee576920a98381f3e4872493Nick Pelly 4047e37c4428509524ee576920a98381f3e4872493Nick Pelly#define MPEG4_SP_START 0 4147e37c4428509524ee576920a98381f3e4872493Nick Pelly#define MPEG4_ASP_START (MPEG4_SP_START + 8) 4247e37c4428509524ee576920a98381f3e4872493Nick Pelly#define MPEG4_720P_LEVEL 6 4347e37c4428509524ee576920a98381f3e4872493Nick Pelly#define H263_BP_START 0 4447e37c4428509524ee576920a98381f3e4872493Nick Pelly#define H264_BP_START 0 45826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define H264_HP_START (H264_BP_START + 13) 46826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define H264_MP_START (H264_BP_START + 26) 4747e37c4428509524ee576920a98381f3e4872493Nick Pelly 4847e37c4428509524ee576920a98381f3e4872493Nick Pelly/* MPEG4 profile and level table*/ 4961a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstatic const unsigned int mpeg4_profile_level_table[][5]= { 5047e37c4428509524ee576920a98381f3e4872493Nick Pelly /*max mb per frame, max mb per sec, max bitrate, level, profile*/ 5147e37c4428509524ee576920a98381f3e4872493Nick Pelly {99,1485,64000,OMX_VIDEO_MPEG4Level0,OMX_VIDEO_MPEG4ProfileSimple}, 52826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {99,1485,64000,OMX_VIDEO_MPEG4Level1,OMX_VIDEO_MPEG4ProfileSimple}, 5347e37c4428509524ee576920a98381f3e4872493Nick Pelly {396,5940,128000,OMX_VIDEO_MPEG4Level2,OMX_VIDEO_MPEG4ProfileSimple}, 5447e37c4428509524ee576920a98381f3e4872493Nick Pelly {396,11880,384000,OMX_VIDEO_MPEG4Level3,OMX_VIDEO_MPEG4ProfileSimple}, 5547e37c4428509524ee576920a98381f3e4872493Nick Pelly {1200,36000,4000000,OMX_VIDEO_MPEG4Level4a,OMX_VIDEO_MPEG4ProfileSimple}, 5647e37c4428509524ee576920a98381f3e4872493Nick Pelly {1620,40500,8000000,OMX_VIDEO_MPEG4Level5,OMX_VIDEO_MPEG4ProfileSimple}, 57826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {3600,108000,12000000,OMX_VIDEO_MPEG4Level5,OMX_VIDEO_MPEG4ProfileSimple}, 5847e37c4428509524ee576920a98381f3e4872493Nick Pelly {0,0,0,0,0}, 5947e37c4428509524ee576920a98381f3e4872493Nick Pelly 60826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {99,1485,128000,OMX_VIDEO_MPEG4Level0,OMX_VIDEO_MPEG4ProfileAdvancedSimple}, 61826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {99,1485,128000,OMX_VIDEO_MPEG4Level1,OMX_VIDEO_MPEG4ProfileAdvancedSimple}, 6247e37c4428509524ee576920a98381f3e4872493Nick Pelly {396,5940,384000,OMX_VIDEO_MPEG4Level2,OMX_VIDEO_MPEG4ProfileAdvancedSimple}, 6347e37c4428509524ee576920a98381f3e4872493Nick Pelly {396,11880,768000,OMX_VIDEO_MPEG4Level3,OMX_VIDEO_MPEG4ProfileAdvancedSimple}, 6447e37c4428509524ee576920a98381f3e4872493Nick Pelly {792,23760,3000000,OMX_VIDEO_MPEG4Level4,OMX_VIDEO_MPEG4ProfileAdvancedSimple}, 6547e37c4428509524ee576920a98381f3e4872493Nick Pelly {1620,48600,8000000,OMX_VIDEO_MPEG4Level5,OMX_VIDEO_MPEG4ProfileAdvancedSimple}, 66826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {0,0,0,0,0}, 6747e37c4428509524ee576920a98381f3e4872493Nick Pelly}; 6847e37c4428509524ee576920a98381f3e4872493Nick Pelly 6947e37c4428509524ee576920a98381f3e4872493Nick Pelly/* H264 profile and level table*/ 7061a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstatic const unsigned int h264_profile_level_table[][5]= { 7161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*max mb per frame, max mb per sec, max bitrate, level, profile*/ 7247e37c4428509524ee576920a98381f3e4872493Nick Pelly {99,1485,64000,OMX_VIDEO_AVCLevel1,OMX_VIDEO_AVCProfileBaseline}, 7347e37c4428509524ee576920a98381f3e4872493Nick Pelly {99,1485,128000,OMX_VIDEO_AVCLevel1b,OMX_VIDEO_AVCProfileBaseline}, 7447e37c4428509524ee576920a98381f3e4872493Nick Pelly {396,3000,192000,OMX_VIDEO_AVCLevel11,OMX_VIDEO_AVCProfileBaseline}, 7547e37c4428509524ee576920a98381f3e4872493Nick Pelly {396,6000,384000,OMX_VIDEO_AVCLevel12,OMX_VIDEO_AVCProfileBaseline}, 7647e37c4428509524ee576920a98381f3e4872493Nick Pelly {396,11880,768000,OMX_VIDEO_AVCLevel13,OMX_VIDEO_AVCProfileBaseline}, 7747e37c4428509524ee576920a98381f3e4872493Nick Pelly {396,11880,2000000,OMX_VIDEO_AVCLevel2,OMX_VIDEO_AVCProfileBaseline}, 7847e37c4428509524ee576920a98381f3e4872493Nick Pelly {792,19800,4000000,OMX_VIDEO_AVCLevel21,OMX_VIDEO_AVCProfileBaseline}, 7947e37c4428509524ee576920a98381f3e4872493Nick Pelly {1620,20250,4000000,OMX_VIDEO_AVCLevel22,OMX_VIDEO_AVCProfileBaseline}, 8047e37c4428509524ee576920a98381f3e4872493Nick Pelly {1620,40500,10000000,OMX_VIDEO_AVCLevel3,OMX_VIDEO_AVCProfileBaseline}, 8147e37c4428509524ee576920a98381f3e4872493Nick Pelly {3600,108000,14000000,OMX_VIDEO_AVCLevel31,OMX_VIDEO_AVCProfileBaseline}, 82826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {5120,216000,20000000,OMX_VIDEO_AVCLevel32,OMX_VIDEO_AVCProfileBaseline}, 83826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {8192,245760,20000000,OMX_VIDEO_AVCLevel4,OMX_VIDEO_AVCProfileBaseline}, 8447e37c4428509524ee576920a98381f3e4872493Nick Pelly {0,0,0,0,0}, 8547e37c4428509524ee576920a98381f3e4872493Nick Pelly 8647e37c4428509524ee576920a98381f3e4872493Nick Pelly {99,1485,64000,OMX_VIDEO_AVCLevel1,OMX_VIDEO_AVCProfileHigh}, 8747e37c4428509524ee576920a98381f3e4872493Nick Pelly {99,1485,160000,OMX_VIDEO_AVCLevel1b,OMX_VIDEO_AVCProfileHigh}, 8847e37c4428509524ee576920a98381f3e4872493Nick Pelly {396,3000,240000,OMX_VIDEO_AVCLevel11,OMX_VIDEO_AVCProfileHigh}, 8947e37c4428509524ee576920a98381f3e4872493Nick Pelly {396,6000,480000,OMX_VIDEO_AVCLevel12,OMX_VIDEO_AVCProfileHigh}, 9047e37c4428509524ee576920a98381f3e4872493Nick Pelly {396,11880,960000,OMX_VIDEO_AVCLevel13,OMX_VIDEO_AVCProfileHigh}, 9147e37c4428509524ee576920a98381f3e4872493Nick Pelly {396,11880,2500000,OMX_VIDEO_AVCLevel2,OMX_VIDEO_AVCProfileHigh}, 9247e37c4428509524ee576920a98381f3e4872493Nick Pelly {792,19800,5000000,OMX_VIDEO_AVCLevel21,OMX_VIDEO_AVCProfileHigh}, 9347e37c4428509524ee576920a98381f3e4872493Nick Pelly {1620,20250,5000000,OMX_VIDEO_AVCLevel22,OMX_VIDEO_AVCProfileHigh}, 9447e37c4428509524ee576920a98381f3e4872493Nick Pelly {1620,40500,12500000,OMX_VIDEO_AVCLevel3,OMX_VIDEO_AVCProfileHigh}, 9547e37c4428509524ee576920a98381f3e4872493Nick Pelly {3600,108000,17500000,OMX_VIDEO_AVCLevel31,OMX_VIDEO_AVCProfileHigh}, 96826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {5120,216000,25000000,OMX_VIDEO_AVCLevel32,OMX_VIDEO_AVCProfileHigh}, 97826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {8192,245760,25000000,OMX_VIDEO_AVCLevel4,OMX_VIDEO_AVCProfileHigh}, 9847e37c4428509524ee576920a98381f3e4872493Nick Pelly {0,0,0,0,0}, 9947e37c4428509524ee576920a98381f3e4872493Nick Pelly 10047e37c4428509524ee576920a98381f3e4872493Nick Pelly {99,1485,64000,OMX_VIDEO_AVCLevel1,OMX_VIDEO_AVCProfileMain}, 101826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {99,1485,128000,OMX_VIDEO_AVCLevel1b,OMX_VIDEO_AVCProfileMain}, 102826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {396,3000,192000,OMX_VIDEO_AVCLevel11,OMX_VIDEO_AVCProfileMain}, 103826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {396,6000,384000,OMX_VIDEO_AVCLevel12,OMX_VIDEO_AVCProfileMain}, 104826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {396,11880,768000,OMX_VIDEO_AVCLevel13,OMX_VIDEO_AVCProfileMain}, 105826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {396,11880,2000000,OMX_VIDEO_AVCLevel2,OMX_VIDEO_AVCProfileMain}, 106826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {792,19800,4000000,OMX_VIDEO_AVCLevel21,OMX_VIDEO_AVCProfileMain}, 107826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {1620,20250,4000000,OMX_VIDEO_AVCLevel22,OMX_VIDEO_AVCProfileMain}, 108826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {1620,40500,10000000,OMX_VIDEO_AVCLevel3,OMX_VIDEO_AVCProfileMain}, 109826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {3600,108000,14000000,OMX_VIDEO_AVCLevel31,OMX_VIDEO_AVCProfileMain}, 110826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {5120,216000,20000000,OMX_VIDEO_AVCLevel32,OMX_VIDEO_AVCProfileMain}, 111826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev {8192,245760,20000000,OMX_VIDEO_AVCLevel4,OMX_VIDEO_AVCProfileMain}, 11247e37c4428509524ee576920a98381f3e4872493Nick Pelly {0,0,0,0,0} 113826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 11447e37c4428509524ee576920a98381f3e4872493Nick Pelly}; 11547e37c4428509524ee576920a98381f3e4872493Nick Pelly 11647e37c4428509524ee576920a98381f3e4872493Nick Pelly/* H263 profile and level table*/ 11761a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstatic const unsigned int h263_profile_level_table[][5]= { 11847e37c4428509524ee576920a98381f3e4872493Nick Pelly /*max mb per frame, max mb per sec, max bitrate, level, profile*/ 11947e37c4428509524ee576920a98381f3e4872493Nick Pelly {99,1485,64000,OMX_VIDEO_H263Level10,OMX_VIDEO_H263ProfileBaseline}, 12047e37c4428509524ee576920a98381f3e4872493Nick Pelly {396,5940,128000,OMX_VIDEO_H263Level20,OMX_VIDEO_H263ProfileBaseline}, 12147e37c4428509524ee576920a98381f3e4872493Nick Pelly {396,11880,384000,OMX_VIDEO_H263Level30,OMX_VIDEO_H263ProfileBaseline}, 12247e37c4428509524ee576920a98381f3e4872493Nick Pelly {396,11880,2048000,OMX_VIDEO_H263Level40,OMX_VIDEO_H263ProfileBaseline}, 12347e37c4428509524ee576920a98381f3e4872493Nick Pelly {99,1485,128000,OMX_VIDEO_H263Level45,OMX_VIDEO_H263ProfileBaseline}, 12447e37c4428509524ee576920a98381f3e4872493Nick Pelly {396,19800,4096000,OMX_VIDEO_H263Level50,OMX_VIDEO_H263ProfileBaseline}, 12547e37c4428509524ee576920a98381f3e4872493Nick Pelly {810,40500,8192000,OMX_VIDEO_H263Level60,OMX_VIDEO_H263ProfileBaseline}, 12647e37c4428509524ee576920a98381f3e4872493Nick Pelly {1620,81000,16384000,OMX_VIDEO_H263Level70,OMX_VIDEO_H263ProfileBaseline}, 12747e37c4428509524ee576920a98381f3e4872493Nick Pelly {0,0,0,0,0} 12847e37c4428509524ee576920a98381f3e4872493Nick Pelly}; 12947e37c4428509524ee576920a98381f3e4872493Nick Pelly 130826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define Log2(number, power) { OMX_U32 temp = number; power = 0; while( (0 == (temp & 0x1)) && power < 16) { temp >>=0x1; power++; } } 131826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define Q16ToFraction(q,num,den) { OMX_U32 power; Log2(q,power); num = q >> power; den = 0x1 << (16 - power); } 132826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 1338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define BUFFER_LOG_LOC "/data/misc/media" 1348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 13547e37c4428509524ee576920a98381f3e4872493Nick Pelly//constructor 136826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevvenc_dev::venc_dev(class omx_venc *venc_class) 13747e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 13861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_max_allowed_bitrate_check = false; 13961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_eLevel = 0; 14061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_eProfile = 0; 14161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_init(&loaded_start_stop_mlock, NULL); 14261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_cond_init (&loaded_start_stop_cond, NULL); 1438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan memset(&m_debug,0,sizeof(m_debug)); 1448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 1458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan char property_value[PROPERTY_VALUE_MAX] = {0}; 1468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan property_value[0] = '\0'; 1478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan property_get("vidc.enc.log.in", property_value, "0"); 1488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_debug.in_buffer_log = atoi(property_value); 1498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 1508767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan property_value[0] = '\0'; 1518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan property_get("vidc.enc.log.out", property_value, "0"); 1528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_debug.out_buffer_log = atoi(property_value); 1538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan snprintf(m_debug.log_loc, PROPERTY_VAL_MAX, 1548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan "%s", BUFFER_LOG_LOC); 1558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 15661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("venc_dev constructor"); 15747e37c4428509524ee576920a98381f3e4872493Nick Pelly} 15847e37c4428509524ee576920a98381f3e4872493Nick Pelly 15947e37c4428509524ee576920a98381f3e4872493Nick Pellyvenc_dev::~venc_dev() 16047e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 16161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_cond_destroy(&loaded_start_stop_cond); 16261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_destroy(&loaded_start_stop_mlock); 16361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("venc_dev distructor"); 16447e37c4428509524ee576920a98381f3e4872493Nick Pelly} 16547e37c4428509524ee576920a98381f3e4872493Nick Pelly 16647e37c4428509524ee576920a98381f3e4872493Nick Pellyvoid* async_venc_message_thread (void *input) 16747e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 16861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_ioctl_msg ioctl_msg ={NULL,NULL}; 16961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_timeout timeout; 17061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_msg venc_msg; 17161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int error_code = 0; 17261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc *omx = reinterpret_cast<omx_venc*>(input); 17361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 17461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan prctl(PR_SET_NAME, (unsigned long)"VideoEncCallBackThread", 0, 0, 0); 17561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan timeout.millisec = VEN_TIMEOUT_INFINITE; 17661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 17761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan while (1) { 17861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = NULL; 17961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = (void*)&venc_msg; 18061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 18161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Wait for a message from the video decoder driver*/ 18261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan error_code = ioctl(omx->handle->m_nDriver_fd,VEN_IOCTL_CMD_READ_NEXT_MSG,(void *)&ioctl_msg); 18361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 18461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (error_code == -512) { // ERESTARTSYS 1858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERESTARTSYS received in ioctl read next msg!"); 18661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (error_code <0) { 1878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("ioctl VEN_IOCTL_CMD_READ_NEXT_MSG failed"); 18861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 18961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (omx->async_message_process(input,&venc_msg) < 0) { 1908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Wrong ioctl message"); 19161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 19261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 19361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 1948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("omx_venc: Async Thread exit"); 195073c5e91be587a9f90fe39719e1e9fa7cd2a3525Vineeta Srivastava return NULL; 196a66301743224ed885fc1b5275acd16f4843a03f5Vineeta Srivastava} 197a66301743224ed885fc1b5275acd16f4843a03f5Vineeta Srivastava 1988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanint venc_dev::venc_extradata_log_buffers(char *buffer_addr) 1998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan{ 2008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return OMX_ErrorUnsupportedSetting; 2018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan} 2028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 2038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanint venc_dev::venc_output_log_buffers(const char *buffer_addr, int buffer_len) 2048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan{ 2058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (m_debug.out_buffer_log && !m_debug.outfile) { 2068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan int size = 0; 2078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if(m_sVenc_cfg.codectype == VEN_CODEC_MPEG4) { 2088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan size = snprintf(m_debug.outfile_name, PROPERTY_VALUE_MAX, "%s/output_enc_%d_%d_%p.m4v", 2098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_debug.log_loc, m_sVenc_cfg.input_width, m_sVenc_cfg.input_height, this); 2108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else if(m_sVenc_cfg.codectype == VEN_CODEC_H264) { 2118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan size = snprintf(m_debug.outfile_name, PROPERTY_VALUE_MAX, "%s/output_enc_%d_%d_%p.264", 2128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_debug.log_loc, m_sVenc_cfg.input_width, m_sVenc_cfg.input_height, this); 2138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else if(m_sVenc_cfg.codectype == VENC_CODEC_H263) { 2148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan size = snprintf(m_debug.outfile_name, PROPERTY_VALUE_MAX, "%s/output_enc_%d_%d_%p.263", 2158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_debug.log_loc, m_sVenc_cfg.input_width, m_sVenc_cfg.input_height, this); 2168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else if(m_sVenc_cfg.codectype == VENC_CODEC_VP8) { 2178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan size = snprintf(m_debug.outfile_name, PROPERTY_VALUE_MAX, "%s/output_enc_%d_%d_%p.ivf", 2188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_debug.log_loc, m_sVenc_cfg.input_width, m_sVenc_cfg.input_height, this); 2198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 2208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if ((size > PROPERTY_VALUE_MAX) || (size < 0)) { 2218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Failed to open output file: %s for logging as size:%d", 2228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_debug.outfile_name, size); 2238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return -1; 2248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 2258767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_debug.outfile = fopen(m_debug.outfile_name, "ab"); 2268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (!m_debug.outfile) { 2278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Failed to open output file: %s for logging errno:%d", 2288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_debug.outfile_name, errno); 2298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_debug.outfile_name[0] = '\0'; 2308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return -1; 2318767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 2328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 2338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (m_debug.outfile && buffer_len) { 2348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("%s buffer_len:%d", __func__, buffer_len); 2358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan fwrite(buffer_addr, buffer_len, 1, m_debug.outfile); 2368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 2378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return 0; 2388767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan} 2398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 2408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanbool venc_dev::venc_get_output_log_flag() 2418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan{ 2428767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return (m_debug.out_buffer_log == 1); 2438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan} 2448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 2458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanint venc_dev::venc_input_log_buffers(OMX_BUFFERHEADERTYPE *pbuffer, void *pmem_data_buf, int framelen) { 2468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (!m_debug.infile) { 2478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan int size = snprintf(m_debug.infile_name, PROPERTY_VALUE_MAX, "%s/input_enc_%d_%d_%p.yuv", 2488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_debug.log_loc, m_sVenc_cfg.input_width, 2498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_sVenc_cfg.input_height, this); 2508767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if ((size > PROPERTY_VALUE_MAX) || (size < 0)) { 2518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Failed to open input file: %s for logging size:%d", 2528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_debug.infile_name, size); 2538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return -1; 2548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 2558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_debug.infile = fopen (m_debug.infile_name, "ab"); 2568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (!m_debug.infile) { 2578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("Failed to open input file: %s for logging", m_debug.infile); 2588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_debug.infile_name[0] = '\0'; 2598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return -1; 2608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 2618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 2628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (m_debug.infile && pbuffer && pbuffer->nFilledLen) { 2638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#ifdef MAX_RES_1080P 2648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan int y_size = 0; 2658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan int c_offset = 0; 2668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned char *buf_addr = NULL; 2678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 2688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan y_size = m_sVenc_cfg.input_width * m_sVenc_cfg.input_height; 2698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan //chroma offset is y_size aligned to the 2k boundary 2708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan c_offset= (y_size + 2047) & (~(2047)); 2718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 2728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (pmem_data_buf) { 2738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Internal PMEM addr for i/p Heap UseBuf: %p", pmem_data_buf); 2748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan buf_addr = (OMX_U8 *)pmem_data_buf; 2758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else { 2768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Shared PMEM addr for i/p PMEM UseBuf/AllocateBuf: %p", bufhdr->pBuffer); 2778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan buf_addr = (unsigned char *)mmap(NULL, 2788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan ((encoder_media_buffer_type *)pbuffer->pBuffer)->meta_handle->data[2], 2798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan PROT_READ|PROT_WRITE, MAP_SHARED, 2808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan ((encoder_media_buffer_type *)pbuffer->pBuffer)->meta_handle->data[0], 0); 2818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 2828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 2838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (m_debug.infile) { 2848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan fwrite((const char *)buf_addr, y_size, 1, m_debug.infile); 2858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan fwrite((const char *)(buf_addr + c_offset), (y_size>>1), 1, m_debug.infile); 2868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 2878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 2888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (!pmem_data_buf) { 2898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan munmap (buf_addr, ((encoder_media_buffer_type *)pbuffer->pBuffer)->meta_handle->data[2]); 2908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 2918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#else 2928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (m_debug.infile) { 2938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_U8* ptrbuffer = NULL; 2948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (pmem_data_buf) { 2958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Internal PMEM addr for i/p Heap UseBuf: %p", pmem_data_buf); 2968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan ptrbuffer = (OMX_U8 *)pmem_data_buf; 2978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else { 2988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Shared PMEM addr for i/p PMEM UseBuf/AllocateBuf: %p", bufhdr->pBuffer); 2998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan ptrbuffer = (OMX_U8 *)bufhdr->pBuffer; 3008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 3018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan fwrite((const char *)ptrbuffer, framelen, 1, m_debug.infile); 3028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 3038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 3048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#endif 3058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 3068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return 0; 3078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan} 3088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 30947e37c4428509524ee576920a98381f3e4872493Nick Pellybool venc_dev::venc_open(OMX_U32 codec) 31047e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 31161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_ioctl_msg ioctl_msg = {NULL,NULL}; 31261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int r; 31361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int alignment = 0,buffer_size = 0, temp =0; 31461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 3156eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal m_nDriver_fd = open ("/dev/msm_vidc_enc",O_RDWR|O_NONBLOCK); 31647e37c4428509524ee576920a98381f3e4872493Nick Pelly 31761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_nDriver_fd == 0) { 3188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Got fd as 0 for msm_vidc_enc, Opening again"); 31961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_nDriver_fd = open ("/dev/msm_vidc_enc",O_RDWR|O_NONBLOCK); 32061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 32161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 32261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((int)m_nDriver_fd < 0) { 3238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Omx_venc::Comp Init Returning failure"); 32461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 32561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 32647e37c4428509524ee576920a98381f3e4872493Nick Pelly 3278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("m_nDriver_fd = %d", m_nDriver_fd); 328826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef SINGLE_ENCODER_INSTANCE 32961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 num_instances = 0; 33061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = NULL; 33161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = &num_instances; 33261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 33361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd, VEN_IOCTL_GET_NUMBER_INSTANCES, (void*)&ioctl_msg) < 0 ) { 3348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request number of encoder instances failed"); 33561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (num_instances > 1) { 3368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Second encoder instance rejected!"); 33761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_close(); 33861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 33961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 34061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 341826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 34261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // set the basic configuration of the video encoder driver 34361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.input_width = OMX_CORE_QCIF_WIDTH; 34461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.input_height= OMX_CORE_QCIF_HEIGHT; 34561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.dvs_width = OMX_CORE_QCIF_WIDTH; 34661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.dvs_height = OMX_CORE_QCIF_HEIGHT; 34761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.fps_num = 30; 34861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.fps_den = 1; 34961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.targetbitrate = 64000; 350826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P 35161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.inputformat= VEN_INPUTFMT_NV12_16M2KA; 352826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else 35361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.inputformat= VEN_INPUTFMT_NV12; 354826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 35561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // initializing QP range parameters 35661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan qp_range.minqp = 2; 35761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 35861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (codec == OMX_VIDEO_CodingAVC) 35961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan qp_range.maxqp = 51; 36061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else 36161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan qp_range.maxqp = 31; 36261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 36361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (codec == OMX_VIDEO_CodingMPEG4) { 36461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.codectype = VEN_CODEC_MPEG4; 36561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan codec_profile.profile = VEN_PROFILE_MPEG4_SP; 36661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_level.level = VEN_LEVEL_MPEG4_2; 36761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (codec == OMX_VIDEO_CodingH263) { 36861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.codectype = VEN_CODEC_H263; 36961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan codec_profile.profile = VEN_PROFILE_H263_BASELINE; 37061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_level.level = VEN_LEVEL_H263_20; 37161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 37261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 37361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (codec == OMX_VIDEO_CodingAVC) { 37461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.codectype = VEN_CODEC_H264; 37561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan codec_profile.profile = VEN_PROFILE_H264_BASELINE; 37661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_level.level = VEN_LEVEL_H264_1p1; 37761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 37861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 37961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&m_sVenc_cfg; 38061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 38161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 38261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_BASE_CFG,(void*)&ioctl_msg) < 0 ) { 3838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting base configuration failed"); 38461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 38561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 38661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 38761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Get the I/P and O/P buffer requirements 38861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = NULL; 38961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = (void*)&m_sInput_buff_property; 39061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 39161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_GET_INPUT_BUFFER_REQ,(void*)&ioctl_msg) < 0) { 3928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for getting i/p buffer requirement failed"); 39361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 39461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 39561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 39661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = NULL; 39761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = (void*)&m_sOutput_buff_property; 39861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 39961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_GET_OUTPUT_BUFFER_REQ,(void*)&ioctl_msg) < 0) { 4008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for getting o/p buffer requirement failed"); 40161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 40261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 40361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 40461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_profile_set = false; 40561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_level_set = false; 40661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 40761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (venc_set_profile_level(0, 0)) { 4088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("%s(): Init Profile/Level setting success", 40961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan __func__); 41061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 41161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 41261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buffers_count = MAX_RECON_BUFFERS; 41361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ltrmode.ltr_mode = 0; 41461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ltrcount.ltr_count = 0; 41561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ltrperiod.ltr_period = 0; 41661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 41761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 41847e37c4428509524ee576920a98381f3e4872493Nick Pelly} 41947e37c4428509524ee576920a98381f3e4872493Nick Pelly 42047e37c4428509524ee576920a98381f3e4872493Nick Pellyvoid venc_dev::venc_close() 42147e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 4228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_close: fd = %d", m_nDriver_fd); 42361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 42461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((int)m_nDriver_fd >= 0) { 4258767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("venc_close(): Calling VEN_IOCTL_CMD_STOP_READ_MSG"); 42661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (void)ioctl(m_nDriver_fd, VEN_IOCTL_CMD_STOP_READ_MSG, 42761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan NULL); 4288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Calling close()"); 42961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan close(m_nDriver_fd); 43061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_nDriver_fd = -1; 43161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 43261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 4338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (m_debug.infile) { 4348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan fclose(m_debug.infile); 4358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_debug.infile = NULL; 4368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 4378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (m_debug.outfile) { 4388767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan fclose(m_debug.outfile); 4398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_debug.outfile = NULL; 4408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 4418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 44247e37c4428509524ee576920a98381f3e4872493Nick Pelly} 44347e37c4428509524ee576920a98381f3e4872493Nick Pelly 44447e37c4428509524ee576920a98381f3e4872493Nick Pellybool venc_dev::venc_set_buf_req(unsigned long *min_buff_count, 44561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long *actual_buff_count, 44661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long *buff_size, 44761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long port) 44847e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 44961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_ioctl_msg ioctl_msg = {NULL,NULL}; 45061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long temp_count = 0; 45161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 45261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (port == 0) { 45361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (*actual_buff_count > m_sInput_buff_property.mincount) { 45461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan temp_count = m_sInput_buff_property.actualcount; 45561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInput_buff_property.actualcount = *actual_buff_count; 45661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&m_sInput_buff_property; 45761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 45861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 45961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_INPUT_BUFFER_REQ,(void*)&ioctl_msg) < 0) { 4608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting i/p buffer requirement failed"); 46161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInput_buff_property.actualcount = temp_count; 46261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 46361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 46461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 4658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("I/P Count set to %lu", *actual_buff_count); 46661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 46761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 46861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (*actual_buff_count > m_sOutput_buff_property.mincount) { 46961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan temp_count = m_sOutput_buff_property.actualcount; 47061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutput_buff_property.actualcount = *actual_buff_count; 47161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&m_sOutput_buff_property; 47261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 47361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 47461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_OUTPUT_BUFFER_REQ,(void*)&ioctl_msg) < 0) { 4758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting o/p buffer requirement failed"); 47661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutput_buff_property.actualcount = temp_count; 47761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 47861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 47961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 4808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("O/P Count set to %lu", *actual_buff_count); 48161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 48247e37c4428509524ee576920a98381f3e4872493Nick Pelly } 48347e37c4428509524ee576920a98381f3e4872493Nick Pelly 48461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 48547e37c4428509524ee576920a98381f3e4872493Nick Pelly 48647e37c4428509524ee576920a98381f3e4872493Nick Pelly} 48747e37c4428509524ee576920a98381f3e4872493Nick Pelly 488826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_loaded_start() 489826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 49061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct timespec ts; 49161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int status = 0; 49261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 49361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_CMD_START, NULL) < 0) { 49461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: VEN_IOCTL_CMD_START failed"); 49561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 49661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 49761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 49861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (clock_gettime(CLOCK_REALTIME, &ts) < 0) { 49961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("%s: clock_gettime failed", __func__); 50061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 50161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 50261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 50361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ts.tv_sec += 1; 50461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_lock(&loaded_start_stop_mlock); 50561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("%s: wait on start done", __func__); 50661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status = pthread_cond_timedwait(&loaded_start_stop_cond, 50761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &loaded_start_stop_mlock, &ts); 50861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 50961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (status != 0) { 51061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("%s: error status = %d, %s", __func__, 51161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status, strerror(status)); 51261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_unlock(&loaded_start_stop_mlock); 51361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 51461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 51561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 51661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("%s: wait over on start done", __func__); 517826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev pthread_mutex_unlock(&loaded_start_stop_mlock); 51861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("%s: venc_loaded_start success", __func__); 51961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 520826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 521826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 522826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_loaded_stop() 523826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 52461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct timespec ts; 52561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int status = 0; 52661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 52761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_CMD_STOP, NULL) < 0) { 52861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: VEN_IOCTL_CMD_STOP failed"); 52961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 53061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 53161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 53261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (clock_gettime(CLOCK_REALTIME, &ts) < 0) { 53361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("%s: clock_gettime failed", __func__); 53461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 53561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 53661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 53761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ts.tv_sec += 1; 53861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_lock(&loaded_start_stop_mlock); 53961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("%s: wait on stop done", __func__); 54061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status = pthread_cond_timedwait(&loaded_start_stop_cond, 54161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &loaded_start_stop_mlock, &ts); 54261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 54361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (status != 0) { 54461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("%s: error status = %d, %s", __func__, 54561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status, strerror(status)); 54661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_unlock(&loaded_start_stop_mlock); 54761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 54861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 54961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 55061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("%s: wait over on stop done", __func__); 551826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev pthread_mutex_unlock(&loaded_start_stop_mlock); 55261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("%s: venc_loaded_stop success", __func__); 55361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 554826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 555826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 556826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_loaded_start_done() 557826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 55861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_lock(&loaded_start_stop_mlock); 55961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("%s: signal start done", __func__); 56061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_cond_signal(&loaded_start_stop_cond); 56161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_unlock(&loaded_start_stop_mlock); 56261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 563826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 564826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 565826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_loaded_stop_done() 566826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 56761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_lock(&loaded_start_stop_mlock); 56861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("%s: signal stop done", __func__); 56961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_cond_signal(&loaded_start_stop_cond); 57061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_unlock(&loaded_start_stop_mlock); 57161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 572826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 573826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 574826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_get_seq_hdr(void *buffer, 575e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned buffer_size, unsigned *header_len) 576826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 57761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_ioctl_msg ioctl_msg = {NULL,NULL}; 57861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int i = 0; 57961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("venc_dev::venc_get_seq_hdr"); 58061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_seqheader seq_in, seq_out; 58161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan seq_in.hdrlen = 0; 58261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan seq_in.bufsize = buffer_size; 58361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan seq_in.hdrbufptr = (unsigned char*)buffer; 58461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 58561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (seq_in.hdrbufptr == NULL) { 58661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: malloc for sequence header failed"); 58761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 58861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 589826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 59061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("seq_in: buf=%x, sz=%d, hdrlen=%d", seq_in.hdrbufptr, 59161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan seq_in.bufsize, seq_in.hdrlen); 5926eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 59361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&seq_in; 59461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = (void*)&seq_out; 59547e37c4428509524ee576920a98381f3e4872493Nick Pelly 59661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_GET_SEQUENCE_HDR,(void*)&ioctl_msg) < 0) { 59761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for getting sequence header failed"); 59861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 59947e37c4428509524ee576920a98381f3e4872493Nick Pelly } 60061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 60161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (seq_out.hdrlen == 0) { 60261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Seq header returned zero length header"); 60361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("seq_out: buf=%x, sz=%d, hdrlen=%d", seq_out.hdrbufptr, 60461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan seq_out.bufsize, seq_out.hdrlen); 60561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 60647e37c4428509524ee576920a98381f3e4872493Nick Pelly } 60747e37c4428509524ee576920a98381f3e4872493Nick Pelly 60861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *header_len = seq_out.hdrlen; 60961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("seq_out: buf=%x, sz=%d, hdrlen=%d", seq_out.hdrbufptr, 61061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan seq_out.bufsize, seq_out.hdrlen); 61147e37c4428509524ee576920a98381f3e4872493Nick Pelly 61261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 61347e37c4428509524ee576920a98381f3e4872493Nick Pelly} 61447e37c4428509524ee576920a98381f3e4872493Nick Pelly 61561a2c6a19dbd06a317a419623020e02056661876Praveen Chavanbool venc_dev::venc_get_capability_ltrcount(unsigned long *min, 61661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long *max, unsigned long *step_size) 61747e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 61861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_ioctl_msg ioctl_msg = {NULL,NULL}; 61961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_range cap_ltr_count; 62061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = NULL; 62161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = (void*)&cap_ltr_count; 622826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 62361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd, VEN_IOCTL_GET_CAPABILITY_LTRCOUNT, 62461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (void*)&ioctl_msg) < 0) { 62561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Get LTR Capability failed"); 62661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 62761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 62861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *min = cap_ltr_count.min; 62961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *max = cap_ltr_count.max; 63061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *step_size = cap_ltr_count.step_size; 63161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("LTR Capability: min=%x, max=%d, step_size=%d", 63261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *min, *max, *step_size); 63361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 634058dcdbfe54a3294a2713ba9993e6024f3f3a6a0Haynes Mathew George 63561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 63661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 637058dcdbfe54a3294a2713ba9993e6024f3f3a6a0Haynes Mathew George 63861a2c6a19dbd06a317a419623020e02056661876Praveen Chavanbool venc_dev::venc_get_buf_req(unsigned long *min_buff_count, 63961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long *actual_buff_count, 64061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long *buff_size, 64161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long port) 64261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 64361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_ioctl_msg ioctl_msg = {NULL,NULL}; 64447e37c4428509524ee576920a98381f3e4872493Nick Pelly 64561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (port == 0) { 646058dcdbfe54a3294a2713ba9993e6024f3f3a6a0Haynes Mathew George ioctl_msg.in = NULL; 647058dcdbfe54a3294a2713ba9993e6024f3f3a6a0Haynes Mathew George ioctl_msg.out = (void*)&m_sInput_buff_property; 64861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 64961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_GET_INPUT_BUFFER_REQ,(void*)&ioctl_msg) < 0) { 6508767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for getting i/p buffer requirement failed"); 65147e37c4428509524ee576920a98381f3e4872493Nick Pelly return false; 652058dcdbfe54a3294a2713ba9993e6024f3f3a6a0Haynes Mathew George } 653058dcdbfe54a3294a2713ba9993e6024f3f3a6a0Haynes Mathew George 65461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *min_buff_count = m_sInput_buff_property.mincount; 65561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *actual_buff_count = m_sInput_buff_property.actualcount; 65661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#ifdef USE_ION 65761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // For ION memory allocations of the allocated buffer size 65861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // must be 4k aligned, hence aligning the input buffer 65961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // size to 4k. 66061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInput_buff_property.datasize = (m_sInput_buff_property.datasize + 4095) 66161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan & (~4095); 66261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#endif 66361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *buff_size = m_sInput_buff_property.datasize; 66461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 665058dcdbfe54a3294a2713ba9993e6024f3f3a6a0Haynes Mathew George ioctl_msg.in = NULL; 666058dcdbfe54a3294a2713ba9993e6024f3f3a6a0Haynes Mathew George ioctl_msg.out = (void*)&m_sOutput_buff_property; 66761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 66861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_GET_OUTPUT_BUFFER_REQ,(void*)&ioctl_msg) < 0) { 6698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for getting o/p buffer requirement failed"); 67047e37c4428509524ee576920a98381f3e4872493Nick Pelly return false; 671058dcdbfe54a3294a2713ba9993e6024f3f3a6a0Haynes Mathew George } 672058dcdbfe54a3294a2713ba9993e6024f3f3a6a0Haynes Mathew George 67361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *min_buff_count = m_sOutput_buff_property.mincount; 67461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *actual_buff_count = m_sOutput_buff_property.actualcount; 67561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *buff_size = m_sOutput_buff_property.datasize; 67661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 677058dcdbfe54a3294a2713ba9993e6024f3f3a6a0Haynes Mathew George 67861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 67947e37c4428509524ee576920a98381f3e4872493Nick Pelly 68061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 68147e37c4428509524ee576920a98381f3e4872493Nick Pelly 68261a2c6a19dbd06a317a419623020e02056661876Praveen Chavanbool venc_dev::venc_set_param(void *paramData,OMX_INDEXTYPE index ) 68361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 68461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 6858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_set_param:: venc-720p"); 68661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 68761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (index) { 68861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamPortDefinition: 689826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev { 69061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PARAM_PORTDEFINITIONTYPE *portDefn; 69161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan portDefn = (OMX_PARAM_PORTDEFINITIONTYPE *) paramData; 69261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("venc_set_param: OMX_IndexParamPortDefinition"); 69361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 69461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (portDefn->nPortIndex == PORT_INDEX_IN) { 69561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 69661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_encode_framerate(portDefn->format.video.xFramerate, 0)) { 69761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 69861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 69961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 70061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_color_format(portDefn->format.video.eColorFormat)) { 70161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 70261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 70361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 70461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("Basic parameter has changed"); 70561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.input_height = portDefn->format.video.nFrameHeight; 70661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.input_width = portDefn->format.video.nFrameWidth; 70761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 70861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&m_sVenc_cfg; 70961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 71061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 71161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_BASE_CFG,(void*)&ioctl_msg) < 0) { 7128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting base config failed"); 71361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 71461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 71561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 71661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("WxH (%dx%d), codec (%d), fps(nr/dr) (%d/%d), bitrate (%d), " 71761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "color_format (%d)", m_sVenc_cfg.input_width, m_sVenc_cfg.input_height, 71861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.codectype, m_sVenc_cfg.fps_num, m_sVenc_cfg.fps_den, 71961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.targetbitrate, m_sVenc_cfg.inputformat); 72061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 72161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("Updating the buffer count/size for the new resolution"); 72261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = NULL; 72361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = (void*)&m_sInput_buff_property; 72461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 72561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd, VEN_IOCTL_GET_INPUT_BUFFER_REQ,(void*)&ioctl_msg) < 0) { 7268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for getting i/p bufreq failed"); 72761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 72861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 72961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 73061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Got updated m_sInput_buff_property values: " 73161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "datasize = %u, maxcount = %u, actualcnt = %u, " 73261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "mincount = %u", m_sInput_buff_property.datasize, 73361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInput_buff_property.maxcount, m_sInput_buff_property.actualcount, 73461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInput_buff_property.mincount); 73561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 73661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = NULL; 73761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = (void*)&m_sOutput_buff_property; 73861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 73961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd, VEN_IOCTL_GET_OUTPUT_BUFFER_REQ,(void*)&ioctl_msg) < 0) { 7408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for getting o/p bufreq failed"); 74161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 74261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 74361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 74461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Got updated m_sOutput_buff_property values: " 74561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "datasize = %u, maxcount = %u, actualcnt = %u, " 74661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "mincount = %u", m_sOutput_buff_property.datasize, 74761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutput_buff_property.maxcount, m_sOutput_buff_property.actualcount, 74861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutput_buff_property.mincount); 74961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&m_sOutput_buff_property; 75061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 75161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 75261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd, VEN_IOCTL_SET_OUTPUT_BUFFER_REQ,(void*)&ioctl_msg) < 0) { 7538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting o/p bufreq failed"); 75461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 75561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 75661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 75761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((portDefn->nBufferCountActual >= m_sInput_buff_property.mincount) && 75861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (portDefn->nBufferCountActual <= m_sInput_buff_property.maxcount)) { 75961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInput_buff_property.actualcount = portDefn->nBufferCountActual; 76061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&m_sInput_buff_property; 76161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 76261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 76361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl(m_nDriver_fd,VEN_IOCTL_SET_INPUT_BUFFER_REQ,(void*)&ioctl_msg) < 0) { 7648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting i/p buffer requirements failed"); 76561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 76661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 76761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 76861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 76961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_sInput_buff_property.datasize != portDefn->nBufferSize) { 7708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("WARNING: Requested i/p bufsize[%u]," 77161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "Driver's updated i/p bufsize = %u", portDefn->nBufferSize, 77261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInput_buff_property.datasize); 77361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 77461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 77561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_level_set = false; 77661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 77761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (venc_set_profile_level(0, 0)) { 77861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("%s(): Profile/Level setting success", __func__); 77961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 78061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (portDefn->nPortIndex == PORT_INDEX_OUT) { 78161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_target_bitrate(portDefn->format.video.nBitrate, 0)) { 78261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 78361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 78461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 78561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ( (portDefn->nBufferCountActual >= m_sOutput_buff_property.mincount) 78661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan && 78761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (m_sOutput_buff_property.maxcount >= portDefn->nBufferCountActual) 78861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan && 78961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (m_sOutput_buff_property.datasize == portDefn->nBufferSize) 79061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ) { 79161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutput_buff_property.actualcount = portDefn->nBufferCountActual; 79261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&m_sOutput_buff_property; 79361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 79461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 79561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_OUTPUT_BUFFER_REQ,(void*)&ioctl_msg) < 0) { 7968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: ioctl VEN_IOCTL_SET_OUTPUT_BUFFER_REQ failed"); 79761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 79861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 79961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 8008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting Output buffer requirements failed"); 80161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 80261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 80361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 8048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid Port Index for OMX_IndexParamPortDefinition"); 80561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 80661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 80761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 808826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev } 80961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoPortFormat: 810826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev { 81161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_PORTFORMATTYPE *portFmt; 81261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan portFmt =(OMX_VIDEO_PARAM_PORTFORMATTYPE *)paramData; 8138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_set_param: OMX_IndexParamVideoPortFormat"); 81461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 81561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (portFmt->nPortIndex == (OMX_U32) PORT_INDEX_IN) { 81661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_color_format(portFmt->eColorFormat)) { 81761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 81861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 81961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (portFmt->nPortIndex == (OMX_U32) PORT_INDEX_OUT) { 82061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_encode_framerate(portFmt->xFramerate, 0)) { 82161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 82261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 82361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 8248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid Port Index for OMX_IndexParamVideoPortFormat"); 82561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 82661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 82761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 828826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev } 82961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoBitrate: 830826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev { 83161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_BITRATETYPE* pParam; 83261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam = (OMX_VIDEO_PARAM_BITRATETYPE*)paramData; 8338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_set_param: OMX_IndexParamVideoBitrate"); 83461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 83561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == (OMX_U32) PORT_INDEX_OUT) { 83661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_target_bitrate(pParam->nTargetBitrate, 0)) { 8378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Target Bit Rate setting failed"); 83861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 83961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 84061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 84161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_ratectrl_cfg(pParam->eControlRate)) { 8428767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Rate Control setting failed"); 84361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 84461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 84561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 8468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid Port Index for OMX_IndexParamVideoBitrate"); 84761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 84861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 84961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 850826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev } 85161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoMpeg4: 852826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev { 85361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_MPEG4TYPE* pParam; 85461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 bFrames = 0; 85547e37c4428509524ee576920a98381f3e4872493Nick Pelly 85661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam = (OMX_VIDEO_PARAM_MPEG4TYPE*)paramData; 8578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_set_param: OMX_IndexParamVideoMpeg4"); 85861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 85961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == (OMX_U32) PORT_INDEX_OUT) { 86061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_voptiming_cfg(pParam->nTimeIncRes)) { 8618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting vop_timing failed"); 86261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 86361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 86461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 86561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_profile_set = false; 86661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_level_set = false; 86761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 86861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_profile_level (pParam->eProfile, pParam->eLevel)) { 8698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Unsuccessful in updating Profile and level"); 87061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 87161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 87247e37c4428509524ee576920a98381f3e4872493Nick Pelly 873826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P 87461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else { 87561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->eProfile == OMX_VIDEO_MPEG4ProfileAdvancedSimple) { 87661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nBFrames) { 87761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("INFO: Only 1 Bframe is supported"); 87861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bFrames = 1; 87961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 88061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 88161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nBFrames) { 8828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Warning: B frames not supported"); 88361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bFrames = 0; 88461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 88561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 88661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 88761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 888826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 88947e37c4428509524ee576920a98381f3e4872493Nick Pelly 89061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_intra_period (pParam->nPFrames,bFrames)) { 8918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting intra period failed"); 89261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 89361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 89447e37c4428509524ee576920a98381f3e4872493Nick Pelly 89561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_multislice_cfg(OMX_IndexParamVideoMpeg4,pParam->nSliceHeaderSpacing)) { 8968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Unsuccessful in updating slice_config"); 89761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 89861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 89961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 9008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid Port Index for OMX_IndexParamVideoMpeg4"); 90161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 90261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 90361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 90461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 90561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoH263: 90661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 90761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_H263TYPE* pParam = (OMX_VIDEO_PARAM_H263TYPE*)paramData; 9088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_set_param: OMX_IndexParamVideoH263"); 90961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 bFrames = 0; 91061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 91161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == (OMX_U32) PORT_INDEX_OUT) { 91261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_profile_set = false; 91361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_level_set = false; 91461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 91561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_profile_level (pParam->eProfile, pParam->eLevel)) { 9168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Unsuccessful in updating Profile and level"); 91761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 91861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 91961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 92061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nBFrames) 9218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("WARNING: B frame not supported for H.263"); 92261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 92361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (venc_set_intra_period (pParam->nPFrames, bFrames) == false) { 9248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting intra period failed"); 92561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 92661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 92761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 9288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid Port Index for OMX_IndexParamVideoH263"); 92961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 93061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 93161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 93261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 93361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoAvc: 93461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 9358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_set_param:OMX_IndexParamVideoAvc"); 93661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_AVCTYPE* pParam = (OMX_VIDEO_PARAM_AVCTYPE*)paramData; 93761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 bFrames = 0; 93861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 93961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == (OMX_U32) PORT_INDEX_OUT) { 9408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("pParam->eProfile :%d ,pParam->eLevel %d", 94161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->eProfile,pParam->eLevel); 94261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 94361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_profile_set = false; 94461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_level_set = false; 94561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 94661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_profile_level (pParam->eProfile,pParam->eLevel)) { 9478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Unsuccessful in updating Profile and level %d, %d", 94861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->eProfile, pParam->eLevel); 94961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 95061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 95161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 95261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#ifdef MAX_RES_1080P 95361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else { 95461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->eProfile != OMX_VIDEO_AVCProfileBaseline) { 95561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nBFrames) { 95661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("INFO: Only 1 Bframe is supported"); 95761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bFrames = 1; 95861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 95961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 96061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nBFrames) { 9618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Warning: B frames not supported"); 96261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bFrames = 0; 96361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 96461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 96561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 96661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 96761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#endif 96861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 96961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_intra_period (pParam->nPFrames, bFrames)) { 9708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting intra period failed"); 97161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 97261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 97361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 97461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_entropy_config (pParam->bEntropyCodingCABAC, pParam->nCabacInitIdc)) { 9758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting Entropy failed"); 97661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 97761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 97861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 97961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_inloop_filter (pParam->eLoopFilterMode)) { 9808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting Inloop filter failed"); 98161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 98261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 98361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 98461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_multislice_cfg(OMX_IndexParamVideoAvc, pParam->nSliceHeaderSpacing)) { 9858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("WARNING: Unsuccessful in updating slice_config"); 98661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 98761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 98861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 9898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid Port Index for OMX_IndexParamVideoAvc"); 99061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 99161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 99261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //TBD, lot of other variables to be updated, yet to decide 99361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 99461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 99561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoIntraRefresh: 99661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 9978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_set_param:OMX_IndexParamVideoIntraRefresh"); 99861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_INTRAREFRESHTYPE *intra_refresh = 99961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_VIDEO_PARAM_INTRAREFRESHTYPE *)paramData; 100061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 100161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (intra_refresh->nPortIndex == (OMX_U32) PORT_INDEX_OUT) { 100261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (venc_set_intra_refresh(intra_refresh->eRefreshMode, intra_refresh->nCirMBs) == false) { 10038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting Intra refresh failed"); 100461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 100561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 100661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 10078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid Port Index for OMX_IndexParamVideoIntraRefresh"); 100861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 100961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 101061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 101161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 101261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoErrorCorrection: 101361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 10148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_set_param:OMX_IndexParamVideoErrorCorrection"); 101561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE *error_resilience = 101661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE *)paramData; 101761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 101861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (error_resilience->nPortIndex == (OMX_U32) PORT_INDEX_OUT) { 101961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (venc_set_error_resilience(error_resilience) == false) { 10208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting Intra refresh failed"); 102161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 102261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 102361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 10248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid Port Index for OMX_IndexParamVideoErrorCorrection"); 102561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 102661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 102761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 102861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 102961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoProfileLevelCurrent: 103061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 10318767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_set_param:OMX_IndexParamVideoProfileLevelCurrent"); 103261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_PROFILELEVELTYPE *profile_level = 103361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_VIDEO_PARAM_PROFILELEVELTYPE *)paramData; 103461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 103561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (profile_level->nPortIndex == (OMX_U32) PORT_INDEX_OUT) { 103661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_profile_set = false; 103761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_level_set = false; 103861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 103961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_profile_level (profile_level->eProfile, 104061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_level->eLevel)) { 10418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("WARNING: Unsuccessful in updating Profile and level"); 104261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 104361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 104461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 10458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid Port Index for OMX_IndexParamVideoProfileLevelCurrent"); 104661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 104761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 104861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 104961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 105061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoQuantization: 105161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 10528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_set_param:OMX_IndexParamVideoQuantization"); 105361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_QUANTIZATIONTYPE *session_qp = 105461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_VIDEO_PARAM_QUANTIZATIONTYPE *)paramData; 105561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 105661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (session_qp->nPortIndex == (OMX_U32) PORT_INDEX_OUT) { 105761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (venc_set_session_qp (session_qp->nQpI, 105861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan session_qp->nQpP) == false) { 10598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting Session QP failed"); 106061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 106161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 106261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 10638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid Port Index for OMX_IndexParamVideoQuantization"); 106461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 106561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 106661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 106761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 106861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 106961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_QcomIndexParamVideoQPRange: 107061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 10718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_set_param:OMX_QcomIndexParamVideoQPRange"); 107261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_QCOM_VIDEO_PARAM_QPRANGETYPE *qp_range = 107361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_QCOM_VIDEO_PARAM_QPRANGETYPE *)paramData; 107461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 107561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (qp_range->nPortIndex == (OMX_U32) PORT_INDEX_OUT) { 107661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (venc_set_qp_range (qp_range->minQP, 107761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan qp_range->maxQP) == false) { 10788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting QP Range failed"); 107961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 108061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 108161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 10828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid Port Index for OMX_QcomIndexParamVideoQPRange"); 108361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 108461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 108561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 108661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 108761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 108861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_ExtraDataVideoEncoderSliceInfo: 108961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 109061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("venc_set_param: OMX_ExtraDataVideoEncoderSliceInfo"); 109161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 extra_data = *(OMX_U32 *)paramData; 109261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 109361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (venc_set_extradata(extra_data) == false) { 109461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting " 109561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "OMX_ExtraDataVideoEncoderSliceInfo failed"); 109661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 109761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 109861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 109961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 110061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 110161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_ExtraDataVideoLTRInfo: 110261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 110361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("venc_set_param: OMX_ExtraDataVideoLTRInfo"); 110461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 extra_data = *(OMX_U32 *)paramData; 110561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 110661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (venc_set_extradata(extra_data) == false) { 110761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting " 110861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "OMX_ExtraDataVideoLTRInfo failed"); 110961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 111061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 111161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 111261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 111361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 111461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_QcomIndexEnableSliceDeliveryMode: 111561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 111661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_EXTNINDEX_PARAMTYPE* pParam = 111761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (QOMX_EXTNINDEX_PARAMTYPE*)paramData; 111861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 111961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 112061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (venc_set_slice_delivery_mode(pParam->bEnable) == false) { 112161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Setting slice delivery mode failed"); 112261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 112361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 112461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 112561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("OMX_QcomIndexEnableSliceDeliveryMode " 112661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "called on wrong port(%d)", pParam->nPortIndex); 112761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 112861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 112961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 113061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 113161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 113261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_QcomIndexEnableH263PlusPType: 113361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 113461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_EXTNINDEX_PARAMTYPE* pParam = 113561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (QOMX_EXTNINDEX_PARAMTYPE*)paramData; 113661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("OMX_QcomIndexEnableH263PlusPType"); 113761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 113861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 113961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (venc_set_plusptype(pParam->bEnable) == false) { 114061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Setting PlusPType failed for H263"); 114161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 114261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 114361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 114461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("OMX_QcomIndexEnableH263PlusPType " 114561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "called on wrong port(%d)", pParam->nPortIndex); 114661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 114761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 114861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 114961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 115061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 115161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case QOMX_IndexParamVideoLTRMode: 115261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 115361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_VIDEO_PARAM_LTRMODE_TYPE* pParam = 115461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (QOMX_VIDEO_PARAM_LTRMODE_TYPE*)paramData; 115561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 115661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 115761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_ltrmode(pParam->eLTRMode)) { 115861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Setting ltr mode failed"); 115961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 116061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 116161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 116261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("QOMX_IndexParamVideoLTRMode " 116361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "called on wrong port(%d)", pParam->nPortIndex); 116461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 116561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 116661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 116761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 116861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 116961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case QOMX_IndexParamVideoLTRCount: 117061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 117161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_VIDEO_PARAM_LTRCOUNT_TYPE* pParam = 117261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (QOMX_VIDEO_PARAM_LTRCOUNT_TYPE*)paramData; 117361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 117461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 117561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_ltrcount(pParam->nCount)) { 117661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Setting ltr count failed"); 117761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 117861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 117961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 118061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("QOMX_IndexParamVideoLTRCount " 118161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "called on wrong port(%d)", pParam->nPortIndex); 118261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 118361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 118461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 118561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 118661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 118761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoSliceFMO: 118861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 118961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("venc_set_param: Unsupported index 0x%x", index); 119061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 119161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 119261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 119361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 119461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 119561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 119661a2c6a19dbd06a317a419623020e02056661876Praveen Chavanbool venc_dev::venc_set_config(void *configData, OMX_INDEXTYPE index) 119761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 119861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 11998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Inside venc_set_config"); 120061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 120161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (index) { 120261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexConfigVideoBitrate: 120361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 120461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_CONFIG_BITRATETYPE *bit_rate = (OMX_VIDEO_CONFIG_BITRATETYPE *) 120561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan configData; 120661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 120761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_max_allowed_bitrate_check && 120861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan !venc_max_allowed_bitrate_check(bit_rate->nEncodeBitrate)) { 120961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Max Allowed Bitrate Check failed"); 121061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 121161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 121261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 12138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_set_config: OMX_IndexConfigVideoBitrate"); 121461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 121561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (bit_rate->nPortIndex == (OMX_U32)PORT_INDEX_OUT) { 121661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (venc_set_target_bitrate(bit_rate->nEncodeBitrate, 1) == false) { 12178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting Target Bit rate failed"); 121861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 121961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 122061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 12218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid Port Index for OMX_IndexConfigVideoBitrate"); 122261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 122361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 122461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 122561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 122661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexConfigVideoFramerate: 122761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 122861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_CONFIG_FRAMERATETYPE *frame_rate = (OMX_CONFIG_FRAMERATETYPE *) 122961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan configData; 12308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_set_config: OMX_IndexConfigVideoFramerate"); 123161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 123261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (frame_rate->nPortIndex == (OMX_U32)PORT_INDEX_OUT) { 123361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (venc_set_encode_framerate(frame_rate->xEncodeFramerate, 1) == false) { 12348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting Encode Framerate failed"); 123561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 123661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 123761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 12388767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid Port Index for OMX_IndexConfigVideoFramerate"); 123961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 124061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 124161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 124261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 124361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case QOMX_IndexConfigVideoIntraperiod: 124461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 12458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_set_param:QOMX_IndexConfigVideoIntraperiod"); 124661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_VIDEO_INTRAPERIODTYPE *intraperiod = 124761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (QOMX_VIDEO_INTRAPERIODTYPE *)configData; 124861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 124961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (intraperiod->nPortIndex == (OMX_U32) PORT_INDEX_OUT) { 125061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (venc_set_intra_period(intraperiod->nPFrames, intraperiod->nBFrames) == false) { 12518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting intra period failed"); 125261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 125361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 125461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 125561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 125661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 125761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 125861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexConfigVideoIntraVOPRefresh: 125961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 126061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_CONFIG_INTRAREFRESHVOPTYPE *intra_vop_refresh = (OMX_CONFIG_INTRAREFRESHVOPTYPE *) 126161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan configData; 12628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_set_config: OMX_IndexConfigVideoIntraVOPRefresh"); 126361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 126461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (intra_vop_refresh->nPortIndex == (OMX_U32)PORT_INDEX_OUT) { 126561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (venc_set_intra_vop_refresh(intra_vop_refresh->IntraRefreshVOP) == false) { 12668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting Encode Framerate failed"); 126761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 126861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 126961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 12708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid Port Index for OMX_IndexConfigVideoFramerate"); 127161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 127261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 127361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 127461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 127561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexConfigCommonRotate: 127661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 127761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_CONFIG_ROTATIONTYPE *config_rotation = 127861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan reinterpret_cast<OMX_CONFIG_ROTATIONTYPE*>(configData); 127961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 128061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 nFrameWidth; 128161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 12828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("venc_set_config: updating the new Dims"); 128361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan nFrameWidth = m_sVenc_cfg.input_width; 128461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.input_width = m_sVenc_cfg.input_height; 128561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.input_height = nFrameWidth; 128661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&m_sVenc_cfg; 128761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 128861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 128961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_BASE_CFG,(void*)&ioctl_msg) < 0) { 12908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Dimension Change for Rotation failed"); 129161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 129261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 129361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 129461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 129561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 129661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case QOMX_IndexConfigVideoLTRPeriod: 129761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 129861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_VIDEO_CONFIG_LTRPERIOD_TYPE* pParam = 129961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (QOMX_VIDEO_CONFIG_LTRPERIOD_TYPE*)configData; 130061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 130161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 130261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_ltrperiod(pParam->nFrames)) { 130361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Setting ltr period failed"); 130461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 130561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 130661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 130761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("QOMX_IndexConfigVideoLTRPeriod " 130861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "called on wrong port(%d)", pParam->nPortIndex); 130961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 131061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 131161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 131261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 131361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 131461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case QOMX_IndexConfigVideoLTRUse: 131561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 131661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_VIDEO_CONFIG_LTRUSE_TYPE* pParam = 131761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (QOMX_VIDEO_CONFIG_LTRUSE_TYPE*)configData; 131861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 131961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 132061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_ltruse(pParam->nID, pParam->nFrames)) { 132161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Setting ltr use failed"); 132261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 132361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 132461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 132561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("QOMX_IndexConfigVideoLTRUse " 132661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "called on wrong port(%d)", pParam->nPortIndex); 132761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 132861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 132961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 133061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 133161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 133261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 133361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("venc_set_config: Unsupported index = 0x%x", index); 133461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 133561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 133661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 133761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 133861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 133961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 134061a2c6a19dbd06a317a419623020e02056661876Praveen Chavanunsigned venc_dev::venc_stop( void) 134161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 134261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#ifdef MAX_RES_1080P 134361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pmem_free(); 134461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#endif 134561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return ioctl(m_nDriver_fd,VEN_IOCTL_CMD_STOP,NULL); 134661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 134761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 134861a2c6a19dbd06a317a419623020e02056661876Praveen Chavanunsigned venc_dev::venc_pause(void) 134961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 135061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return ioctl(m_nDriver_fd,VEN_IOCTL_CMD_PAUSE,NULL); 135161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 135261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 135361a2c6a19dbd06a317a419623020e02056661876Praveen Chavanunsigned venc_dev::venc_resume(void) 135461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 135561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return ioctl(m_nDriver_fd,VEN_IOCTL_CMD_RESUME,NULL) ; 135647e37c4428509524ee576920a98381f3e4872493Nick Pelly} 135747e37c4428509524ee576920a98381f3e4872493Nick Pelly 1358826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevunsigned venc_dev::venc_start_done(void) 1359826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 136061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return 0; 1361826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 1362826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 13636eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalunsigned venc_dev::venc_set_message_thread_id(pthread_t) 1364826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 136561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return 0; 1366826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 1367826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 136847e37c4428509524ee576920a98381f3e4872493Nick Pellyunsigned venc_dev::venc_start(void) 136947e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 13708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("%s(): Check Profile/Level set in driver before start", 137161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan __func__); 137261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 137361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_set_profile_level(0, 0)) { 13748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: %s(): Driver Profile/Level is NOT SET", 137561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan __func__); 137661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 13778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("%s(): Driver Profile[%lu]/Level[%lu] successfully SET", 137861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan __func__, codec_profile.profile, profile_level.level); 137961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 138061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 138161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_max_allowed_bitrate_check && 138261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan !venc_max_allowed_bitrate_check(bitrate.target_bitrate)) { 138361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Maximum Allowed Bitrate Check failed"); 138461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return -1; 138561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 138661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 138761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_config_print(); 1388826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 1389826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P 1390826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 139161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((codec_profile.profile == VEN_PROFILE_MPEG4_SP) || 139261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (codec_profile.profile == VEN_PROFILE_H264_BASELINE) || 139361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (codec_profile.profile == VEN_PROFILE_H263_BASELINE)) 139461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buffers_count = MAX_RECON_BUFFERS - 2; 139561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else 139661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buffers_count = MAX_RECON_BUFFERS; 139761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 139861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ltrmode.ltr_mode == (unsigned long)QOMX_VIDEO_LTRMode_Auto) { 139961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buffers_count = MAX_RECON_BUFFERS; 140061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("ltr mode enabled, so set recon buffers " 140161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "count to %d", recon_buffers_count); 140261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 140361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 140461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_allocate_recon_buffers()) 140561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return ioctl(m_nDriver_fd, VEN_IOCTL_CMD_START, NULL); 140661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else { 14078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Failed in creating Recon buffers"); 140861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return -1; 140961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 14106eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 1411826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else 1412826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev return ioctl(m_nDriver_fd, VEN_IOCTL_CMD_START, NULL); 1413826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 1414826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 1415826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 1416826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P 1417826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevOMX_U32 venc_dev::venc_allocate_recon_buffers() 1418826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 141961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 yuv_size; 142061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_ioctl_msg ioctl_msg; 142161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_recon_buff_size recon_buff_size; 142261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 142361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff_size.width = ((m_sVenc_cfg.input_width + 15) / 16) * 16; 142461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff_size.height = ((m_sVenc_cfg.input_height + 15) / 16 ) * 16; 142561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 14268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Width %d, Height %d, w_round %d, h_round %d", m_sVenc_cfg.input_width, 142761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.input_height, recon_buff_size.width, recon_buff_size.height); 142861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 142961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = NULL; 143061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = (void*)&recon_buff_size; 143161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 143261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_GET_RECON_BUFFER_SIZE, (void*)&ioctl_msg) < 0) { 14338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("VEN_IOCTL_GET_RECON_BUFFER_SIZE Failed for width: %d, Height %d" , 143461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff_size.width, recon_buff_size.height); 143561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 143661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 143761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 14388767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("Width %d, Height %d, w_round %d, h_round %d, yuv_size %d alignment %d count %d", 143961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.input_width, m_sVenc_cfg.input_height, recon_buff_size.width, 144061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff_size.height, recon_buff_size.size, recon_buff_size.alignment, 144161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buffers_count); 144261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 144361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan for (int i = 0; i < recon_buffers_count; i++) { 144461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pmem_allocate(recon_buff_size.size, recon_buff_size.alignment,i)) { 14458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Error returned in allocating recon buffers"); 144661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return -1; 144761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 144861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 144961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 145061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return 0; 1451826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 1452826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevOMX_U32 venc_dev::pmem_allocate(OMX_U32 size, OMX_U32 alignment, OMX_U32 count) 1453826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 145461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 pmem_fd = -1; 145561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 width, height; 145661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void *buf_addr = NULL; 145761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_ioctl_msg ioctl_msg; 145861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_recon_addr recon_addr; 145961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int rc = 0; 1460826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 1461826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 146261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[count].ion_device_fd = open (MEM_DEVICE,O_RDONLY); 146361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 146461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (recon_buff[count].ion_device_fd < 0) { 14658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: ION Device open() Failed"); 146661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return -1; 146761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 146861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 146961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[count].alloc_data.len = size; 14706eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef MAX_RES_720P 1471e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin recon_buff[count].alloc_data.heap_id_mask = ION_HEAP(MEM_HEAP_ID); 14726eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else 1473e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin recon_buff[count].alloc_data.heap_id_mask = (ION_HEAP(MEM_HEAP_ID) | 147461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ION_HEAP(ION_IOMMU_HEAP_ID)); 14756eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 147661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[count].alloc_data.flags = ION_FLAG_CACHED; 147761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[count].alloc_data.align = clip2(alignment); 147861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 147961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (recon_buff[count].alloc_data.align != 8192) 148061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[count].alloc_data.align = 8192; 148161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 148261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan rc = ioctl(recon_buff[count].ion_device_fd,ION_IOC_ALLOC,&recon_buff[count].alloc_data); 148361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 148461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (rc || !recon_buff[count].alloc_data.handle) { 14858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ION ALLOC memory failed "); 148661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[count].alloc_data.handle=NULL; 148761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return -1; 148861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 148961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 149061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[count].ion_alloc_fd.handle = recon_buff[count].alloc_data.handle; 149161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan rc = ioctl(recon_buff[count].ion_device_fd,ION_IOC_MAP,&recon_buff[count].ion_alloc_fd); 149261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 149361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (rc) { 14948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ION MAP failed "); 1495826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev recon_buff[count].ion_alloc_fd.fd =-1; 1496826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev recon_buff[count].ion_alloc_fd.fd =-1; 1497826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev return -1; 149861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 149961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 150061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pmem_fd = recon_buff[count].ion_alloc_fd.fd; 1501826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else 150261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct pmem_allocation allocation; 150361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pmem_fd = open(MEM_DEVICE, O_RDWR); 150461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 150561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((int)(pmem_fd) < 0) { 15068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Failed to get an pmem handle"); 150761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return -1; 150861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 150961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 151061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan allocation.size = size; 151161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan allocation.align = clip2(alignment); 151261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 151361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (allocation.align != 8192) 151461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan allocation.align = 8192; 151561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 151661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl(pmem_fd, PMEM_ALLOCATE_ALIGNED, &allocation) < 0) { 15178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Aligment(%u) failed with pmem driver Sz(%lu)", 151861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan allocation.align, allocation.size); 151961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return -1; 152061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 152161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 1522826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 152361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan buf_addr = mmap(NULL, size, 152461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PROT_READ | PROT_WRITE, 152561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MAP_SHARED, pmem_fd, 0); 152661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 152761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (buf_addr == (void*) MAP_FAILED) { 152861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan close(pmem_fd); 152961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pmem_fd = -1; 15308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Error returned in allocating recon buffers buf_addr: %p",buf_addr); 15316eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef USE_ION 153261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 153361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl(recon_buff[count].ion_device_fd,ION_IOC_FREE, 153461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &recon_buff[count].alloc_data.handle)) { 153561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("ion recon buffer free failed"); 153661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 153761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 153861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[count].alloc_data.handle = NULL; 153961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[count].ion_alloc_fd.fd =-1; 154061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan close(recon_buff[count].ion_device_fd); 154161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[count].ion_device_fd =-1; 15426eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 154361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return -1; 154461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 1545826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 15468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("Allocated virt:%p, FD: %d of size %d", buf_addr, pmem_fd, size); 1547826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 154861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_addr.buffer_size = size; 154961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_addr.pmem_fd = pmem_fd; 155061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_addr.offset = 0; 155161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_addr.pbuffer = (unsigned char *)buf_addr; 1552826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 155361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&recon_addr; 155461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 1555826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 155661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_RECON_BUFFER, (void*)&ioctl_msg) < 0) { 15578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Failed to set the Recon_buffers"); 155861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return -1; 155961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 1560826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 156161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[count].virtual_address = (unsigned char *) buf_addr; 156261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[count].size = size; 156361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[count].offset = 0; 156461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[count].pmem_fd = pmem_fd; 1565826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 15668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Allocated virt:%p, FD: %d of size %d at index: %d", recon_buff[count].virtual_address, 156761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[count].pmem_fd, recon_buff[count].size, count); 156861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return 0; 1569826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 1570826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 1571826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevOMX_U32 venc_dev::pmem_free() 1572826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 157361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int cnt = 0; 157461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_ioctl_msg ioctl_msg; 157561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_recon_addr recon_addr; 157661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 157761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan for (cnt = 0; cnt < recon_buffers_count; cnt++) { 157861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (recon_buff[cnt].pmem_fd) { 157961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_addr.pbuffer = recon_buff[cnt].virtual_address; 158061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_addr.offset = recon_buff[cnt].offset; 158161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_addr.pmem_fd = recon_buff[cnt].pmem_fd; 158261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_addr.buffer_size = recon_buff[cnt].size; 158361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&recon_addr; 158461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 158561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 158661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl(m_nDriver_fd, VEN_IOCTL_FREE_RECON_BUFFER ,&ioctl_msg) < 0) 158761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("VEN_IOCTL_FREE_RECON_BUFFER failed"); 158861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 158961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan munmap(recon_buff[cnt].virtual_address, recon_buff[cnt].size); 159061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan close(recon_buff[cnt].pmem_fd); 1591826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 159261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 159361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl(recon_buff[cnt].ion_device_fd,ION_IOC_FREE, 159461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &recon_buff[cnt].alloc_data.handle)) { 159561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("ion recon buffer free failed"); 159661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 159761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 159861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[cnt].alloc_data.handle = NULL; 159961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[cnt].ion_alloc_fd.fd =-1; 160061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan close(recon_buff[cnt].ion_device_fd); 160161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[cnt].ion_device_fd =-1; 1602826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 16038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("cleaning Index %d of size %d",cnt,recon_buff[cnt].size); 160461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[cnt].pmem_fd = -1; 160561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[cnt].virtual_address = NULL; 160661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[cnt].offset = 0; 160761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[cnt].alignment = 0; 160861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buff[cnt].size = 0; 160961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 161061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 161161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 161261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return 0; 1613826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 1614826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 1615826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 1616826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevvoid venc_dev::venc_config_print() 1617826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 1618826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 16198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("ENC_CONFIG: Codec: %d, Profile %d, level : %d", 162061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.codectype, codec_profile.profile, profile_level.level); 1621826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 16228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("ENC_CONFIG: Width: %d, Height:%d, Fps: %d", 162361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.input_width, m_sVenc_cfg.input_height, 162461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.fps_num/m_sVenc_cfg.fps_den); 1625826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 16268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("ENC_CONFIG: Bitrate: %d, RC: %d, I-Period: %d", 162761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bitrate.target_bitrate, rate_ctrl.rcmode, intra_period.num_pframes); 1628826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 16298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("ENC_CONFIG: qpI: %d, qpP: %d, qpb: 0", 163061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan session_qp.iframeqp, session_qp.pframqp); 1631826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 16328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("ENC_CONFIG: minQP: %d, maxQP: %d", 163361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan qp_range.minqp, qp_range.maxqp); 16346eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 16358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("ENC_CONFIG: VOP_Resolution: %d, Slice-Mode: %d, Slize_Size: %d", 163661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan voptimecfg.voptime_resolution, multislice.mslice_mode, 163761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan multislice.mslice_size); 1638826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 16398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("ENC_CONFIG: EntropyMode: %d, CabacModel: %d", 164061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan entropy.longentropysel, entropy.cabacmodel); 1641826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 16428767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("ENC_CONFIG: DB-Mode: %d, alpha: %d, Beta: %d", 164361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dbkfilter.db_mode, dbkfilter.slicealpha_offset, 164461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dbkfilter.slicebeta_offset); 1645826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 16468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("ENC_CONFIG: IntraMB/Frame: %d, HEC: %d", 164761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan intra_refresh.mbcount, hec.header_extension); 164847e37c4428509524ee576920a98381f3e4872493Nick Pelly} 164947e37c4428509524ee576920a98381f3e4872493Nick Pelly 165047e37c4428509524ee576920a98381f3e4872493Nick Pellyunsigned venc_dev::venc_flush( unsigned port) 165147e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 165261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_ioctl_msg ioctl_msg; 165361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_bufferflush buffer_index; 165447e37c4428509524ee576920a98381f3e4872493Nick Pelly 165561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (port == PORT_INDEX_IN) { 165661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Calling Input Flush"); 165761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan buffer_index.flush_mode = VEN_FLUSH_INPUT; 165861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&buffer_index; 165961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 166061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 166161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return ioctl (m_nDriver_fd,VEN_IOCTL_CMD_FLUSH,(void*)&ioctl_msg); 166261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (port == PORT_INDEX_OUT) { 166361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Calling Output Flush"); 166461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan buffer_index.flush_mode = VEN_FLUSH_OUTPUT; 166561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&buffer_index; 166661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 166761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return ioctl (m_nDriver_fd,VEN_IOCTL_CMD_FLUSH,(void*)&ioctl_msg); 166861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 166961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return -1; 167061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 167147e37c4428509524ee576920a98381f3e4872493Nick Pelly} 167247e37c4428509524ee576920a98381f3e4872493Nick Pelly 167347e37c4428509524ee576920a98381f3e4872493Nick Pelly//allocating I/P memory from pmem and register with the device 167447e37c4428509524ee576920a98381f3e4872493Nick Pelly 167547e37c4428509524ee576920a98381f3e4872493Nick Pelly 1676826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_use_buf(void *buf_addr, unsigned port,unsigned) 167747e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 167861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_ioctl_msg ioctl_msg = {NULL,NULL}; 167961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct pmem *pmem_tmp; 168061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_bufferpayload dev_buffer = {0}; 168161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_allocatorproperty buff_alloc_property = {0}; 168247e37c4428509524ee576920a98381f3e4872493Nick Pelly 168361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pmem_tmp = (struct pmem *)buf_addr; 168447e37c4428509524ee576920a98381f3e4872493Nick Pelly 16858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_use_buf:: pmem_tmp = %p", pmem_tmp); 168647e37c4428509524ee576920a98381f3e4872493Nick Pelly 168761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (port == PORT_INDEX_IN) { 168861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.pbuffer = (OMX_U8 *)pmem_tmp->buffer; 168961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.fd = pmem_tmp->fd; 169061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.maped_size = pmem_tmp->size; 169161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.sz = pmem_tmp->size; 169261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.offset = pmem_tmp->offset; 169347e37c4428509524ee576920a98381f3e4872493Nick Pelly 169461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((m_sVenc_cfg.input_height %16 !=0) || (m_sVenc_cfg.input_width%16 != 0)) { 169561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long ht = m_sVenc_cfg.input_height; 169661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long wd = m_sVenc_cfg.input_width; 169761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int luma_size, luma_size_2k; 1698120b7e44bc2419b5f9f03bc2af39c92d134189b7Ajay Dudani 169961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ht = (ht + 15) & ~15; 170061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan wd = (wd + 15) & ~15; 1701120b7e44bc2419b5f9f03bc2af39c92d134189b7Ajay Dudani 170261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan luma_size = ht * wd; 170361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan luma_size_2k = (luma_size + 2047) & ~2047; 1704120b7e44bc2419b5f9f03bc2af39c92d134189b7Ajay Dudani 170561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.sz = luma_size_2k + ((luma_size/2 + 2047) & ~2047); 17062fd0565a057f63bff8abca2a4a5ce2a77a004fe8Haynes Mathew George#ifdef USE_ION 170761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = NULL; 170861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = (void*)&buff_alloc_property; 170961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 171061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_GET_INPUT_BUFFER_REQ,(void*)&ioctl_msg) < 0) { 17118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: venc_use_buf:get input buffer failed "); 171261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 171361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 171461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 171561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (buff_alloc_property.alignment < 4096) { 171661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.sz = ((dev_buffer.sz + 4095) & ~4095); 171761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 171861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.sz = ((dev_buffer.sz + (buff_alloc_property.alignment - 1)) & 171961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ~(buff_alloc_property.alignment - 1)); 172061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 172161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 17222fd0565a057f63bff8abca2a4a5ce2a77a004fe8Haynes Mathew George#endif 172361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.maped_size = dev_buffer.sz; 172461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 1725120b7e44bc2419b5f9f03bc2af39c92d134189b7Ajay Dudani 172661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&dev_buffer; 172761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 17282fd0565a057f63bff8abca2a4a5ce2a77a004fe8Haynes Mathew George 17298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_use_buf:pbuffer = %x,fd = %x, offset = %d, maped_size = %d", \ 173047e37c4428509524ee576920a98381f3e4872493Nick Pelly dev_buffer.pbuffer, \ 173147e37c4428509524ee576920a98381f3e4872493Nick Pelly dev_buffer.fd, \ 173247e37c4428509524ee576920a98381f3e4872493Nick Pelly dev_buffer.offset, \ 173347e37c4428509524ee576920a98381f3e4872493Nick Pelly dev_buffer.maped_size); 173447e37c4428509524ee576920a98381f3e4872493Nick Pelly 173561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_INPUT_BUFFER,&ioctl_msg) < 0) { 17368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: venc_use_buf:set input buffer failed "); 173761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 173861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 173961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (port == PORT_INDEX_OUT) { 174061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.pbuffer = (OMX_U8 *)pmem_tmp->buffer; 174161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.fd = pmem_tmp->fd; 174261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.sz = pmem_tmp->size; 174361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.maped_size = pmem_tmp->size; 174461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.offset = pmem_tmp->offset; 174561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&dev_buffer; 174661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 174747e37c4428509524ee576920a98381f3e4872493Nick Pelly 17488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_use_buf:pbuffer = %x,fd = %x, offset = %d, maped_size = %d", \ 174947e37c4428509524ee576920a98381f3e4872493Nick Pelly dev_buffer.pbuffer, \ 175047e37c4428509524ee576920a98381f3e4872493Nick Pelly dev_buffer.fd, \ 175147e37c4428509524ee576920a98381f3e4872493Nick Pelly dev_buffer.offset, \ 175247e37c4428509524ee576920a98381f3e4872493Nick Pelly dev_buffer.maped_size); 175347e37c4428509524ee576920a98381f3e4872493Nick Pelly 175461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_OUTPUT_BUFFER,&ioctl_msg) < 0) { 17558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: venc_use_buf:set output buffer failed "); 175661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 175761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 175861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 17598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: venc_use_buf:Invalid Port Index "); 176061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 176147e37c4428509524ee576920a98381f3e4872493Nick Pelly } 176247e37c4428509524ee576920a98381f3e4872493Nick Pelly 176361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 176447e37c4428509524ee576920a98381f3e4872493Nick Pelly} 176547e37c4428509524ee576920a98381f3e4872493Nick Pelly 176647e37c4428509524ee576920a98381f3e4872493Nick Pellybool venc_dev::venc_free_buf(void *buf_addr, unsigned port) 176747e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 176861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_ioctl_msg ioctl_msg = {NULL,NULL}; 176961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct pmem *pmem_tmp; 177061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_bufferpayload dev_buffer = {0}; 177161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 177261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pmem_tmp = (struct pmem *)buf_addr; 177347e37c4428509524ee576920a98381f3e4872493Nick Pelly 17748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_use_buf:: pmem_tmp = %p", pmem_tmp); 177561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 177661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (port == PORT_INDEX_IN) { 177761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.pbuffer = (OMX_U8 *)pmem_tmp->buffer; 177861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.fd = pmem_tmp->fd; 177961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.maped_size = pmem_tmp->size; 178061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.sz = pmem_tmp->size; 178161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.offset = pmem_tmp->offset; 178261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&dev_buffer; 178361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 178461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 17858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_free_buf:pbuffer = %x,fd = %x, offset = %d, maped_size = %d", \ 178647e37c4428509524ee576920a98381f3e4872493Nick Pelly dev_buffer.pbuffer, \ 178747e37c4428509524ee576920a98381f3e4872493Nick Pelly dev_buffer.fd, \ 178847e37c4428509524ee576920a98381f3e4872493Nick Pelly dev_buffer.offset, \ 178947e37c4428509524ee576920a98381f3e4872493Nick Pelly dev_buffer.maped_size); 179047e37c4428509524ee576920a98381f3e4872493Nick Pelly 179161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_CMD_FREE_INPUT_BUFFER,&ioctl_msg) < 0) { 17928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: venc_free_buf: free input buffer failed "); 179361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 179461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 179561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (port == PORT_INDEX_OUT) { 179661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.pbuffer = (OMX_U8 *)pmem_tmp->buffer; 179761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.fd = pmem_tmp->fd; 179861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.sz = pmem_tmp->size; 179961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.maped_size = pmem_tmp->size; 180061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_buffer.offset = pmem_tmp->offset; 180161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&dev_buffer; 180261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 180347e37c4428509524ee576920a98381f3e4872493Nick Pelly 18048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_free_buf:pbuffer = %x,fd = %x, offset = %d, maped_size = %d", \ 180547e37c4428509524ee576920a98381f3e4872493Nick Pelly dev_buffer.pbuffer, \ 180647e37c4428509524ee576920a98381f3e4872493Nick Pelly dev_buffer.fd, \ 180747e37c4428509524ee576920a98381f3e4872493Nick Pelly dev_buffer.offset, \ 180847e37c4428509524ee576920a98381f3e4872493Nick Pelly dev_buffer.maped_size); 180947e37c4428509524ee576920a98381f3e4872493Nick Pelly 181061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_CMD_FREE_OUTPUT_BUFFER,&ioctl_msg) < 0) { 18118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: venc_free_buf: free output buffer failed "); 181261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 181361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 181461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 18158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: venc_free_buf:Invalid Port Index "); 181661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 181747e37c4428509524ee576920a98381f3e4872493Nick Pelly } 181847e37c4428509524ee576920a98381f3e4872493Nick Pelly 181961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 182047e37c4428509524ee576920a98381f3e4872493Nick Pelly} 182147e37c4428509524ee576920a98381f3e4872493Nick Pelly 1822c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavanbool venc_dev::venc_color_align(OMX_BUFFERHEADERTYPE *buffer, 1823c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan OMX_U32 width, OMX_U32 height) 1824c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan{ 1825c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan DEBUG_PRINT_ERROR("%s not implemented!", __func__); 1826c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan return OMX_ErrorUnsupportedSetting; 1827c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan} 1828c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan 1829826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_empty_buf(void *buffer, void *pmem_data_buf,unsigned,unsigned) 183047e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 183161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_buffer frameinfo; 183261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct pmem *temp_buffer; 183361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_ioctl_msg ioctl_msg; 183461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct OMX_BUFFERHEADERTYPE *bufhdr; 183561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 183661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (buffer == NULL) { 18378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: venc_etb: buffer is NULL"); 183861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 183961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 184061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 184161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufhdr = (OMX_BUFFERHEADERTYPE *)buffer; 184261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 18438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Input buffer length %d",bufhdr->nFilledLen); 184461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 184561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pmem_data_buf) { 18468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Internal PMEM addr for i/p Heap UseBuf: %p", pmem_data_buf); 184761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan frameinfo.ptrbuffer = (OMX_U8 *)pmem_data_buf; 184861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 18498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Shared PMEM addr for i/p PMEM UseBuf/AllocateBuf: %p", bufhdr->pBuffer); 185061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan frameinfo.ptrbuffer = (OMX_U8 *)bufhdr->pBuffer; 185161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 185261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 185361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan frameinfo.clientdata = (void *) buffer; 185461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan frameinfo.sz = bufhdr->nFilledLen; 185561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan frameinfo.len = bufhdr->nFilledLen; 185661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan frameinfo.flags = bufhdr->nFlags; 185761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan frameinfo.offset = bufhdr->nOffset; 185861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan frameinfo.timestamp = bufhdr->nTimeStamp; 18598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("i/p TS = %u", (OMX_U32)frameinfo.timestamp); 186061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = &frameinfo; 186161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 186261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 186361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("DBG: i/p frameinfo: bufhdr->pBuffer = %p, ptrbuffer = %p, offset = %u, len = %u", 186461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufhdr->pBuffer, frameinfo.ptrbuffer, frameinfo.offset, frameinfo.len); 186561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 186661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl(m_nDriver_fd,VEN_IOCTL_CMD_ENCODE_FRAME,&ioctl_msg) < 0) { 186761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Generate an async error and move to invalid state*/ 186861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 186961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 187061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 18718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (m_debug.in_buffer_log) { 18728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan venc_input_log_buffers(bufhdr, pmem_data_bufr, frameinfo.len); 187361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 187461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 187561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 187647e37c4428509524ee576920a98381f3e4872493Nick Pelly} 1877826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_fill_buf(void *buffer, void *pmem_data_buf,unsigned,unsigned) 187847e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 187961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_ioctl_msg ioctl_msg = {NULL,NULL}; 188061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct pmem *temp_buffer = NULL; 188161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_buffer frameinfo; 188261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct OMX_BUFFERHEADERTYPE *bufhdr; 188361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 188461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (buffer == NULL) { 188561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 188661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 188761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 188861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufhdr = (OMX_BUFFERHEADERTYPE *)buffer; 188961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 189061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pmem_data_buf) { 18918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Internal PMEM addr for o/p Heap UseBuf: %p", pmem_data_buf); 189261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan frameinfo.ptrbuffer = (OMX_U8 *)pmem_data_buf; 189361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 18948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Shared PMEM addr for o/p PMEM UseBuf/AllocateBuf: %p", bufhdr->pBuffer); 189561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan frameinfo.ptrbuffer = (OMX_U8 *)bufhdr->pBuffer; 189661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 189761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 189861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan frameinfo.clientdata = buffer; 189961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan frameinfo.sz = bufhdr->nAllocLen; 190061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan frameinfo.flags = bufhdr->nFlags; 190161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan frameinfo.offset = bufhdr->nOffset; 190261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 190361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = &frameinfo; 190461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 190561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("DBG: o/p frameinfo: bufhdr->pBuffer = %p, ptrbuffer = %p, offset = %u, len = %u", 190661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufhdr->pBuffer, frameinfo.ptrbuffer, frameinfo.offset, frameinfo.len); 190761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 190861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_CMD_FILL_OUTPUT_BUFFER,&ioctl_msg) < 0) { 19098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: ioctl VEN_IOCTL_CMD_FILL_OUTPUT_BUFFER failed"); 191061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 191161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 191261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 191361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 1914826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 1915826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 1916826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_set_slice_delivery_mode(OMX_BOOL enable) 1917826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 191861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 191961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Set slice_delivery_mode: %d", enable); 192061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 192161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (multislice.mslice_mode == VEN_MSLICE_CNT_MB) { 192261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl(m_nDriver_fd, VEN_IOCTL_SET_SLICE_DELIVERY_MODE) < 0) { 192361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Request for setting slice delivery mode failed"); 192461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 192561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 192661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 192761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("WARNING: slice_mode[%d] is not VEN_MSLICE_CNT_MB to set " 192861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "slice delivery mode to the driver.", multislice.mslice_mode); 192961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 193061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 193161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 1932826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 1933826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 19346eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalbool venc_dev::venc_set_plusptype(OMX_BOOL enable) 1935b79c7e8bccc229ae7d431392c0cd7c5fe24f1cd0Rom Lemarchand{ 193661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 193761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_plusptype plusptype = {0}; 193861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("Set plusptype: %d", enable); 193961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan plusptype.plusptype_enable = enable; 194061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&plusptype; 194161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 194261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 194361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl(m_nDriver_fd, VEN_IOCTL_SET_H263_PLUSPTYPE,(void*)&ioctl_msg) < 0) { 194461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Request for setting plusptype for h263 failed"); 194561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 194661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 194761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 194861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 1949b79c7e8bccc229ae7d431392c0cd7c5fe24f1cd0Rom Lemarchand} 1950b79c7e8bccc229ae7d431392c0cd7c5fe24f1cd0Rom Lemarchand 19516eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalbool venc_dev::venc_set_ltrmode(QOMX_VIDEO_LTRMODETYPE mode) 1952b79c7e8bccc229ae7d431392c0cd7c5fe24f1cd0Rom Lemarchand{ 195361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 195461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ltrmode ltr_mode; 195561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ltr_mode.ltr_mode = (unsigned long)mode; 195661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Set ltr mode: %d", mode); 195761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)<r_mode; 195861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 195961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 196061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd, VEN_IOCTL_SET_LTRMODE, (void*)&ioctl_msg) < 0) { 196161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting ltrmode failed"); 196261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 196361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 196461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 196561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ltrmode.ltr_mode = (unsigned long)mode; 196661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 19676eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal} 19686eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 19696eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalbool venc_dev::venc_set_ltrcount(OMX_U32 count) 19706eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal{ 197161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 197261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ltrcount ltr_count; 197361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ltr_count.ltr_count = (unsigned long)count; 197461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Set ltr count: %d", count); 197561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)<r_count; 197661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 197761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 197861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd, VEN_IOCTL_SET_LTRCOUNT, (void*)&ioctl_msg) < 0) { 197961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting ltrcount failed"); 198061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 198161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 198261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 198361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ltrcount.ltr_count = (unsigned long)count; 198461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 19856eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal} 19866eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 19876eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalbool venc_dev::venc_set_ltrperiod(OMX_U32 period) 19886eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal{ 198961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 199061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ltrperiod ltr_period; 199161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ltr_period.ltr_period = (unsigned long)period; 199261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Set ltr period: %d", period); 199361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)<r_period; 199461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 199561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 199661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd, VEN_IOCTL_SET_LTRPERIOD, (void*)&ioctl_msg) < 0) { 199761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting ltrperiod failed"); 199861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 199961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 200061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 200161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ltrperiod.ltr_period = (unsigned long)period; 200261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 20036eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal} 20046eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 20056eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalbool venc_dev::venc_set_ltruse(OMX_U32 id, OMX_U32 frames) 20066eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal{ 200761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 200861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ltruse ltr_use; 200961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ltr_use.ltr_id = (unsigned long)id; 201061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ltr_use.ltr_frames = (unsigned long)frames; 201161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Set ltr use: id = %d, ltr_frames = %d", id, frames); 201261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)<r_use; 201361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 201461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 201561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd, VEN_IOCTL_SET_LTRUSE, (void*)&ioctl_msg) < 0) { 201661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting ltruse failed"); 201761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 201861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 201961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 202061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 202161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 20223145f89c1398e32bb7fc6cc03866388f42d2bad3Deva Ramasubramanian 2023826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_set_extradata(OMX_U32 extra_data) 2024826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 202561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 202661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("venc_set_extradata:: %x", extra_data); 202761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&extra_data; 202861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 202961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 203061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd, VEN_IOCTL_SET_EXTRADATA, (void*)&ioctl_msg) < 0) { 203161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting extradata failed"); 203261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 203361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 203461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 203561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 203647e37c4428509524ee576920a98381f3e4872493Nick Pelly} 203747e37c4428509524ee576920a98381f3e4872493Nick Pelly 203847e37c4428509524ee576920a98381f3e4872493Nick Pellybool venc_dev::venc_set_session_qp(OMX_U32 i_frame_qp, OMX_U32 p_frame_qp) 203947e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 204061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 204161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_sessionqp qp = {0, 0}; 204261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("venc_set_session_qp:: i_frame_qp = %d, p_frame_qp = %d", i_frame_qp, 204361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan p_frame_qp); 204461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 204561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan qp.iframeqp = i_frame_qp; 204661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan qp.pframqp = p_frame_qp; 204761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 204861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&qp; 204961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 205061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 205161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_SESSION_QP,(void*)&ioctl_msg)< 0) { 20528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting session qp failed"); 205361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 205461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 205561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 205661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan session_qp.iframeqp = i_frame_qp; 205761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan session_qp.pframqp = p_frame_qp; 205861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 205961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 206047e37c4428509524ee576920a98381f3e4872493Nick Pelly} 206147e37c4428509524ee576920a98381f3e4872493Nick Pelly 20626eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalbool venc_dev::venc_set_qp_range(OMX_U32 min_qp, OMX_U32 max_qp) 20636eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal{ 206461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 206561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_qprange qp = {0, 0}; 206661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("venc_set_qp_range:: min_qp = %d, max_qp = %d", min_qp, 206761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan max_qp); 206861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 206961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan qp.minqp = min_qp; 207061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan qp.maxqp = max_qp; 207161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 207261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&qp; 207361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 207461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 207561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_QP_RANGE,(void*)&ioctl_msg)< 0) { 20768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting qp range failed"); 207761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 207861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 207961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 208061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan qp_range.minqp= min_qp; 208161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan qp_range.maxqp= max_qp; 208261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 208361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 20846eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal} 20856eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 208647e37c4428509524ee576920a98381f3e4872493Nick Pellybool venc_dev::venc_set_profile_level(OMX_U32 eProfile,OMX_U32 eLevel) 208747e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 208861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 208961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_profile requested_profile; 209061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct ven_profilelevel requested_level; 209161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned const int *profile_tbl = NULL; 209261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long mb_per_frame = 0, mb_per_sec = 0; 209361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("venc_set_profile_level:: eProfile = %d, Level = %d", 209461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eProfile, eLevel); 209561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mb_per_frame = ((m_sVenc_cfg.input_height + 15) >> 4)* 209661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ((m_sVenc_cfg.input_width + 15) >> 4); 209761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 209861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((eProfile == 0) && (eLevel == 0) && m_profile_set && m_level_set) { 209961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Set profile/level was done already"); 210061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 210147e37c4428509524ee576920a98381f3e4872493Nick Pelly } 210261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 210361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eProfile && eLevel) { 210461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* non-zero values will be set by user, saving the same*/ 210561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_eProfile = eProfile; 210661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_eLevel = eLevel; 210761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Save profile/level (%d/%d) for max allowed bitrate check", 210861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_eProfile, m_eLevel); 210947e37c4428509524ee576920a98381f3e4872493Nick Pelly } 211047e37c4428509524ee576920a98381f3e4872493Nick Pelly 211161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("Validating Profile/Level from table"); 211247e37c4428509524ee576920a98381f3e4872493Nick Pelly 211361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!venc_validate_profile_level(&eProfile, &eLevel)) { 21148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("ERROR: Profile/Level validation failed"); 211561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 2116826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev } 211761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 211861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_sVenc_cfg.codectype == VEN_CODEC_MPEG4) { 211961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("eProfile = %d, OMX_VIDEO_MPEG4ProfileSimple = %d and " 212061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "OMX_VIDEO_MPEG4ProfileAdvancedSimple = %d", eProfile, 212161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4ProfileAdvancedSimple); 212261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 212361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eProfile == OMX_VIDEO_MPEG4ProfileSimple) { 212461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_profile.profile = VEN_PROFILE_MPEG4_SP; 212561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_tbl = (unsigned int const *) 212661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (&mpeg4_profile_level_table[MPEG4_SP_START]); 212761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_tbl += MPEG4_720P_LEVEL*5; 212861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (eProfile == OMX_VIDEO_MPEG4ProfileAdvancedSimple) { 212961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_profile.profile = VEN_PROFILE_MPEG4_ASP; 213061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_tbl = (unsigned int const *) 213161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (&mpeg4_profile_level_table[MPEG4_ASP_START]); 213261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_tbl += MPEG4_720P_LEVEL*5; 213361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 21348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("ERROR: Unsupported MPEG4 profile = %u", 213561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eProfile); 213661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 2137826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev } 213861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 213961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("eLevel = %d, OMX_VIDEO_MPEG4Level0 = %d, OMX_VIDEO_MPEG4Level1 = %d," 214061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "OMX_VIDEO_MPEG4Level2 = %d, OMX_VIDEO_MPEG4Level3 = %d, OMX_VIDEO_MPEG4Level4 = %d," 214161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "OMX_VIDEO_MPEG4Level5 = %d", eLevel, OMX_VIDEO_MPEG4Level0, OMX_VIDEO_MPEG4Level1, 214261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_MPEG4Level2, OMX_VIDEO_MPEG4Level3, OMX_VIDEO_MPEG4Level4, OMX_VIDEO_MPEG4Level5); 214361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 214461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (mb_per_frame >= 3600) { 214561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (requested_profile.profile == VEN_PROFILE_MPEG4_ASP) 214661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_MPEG4_5; 214761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 214861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (requested_profile.profile == VEN_PROFILE_MPEG4_SP) 214961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_MPEG4_6; 215061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 215161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (eLevel) { 215261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_MPEG4Level0: 215361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_MPEG4_0; 215461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 215561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_MPEG4Level1: 215661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_MPEG4_1; 215761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 215861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_MPEG4Level2: 215961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_MPEG4_2; 216061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 216161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_MPEG4Level3: 216261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_MPEG4_3; 216361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 216461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_MPEG4Level4a: 216561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_MPEG4_4; 216661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 216761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_MPEG4Level5: 216861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mb_per_sec = mb_per_frame * (m_sVenc_cfg.fps_num / m_sVenc_cfg.fps_den); 216961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 217061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((requested_profile.profile == VEN_PROFILE_MPEG4_SP) && (mb_per_frame >= profile_tbl[0]) && 217161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (mb_per_sec >= profile_tbl[1])) { 21728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("MPEG4 Level 6 is set for 720p resolution"); 217361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_MPEG4_6; 217461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 21758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("MPEG4 Level 5 is set for non-720p resolution"); 217661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_MPEG4_5; 217761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 217861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 217961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 218061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 218161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 218261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // TODO update corresponding levels for MPEG4_LEVEL_3b,MPEG4_LEVEL_6 218361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 218461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 218561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 218661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (m_sVenc_cfg.codectype == VEN_CODEC_H263) { 218761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eProfile == OMX_VIDEO_H263ProfileBaseline) { 218861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_profile.profile = VEN_PROFILE_H263_BASELINE; 218961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 21908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("ERROR: Unsupported H.263 profile = %u", 219161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_profile.profile); 219261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 219361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 219461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 219561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //profile level 219661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (eLevel) { 219761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_H263Level10: 219861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H263_10; 219961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 220061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_H263Level20: 220161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H263_20; 220261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 220361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_H263Level30: 220461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H263_30; 220561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 220661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_H263Level40: 220761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H263_40; 220861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 220961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_H263Level45: 221061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H263_45; 221161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 221261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_H263Level50: 221361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H263_50; 221461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 221561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_H263Level60: 221661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H263_60; 221761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 221861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_H263Level70: 221961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H263_70; 222061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 222161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 222261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 222361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 222461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 222561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (m_sVenc_cfg.codectype == VEN_CODEC_H264) { 222661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eProfile == OMX_VIDEO_AVCProfileBaseline) { 222761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_profile.profile = VEN_PROFILE_H264_BASELINE; 222861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (eProfile == OMX_VIDEO_AVCProfileMain) { 222961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_profile.profile = VEN_PROFILE_H264_MAIN; 223061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (eProfile == OMX_VIDEO_AVCProfileHigh) { 223161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_profile.profile = VEN_PROFILE_H264_HIGH; 223261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 22338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("ERROR: Unsupported H.264 profile = %u", 223461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_profile.profile); 223561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 223661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 223761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 223861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //profile level 223961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (eLevel) { 224061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_AVCLevel1: 224161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H264_1; 224261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 224361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_AVCLevel1b: 224461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H264_1b; 224561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 224661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_AVCLevel11: 224761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H264_1p1; 224861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 224961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_AVCLevel12: 225061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H264_1p2; 225161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 225261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_AVCLevel13: 225361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H264_1p3; 225461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 225561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_AVCLevel2: 225661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H264_2; 225761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 225861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_AVCLevel21: 225961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H264_2p1; 226061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 226161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_AVCLevel22: 226261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H264_2p2; 226361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 226461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_AVCLevel3: 226561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H264_3; 226661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 226761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_AVCLevel31: 226861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H264_3p1; 226961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 227061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_AVCLevel32: 227161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H264_3p2; 227261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 227361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_VIDEO_AVCLevel4: 227461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level = VEN_LEVEL_H264_4; 227561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 227661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default : 22778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Unsupported H.264 level= %u", 227861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan requested_level.level); 227961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 228061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 2281826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev } 228247e37c4428509524ee576920a98381f3e4872493Nick Pelly } 228361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 228461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!m_profile_set) { 228561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&requested_profile; 228661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 228761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 228861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_CODEC_PROFILE,(void*)&ioctl_msg)< 0) { 22898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting profile failed"); 229061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 229161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 229261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 229361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan codec_profile.profile = requested_profile.profile; 229461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_profile_set = true; 229561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Set codec profile = 0x%x", codec_profile.profile); 229647e37c4428509524ee576920a98381f3e4872493Nick Pelly } 229761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 229861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!m_level_set) { 229961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&requested_level; 230061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 230161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 230261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_PROFILE_LEVEL,(void*)&ioctl_msg)< 0) { 23038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting profile level failed"); 230461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 230561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 230661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 230761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_level.level = requested_level.level; 230861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_level_set = true; 230961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Set codec level = 0x%x", profile_level.level); 231047e37c4428509524ee576920a98381f3e4872493Nick Pelly } 231147e37c4428509524ee576920a98381f3e4872493Nick Pelly 231261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 231347e37c4428509524ee576920a98381f3e4872493Nick Pelly} 231447e37c4428509524ee576920a98381f3e4872493Nick Pelly 2315826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_set_voptiming_cfg( OMX_U32 TimeIncRes) 2316826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 231761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 231861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_voptimingcfg vop_timing_cfg; 2319826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 232061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("venc_set_voptiming_cfg: TimeRes = %u", 232161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan TimeIncRes); 2322826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 232361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan vop_timing_cfg.voptime_resolution = TimeIncRes; 2324826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 232561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&vop_timing_cfg; 232661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 2327826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 232861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_VOP_TIMING_CFG,(void*)&ioctl_msg)< 0) { 23298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting Vop Timing failed"); 233061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 233161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 233261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 233361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan voptimecfg.voptime_resolution = vop_timing_cfg.voptime_resolution; 233461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 2335826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 2336826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 2337826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_set_intra_period(OMX_U32 nPFrames, OMX_U32 nBFrames) 233847e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 233961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 234061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_intraperiod intraperiod_cfg; 234161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 234261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("venc_set_intra_period: nPFrames = %u", 234361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan nPFrames); 234461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan intraperiod_cfg.num_pframes = nPFrames; 234561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 234661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((codec_profile.profile == VEN_PROFILE_MPEG4_ASP) || 234761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (codec_profile.profile == VEN_PROFILE_H264_MAIN) || 234861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (codec_profile.profile == VEN_PROFILE_H264_HIGH)) { 2349826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P 235061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 235161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (nBFrames) { 235261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("INFO: Only 1 Bframe is supported"); 235361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan intraperiod_cfg.num_bframes = 1; 235461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else 235561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan intraperiod_cfg.num_bframes = 0; 235661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 2357826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else 235861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 235961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (nBFrames) { 236061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("B frames not supported"); 236161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan intraperiod_cfg.num_bframes = 0; 236261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 236361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("B frames not supported"); 236461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan intraperiod_cfg.num_bframes = 0; 236561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 236661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 2367826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 236861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else 236961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan intraperiod_cfg.num_bframes = 0; 237061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 237161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("venc_set_intra_period: nPFrames = %u nBFrames = %u", 237261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan intraperiod_cfg.num_pframes, intraperiod_cfg.num_bframes); 237361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&intraperiod_cfg; 237461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 237561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 237661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_INTRA_PERIOD,(void*)&ioctl_msg)< 0) { 23778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting intra period failed"); 237861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 237961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 238061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 238161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan intra_period.num_pframes = intraperiod_cfg.num_pframes; 238261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan intra_period.num_bframes = intraperiod_cfg.num_bframes; 238361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 238447e37c4428509524ee576920a98381f3e4872493Nick Pelly} 238547e37c4428509524ee576920a98381f3e4872493Nick Pelly 2386826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_set_entropy_config(OMX_BOOL enable, OMX_U32 i_cabac_level) 238747e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 238861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 238961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_entropycfg entropy_cfg; 239047e37c4428509524ee576920a98381f3e4872493Nick Pelly 239161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memset(&entropy_cfg,0,sizeof(entropy_cfg)); 23928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_set_entropy_config: CABAC = %u level: %u", enable, i_cabac_level); 239361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 239461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (enable &&(codec_profile.profile != VEN_PROFILE_H264_BASELINE)) { 239561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan entropy_cfg.longentropysel = VEN_ENTROPY_MODEL_CABAC; 239661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 239761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (i_cabac_level == 0) { 239861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan entropy_cfg.cabacmodel = VEN_CABAC_MODEL_0; 239961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 2400826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 2401826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P 240261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else { 240361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Invalid model set (%d) defaulting to model 0",i_cabac_level); 240461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan entropy_cfg.cabacmodel = VEN_CABAC_MODEL_0; 240561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 240661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 2407826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else 240861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (i_cabac_level == 1) { 240961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan entropy_cfg.cabacmodel = VEN_CABAC_MODEL_1; 241061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (i_cabac_level == 2) { 241161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan entropy_cfg.cabacmodel = VEN_CABAC_MODEL_2; 241261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 241361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 2414826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 241561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (!enable) { 241661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan entropy_cfg.longentropysel = VEN_ENTROPY_MODEL_CAVLC; 241761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 24188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Invalid Entropy mode for Baseline Profile"); 241961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 242061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 242161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 242261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&entropy_cfg; 242361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 242461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 242561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_ENTROPY_CFG,(void*)&ioctl_msg)< 0) { 24268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting entropy config failed"); 242761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 242861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 242961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 243061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan entropy.longentropysel = entropy_cfg.longentropysel; 243161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan entropy.cabacmodel = entropy_cfg.cabacmodel; 243261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 243347e37c4428509524ee576920a98381f3e4872493Nick Pelly} 243447e37c4428509524ee576920a98381f3e4872493Nick Pelly 2435826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_set_multislice_cfg(OMX_INDEXTYPE Codec, OMX_U32 nSlicesize) // MB 243647e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 243761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL, NULL}; 243861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool status = true; 243961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_multiclicecfg multislice_cfg; 244061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 244161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((Codec != OMX_IndexParamVideoH263) && (nSlicesize)) { 244261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan multislice_cfg.mslice_mode = VEN_MSLICE_CNT_MB; 244361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan multislice_cfg.mslice_size = nSlicesize; 244461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 244561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan multislice_cfg.mslice_mode = VEN_MSLICE_OFF; 244661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan multislice_cfg.mslice_size = 0; 244761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 244861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 24498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("%s(): mode = %u, size = %u", __func__, multislice_cfg.mslice_mode, 245061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan multislice_cfg.mslice_size); 245161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 245261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&multislice_cfg; 245361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 245461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 245561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd, VEN_IOCTL_SET_MULTI_SLICE_CFG,(void*)&ioctl_msg) < 0) { 24568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting multi-slice cfg failed"); 245761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status = false; 245861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 245961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan multislice.mslice_mode = multislice_cfg.mslice_mode; 246061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan multislice.mslice_size = nSlicesize; 246161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 246261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 246361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return status; 2464826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 2465826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 2466826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_set_intra_refresh(OMX_VIDEO_INTRAREFRESHTYPE ir_mode, OMX_U32 irMBs) 2467826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 246861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL, NULL}; 246961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool status = true; 247061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_intrarefresh intraRefresh_cfg; 247161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 247261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // There is no disabled mode. Disabled mode is indicated by a 0 count. 247361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (irMBs == 0 || ir_mode == OMX_VIDEO_IntraRefreshMax) { 247461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan intraRefresh_cfg.irmode = VEN_IR_OFF; 247561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan intraRefresh_cfg.mbcount = 0; 247661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if ((ir_mode == OMX_VIDEO_IntraRefreshCyclic) && 247761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (irMBs < ((m_sVenc_cfg.input_width * m_sVenc_cfg.input_height)>>8))) { 247861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan intraRefresh_cfg.irmode = VEN_IR_CYCLIC; 247961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan intraRefresh_cfg.mbcount = irMBs; 248061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 24818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid IntraRefresh Parameters:" 248261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "mb count: %d, mb mode:%d", irMBs, ir_mode); 248361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 248461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 248561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 248661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&intraRefresh_cfg; 248761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 248861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 248961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_INTRA_REFRESH,(void*)&ioctl_msg) < 0) { 24908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting Intra Refresh failed"); 249161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status = false; 249261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 249361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan intra_refresh.irmode = intraRefresh_cfg.irmode; 249461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan intra_refresh.mbcount = intraRefresh_cfg.mbcount; 249561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 249661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 249761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return status; 2498826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 2499826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 2500826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_set_error_resilience(OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE* error_resilience) 2501826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 250261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL, NULL}; 250361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool status = true; 250461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_headerextension hec_cfg; 250561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_multiclicecfg multislice_cfg; 250661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 250761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_sVenc_cfg.codectype == OMX_VIDEO_CodingMPEG4) { 250861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (error_resilience->bEnableHEC) { 250961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan hec_cfg.header_extension = 1; 251061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 251161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan hec_cfg.header_extension = 0; 251261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 251361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 251461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&hec_cfg; 251561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 251661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 251761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_HEC,(void*)&ioctl_msg) < 0) { 25188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting HEader Error correction failed"); 251961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 252061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 252161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 252261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan hec.header_extension = error_resilience->bEnableHEC; 252361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 252461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 252561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (error_resilience->bEnableRVLC) { 25268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("RVLC is not Supported"); 252761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 252861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 252961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 253061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (( m_sVenc_cfg.codectype != OMX_VIDEO_CodingH263) && 253161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (error_resilience->bEnableDataPartitioning)) { 25328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("DataPartioning are not Supported for MPEG4/H264"); 253361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 253461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 253561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 253661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (( m_sVenc_cfg.codectype != OMX_VIDEO_CodingH263) && 2537826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev (error_resilience->nResynchMarkerSpacing)) { 253861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan multislice_cfg.mslice_mode = VEN_MSLICE_CNT_BYTE; 253961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan multislice_cfg.mslice_size = error_resilience->nResynchMarkerSpacing; 254061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (m_sVenc_cfg.codectype == OMX_VIDEO_CodingH263 && 2541826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev error_resilience->bEnableDataPartitioning) { 254261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan multislice_cfg.mslice_mode = VEN_MSLICE_GOB; 254361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan multislice_cfg.mslice_size = 0; 254461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 2545826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev multislice_cfg.mslice_mode = VEN_MSLICE_OFF; 2546826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev multislice_cfg.mslice_size = 0; 254761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 254861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 25498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("%s(): mode = %u, size = %u", __func__, multislice_cfg.mslice_mode, 255061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan multislice_cfg.mslice_size); 255161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&multislice_cfg; 255261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 255361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 255461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_MULTI_SLICE_CFG,(void*)&ioctl_msg) < 0) { 25558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting multi-slice cfg failed"); 255661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status = false; 255761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 255861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan multislice.mslice_mode = multislice_cfg.mslice_mode ; 255961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan multislice.mslice_size = multislice_cfg.mslice_size; 256061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 256161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 256261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 256361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return status; 2564826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 2565826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 2566826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_set_inloop_filter(OMX_VIDEO_AVCLOOPFILTERTYPE loopfilter) 2567826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 256861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 256961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_dbcfg filter_cfg; 257061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 257161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memset(&filter_cfg, 0, sizeof(filter_cfg)); 25728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_set_inloop_filter: %u",loopfilter); 257361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 257461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (loopfilter == OMX_VIDEO_AVCLoopFilterEnable) { 257561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan filter_cfg.db_mode = VEN_DB_ALL_BLKG_BNDRY; 257661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (loopfilter == OMX_VIDEO_AVCLoopFilterDisable) { 257761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan filter_cfg.db_mode = VEN_DB_DISABLE; 257861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (loopfilter == OMX_VIDEO_AVCLoopFilterDisableSliceBoundary) { 257961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan filter_cfg.db_mode = VEN_DB_SKIP_SLICE_BNDRY; 258061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 258161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 258261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan filter_cfg.slicealpha_offset = filter_cfg.slicebeta_offset = 0; 258361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 258461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&filter_cfg; 258561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 258661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 258761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_DEBLOCKING_CFG,(void*)&ioctl_msg)< 0) { 25888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting inloop filter failed"); 258961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 259061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 259161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 259261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dbkfilter.db_mode = filter_cfg.db_mode; 259361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dbkfilter.slicealpha_offset = dbkfilter.slicebeta_offset = 0; 259461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 2595826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 2596826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 2597826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_set_target_bitrate(OMX_U32 nTargetBitrate, OMX_U32 config) 2598826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 259961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL, NULL}; 260061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_targetbitrate bitrate_cfg; 260161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 260261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("venc_set_target_bitrate: bitrate = %u", 260361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan nTargetBitrate); 260461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bitrate_cfg.target_bitrate = nTargetBitrate ; 260561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&bitrate_cfg; 260661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 260761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 260861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_TARGET_BITRATE,(void*)&ioctl_msg) < 0) { 26098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting bit rate failed"); 261061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 2611826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev } 261261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 261361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.targetbitrate = nTargetBitrate; 261461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bitrate.target_bitrate = nTargetBitrate; 261561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 261661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!config) { 261761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_level_set = false; 261861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 261961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (venc_set_profile_level(0, 0)) { 26208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Calling set level (Bitrate) with %d",profile_level.level); 262161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 262261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 262361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 262461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 2625826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 2626826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 2627826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_set_encode_framerate(OMX_U32 encode_framerate, OMX_U32 config) 2628826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 262961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL, NULL}; 263061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_framerate frame_rate_cfg; 263161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 263261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Q16ToFraction(encode_framerate,frame_rate_cfg.fps_numerator,frame_rate_cfg.fps_denominator); 263361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 263461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("venc_set_encode_framerate: framerate(Q16) = %u, NR: %d, DR: %d", 263561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan encode_framerate,frame_rate_cfg.fps_numerator,frame_rate_cfg.fps_denominator); 263661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 263761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&frame_rate_cfg; 263861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 263961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 264061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl(m_nDriver_fd, VEN_IOCTL_SET_FRAME_RATE, 264161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (void*)&ioctl_msg) < 0) { 26428767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting framerate failed"); 264361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 2644826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev } 264561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 264661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.fps_den = frame_rate_cfg.fps_denominator; 264761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.fps_num = frame_rate_cfg.fps_numerator; 264861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 264961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!config) { 265061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_level_set = false; 265161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 265261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (venc_set_profile_level(0, 0)) { 265361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("Calling set level (Framerate) with %d",profile_level.level); 265461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 265561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 265661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 265761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 265847e37c4428509524ee576920a98381f3e4872493Nick Pelly} 265947e37c4428509524ee576920a98381f3e4872493Nick Pelly 266047e37c4428509524ee576920a98381f3e4872493Nick Pellybool venc_dev::venc_set_color_format(OMX_COLOR_FORMATTYPE color_format) 266147e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 266261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL, NULL}; 266361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 266461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (color_format == OMX_COLOR_FormatYUV420SemiPlanar) { 2665826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P 266661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.inputformat= VEN_INPUTFMT_NV12_16M2KA; 2667826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else 266861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.inputformat = VEN_INPUTFMT_NV12; 2669826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 267061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 26718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("WARNING: Unsupported Color format [%d]", color_format); 2672826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P 267361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.inputformat= VEN_INPUTFMT_NV12_16M2KA; 2674826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else 267561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_cfg.inputformat = VEN_INPUTFMT_NV12; 2676826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 26778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("Default color format YUV420SemiPlanar is set"); 267861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 267961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 268061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&m_sVenc_cfg; 268161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 268261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 268361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl(m_nDriver_fd, VEN_IOCTL_SET_BASE_CFG, (void*)&ioctl_msg) < 0) { 26848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting color format failed"); 268561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 268661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 268761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 268861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 268947e37c4428509524ee576920a98381f3e4872493Nick Pelly} 269047e37c4428509524ee576920a98381f3e4872493Nick Pelly 269147e37c4428509524ee576920a98381f3e4872493Nick Pellybool venc_dev::venc_set_intra_vop_refresh(OMX_BOOL intra_vop_refresh) 269247e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 26938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("venc_set_intra_vop_refresh: intra_vop = %uc", intra_vop_refresh); 269461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 269561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (intra_vop_refresh == OMX_TRUE) { 269661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl(m_nDriver_fd, VEN_IOCTL_CMD_REQUEST_IFRAME, NULL) < 0) { 26978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting Intra VOP Refresh failed"); 269861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 269961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 270061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 27018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: VOP Refresh is False, no effect"); 270261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 270361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 270461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 270547e37c4428509524ee576920a98381f3e4872493Nick Pelly} 270647e37c4428509524ee576920a98381f3e4872493Nick Pelly 270747e37c4428509524ee576920a98381f3e4872493Nick Pellybool venc_dev::venc_set_ratectrl_cfg(OMX_VIDEO_CONTROLRATETYPE eControlRate) 270847e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 270961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 271061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool status = true; 271161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_ratectrlcfg ratectrl_cfg; 271261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 271361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //rate control 271461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (eControlRate) { 271561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_Video_ControlRateDisable: 271661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ratectrl_cfg.rcmode = VEN_RC_OFF; 271761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 271861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_Video_ControlRateVariableSkipFrames: 271961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ratectrl_cfg.rcmode = VEN_RC_VBR_VFR; 272061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 272161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_Video_ControlRateVariable: 272261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ratectrl_cfg.rcmode = VEN_RC_VBR_CFR; 272361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 272461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_Video_ControlRateConstantSkipFrames: 272561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ratectrl_cfg.rcmode = VEN_RC_CBR_VFR; 272661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 272761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_Video_ControlRateConstant: 272861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ratectrl_cfg.rcmode = VEN_RC_CBR_CFR; 272961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 273061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 273161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status = false; 273261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 273347e37c4428509524ee576920a98381f3e4872493Nick Pelly } 273461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 273561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (status) { 273661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = (void*)&ratectrl_cfg; 273761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.out = NULL; 273861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 273961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl (m_nDriver_fd,VEN_IOCTL_SET_RATE_CTRL_CFG,(void*)&ioctl_msg) < 0) { 27408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting rate control failed"); 274161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status = false; 274261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else 274361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan rate_ctrl.rcmode = ratectrl_cfg.rcmode; 274461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 274561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 274661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return status; 274747e37c4428509524ee576920a98381f3e4872493Nick Pelly} 274847e37c4428509524ee576920a98381f3e4872493Nick Pelly 274947e37c4428509524ee576920a98381f3e4872493Nick Pellybool venc_dev::venc_get_profile_level(OMX_U32 *eProfile,OMX_U32 *eLevel) 275047e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 275161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool status = true; 275261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 275361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eProfile == NULL || eLevel == NULL) { 275461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 275547e37c4428509524ee576920a98381f3e4872493Nick Pelly } 275661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 275761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_sVenc_cfg.codectype == VEN_CODEC_MPEG4) { 275861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (codec_profile.profile) { 275961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_PROFILE_MPEG4_SP: 276061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eProfile = OMX_VIDEO_MPEG4ProfileSimple; 276161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 276261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_PROFILE_MPEG4_ASP: 276361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eProfile = OMX_VIDEO_MPEG4ProfileAdvancedSimple; 276461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 276561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 276661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eProfile = OMX_VIDEO_MPEG4ProfileMax; 276761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status = false; 276861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 276961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 277061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 277161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!status) { 277261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return status; 277361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 277461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 277561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //profile level 277661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (profile_level.level) { 277761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_MPEG4_0: 277861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_MPEG4Level0; 277961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 278061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_MPEG4_1: 278161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_MPEG4Level1; 278261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 278361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_MPEG4_2: 278461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_MPEG4Level2; 278561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 278661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_MPEG4_3: 278761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_MPEG4Level3; 278861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 278961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_MPEG4_4: 279061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_MPEG4Level4a; 279161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 279261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_MPEG4_5: 279361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_MPEG4_6: 279461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_MPEG4Level5; 279561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 279661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 279761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_MPEG4LevelMax; 279861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status = false; 279961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 280061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 280161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (m_sVenc_cfg.codectype == VEN_CODEC_H263) { 280261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (codec_profile.profile == VEN_PROFILE_H263_BASELINE) { 280361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eProfile = OMX_VIDEO_H263ProfileBaseline; 280461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 280561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eProfile = OMX_VIDEO_H263ProfileMax; 280661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 280761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 280861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 280961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (profile_level.level) { 281061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H263_10: 281161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_H263Level10; 281261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 281361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H263_20: 281461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_H263Level20; 281561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 281661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H263_30: 281761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_H263Level30; 281861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 281961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H263_40: 282061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_H263Level40; 282161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 282261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H263_45: 282361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_H263Level45; 282461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 282561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H263_50: 282661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_H263Level50; 282761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 282861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H263_60: 282961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_H263Level60; 283061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 283161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H263_70: 283261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_H263Level70; 283361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 283461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 283561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_H263LevelMax; 283661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status = false; 283761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 283861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 283961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (m_sVenc_cfg.codectype == VEN_CODEC_H264) { 284061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (codec_profile.profile) { 284161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_PROFILE_H264_BASELINE: 284261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eProfile = OMX_VIDEO_AVCProfileBaseline; 284361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 284461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_PROFILE_H264_MAIN: 284561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eProfile = OMX_VIDEO_AVCProfileMain; 284661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 284761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_PROFILE_H264_HIGH: 284861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eProfile = OMX_VIDEO_AVCProfileHigh; 284961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 285061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 285161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eProfile = OMX_VIDEO_AVCProfileMax; 285261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status = false; 285361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 285461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 285561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 285661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!status) { 285761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return status; 285861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 285961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 286061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (profile_level.level) { 286161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H264_1: 286261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_AVCLevel1; 286361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 286461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H264_1b: 286561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_AVCLevel1b; 286661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 286761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H264_1p1: 286861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_AVCLevel11; 286961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 287061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H264_1p2: 287161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_AVCLevel12; 287261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 287361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H264_1p3: 287461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_AVCLevel13; 287561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 287661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H264_2: 287761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_AVCLevel2; 287861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 287961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H264_2p1: 288061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_AVCLevel21; 288161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 288261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H264_2p2: 288361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_AVCLevel22; 288461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 288561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H264_3: 288661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_AVCLevel3; 288761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 288861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H264_3p1: 288961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_AVCLevel31; 289061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 289161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H264_3p2: 289261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_AVCLevel32; 289361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 289461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_LEVEL_H264_4: 289561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_AVCLevel4; 289661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 289761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default : 289861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_AVCLevelMax; 289961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status = false; 290061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 290161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 290261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 290361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 290461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return status; 290547e37c4428509524ee576920a98381f3e4872493Nick Pelly} 290647e37c4428509524ee576920a98381f3e4872493Nick Pelly 290747e37c4428509524ee576920a98381f3e4872493Nick Pellybool venc_dev::venc_validate_profile_level(OMX_U32 *eProfile, OMX_U32 *eLevel) 290847e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 290961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 new_profile = 0, new_level = 0; 291061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned const int *profile_tbl = NULL; 291161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 mb_per_frame, mb_per_sec; 291261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool profile_level_found = false; 291361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 29148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Init profile table for respective codec"); 291561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 291661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //validate the ht,width,fps,bitrate and set the appropriate profile and level 291761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_sVenc_cfg.codectype == VEN_CODEC_MPEG4) { 291861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (*eProfile == 0) { 291961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!m_profile_set) { 292061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eProfile = OMX_VIDEO_MPEG4ProfileSimple; 292161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 292261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (codec_profile.profile) { 292361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_PROFILE_MPEG4_ASP: 292461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eProfile = OMX_VIDEO_MPEG4ProfileAdvancedSimple; 292561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 292661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_PROFILE_MPEG4_SP: 292761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eProfile = OMX_VIDEO_MPEG4ProfileSimple; 292861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 292961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 29308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("%s(): Unknown Error", __func__); 293161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 293261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 293361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 293447e37c4428509524ee576920a98381f3e4872493Nick Pelly } 293561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 293661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (*eLevel == 0 && !m_level_set) { 293761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_MPEG4LevelMax; 293861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 293961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 294061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (*eProfile == OMX_VIDEO_MPEG4ProfileSimple) { 294161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_tbl = (unsigned int const *)mpeg4_profile_level_table; 294261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (*eProfile == OMX_VIDEO_MPEG4ProfileAdvancedSimple) { 294361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_tbl = (unsigned int const *) 294461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (&mpeg4_profile_level_table[MPEG4_ASP_START]); 294561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 29468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Unsupported MPEG4 profile type %lu", *eProfile); 294747e37c4428509524ee576920a98381f3e4872493Nick Pelly return false; 294847e37c4428509524ee576920a98381f3e4872493Nick Pelly } 294961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (m_sVenc_cfg.codectype == VEN_CODEC_H264) { 295061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (*eProfile == 0) { 295161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!m_profile_set) { 295261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eProfile = OMX_VIDEO_AVCProfileBaseline; 295361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 295461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (codec_profile.profile) { 295561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_PROFILE_H264_BASELINE: 295661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eProfile = OMX_VIDEO_AVCProfileBaseline; 295761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 2958e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#ifndef _MSM8610_ 295961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_PROFILE_H264_MAIN: 296061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eProfile = OMX_VIDEO_AVCProfileMain; 296161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 296261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_PROFILE_H264_HIGH: 296361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eProfile = OMX_VIDEO_AVCProfileHigh; 296461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 2965e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#endif 296661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 2967e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_LOW("%s(): Unsupported profile %x", __func__, codec_profile.profile); 296861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 296961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 297061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 297147e37c4428509524ee576920a98381f3e4872493Nick Pelly } 297261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 297361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (*eLevel == 0 && !m_level_set) { 297461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_AVCLevelMax; 297561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 297661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 297761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (*eProfile == OMX_VIDEO_AVCProfileBaseline) { 297861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_tbl = (unsigned int const *)h264_profile_level_table; 297961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (*eProfile == OMX_VIDEO_AVCProfileHigh) { 298061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_tbl = (unsigned int const *) 298161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (&h264_profile_level_table[H264_HP_START]); 298261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (*eProfile == OMX_VIDEO_AVCProfileMain) { 298361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_tbl = (unsigned int const *) 298461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (&h264_profile_level_table[H264_MP_START]); 298561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 29868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Unsupported AVC profile type %lu", *eProfile); 298747e37c4428509524ee576920a98381f3e4872493Nick Pelly return false; 298847e37c4428509524ee576920a98381f3e4872493Nick Pelly } 298961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (m_sVenc_cfg.codectype == VEN_CODEC_H263) { 299061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (*eProfile == 0) { 299161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!m_profile_set) { 299261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eProfile = OMX_VIDEO_H263ProfileBaseline; 299361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 299461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (codec_profile.profile) { 299561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_PROFILE_H263_BASELINE: 299661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eProfile = OMX_VIDEO_H263ProfileBaseline; 299761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 299861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 29998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("%s(): Unknown Error", __func__); 300061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 300161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 300261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 300347e37c4428509524ee576920a98381f3e4872493Nick Pelly } 300461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 300561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (*eLevel == 0 && !m_level_set) { 300661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = OMX_VIDEO_H263LevelMax; 300761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 300861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 300961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (*eProfile == OMX_VIDEO_H263ProfileBaseline) { 301061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_tbl = (unsigned int const *)h263_profile_level_table; 301161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 30128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Unsupported H.263 profile type %lu", *eProfile); 301347e37c4428509524ee576920a98381f3e4872493Nick Pelly return false; 301447e37c4428509524ee576920a98381f3e4872493Nick Pelly } 301561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 30168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Invalid codec type"); 301747e37c4428509524ee576920a98381f3e4872493Nick Pelly return false; 301861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 301961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 302061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mb_per_frame = ((m_sVenc_cfg.input_height + 15) >> 4)* 302161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ((m_sVenc_cfg.input_width + 15)>> 4); 302261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 302361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((mb_per_frame >= 3600) && (m_sVenc_cfg.codectype == VEN_CODEC_MPEG4)) { 302461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (codec_profile.profile == VEN_PROFILE_MPEG4_ASP) 302561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_level.level = VEN_LEVEL_MPEG4_5; 302661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 302761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (codec_profile.profile == VEN_PROFILE_MPEG4_SP) 302861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_level.level = VEN_LEVEL_MPEG4_6; 302961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 303047e37c4428509524ee576920a98381f3e4872493Nick Pelly { 303161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan new_level = profile_level.level; 303261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan new_profile = codec_profile.profile; 303361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 303461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 303561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 303661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 303761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mb_per_sec = mb_per_frame * m_sVenc_cfg.fps_num / m_sVenc_cfg.fps_den; 303861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 303961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan do { 304061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (mb_per_frame <= (int)profile_tbl[0]) { 304161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (mb_per_sec <= (int)profile_tbl[1]) { 304261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_sVenc_cfg.targetbitrate <= (int)profile_tbl[2]) { 304361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan new_level = (int)profile_tbl[3]; 304461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan new_profile = (int)profile_tbl[4]; 304561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_level_found = true; 30468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Appropriate profile/level found %d/%d", new_profile, new_level); 304761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 304861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 304961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 305047e37c4428509524ee576920a98381f3e4872493Nick Pelly } 305161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 305261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_tbl = profile_tbl + 5; 305361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } while (profile_tbl[0] != 0); 305461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 305561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (profile_level_found != true) { 30568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("ERROR: Unsupported profile/level"); 305761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 305861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 305961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 306061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((*eLevel == OMX_VIDEO_MPEG4LevelMax) || (*eLevel == OMX_VIDEO_AVCLevelMax) 306161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan || (*eLevel == OMX_VIDEO_H263LevelMax)) { 306261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *eLevel = new_level; 306361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 306461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 306561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("%s: Returning with eProfile = %lu" 306661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "Level = %lu", __func__, *eProfile, *eLevel); 306761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 306861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 306947e37c4428509524ee576920a98381f3e4872493Nick Pelly} 3070826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 3071826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_max_allowed_bitrate_check(OMX_U32 nTargetBitrate) 307247e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 307361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned const int *profile_tbl = NULL; 307461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 307561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (m_sVenc_cfg.codectype) { 307661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_CODEC_MPEG4: 307761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 307861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_eProfile == OMX_VIDEO_MPEG4ProfileSimple) { 307961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_tbl = (unsigned int const *)mpeg4_profile_level_table; 308061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (m_eProfile == OMX_VIDEO_MPEG4ProfileAdvancedSimple) { 308161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_tbl = (unsigned int const *) 308261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (&mpeg4_profile_level_table[MPEG4_ASP_START]); 308361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 308461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Unsupported MPEG4 profile type %lu", m_eProfile); 308561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 308661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 308761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 308861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 308961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_CODEC_H264: 309061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 309161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_eProfile == OMX_VIDEO_AVCProfileBaseline) { 309261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_tbl = (unsigned int const *)h264_profile_level_table; 309361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (m_eProfile == OMX_VIDEO_AVCProfileHigh) { 309461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_tbl = (unsigned int const *) 309561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (&h264_profile_level_table[H264_HP_START]); 309661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (m_eProfile == OMX_VIDEO_AVCProfileMain) { 309761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_tbl = (unsigned int const *) 309861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (&h264_profile_level_table[H264_MP_START]); 309961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 310061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Unsupported AVC profile type %lu", m_eProfile); 310161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 310261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 310361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 310461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 310561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_CODEC_H263: 310661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 310761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_eProfile == OMX_VIDEO_H263ProfileBaseline) { 310861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_tbl = (unsigned int const *)h263_profile_level_table; 310961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 311061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Unsupported H.263 profile type %lu", m_eProfile); 311161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 311261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 311361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 311461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 311561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 311661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("%s: unknown codec type", __func__); 311761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 311847e37c4428509524ee576920a98381f3e4872493Nick Pelly } 311961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 312061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan while (profile_tbl[0] != 0) { 312161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (profile_tbl[3] == m_eLevel) { 312261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (nTargetBitrate > profile_tbl[2]) { 312361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Max. supported bitrate for Profile[%d] & Level[%d]" 312461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan " is %u", m_eProfile, m_eLevel, profile_tbl[2]); 312561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 312661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 312761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 312861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 312961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profile_tbl += 5; 313061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 313161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 313261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 3133826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 3134826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 3135826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_ 3136826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool venc_dev::venc_set_meta_mode(bool mode) 3137826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 313861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_ioctl_msg ioctl_msg = {NULL,NULL}; 313961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ioctl_msg.in = &mode; 314061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Set meta buffer mode: %d", mode); 314161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 314261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl(m_nDriver_fd,VEN_IOCTL_SET_METABUFFER_MODE,&ioctl_msg) < 0) { 314361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR(" Set meta buffer mode failed"); 314461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 314561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 314661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 314761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 314847e37c4428509524ee576920a98381f3e4872493Nick Pelly} 3149826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 3150