diff --git a/power/power-8998.c b/power/power-8998.c index 767170d2..b1a8228d 100644 --- a/power/power-8998.c +++ b/power/power-8998.c @@ -196,57 +196,26 @@ static int process_boost(int boost_handle, int duration) return boost_handle; } -static int process_video_encode_hint(void *metadata) +static int process_video_encode_hint(void *data) { - char governor[80]; - struct video_encode_metadata_t video_encode_metadata; static int boost_handle = -1; - if(!metadata) - return HINT_NONE; - - if (get_scaling_governor(governor, sizeof(governor)) == -1) { - ALOGE("Can't obtain scaling governor."); - - return HINT_NONE; - } - - /* Initialize encode metadata struct fields */ - memset(&video_encode_metadata, 0, sizeof(struct video_encode_metadata_t)); - video_encode_metadata.state = -1; - video_encode_metadata.hint_id = DEFAULT_VIDEO_ENCODE_HINT_ID; - - if (parse_video_encode_metadata((char *)metadata, &video_encode_metadata) == - -1) { - ALOGE("Error occurred while parsing metadata."); - return HINT_NONE; - } - - if (video_encode_metadata.state == 1) { - int duration = 2000; // boosts 2s for starting encoding + if (data) { + // TODO: remove the launch boost based on camera launch time + int duration = 1500; // boosts 1.5s for starting encoding boost_handle = process_boost(boost_handle, duration); ALOGD("LAUNCH ENCODER-ON: %d MS", duration); - if (is_interactive_governor(governor)) { - - int *resource_values; - int resources; - - /* extract perflock resources */ - resource_values = getPowerhint(video_encode_metadata.hint_id, &resources); - - if (resource_values != NULL) - perform_hint_action(video_encode_metadata.hint_id, resource_values, resources); - ALOGI("Video Encode hint start"); - return HINT_HANDLED; - } else { - return HINT_HANDLED; - } - } else if (video_encode_metadata.state == 0) { - if (is_interactive_governor(governor)) { - undo_hint_action(video_encode_metadata.hint_id); - ALOGI("Video Encode hint stop"); - return HINT_HANDLED; - } + int *resource_values = NULL; + int resources = 0; + resource_values = getPowerhint(DEFAULT_VIDEO_ENCODE_HINT_ID, &resources); + if (resource_values != NULL) + perform_hint_action(DEFAULT_VIDEO_ENCODE_HINT_ID, resource_values, resources); + ALOGI("Video Encode hint start"); + return HINT_HANDLED; + } else { + undo_hint_action(DEFAULT_VIDEO_ENCODE_HINT_ID); + ALOGI("Video Encode hint stop"); + return HINT_HANDLED; } return HINT_NONE; } diff --git a/power/power-helper.c b/power/power-helper.c index 6c7b29d7..273988e5 100644 --- a/power/power-helper.c +++ b/power/power-helper.c @@ -104,112 +104,6 @@ void power_init(void) ALOGI("QCOM power HAL initing."); } -static void process_video_decode_hint(void *metadata) -{ - char governor[80]; - struct video_decode_metadata_t video_decode_metadata; - - if (get_scaling_governor(governor, sizeof(governor)) == -1) { - ALOGE("Can't obtain scaling governor."); - - return; - } - - if (metadata) { - ALOGI("Processing video decode hint. Metadata: %s", (char *)metadata); - } - - /* Initialize encode metadata struct fields. */ - memset(&video_decode_metadata, 0, sizeof(struct video_decode_metadata_t)); - video_decode_metadata.state = -1; - video_decode_metadata.hint_id = DEFAULT_VIDEO_DECODE_HINT_ID; - - if (metadata) { - if (parse_video_decode_metadata((char *)metadata, &video_decode_metadata) == - -1) { - ALOGE("Error occurred while parsing metadata."); - return; - } - } else { - return; - } - - if (video_decode_metadata.state == 1) { - if ((strncmp(governor, ONDEMAND_GOVERNOR, strlen(ONDEMAND_GOVERNOR)) == 0) && - (strlen(governor) == strlen(ONDEMAND_GOVERNOR))) { - int resource_values[] = {THREAD_MIGRATION_SYNC_OFF}; - - perform_hint_action(video_decode_metadata.hint_id, - resource_values, sizeof(resource_values)/sizeof(resource_values[0])); - } else if ((strncmp(governor, INTERACTIVE_GOVERNOR, strlen(INTERACTIVE_GOVERNOR)) == 0) && - (strlen(governor) == strlen(INTERACTIVE_GOVERNOR))) { - int resource_values[] = {TR_MS_30, HISPEED_LOAD_90, HS_FREQ_1026, THREAD_MIGRATION_SYNC_OFF}; - - perform_hint_action(video_decode_metadata.hint_id, - resource_values, sizeof(resource_values)/sizeof(resource_values[0])); - } - } else if (video_decode_metadata.state == 0) { - if ((strncmp(governor, ONDEMAND_GOVERNOR, strlen(ONDEMAND_GOVERNOR)) == 0) && - (strlen(governor) == strlen(ONDEMAND_GOVERNOR))) { - } else if ((strncmp(governor, INTERACTIVE_GOVERNOR, strlen(INTERACTIVE_GOVERNOR)) == 0) && - (strlen(governor) == strlen(INTERACTIVE_GOVERNOR))) { - undo_hint_action(video_decode_metadata.hint_id); - } - } -} - -static void process_video_encode_hint(void *metadata) -{ - char governor[80]; - struct video_encode_metadata_t video_encode_metadata; - - if (get_scaling_governor(governor, sizeof(governor)) == -1) { - ALOGE("Can't obtain scaling governor."); - - return; - } - - /* Initialize encode metadata struct fields. */ - memset(&video_encode_metadata, 0, sizeof(struct video_encode_metadata_t)); - video_encode_metadata.state = -1; - video_encode_metadata.hint_id = DEFAULT_VIDEO_ENCODE_HINT_ID; - - if (metadata) { - if (parse_video_encode_metadata((char *)metadata, &video_encode_metadata) == - -1) { - ALOGE("Error occurred while parsing metadata."); - return; - } - } else { - return; - } - - if (video_encode_metadata.state == 1) { - if ((strncmp(governor, ONDEMAND_GOVERNOR, strlen(ONDEMAND_GOVERNOR)) == 0) && - (strlen(governor) == strlen(ONDEMAND_GOVERNOR))) { - int resource_values[] = {IO_BUSY_OFF, SAMPLING_DOWN_FACTOR_1, THREAD_MIGRATION_SYNC_OFF}; - - perform_hint_action(video_encode_metadata.hint_id, - resource_values, sizeof(resource_values)/sizeof(resource_values[0])); - } else if ((strncmp(governor, INTERACTIVE_GOVERNOR, strlen(INTERACTIVE_GOVERNOR)) == 0) && - (strlen(governor) == strlen(INTERACTIVE_GOVERNOR))) { - int resource_values[] = {TR_MS_30, HISPEED_LOAD_90, HS_FREQ_1026, THREAD_MIGRATION_SYNC_OFF, - INTERACTIVE_IO_BUSY_OFF}; - - perform_hint_action(video_encode_metadata.hint_id, - resource_values, sizeof(resource_values)/sizeof(resource_values[0])); - } - } else if (video_encode_metadata.state == 0) { - if ((strncmp(governor, ONDEMAND_GOVERNOR, strlen(ONDEMAND_GOVERNOR)) == 0) && - (strlen(governor) == strlen(ONDEMAND_GOVERNOR))) { - undo_hint_action(video_encode_metadata.hint_id); - } else if ((strncmp(governor, INTERACTIVE_GOVERNOR, strlen(INTERACTIVE_GOVERNOR)) == 0) && - (strlen(governor) == strlen(INTERACTIVE_GOVERNOR))) { - undo_hint_action(video_encode_metadata.hint_id); - } - } -} - int __attribute__ ((weak)) power_hint_override(power_hint_t UNUSED(hint), void *UNUSED(data)) { @@ -243,13 +137,7 @@ void power_hint(power_hint_t hint, void *data) interaction(duration, sizeof(resources)/sizeof(resources[0]), resources); } - break; - case POWER_HINT_VIDEO_ENCODE: - process_video_encode_hint(data); - break; - case POWER_HINT_VIDEO_DECODE: - process_video_decode_hint(data); - break; + break; default: break; } diff --git a/powerhint.xml b/powerhint.xml index 4d3c0336..19373d49 100755 --- a/powerhint.xml +++ b/powerhint.xml @@ -31,43 +31,8 @@ --> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/sepolicy/vendor/hal_camera_default.te b/sepolicy/vendor/hal_camera_default.te index 24f669b9..27ae92b3 100644 --- a/sepolicy/vendor/hal_camera_default.te +++ b/sepolicy/vendor/hal_camera_default.te @@ -11,6 +11,9 @@ binder_call(hal_camera_default, hal_graphics_composer) binder_call(hal_camera_default, system_server) binder_call(hal_camera_default, hal_graphics_allocator) +# For interfacing with PowerHAL +hal_client_domain(hal_camera_default, hal_power) + # For camera team debugging userdebug_or_eng(` allow hal_camera_default camera_vendor_data_file:dir create_dir_perms;