From c27a8f0ad3f289652bc75c97e7039b34d365708b Mon Sep 17 00:00:00 2001 From: Tae-Young Chung Date: Thu, 10 Dec 2015 17:31:37 +0900 Subject: [PATCH] Applied Coding Rule Change-Id: I6b558e8580af98f113175455c26d6f1decc5580b Signed-off-by: Tae-Young Chung --- mv_image/image_lic/src/mv_image_lic.c | 119 +- mv_surveillance/surveillance/src/mv_mask_buffer.c | 12 +- .../surveillance_lic/src/mv_surveillance_lic.c | 43 +- packaging/capi-media-vision.spec | 2 +- src/mv_surveillance.c | 10 +- .../common/testsuite_common/mv_testsuite_common.c | 467 +++---- .../common/video_helper/mv_video_helper.c | 1440 ++++++++++---------- test/testsuites/face/face_test_suite.c | 6 +- .../surveillance/surveillance_test_suite.c | 17 +- 9 files changed, 1004 insertions(+), 1112 deletions(-) diff --git a/mv_image/image_lic/src/mv_image_lic.c b/mv_image/image_lic/src/mv_image_lic.c index 356e563..00e898b 100644 --- a/mv_image/image_lic/src/mv_image_lic.c +++ b/mv_image/image_lic/src/mv_image_lic.c @@ -17,134 +17,133 @@ #include "mv_image_lic.h" int mv_image_recognize_lic( - mv_source_h source, - const mv_image_object_h *image_objects, - int number_of_objects, - mv_engine_config_h engine_cfg, - mv_image_recognized_cb recognized_cb, - void *user_data) + mv_source_h source, + const mv_image_object_h *image_objects, + int number_of_objects, + mv_engine_config_h engine_cfg, + mv_image_recognized_cb recognized_cb, + void *user_data) { - return MEDIA_VISION_ERROR_NOT_SUPPORTED; + return MEDIA_VISION_ERROR_NOT_SUPPORTED; } int mv_image_track_lic( - mv_source_h source, - mv_image_tracking_model_h image_tracking_model, - mv_engine_config_h engine_cfg, - mv_image_tracked_cb tracked_cb, - void *user_data) + mv_source_h source, + mv_image_tracking_model_h image_tracking_model, + mv_engine_config_h engine_cfg, + mv_image_tracked_cb tracked_cb, + void *user_data) { - return MEDIA_VISION_ERROR_NOT_SUPPORTED; + return MEDIA_VISION_ERROR_NOT_SUPPORTED; } int mv_image_object_create_lic( - mv_image_object_h *image_object) + mv_image_object_h *image_object) { - return MEDIA_VISION_ERROR_NOT_SUPPORTED; + return MEDIA_VISION_ERROR_NOT_SUPPORTED; } - int mv_image_object_destroy_lic( - mv_image_object_h image_object) + mv_image_object_h image_object) { - return MEDIA_VISION_ERROR_NOT_SUPPORTED; + return MEDIA_VISION_ERROR_NOT_SUPPORTED; } int mv_image_object_fill_lic( - mv_image_object_h image_object, - mv_engine_config_h engine_cfg, - mv_source_h source, - mv_rectangle_s *location) + mv_image_object_h image_object, + mv_engine_config_h engine_cfg, + mv_source_h source, + mv_rectangle_s *location) { - return MEDIA_VISION_ERROR_NOT_SUPPORTED; + return MEDIA_VISION_ERROR_NOT_SUPPORTED; } int mv_image_object_get_recognition_rate_lic( - mv_image_object_h image_object, - double *recognition_rate) + mv_image_object_h image_object, + double *recognition_rate) { - return MEDIA_VISION_ERROR_NOT_SUPPORTED; + return MEDIA_VISION_ERROR_NOT_SUPPORTED; } int mv_image_object_set_label_lic( - mv_image_object_h image_object, - int label) + mv_image_object_h image_object, + int label) { - return MEDIA_VISION_ERROR_NOT_SUPPORTED; + return MEDIA_VISION_ERROR_NOT_SUPPORTED; } int mv_image_object_get_label_lic( - mv_image_object_h image_object, - int *label) + mv_image_object_h image_object, + int *label) { - return MEDIA_VISION_ERROR_NOT_SUPPORTED; + return MEDIA_VISION_ERROR_NOT_SUPPORTED; } int mv_image_object_clone_lic( - mv_image_object_h src, - mv_image_object_h *dst) + mv_image_object_h src, + mv_image_object_h *dst) { - return MEDIA_VISION_ERROR_NOT_SUPPORTED; + return MEDIA_VISION_ERROR_NOT_SUPPORTED; } int mv_image_object_save_lic( - mv_image_object_h image_object, - const char *file_name) + mv_image_object_h image_object, + const char *file_name) { - return MEDIA_VISION_ERROR_NOT_SUPPORTED; + return MEDIA_VISION_ERROR_NOT_SUPPORTED; } int mv_image_object_load_lic( - mv_image_object_h image_object, - const char *file_name) + mv_image_object_h image_object, + const char *file_name) { - return MEDIA_VISION_ERROR_NOT_SUPPORTED; + return MEDIA_VISION_ERROR_NOT_SUPPORTED; } int mv_image_tracking_model_create_lic( - mv_image_tracking_model_h *image_tracking_model) + mv_image_tracking_model_h *image_tracking_model) { - return MEDIA_VISION_ERROR_NOT_SUPPORTED; + return MEDIA_VISION_ERROR_NOT_SUPPORTED; } int mv_image_tracking_model_set_target_lic( - mv_image_object_h image_object, - mv_image_tracking_model_h image_tracking_model) + mv_image_object_h image_object, + mv_image_tracking_model_h image_tracking_model) { - return MEDIA_VISION_ERROR_NOT_SUPPORTED; + return MEDIA_VISION_ERROR_NOT_SUPPORTED; } int mv_image_tracking_model_destroy_lic( - mv_image_tracking_model_h image_tracking_model) + mv_image_tracking_model_h image_tracking_model) { - return MEDIA_VISION_ERROR_NOT_SUPPORTED; + return MEDIA_VISION_ERROR_NOT_SUPPORTED; } int mv_image_tracking_model_refresh_lic( - mv_image_tracking_model_h image_tracking_model, - mv_engine_config_h engine_cfg) + mv_image_tracking_model_h image_tracking_model, + mv_engine_config_h engine_cfg) { - return MEDIA_VISION_ERROR_NOT_SUPPORTED; + return MEDIA_VISION_ERROR_NOT_SUPPORTED; } int mv_image_tracking_model_clone_lic( - mv_image_tracking_model_h src, - mv_image_tracking_model_h *dst) + mv_image_tracking_model_h src, + mv_image_tracking_model_h *dst) { - return MEDIA_VISION_ERROR_NOT_SUPPORTED; + return MEDIA_VISION_ERROR_NOT_SUPPORTED; } int mv_image_tracking_model_save_lic( - mv_image_tracking_model_h image_tracking_model, - const char *file_name) + mv_image_tracking_model_h image_tracking_model, + const char *file_name) { - return MEDIA_VISION_ERROR_NOT_SUPPORTED; + return MEDIA_VISION_ERROR_NOT_SUPPORTED; } int mv_image_tracking_model_load_lic( - mv_image_tracking_model_h image_tracking_model, - const char *file_name) + mv_image_tracking_model_h image_tracking_model, + const char *file_name) { - return MEDIA_VISION_ERROR_NOT_SUPPORTED; + return MEDIA_VISION_ERROR_NOT_SUPPORTED; } diff --git a/mv_surveillance/surveillance/src/mv_mask_buffer.c b/mv_surveillance/surveillance/src/mv_mask_buffer.c index f1d50ef..af06e61 100644 --- a/mv_surveillance/surveillance/src/mv_mask_buffer.c +++ b/mv_surveillance/surveillance/src/mv_mask_buffer.c @@ -29,7 +29,7 @@ int mv_get_mask_buffer( unsigned char **mask_buffer) { if (buffer_width == 0u || buffer_height == 0u || - polygon == NULL|| points_number == 0u || mask_buffer == NULL) { + polygon == NULL || points_number == 0u || mask_buffer == NULL) { LOGE("Wrong input parameter. Getting mask buffer failed."); return MEDIA_VISION_ERROR_INVALID_PARAMETER; } @@ -48,17 +48,15 @@ int mv_get_mask_buffer( int min_y = polygon[0].y; for (k = 1u; k < points_number; ++k) { - if (polygon[k].x > max_x) { + if (polygon[k].x > max_x) max_x = polygon[k].x; - } else if (polygon[k].x < min_x) { + else if (polygon[k].x < min_x) min_x = polygon[k].x; - } - if (polygon[k].y > max_y) { + if (polygon[k].y > max_y) max_y = polygon[k].y; - } else if (polygon[k].y < min_y) { + else if (polygon[k].y < min_y) min_y = polygon[k].y; - } } diff --git a/mv_surveillance/surveillance_lic/src/mv_surveillance_lic.c b/mv_surveillance/surveillance_lic/src/mv_surveillance_lic.c index 95acb63..299a87d 100644 --- a/mv_surveillance/surveillance_lic/src/mv_surveillance_lic.c +++ b/mv_surveillance/surveillance_lic/src/mv_surveillance_lic.c @@ -17,47 +17,46 @@ #include "mv_surveillance_lic.h" int mv_surveillance_subscribe_event_trigger_lic( - mv_surveillance_event_trigger_h event_trigger, - mv_engine_config_h engine_cfg, - mv_surveillance_event_occurred_cb callback, - void *user_data) + mv_surveillance_event_trigger_h event_trigger, + mv_engine_config_h engine_cfg, + mv_surveillance_event_occurred_cb callback, + void *user_data) { - return MEDIA_VISION_ERROR_NOT_SUPPORTED; + return MEDIA_VISION_ERROR_NOT_SUPPORTED; } - int mv_surveillance_unsubscribe_event_trigger_lic( - mv_surveillance_event_trigger_h event_trigger) + mv_surveillance_event_trigger_h event_trigger) { - return MEDIA_VISION_ERROR_NOT_SUPPORTED; + return MEDIA_VISION_ERROR_NOT_SUPPORTED; } int mv_surveillance_push_source_lic( - mv_source_h source, - int video_stream_id) + mv_source_h source, + int video_stream_id) { - return MEDIA_VISION_ERROR_NOT_SUPPORTED; + return MEDIA_VISION_ERROR_NOT_SUPPORTED; } int mv_surveillance_foreach_event_type_lic( - mv_surveillance_event_type_cb callback, - void *user_data) + mv_surveillance_event_type_cb callback, + void *user_data) { - return MEDIA_VISION_ERROR_NOT_SUPPORTED; + return MEDIA_VISION_ERROR_NOT_SUPPORTED; } int mv_surveillance_foreach_event_result_value_name_lic( - const char *event_type, - mv_surveillance_event_result_value_name_cb callback, - void *user_data) + const char *event_type, + mv_surveillance_event_result_value_name_cb callback, + void *user_data) { - return MEDIA_VISION_ERROR_NOT_SUPPORTED; + return MEDIA_VISION_ERROR_NOT_SUPPORTED; } int mv_surveillance_get_result_value_lic( - mv_surveillance_result_h result, - const char *value_name, - void *value) + mv_surveillance_result_h result, + const char *value_name, + void *value) { - return MEDIA_VISION_ERROR_NOT_SUPPORTED; + return MEDIA_VISION_ERROR_NOT_SUPPORTED; } diff --git a/packaging/capi-media-vision.spec b/packaging/capi-media-vision.spec index 3b29759..11304f8 100644 --- a/packaging/capi-media-vision.spec +++ b/packaging/capi-media-vision.spec @@ -1,6 +1,6 @@ Name: capi-media-vision Summary: Media Vision library for Tizen Native API -Version: 0.3.2 +Version: 0.3.3 Release: 0 Group: Multimedia/Framework License: Apache-2.0 and BSD-2.0 diff --git a/src/mv_surveillance.c b/src/mv_surveillance.c index 48aa269..461ea4d 100644 --- a/src/mv_surveillance.c +++ b/src/mv_surveillance.c @@ -58,7 +58,7 @@ int mv_surveillance_event_trigger_create( memset(handle, 0, sizeof(mv_surveillance_event_trigger_s)); - // default values: + /* default values: */ handle->trigger_id = ++__mv_surveillance_id_counter; handle->event_type = strndup(event_type, 255); handle->number_of_roi_points = 0; @@ -102,8 +102,8 @@ int mv_surveillance_get_event_trigger_type( (mv_surveillance_event_trigger_s *)trigger; *event_type = strndup(handle->event_type, 255); - MEDIA_VISION_FUNCTION_LEAVE(); - return MEDIA_VISION_ERROR_NONE; + MEDIA_VISION_FUNCTION_LEAVE(); + return MEDIA_VISION_ERROR_NONE; } int mv_surveillance_set_event_trigger_roi( @@ -154,11 +154,11 @@ int mv_surveillance_get_event_trigger_roi( (mv_surveillance_event_trigger_s *) trigger; *number_of_points = handle->number_of_roi_points; - if (0 == *number_of_points) - { + if (0 == *number_of_points) { MEDIA_VISION_FUNCTION_LEAVE(); return MEDIA_VISION_ERROR_NONE; } + *roi = (mv_point_s *) malloc( sizeof(mv_point_s) * handle->number_of_roi_points); diff --git a/test/testsuites/common/testsuite_common/mv_testsuite_common.c b/test/testsuites/common/testsuite_common/mv_testsuite_common.c index 6ebd567..c5fb3fc 100644 --- a/test/testsuites/common/testsuite_common/mv_testsuite_common.c +++ b/test/testsuites/common/testsuite_common/mv_testsuite_common.c @@ -22,306 +22,261 @@ #include #include - void print_fail_result( - const char *action_name, - int action_return_value) + const char *action_name, + int action_return_value) { - printf(TEXT_RED - "Error with code %i was occurred during action '%s'" - TEXT_RESET "\n", - action_return_value, - action_name); + printf(TEXT_RED + "Error with code %i was occurred during action '%s'" + TEXT_RESET "\n", + action_return_value, + action_name); } void print_done_result(const char *action_name) { - printf(TEXT_YELLOW - "Action '%s' was finished" - TEXT_RESET "\n", - action_name); + printf(TEXT_YELLOW + "Action '%s' was finished" + TEXT_RESET "\n", + action_name); } void print_success_result(const char *action_name) { - printf(TEXT_GREEN - "Action '%s' was finished successfully" - TEXT_RESET - "\n", action_name); + printf(TEXT_GREEN + "Action '%s' was finished successfully" + TEXT_RESET + "\n", action_name); } void print_action_result( - const char *action_name, - int action_return_value, - notification_type_e notification_type_e) + const char *action_name, + int action_return_value, + notification_type_e notification_type_e) { - switch(notification_type_e) - { - case FAIL_OR_SUCCESSS: - if (MEDIA_VISION_ERROR_NONE != action_return_value) - { - print_fail_result(action_name, action_return_value); - } - else - { - print_success_result(action_name); - } - break; - case FAIL_OR_DONE: - if (MEDIA_VISION_ERROR_NONE != action_return_value) - { - print_fail_result(action_name, action_return_value); - } - else - { - print_done_result(action_name); - } - break; - default: - print_done_result(action_name); - } + switch (notification_type_e) { + case FAIL_OR_SUCCESSS: + if (MEDIA_VISION_ERROR_NONE != action_return_value) + print_fail_result(action_name, action_return_value); + else + print_success_result(action_name); + + break; + case FAIL_OR_DONE: + if (MEDIA_VISION_ERROR_NONE != action_return_value) + print_fail_result(action_name, action_return_value); + else + print_done_result(action_name); + + break; + default: + print_done_result(action_name); + } } int input_string(const char *prompt, size_t max_len, char **string) { - printf("\n"); - printf("%s ", prompt); - - if (scanf("\n") != 0) - { - return -1; - } - - char buffer[max_len]; - int last_char = 0; - buffer[last_char] = '\0'; - buffer[sizeof(buffer) - 1] = ~'\0'; - if (NULL == fgets(buffer, sizeof(buffer), stdin)) - { - return -1; - } - size_t real_string_len = strlen(buffer); - buffer[real_string_len - 1] = '\0'; - *string = (char*)malloc(real_string_len * sizeof(char)); - if (*string == NULL) { + printf("\n"); + printf("%s ", prompt); + + if (scanf("\n") != 0) return -1; - } - strncpy(*string, buffer, real_string_len); + char buffer[max_len]; + int last_char = 0; + buffer[last_char] = '\0'; + buffer[sizeof(buffer) - 1] = ~'\0'; + if (NULL == fgets(buffer, sizeof(buffer), stdin)) + return -1; - return strlen(*string); + size_t real_string_len = strlen(buffer); + buffer[real_string_len - 1] = '\0'; + *string = (char*)malloc(real_string_len * sizeof(char)); + if (*string == NULL) + return -1; + + strncpy(*string, buffer, real_string_len); + + return strlen(*string); } int input_size(const char *prompt, size_t max_size, size_t *size) { - printf("\n"); - printf("%s ", prompt); - - if (scanf("%20zu", size) == 0) - { - if (scanf("%*[^\n]%*c") != 0) - { - printf("ERROR: Reading the input line error.\n"); - return -1; - } - printf("ERROR: Incorrect input.\n"); - return -1; - } - scanf("%*[^\n]%*c"); - - return (*size > max_size ? -1 : 0); + printf("\n"); + printf("%s ", prompt); + + if (scanf("%20zu", size) == 0) { + if (scanf("%*[^\n]%*c") != 0) { + printf("ERROR: Reading the input line error.\n"); + return -1; + } + printf("ERROR: Incorrect input.\n"); + return -1; + } + scanf("%*[^\n]%*c"); + + return (*size > max_size ? -1 : 0); } int input_int(const char *prompt, int min_value, int max_value, int *value) { - printf("\n"); - printf("%s ", prompt); - - if (scanf("%20i", value) == 0) - { - if (scanf("%*[^\n]%*c") != 0) - { - printf("ERROR: Reading the input line error.\n"); - return -1; - } - printf("ERROR: Incorrect input.\n"); - return -1; - } - scanf("%*[^\n]%*c"); - - return (*value < min_value || *value > max_value ? -1 : 0); + printf("\n"); + printf("%s ", prompt); + + if (scanf("%20i", value) == 0) { + if (scanf("%*[^\n]%*c") != 0) { + printf("ERROR: Reading the input line error.\n"); + return -1; + } + printf("ERROR: Incorrect input.\n"); + return -1; + } + scanf("%*[^\n]%*c"); + + return (*value < min_value || *value > max_value ? -1 : 0); } int input_double( - const char *prompt, - double min_value, - double max_value, - double *value) + const char *prompt, + double min_value, + double max_value, + double *value) { - printf("\n"); - printf("%s ", prompt); - - if (scanf("%20lf", value) == 0) - { - if (scanf("%*[^\n]%*c") != 0) - { - printf("ERROR: Reading the input line error.\n"); - return -1; - } - printf("ERROR: Incorrect input.\n"); - return -1; - } - scanf("%*[^\n]%*c"); - - return (*value < min_value || *value > max_value ? -1 : 0); + printf("\n"); + printf("%s ", prompt); + + if (scanf("%20lf", value) == 0) { + if (scanf("%*[^\n]%*c") != 0) { + printf("ERROR: Reading the input line error.\n"); + return -1; + } + printf("ERROR: Incorrect input.\n"); + return -1; + } + scanf("%*[^\n]%*c"); + + return (*value < min_value || *value > max_value ? -1 : 0); } bool show_confirm_dialog(const char *title) { - const int options[2] = {1, 2}; - const char *names[2] = { "No", "Yes" }; - - bool answer = false; - - int sel = -1; - while (sel == -1) - { - sel = show_menu(title, options, names, 2); - switch (sel) - { - case 1: - answer = false; - break; - case 2: - answer = true; - break; - default: - sel = -1; - printf("ERROR: Incorrect input.\n"); - continue; - } - } - - return answer; + const int options[2] = {1, 2}; + const char *names[2] = { "No", "Yes" }; + + bool answer = false; + + int sel = -1; + while (sel == -1) { + sel = show_menu(title, options, names, 2); + switch (sel) { + case 1: + answer = false; + break; + case 2: + answer = true; + break; + default: + sel = -1; + printf("ERROR: Incorrect input.\n"); + continue; + } + } + + return answer; } int show_menu( - const char *title, - const int *options, - const char **names, - int number_of_option) + const char *title, + const int *options, + const char **names, + int number_of_option) { - if (NULL == title || NULL == options || NULL == names || 0 >= number_of_option) - { - return -1; - } - - int number_size = 1; - - int tn_counter = number_of_option; - while(tn_counter/=10) - { - ++number_size; - } - - int max_len = strlen(title) - number_size - 2; - - int i = 0; - for (i = 0; i < number_of_option; ++i) - { - const int temp_len = strlen(names[i]); - if (max_len < temp_len) - { - max_len = temp_len; - } - } - - const int full_size = number_size + 2 + max_len; - - printf("\n**"); - for (i = 0; i < full_size; ++i) - { - printf("*"); - } - printf("**\n"); - - printf("* %-*s *\n", full_size, title); - - printf("*-"); - for (i = 0; i < full_size; ++i) - { - printf("-"); - } - printf("-*\n"); - - for (i = 0; i < number_of_option; ++i) - { - printf("* %0*i. %-*s *\n", number_size, options[i], max_len, names[i]); - } - - printf("**"); - for (i = 0; i < full_size; ++i) - { - printf("*"); - } - printf("**\n\n"); - - int selection = 0; - printf("Your choice: "); - if (scanf("%25i", &selection) == 0) - { - if (scanf("%*[^\n]%*c") != 0) - { - printf("ERROR: Reading the input line error.\n"); - } - - printf("ERROR: Incorrect input.\n"); - return -1; - } - scanf("%*[^\n]%*c"); - - return selection; + if (NULL == title || NULL == options || NULL == names || 0 >= number_of_option) + return -1; + + int number_size = 1; + + int tn_counter = number_of_option; + while (tn_counter /= 10) + ++number_size; + + int max_len = strlen(title) - number_size - 2; + + int i = 0; + for (i = 0; i < number_of_option; ++i) { + const int temp_len = strlen(names[i]); + if (max_len < temp_len) + max_len = temp_len; + } + + const int full_size = number_size + 2 + max_len; + + printf("\n**"); + for (i = 0; i < full_size; ++i) + printf("*"); + printf("**\n"); + + printf("* %-*s *\n", full_size, title); + + printf("*-"); + for (i = 0; i < full_size; ++i) + printf("-"); + printf("-*\n"); + + for (i = 0; i < number_of_option; ++i) + printf("* %0*i. %-*s *\n", number_size, options[i], max_len, names[i]); + + printf("**"); + for (i = 0; i < full_size; ++i) + printf("*"); + printf("**\n\n"); + + int selection = 0; + printf("Your choice: "); + if (scanf("%25i", &selection) == 0) { + if (scanf("%*[^\n]%*c") != 0) + printf("ERROR: Reading the input line error.\n"); + + printf("ERROR: Incorrect input.\n"); + return -1; + } + scanf("%*[^\n]%*c"); + + return selection; } int load_mv_source_from_file( - const char *path_to_image, - mv_source_h source) + const char *path_to_image, + mv_source_h source) { - unsigned char *data_buffer = NULL; - unsigned long buffer_size = 0; - image_data_s image_data; - - int err = load_image_to_buffer(path_to_image, &data_buffer, - &buffer_size, &image_data); - if (MEDIA_VISION_ERROR_NONE != err) - { - printf("ERROR: Errors were occurred during opening file!!! code: %i\n", - err); - if (NULL != data_buffer) - { + unsigned char *data_buffer = NULL; + unsigned long buffer_size = 0; + image_data_s image_data; + + int err = load_image_to_buffer(path_to_image, &data_buffer, + &buffer_size, &image_data); + if (MEDIA_VISION_ERROR_NONE != err) { + printf("ERROR: Errors were occurred during opening file!!! code: %i\n", + err); + if (NULL != data_buffer) destroy_loaded_buffer(data_buffer); - } - - return err; - } - - err = mv_source_fill_by_buffer( - source, data_buffer, - buffer_size, - image_data.image_width, - image_data.image_height, - image_data.image_colorspace); - - if (MEDIA_VISION_ERROR_NONE != err) - { - printf("ERROR: Errors were occurred during filling source!!! code %i\n", - err); - } - - if (NULL != data_buffer) - { - destroy_loaded_buffer(data_buffer); - } - - return err; + + return err; + } + + err = mv_source_fill_by_buffer( + source, data_buffer, + buffer_size, + image_data.image_width, + image_data.image_height, + image_data.image_colorspace); + + if (MEDIA_VISION_ERROR_NONE != err) + printf("ERROR: Errors were occurred during filling source!!! code %i\n", + err); + + if (NULL != data_buffer) + destroy_loaded_buffer(data_buffer); + + return err; } diff --git a/test/testsuites/common/video_helper/mv_video_helper.c b/test/testsuites/common/video_helper/mv_video_helper.c index 7674d91..c59a81c 100644 --- a/test/testsuites/common/video_helper/mv_video_helper.c +++ b/test/testsuites/common/video_helper/mv_video_helper.c @@ -28,46 +28,44 @@ #include -typedef struct _mv_video_reader_s -{ - /* Main bin */ - GstElement *pl; +typedef struct _mv_video_reader_s { + /* Main bin */ + GstElement *pl; - /* Pipeline structure */ - GstElement *filesrc; - GstElement *decodebin; - GstElement *videoconvert; - GstElement *appsink; + /* Pipeline structure */ + GstElement *filesrc; + GstElement *decodebin; + GstElement *videoconvert; + GstElement *appsink; - void *new_sample_cb_user_data; - void *eos_cb_user_data; + void *new_sample_cb_user_data; + void *eos_cb_user_data; - GstCaps *caps; + GstCaps *caps; - pthread_spinlock_t new_sample_cb_guard; - pthread_spinlock_t eos_cb_guard; + pthread_spinlock_t new_sample_cb_guard; + pthread_spinlock_t eos_cb_guard; - mv_video_reader_new_sample_cb new_sample_cb; - mv_video_reader_eos_cb eos_cb; + mv_video_reader_new_sample_cb new_sample_cb; + mv_video_reader_eos_cb eos_cb; } mv_video_reader_s; -typedef struct _mv_video_writer_s -{ - /* Main bin */ - GstElement *pl; - - /* Pipeline structure */ - GstElement *appsrc; - GstElement *capsfilter; - GstElement *videoconvert; - GstElement *encoder; - GstElement *queue; - GstElement *muxer; - GstElement *filesink; - - image_data_s image_data; - unsigned int fps; - unsigned int buffer_size; +typedef struct _mv_video_writer_s { + /* Main bin */ + GstElement *pl; + + /* Pipeline structure */ + GstElement *appsrc; + GstElement *capsfilter; + GstElement *videoconvert; + GstElement *encoder; + GstElement *queue; + GstElement *muxer; + GstElement *filesink; + + image_data_s image_data; + unsigned int fps; + unsigned int buffer_size; } mv_video_writer_s; /* video reader internal funcitons */ @@ -86,841 +84,789 @@ static void cb_newpad(GstElement *decodebin, GstPad *new_pad, gpointer user_data /* video reader */ int mv_create_video_reader( - mv_video_reader_h *reader) + mv_video_reader_h *reader) { - mv_video_reader_s *handle = NULL; - int err = MEDIA_VISION_ERROR_NONE; - - if (reader == NULL) - { - LOGE("NULL pointer passed"); - return MEDIA_VISION_ERROR_INVALID_PARAMETER; - } - - gst_init(NULL, NULL); - - handle = (mv_video_reader_s *) malloc(sizeof(mv_video_reader_s)); - if (!handle) - { - LOGE("Not enough memory"); - return MEDIA_VISION_ERROR_INVALID_OPERATION; - } - memset(handle, 0, sizeof(mv_video_reader_s)); - - err = _mv_video_reader_create_internals(handle); - if (MEDIA_VISION_ERROR_NONE != err) - { - LOGE("Failed to create internals"); - free(handle); - return err; - } - - err = _mv_video_reader_link_internals(handle); - if (MEDIA_VISION_ERROR_NONE != err) - { - LOGE("Failed to link internals"); - free(handle); - return err; - } - - *reader = (mv_video_reader_s *) handle; - - return err; + mv_video_reader_s *handle = NULL; + int err = MEDIA_VISION_ERROR_NONE; + + if (reader == NULL) { + LOGE("NULL pointer passed"); + return MEDIA_VISION_ERROR_INVALID_PARAMETER; + } + + gst_init(NULL, NULL); + + handle = (mv_video_reader_s *) malloc(sizeof(mv_video_reader_s)); + if (!handle) { + LOGE("Not enough memory"); + return MEDIA_VISION_ERROR_INVALID_OPERATION; + } + memset(handle, 0, sizeof(mv_video_reader_s)); + + err = _mv_video_reader_create_internals(handle); + if (MEDIA_VISION_ERROR_NONE != err) { + LOGE("Failed to create internals"); + free(handle); + return err; + } + + err = _mv_video_reader_link_internals(handle); + if (MEDIA_VISION_ERROR_NONE != err) { + LOGE("Failed to link internals"); + free(handle); + return err; + } + + *reader = (mv_video_reader_s *) handle; + + return err; } int mv_destroy_video_reader( - mv_video_reader_h reader) + mv_video_reader_h reader) { - mv_video_reader_s *handle = NULL; + mv_video_reader_s *handle = NULL; + + if (reader == NULL) { + LOGE("NULL pointer passed"); + return MEDIA_VISION_ERROR_INVALID_PARAMETER; + } - if (reader == NULL) - { - LOGE("NULL pointer passed"); - return MEDIA_VISION_ERROR_INVALID_PARAMETER; - } + handle = (mv_video_reader_s *) reader; - handle = (mv_video_reader_s *) reader; + if (handle->caps && GST_OBJECT_REFCOUNT(handle->caps)) + gst_caps_unref(handle->caps); - if (handle->caps && GST_OBJECT_REFCOUNT(handle->caps)) - { - gst_caps_unref(handle->caps); - } + if (handle->pl) + gst_object_unref(handle->pl); - if (handle->pl) - { - gst_object_unref(handle->pl); - } - handle->pl = NULL; + handle->pl = NULL; - pthread_spin_destroy(&(handle->new_sample_cb_guard)); - pthread_spin_destroy(&(handle->eos_cb_guard)); + pthread_spin_destroy(&(handle->new_sample_cb_guard)); + pthread_spin_destroy(&(handle->eos_cb_guard)); - LOGD("video reader destroyed %p", handle); + LOGD("video reader destroyed %p", handle); - free(handle); + free(handle); - return MEDIA_VISION_ERROR_NONE; + return MEDIA_VISION_ERROR_NONE; } int mv_video_reader_load( - mv_video_reader_h reader, - const char *path, - image_data_s *image_data, - unsigned int *fps) + mv_video_reader_h reader, + const char *path, + image_data_s *image_data, + unsigned int *fps) { - mv_video_reader_s *handle = NULL; - GstVideoInfo info; - - if (reader == NULL || path == NULL || - image_data == NULL || fps == NULL) - { - LOGE("NULL pointer passed"); - return MEDIA_VISION_ERROR_INVALID_PARAMETER; - } - - handle = (mv_video_reader_s *) reader; - - /* Set input file location from path */ - g_object_set(G_OBJECT(handle->filesrc), - "location", path, - NULL); - - /* Start playback */ - if (_mv_video_reader_state_change(handle, GST_STATE_PLAYING)) - { - LOGE("Unable to change state"); - return MEDIA_VISION_ERROR_INVALID_OPERATION; - } - - if (_mv_video_reader_state_change(handle, GST_STATE_PAUSED)) - { - LOGE("Unable to change state"); - return MEDIA_VISION_ERROR_INVALID_OPERATION; - } - - if (handle->caps == NULL) - { - LOGE("Unable to get caps from decodebin"); - return MEDIA_VISION_ERROR_INVALID_OPERATION; - } - - gst_video_info_from_caps(&info, handle->caps); - gst_caps_unref(handle->caps); - - *fps = info.fps_n/info.fps_d; - - /* Fill image data */ - image_data->image_width = info.width; - image_data->image_height = info.height; - - /* Look to : - * http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoFormat */ - switch(GST_VIDEO_FORMAT_INFO_FORMAT(info.finfo)) - { - case(GST_VIDEO_FORMAT_GRAY8): - image_data->image_colorspace = MEDIA_VISION_COLORSPACE_Y800; - break; - case(GST_VIDEO_FORMAT_I420): - image_data->image_colorspace = MEDIA_VISION_COLORSPACE_I420; - break; - case(GST_VIDEO_FORMAT_NV12): - image_data->image_colorspace = MEDIA_VISION_COLORSPACE_NV12; - break; - case(GST_VIDEO_FORMAT_YV12): - image_data->image_colorspace = MEDIA_VISION_COLORSPACE_YV12; - break; - case(GST_VIDEO_FORMAT_NV21): - image_data->image_colorspace = MEDIA_VISION_COLORSPACE_NV21; - break; - case(GST_VIDEO_FORMAT_YUY2): - image_data->image_colorspace = MEDIA_VISION_COLORSPACE_YUYV; - break; - case(GST_VIDEO_FORMAT_UYVY): - image_data->image_colorspace = MEDIA_VISION_COLORSPACE_UYVY; - break; - case(GST_VIDEO_FORMAT_RGB): - image_data->image_colorspace = MEDIA_VISION_COLORSPACE_RGB888; - break; - case(GST_VIDEO_FORMAT_RGBA): - image_data->image_colorspace = MEDIA_VISION_COLORSPACE_RGBA; - break; - default: - LOGE("Video pixel format is not supported\n"); - return MEDIA_VISION_ERROR_NOT_SUPPORTED_FORMAT; - } - - return MEDIA_VISION_ERROR_NONE; + mv_video_reader_s *handle = NULL; + GstVideoInfo info; + + if (reader == NULL || path == NULL || + image_data == NULL || fps == NULL) { + LOGE("NULL pointer passed"); + return MEDIA_VISION_ERROR_INVALID_PARAMETER; + } + + handle = (mv_video_reader_s *) reader; + + /* Set input file location from path */ + g_object_set(G_OBJECT(handle->filesrc), + "location", path, + NULL); + + /* Start playback */ + if (_mv_video_reader_state_change(handle, GST_STATE_PLAYING)) { + LOGE("Unable to change state"); + return MEDIA_VISION_ERROR_INVALID_OPERATION; + } + + if (_mv_video_reader_state_change(handle, GST_STATE_PAUSED)) { + LOGE("Unable to change state"); + return MEDIA_VISION_ERROR_INVALID_OPERATION; + } + + if (handle->caps == NULL) { + LOGE("Unable to get caps from decodebin"); + return MEDIA_VISION_ERROR_INVALID_OPERATION; + } + + gst_video_info_from_caps(&info, handle->caps); + gst_caps_unref(handle->caps); + + *fps = info.fps_n/info.fps_d; + + /* Fill image data */ + image_data->image_width = info.width; + image_data->image_height = info.height; + + /* Look to : + * http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoFormat */ + switch (GST_VIDEO_FORMAT_INFO_FORMAT(info.finfo)) { + case(GST_VIDEO_FORMAT_GRAY8): + image_data->image_colorspace = MEDIA_VISION_COLORSPACE_Y800; + break; + case(GST_VIDEO_FORMAT_I420): + image_data->image_colorspace = MEDIA_VISION_COLORSPACE_I420; + break; + case(GST_VIDEO_FORMAT_NV12): + image_data->image_colorspace = MEDIA_VISION_COLORSPACE_NV12; + break; + case(GST_VIDEO_FORMAT_YV12): + image_data->image_colorspace = MEDIA_VISION_COLORSPACE_YV12; + break; + case(GST_VIDEO_FORMAT_NV21): + image_data->image_colorspace = MEDIA_VISION_COLORSPACE_NV21; + break; + case(GST_VIDEO_FORMAT_YUY2): + image_data->image_colorspace = MEDIA_VISION_COLORSPACE_YUYV; + break; + case(GST_VIDEO_FORMAT_UYVY): + image_data->image_colorspace = MEDIA_VISION_COLORSPACE_UYVY; + break; + case(GST_VIDEO_FORMAT_RGB): + image_data->image_colorspace = MEDIA_VISION_COLORSPACE_RGB888; + break; + case(GST_VIDEO_FORMAT_RGBA): + image_data->image_colorspace = MEDIA_VISION_COLORSPACE_RGBA; + break; + default: + LOGE("Video pixel format is not supported\n"); + return MEDIA_VISION_ERROR_NOT_SUPPORTED_FORMAT; + } + + return MEDIA_VISION_ERROR_NONE; } int mv_video_reader_start( - mv_video_reader_h reader) + mv_video_reader_h reader) { - mv_video_reader_s *handle = NULL; + mv_video_reader_s *handle = NULL; - if (reader == NULL) - { - LOGE("NULL pointer passed"); - return MEDIA_VISION_ERROR_INVALID_PARAMETER; - } + if (reader == NULL) { + LOGE("NULL pointer passed"); + return MEDIA_VISION_ERROR_INVALID_PARAMETER; + } - handle = (mv_video_reader_s *) reader; + handle = (mv_video_reader_s *) reader; - /* Start playback */ - if (_mv_video_reader_state_change(handle, GST_STATE_PLAYING)) - { - LOGE("Unable to change state"); - return MEDIA_VISION_ERROR_INVALID_OPERATION; - } + /* Start playback */ + if (_mv_video_reader_state_change(handle, GST_STATE_PLAYING)) { + LOGE("Unable to change state"); + return MEDIA_VISION_ERROR_INVALID_OPERATION; + } - return MEDIA_VISION_ERROR_NONE; + return MEDIA_VISION_ERROR_NONE; } int mv_video_reader_stop( - mv_video_reader_h reader) + mv_video_reader_h reader) { - mv_video_reader_s *handle = NULL; + mv_video_reader_s *handle = NULL; - if (reader == NULL) - { - LOGE("NULL pointer passed"); - return MEDIA_VISION_ERROR_INVALID_PARAMETER; - } + if (reader == NULL) { + LOGE("NULL pointer passed"); + return MEDIA_VISION_ERROR_INVALID_PARAMETER; + } - handle = (mv_video_reader_s *) reader; + handle = (mv_video_reader_s *) reader; - /* Stop playback (NULL or READY) */ - if (_mv_video_reader_state_change(handle, GST_STATE_NULL)) - { - LOGE("Unable to change state"); - return MEDIA_VISION_ERROR_INVALID_OPERATION; - } + /* Stop playback (NULL or READY) */ + if (_mv_video_reader_state_change(handle, GST_STATE_NULL)) { + LOGE("Unable to change state"); + return MEDIA_VISION_ERROR_INVALID_OPERATION; + } - return MEDIA_VISION_ERROR_NONE; + return MEDIA_VISION_ERROR_NONE; } int mv_video_reader_set_new_sample_cb( - mv_video_reader_h reader, - mv_video_reader_new_sample_cb callback, - void *user_data) + mv_video_reader_h reader, + mv_video_reader_new_sample_cb callback, + void *user_data) { - mv_video_reader_s *handle = NULL; + mv_video_reader_s *handle = NULL; - if (reader == NULL || callback == NULL) - { - LOGE("NULL pointer passed"); - return MEDIA_VISION_ERROR_INVALID_PARAMETER; - } + if (reader == NULL || callback == NULL) { + LOGE("NULL pointer passed"); + return MEDIA_VISION_ERROR_INVALID_PARAMETER; + } - handle = (mv_video_reader_s *) reader; + handle = (mv_video_reader_s *) reader; - pthread_spin_lock(&(handle->new_sample_cb_guard)); - handle->new_sample_cb = callback; - handle->new_sample_cb_user_data = user_data; - pthread_spin_unlock(&(handle->new_sample_cb_guard)); + pthread_spin_lock(&(handle->new_sample_cb_guard)); + handle->new_sample_cb = callback; + handle->new_sample_cb_user_data = user_data; + pthread_spin_unlock(&(handle->new_sample_cb_guard)); - return MEDIA_VISION_ERROR_NONE; + return MEDIA_VISION_ERROR_NONE; } int mv_video_reader_set_eos_cb( - mv_video_reader_h reader, - mv_video_reader_eos_cb callback, - void *user_data) + mv_video_reader_h reader, + mv_video_reader_eos_cb callback, + void *user_data) { - mv_video_reader_s *handle = NULL; + mv_video_reader_s *handle = NULL; - if (reader == NULL || callback == NULL) - { - LOGE("NULL pointer passed"); - return MEDIA_VISION_ERROR_INVALID_PARAMETER; - } + if (reader == NULL || callback == NULL) { + LOGE("NULL pointer passed"); + return MEDIA_VISION_ERROR_INVALID_PARAMETER; + } - handle = (mv_video_reader_s *) reader; + handle = (mv_video_reader_s *) reader; - pthread_spin_lock(&(handle->eos_cb_guard)); - handle->eos_cb = callback; - handle->eos_cb_user_data = user_data; - pthread_spin_unlock(&(handle->eos_cb_guard)); + pthread_spin_lock(&(handle->eos_cb_guard)); + handle->eos_cb = callback; + handle->eos_cb_user_data = user_data; + pthread_spin_unlock(&(handle->eos_cb_guard)); - return MEDIA_VISION_ERROR_NONE; + return MEDIA_VISION_ERROR_NONE; } /* Video Writer */ int mv_create_video_writer( - mv_video_writer_h *writer) + mv_video_writer_h *writer) { - mv_video_writer_s *handle = NULL; - int err = MEDIA_VISION_ERROR_NONE; - - if (writer == NULL) - { - LOGE("NULL pointer passed"); - return MEDIA_VISION_ERROR_INVALID_PARAMETER; - } - - gst_init(NULL, NULL); - - handle = (mv_video_writer_s *) malloc(sizeof(mv_video_writer_s)); - if (!handle) - { - LOGE("Not enough memory"); - return MEDIA_VISION_ERROR_INVALID_OPERATION; - } - memset(handle, 0, sizeof(mv_video_writer_s)); - - err = _mv_video_writer_create_internals(handle); - if (MEDIA_VISION_ERROR_NONE != err) - { - LOGE("Failed to create internals"); - free(handle); - return err; - } - - *writer = (mv_video_writer_s *) handle; - - return err; + mv_video_writer_s *handle = NULL; + int err = MEDIA_VISION_ERROR_NONE; + + if (writer == NULL) { + LOGE("NULL pointer passed"); + return MEDIA_VISION_ERROR_INVALID_PARAMETER; + } + + gst_init(NULL, NULL); + + handle = (mv_video_writer_s *) malloc(sizeof(mv_video_writer_s)); + if (!handle) { + LOGE("Not enough memory"); + return MEDIA_VISION_ERROR_INVALID_OPERATION; + } + memset(handle, 0, sizeof(mv_video_writer_s)); + + err = _mv_video_writer_create_internals(handle); + if (MEDIA_VISION_ERROR_NONE != err) { + LOGE("Failed to create internals"); + free(handle); + return err; + } + + *writer = (mv_video_writer_s *) handle; + + return err; } int mv_destroy_video_writer( - mv_video_writer_h writer) + mv_video_writer_h writer) { - mv_video_writer_s *handle = NULL; + mv_video_writer_s *handle = NULL; + + if (writer == NULL) { + LOGE("NULL pointer passed"); + return MEDIA_VISION_ERROR_INVALID_PARAMETER; + } - if (writer == NULL) - { - LOGE("NULL pointer passed"); - return MEDIA_VISION_ERROR_INVALID_PARAMETER; - } + handle = (mv_video_writer_s *) writer; - handle = (mv_video_writer_s *) writer; + _mv_video_writer_state_change(writer, GST_STATE_NULL); - _mv_video_writer_state_change(writer, GST_STATE_NULL); + if (handle->pl) + gst_object_unref(handle->pl); - if (handle->pl) - { - gst_object_unref(handle->pl); - } - handle->pl = NULL; + handle->pl = NULL; - LOGD("video writer destroyed %p", handle); + LOGD("video writer destroyed %p", handle); - free(handle); + free(handle); - return MEDIA_VISION_ERROR_NONE; + return MEDIA_VISION_ERROR_NONE; } int mv_video_writer_init( - mv_video_writer_h writer, - const char *path, - image_data_s image_data, - unsigned int fps) + mv_video_writer_h writer, + const char *path, + image_data_s image_data, + unsigned int fps) { - mv_video_writer_s *handle = NULL; - unsigned int err = MEDIA_VISION_ERROR_NONE; + mv_video_writer_s *handle = NULL; + unsigned int err = MEDIA_VISION_ERROR_NONE; - if (writer == NULL) - { - LOGE("NULL pointer passed"); - return MEDIA_VISION_ERROR_INVALID_PARAMETER; - } + if (writer == NULL) { + LOGE("NULL pointer passed"); + return MEDIA_VISION_ERROR_INVALID_PARAMETER; + } - handle = (mv_video_writer_s *) writer; + handle = (mv_video_writer_s *) writer; - handle->image_data.image_width = image_data.image_width; - handle->image_data.image_height = image_data.image_height; - handle->image_data.image_colorspace = image_data.image_colorspace; + handle->image_data.image_width = image_data.image_width; + handle->image_data.image_height = image_data.image_height; + handle->image_data.image_colorspace = image_data.image_colorspace; - handle->fps = fps; + handle->fps = fps; - g_object_set(G_OBJECT(handle->filesink), - "location", path, - NULL); + g_object_set(G_OBJECT(handle->filesink), + "location", path, + NULL); - err = _mv_video_writer_link_internals(handle); - if (MEDIA_VISION_ERROR_NONE != err) - { - LOGE("Failed to link internals"); - return err; - } + err = _mv_video_writer_link_internals(handle); + if (MEDIA_VISION_ERROR_NONE != err) { + LOGE("Failed to link internals"); + return err; + } - return err; + return err; } int mv_video_writer_write_frame( - mv_video_writer_h writer, - unsigned char *frame) + mv_video_writer_h writer, + unsigned char *frame) { - mv_video_writer_s *handle = NULL; - GstMapInfo info; - GstBuffer *buffer = NULL; - - if (writer == NULL || frame == NULL) - { - LOGE("NULL pointer passed"); - return MEDIA_VISION_ERROR_INVALID_PARAMETER; - } - - handle = (mv_video_writer_s *) writer; - - buffer = gst_buffer_new_allocate(NULL, handle->buffer_size, NULL); - if (!buffer) - { - LOGE("Unable to allocate buffer for frame"); - return MEDIA_VISION_ERROR_INVALID_OPERATION; - } - - LOGD("Copying input frame to buffer and pushing to appsrc"); - gst_buffer_map(buffer, &info, GST_MAP_READWRITE); - memcpy(info.data, frame, info.size); - gst_buffer_unmap(buffer, &info); - - if (GST_FLOW_OK != - gst_app_src_push_buffer(handle->appsrc, buffer)) - { - LOGE("Failed to push buffer to appsrc"); - return MEDIA_VISION_ERROR_INVALID_OPERATION; - } - - return MEDIA_VISION_ERROR_NONE; + mv_video_writer_s *handle = NULL; + GstMapInfo info; + GstBuffer *buffer = NULL; + + if (writer == NULL || frame == NULL) { + LOGE("NULL pointer passed"); + return MEDIA_VISION_ERROR_INVALID_PARAMETER; + } + + handle = (mv_video_writer_s *) writer; + + buffer = gst_buffer_new_allocate(NULL, handle->buffer_size, NULL); + if (!buffer) { + LOGE("Unable to allocate buffer for frame"); + return MEDIA_VISION_ERROR_INVALID_OPERATION; + } + + LOGD("Copying input frame to buffer and pushing to appsrc"); + gst_buffer_map(buffer, &info, GST_MAP_READWRITE); + memcpy(info.data, frame, info.size); + gst_buffer_unmap(buffer, &info); + + if (GST_FLOW_OK != + gst_app_src_push_buffer(handle->appsrc, buffer)) { + LOGE("Failed to push buffer to appsrc"); + return MEDIA_VISION_ERROR_INVALID_OPERATION; + } + + return MEDIA_VISION_ERROR_NONE; } /* Internal functions */ static int _mv_video_reader_create_internals( - mv_video_reader_s *reader) + mv_video_reader_s *reader) { - pthread_spin_init(&(reader->new_sample_cb_guard), PTHREAD_PROCESS_SHARED); - pthread_spin_init(&(reader->eos_cb_guard), PTHREAD_PROCESS_SHARED); - - reader->pl = gst_pipeline_new(NULL); - - reader->filesrc = gst_element_factory_make("filesrc", "filesrc"); - reader->decodebin = gst_element_factory_make("decodebin", "decoder"); - reader->videoconvert = gst_element_factory_make("videoconvert", "convert"); - reader->appsink = gst_element_factory_make("appsink", "appsink"); - - if ((!reader->pl) || - (!reader->filesrc) || - (!reader->decodebin) || - (!reader->videoconvert) || - (!reader->appsink)) - { - LOGE("Unable to create video read pipeline elements"); - return MEDIA_VISION_ERROR_INVALID_OPERATION; - } - - gst_bin_add_many(GST_BIN(reader->pl), - reader->filesrc, - reader->decodebin, - reader->videoconvert, - reader->appsink, - NULL); - - return MEDIA_VISION_ERROR_NONE; + pthread_spin_init(&(reader->new_sample_cb_guard), PTHREAD_PROCESS_SHARED); + pthread_spin_init(&(reader->eos_cb_guard), PTHREAD_PROCESS_SHARED); + + reader->pl = gst_pipeline_new(NULL); + + reader->filesrc = gst_element_factory_make("filesrc", "filesrc"); + reader->decodebin = gst_element_factory_make("decodebin", "decoder"); + reader->videoconvert = gst_element_factory_make("videoconvert", "convert"); + reader->appsink = gst_element_factory_make("appsink", "appsink"); + + if ((!reader->pl) || + (!reader->filesrc) || + (!reader->decodebin) || + (!reader->videoconvert) || + (!reader->appsink)) { + LOGE("Unable to create video read pipeline elements"); + return MEDIA_VISION_ERROR_INVALID_OPERATION; + } + + gst_bin_add_many(GST_BIN(reader->pl), + reader->filesrc, + reader->decodebin, + reader->videoconvert, + reader->appsink, + NULL); + + return MEDIA_VISION_ERROR_NONE; } static int _mv_video_reader_link_internals( - mv_video_reader_s *reader) + mv_video_reader_s *reader) { - GstCaps *caps = NULL; - - if (!gst_element_link_many(reader->filesrc, - reader->decodebin, - NULL)) - { - LOGE("Unable to link filesrc to decodebin"); - return MEDIA_VISION_ERROR_INVALID_OPERATION; - } - - /* Decodebin pad will be linked during state change */ - g_signal_connect(reader->decodebin, - "pad-added", - G_CALLBACK(cb_newpad), - reader); - - if (!gst_element_link_many(reader->videoconvert, - reader->appsink, NULL)) - { - LOGE("Unable to link filesrc to decodebin"); - return MEDIA_VISION_ERROR_INVALID_OPERATION; - } - - caps = gst_caps_new_simple("video/x-raw", - "format", G_TYPE_STRING, "RGB", - NULL); - - gst_app_sink_set_caps(GST_APP_SINK(reader->appsink), caps); - gst_caps_unref(caps); - - /* Configure appsink */ - gst_app_sink_set_emit_signals(GST_APP_SINK(reader->appsink), TRUE); - g_signal_connect(reader->appsink, - "new-sample", - G_CALLBACK(appsink_newsample), - reader); - g_signal_connect(reader->appsink, - "eos", - G_CALLBACK(appsink_eos), - reader); - g_object_set(G_OBJECT(reader->appsink), - "drop", TRUE, - "enable-last-sample", TRUE, - "sync", FALSE, - NULL); - - return MEDIA_VISION_ERROR_NONE; + GstCaps *caps = NULL; + + if (!gst_element_link_many(reader->filesrc, + reader->decodebin, + NULL)) { + LOGE("Unable to link filesrc to decodebin"); + return MEDIA_VISION_ERROR_INVALID_OPERATION; + } + + /* Decodebin pad will be linked during state change */ + g_signal_connect(reader->decodebin, + "pad-added", + G_CALLBACK(cb_newpad), + reader); + + if (!gst_element_link_many(reader->videoconvert, + reader->appsink, NULL)) { + LOGE("Unable to link filesrc to decodebin"); + return MEDIA_VISION_ERROR_INVALID_OPERATION; + } + + caps = gst_caps_new_simple("video/x-raw", + "format", G_TYPE_STRING, "RGB", + NULL); + + gst_app_sink_set_caps(GST_APP_SINK(reader->appsink), caps); + gst_caps_unref(caps); + + /* Configure appsink */ + gst_app_sink_set_emit_signals(GST_APP_SINK(reader->appsink), TRUE); + g_signal_connect(reader->appsink, + "new-sample", + G_CALLBACK(appsink_newsample), + reader); + g_signal_connect(reader->appsink, + "eos", + G_CALLBACK(appsink_eos), + reader); + g_object_set(G_OBJECT(reader->appsink), + "drop", TRUE, + "enable-last-sample", TRUE, + "sync", FALSE, + NULL); + + return MEDIA_VISION_ERROR_NONE; } static int _mv_video_reader_state_change( - mv_video_reader_s *reader, - GstState state) + mv_video_reader_s *reader, + GstState state) { - mv_video_reader_s *handle = (mv_video_reader_s *) reader; - GstStateChangeReturn state_ret = GST_STATE_CHANGE_FAILURE; - GstState pipeline_state = GST_STATE_NULL; - - state_ret = gst_element_set_state(handle->pl, - state); - - if (GST_STATE_CHANGE_FAILURE == state_ret) - { - LOGE("Set state failure"); - return MEDIA_VISION_ERROR_INVALID_OPERATION; - } - - LOGI("Set state [%d], change return [%d]", - state, state_ret); - - state_ret = gst_element_get_state(handle->pl, - &pipeline_state, - NULL, - GST_CLOCK_TIME_NONE); - - if (GST_STATE_CHANGE_FAILURE == state_ret) - { - LOGE("get state failure"); - return MEDIA_VISION_ERROR_INVALID_OPERATION; - } - - return MEDIA_VISION_ERROR_NONE; + mv_video_reader_s *handle = (mv_video_reader_s *) reader; + GstStateChangeReturn state_ret = GST_STATE_CHANGE_FAILURE; + GstState pipeline_state = GST_STATE_NULL; + + state_ret = gst_element_set_state(handle->pl, + state); + + if (GST_STATE_CHANGE_FAILURE == state_ret) { + LOGE("Set state failure"); + return MEDIA_VISION_ERROR_INVALID_OPERATION; + } + + LOGI("Set state [%d], change return [%d]", + state, state_ret); + + state_ret = gst_element_get_state(handle->pl, + &pipeline_state, + NULL, + GST_CLOCK_TIME_NONE); + + if (GST_STATE_CHANGE_FAILURE == state_ret) { + LOGE("get state failure"); + return MEDIA_VISION_ERROR_INVALID_OPERATION; + } + + return MEDIA_VISION_ERROR_NONE; } static int _mv_video_writer_create_internals( - mv_video_writer_s *writer) + mv_video_writer_s *writer) { - writer->pl = gst_pipeline_new(NULL); - - writer->appsrc = gst_element_factory_make("appsrc", "appsrc"); - writer->capsfilter = gst_element_factory_make("capsfilter", NULL); - writer->videoconvert = gst_element_factory_make("videoconvert", "videoconvert"); - writer->encoder = gst_element_factory_make("avenc_mpeg4", "encoder"); - writer->queue = gst_element_factory_make("queue", "queue"); - writer->muxer = gst_element_factory_make("avmux_avi", "muxer"); - writer->filesink = gst_element_factory_make("filesink", "filesink"); - - if ((!writer->pl) || - (!writer->appsrc) || - (!writer->capsfilter) || - (!writer->videoconvert) || - (!writer->encoder) || - (!writer->queue) || - (!writer->muxer) || - (!writer->filesink)) - { - LOGE("Unable to create video read pipeline elements\n"); - return MEDIA_VISION_ERROR_INVALID_OPERATION; - } - - gst_bin_add_many(GST_BIN(writer->pl), - writer->appsrc, - writer->capsfilter, - writer->videoconvert, - writer->encoder, - writer->queue, - writer->muxer, - writer->filesink, - NULL); - - return MEDIA_VISION_ERROR_NONE; + writer->pl = gst_pipeline_new(NULL); + + writer->appsrc = gst_element_factory_make("appsrc", "appsrc"); + writer->capsfilter = gst_element_factory_make("capsfilter", NULL); + writer->videoconvert = gst_element_factory_make("videoconvert", "videoconvert"); + writer->encoder = gst_element_factory_make("avenc_mpeg4", "encoder"); + writer->queue = gst_element_factory_make("queue", "queue"); + writer->muxer = gst_element_factory_make("avmux_avi", "muxer"); + writer->filesink = gst_element_factory_make("filesink", "filesink"); + + if ((!writer->pl) || + (!writer->appsrc) || + (!writer->capsfilter) || + (!writer->videoconvert) || + (!writer->encoder) || + (!writer->queue) || + (!writer->muxer) || + (!writer->filesink)) { + LOGE("Unable to create video read pipeline elements\n"); + return MEDIA_VISION_ERROR_INVALID_OPERATION; + } + + gst_bin_add_many(GST_BIN(writer->pl), + writer->appsrc, + writer->capsfilter, + writer->videoconvert, + writer->encoder, + writer->queue, + writer->muxer, + writer->filesink, + NULL); + + return MEDIA_VISION_ERROR_NONE; } static int _mv_video_writer_link_internals( - mv_video_writer_s *writer) + mv_video_writer_s *writer) { - GstVideoInfo vinfo; - GstCaps *caps = NULL; - char format[6] = {0}; - - /* Convert from mv_colorspace to GstVideoFormat */ - switch(writer->image_data.image_colorspace) - { - case(MEDIA_VISION_COLORSPACE_Y800): - strncpy(format, "GRAY8", 5); - break; - case(MEDIA_VISION_COLORSPACE_I420): - strncpy(format, "I420", 4); - break; - case(MEDIA_VISION_COLORSPACE_NV12): - strncpy(format, "NV12", 4); - break; - case(MEDIA_VISION_COLORSPACE_YV12): - strncpy(format, "YV12", 4); - break; - case(MEDIA_VISION_COLORSPACE_NV21): - strncpy(format, "NV21", 4); - break; - case(MEDIA_VISION_COLORSPACE_YUYV): - strncpy(format, "YUY2", 4); - break; - case(MEDIA_VISION_COLORSPACE_UYVY): - strncpy(format, "UYVY", 4); - break; - case(MEDIA_VISION_COLORSPACE_RGB888): - strncpy(format, "RGB", 3); - break; - case(MEDIA_VISION_COLORSPACE_RGBA): - strncpy(format, "RGBA", 4); - break; - default: - LOGE("Selected format %d is not supported", - writer->image_data.image_colorspace); - return MEDIA_VISION_ERROR_NOT_SUPPORTED_FORMAT; - } - - caps = gst_caps_new_simple("video/x-raw", - "format", G_TYPE_STRING, format, - "width", G_TYPE_INT, writer->image_data.image_width, - "height", G_TYPE_INT, writer->image_data.image_height, - "framerate", GST_TYPE_FRACTION, writer->fps, 1, - NULL); - - if (NULL == caps) - { - LOGE("Failed to create new caps"); - return MEDIA_VISION_ERROR_INVALID_OPERATION; - } - - /* This is the simpler way to get buffer size */ - if (!gst_video_info_from_caps(&vinfo, caps)) - { - LOGE("Unable to set buffer size"); - gst_caps_unref(caps); - return MEDIA_VISION_ERROR_INVALID_OPERATION; - } - - writer->buffer_size = vinfo.size; - - /* link appsrc and capsfilter */ - if ((!gst_element_link_filtered(writer->appsrc, - writer->capsfilter, - caps))) - { - LOGE("Failed to link appsrc to capsfilter"); - gst_caps_unref(caps); - return MEDIA_VISION_ERROR_INVALID_OPERATION; - } - gst_caps_unref(caps); - - if (!gst_element_link_many(writer->capsfilter, - writer->videoconvert, - writer->encoder, - writer->queue, - writer->muxer, - writer->filesink, - NULL)) - { - LOGE("Unable to capsfilter to filesink"); - return MEDIA_VISION_ERROR_INVALID_OPERATION; - } - - g_object_set(G_OBJECT(writer->appsrc), - "max-bytes", 0, - "blocksize", writer->buffer_size, - "stream-type", 0, - "format", GST_FORMAT_BYTES, - NULL); - - if (_mv_video_writer_state_change(writer, - GST_STATE_PLAYING)) - { - LOGE("Unable to change video writer state"); - return MEDIA_VISION_ERROR_INVALID_OPERATION; - } - - return MEDIA_VISION_ERROR_NONE; + GstVideoInfo vinfo; + GstCaps *caps = NULL; + char format[6] = {0}; + + /* Convert from mv_colorspace to GstVideoFormat */ + switch (writer->image_data.image_colorspace) { + case(MEDIA_VISION_COLORSPACE_Y800): + strncpy(format, "GRAY8", 5); + break; + case(MEDIA_VISION_COLORSPACE_I420): + strncpy(format, "I420", 4); + break; + case(MEDIA_VISION_COLORSPACE_NV12): + strncpy(format, "NV12", 4); + break; + case(MEDIA_VISION_COLORSPACE_YV12): + strncpy(format, "YV12", 4); + break; + case(MEDIA_VISION_COLORSPACE_NV21): + strncpy(format, "NV21", 4); + break; + case(MEDIA_VISION_COLORSPACE_YUYV): + strncpy(format, "YUY2", 4); + break; + case(MEDIA_VISION_COLORSPACE_UYVY): + strncpy(format, "UYVY", 4); + break; + case(MEDIA_VISION_COLORSPACE_RGB888): + strncpy(format, "RGB", 3); + break; + case(MEDIA_VISION_COLORSPACE_RGBA): + strncpy(format, "RGBA", 4); + break; + default: + LOGE("Selected format %d is not supported", + writer->image_data.image_colorspace); + return MEDIA_VISION_ERROR_NOT_SUPPORTED_FORMAT; + } + + caps = gst_caps_new_simple("video/x-raw", + "format", G_TYPE_STRING, format, + "width", G_TYPE_INT, writer->image_data.image_width, + "height", G_TYPE_INT, writer->image_data.image_height, + "framerate", GST_TYPE_FRACTION, writer->fps, 1, + NULL); + + if (NULL == caps) { + LOGE("Failed to create new caps"); + return MEDIA_VISION_ERROR_INVALID_OPERATION; + } + + /* This is the simpler way to get buffer size */ + if (!gst_video_info_from_caps(&vinfo, caps)) { + LOGE("Unable to set buffer size"); + gst_caps_unref(caps); + return MEDIA_VISION_ERROR_INVALID_OPERATION; + } + + writer->buffer_size = vinfo.size; + + /* link appsrc and capsfilter */ + if ((!gst_element_link_filtered(writer->appsrc, + writer->capsfilter, + caps))) { + LOGE("Failed to link appsrc to capsfilter"); + gst_caps_unref(caps); + return MEDIA_VISION_ERROR_INVALID_OPERATION; + } + gst_caps_unref(caps); + + if (!gst_element_link_many(writer->capsfilter, + writer->videoconvert, + writer->encoder, + writer->queue, + writer->muxer, + writer->filesink, + NULL)) { + LOGE("Unable to capsfilter to filesink"); + return MEDIA_VISION_ERROR_INVALID_OPERATION; + } + + g_object_set(G_OBJECT(writer->appsrc), + "max-bytes", 0, + "blocksize", writer->buffer_size, + "stream-type", 0, + "format", GST_FORMAT_BYTES, + NULL); + + if (_mv_video_writer_state_change(writer, + GST_STATE_PLAYING)) { + LOGE("Unable to change video writer state"); + return MEDIA_VISION_ERROR_INVALID_OPERATION; + } + + return MEDIA_VISION_ERROR_NONE; } static int _mv_video_writer_state_change( - mv_video_writer_s *writer, - GstState state) + mv_video_writer_s *writer, + GstState state) { - mv_video_writer_s *handle = (mv_video_writer_s *) writer; - GstStateChangeReturn state_ret = GST_STATE_CHANGE_FAILURE; - GstState pipeline_state = GST_STATE_NULL; + mv_video_writer_s *handle = (mv_video_writer_s *) writer; + GstStateChangeReturn state_ret = GST_STATE_CHANGE_FAILURE; + GstState pipeline_state = GST_STATE_NULL; - state_ret = gst_element_set_state(handle->pl, - state); + state_ret = gst_element_set_state(handle->pl, + state); - if (GST_STATE_CHANGE_FAILURE == state_ret) - { - LOGE("Set state failure"); - return MEDIA_VISION_ERROR_INVALID_OPERATION; - } + if (GST_STATE_CHANGE_FAILURE == state_ret) { + LOGE("Set state failure"); + return MEDIA_VISION_ERROR_INVALID_OPERATION; + } - LOGI("Set state [%d], change return [%d]", - state, state_ret); + LOGI("Set state [%d], change return [%d]", + state, state_ret); - /* AppSrc can't go to PLAYING state before buffer is not pushed */ + /* AppSrc can't go to PLAYING state before buffer is not pushed */ - return MEDIA_VISION_ERROR_NONE; + return MEDIA_VISION_ERROR_NONE; } /* Callbacks */ static GstFlowReturn appsink_newsample( - GstAppSink *appsink, - gpointer user_data) + GstAppSink *appsink, + gpointer user_data) { - mv_video_reader_s *handle = NULL; - GstSample *sample = gst_app_sink_pull_sample(appsink); - - if (user_data == NULL) - { - LOGE("NULL pointer passed"); - return MEDIA_VISION_ERROR_INVALID_PARAMETER; - } - - if (sample != NULL) - { - handle = (mv_video_reader_s *) user_data; - GstVideoInfo vinfo; - GstMapInfo info = GST_MAP_INFO_INIT; - GstBuffer *buf = gst_sample_get_buffer(sample); - GstCaps *caps = gst_sample_get_caps(sample); - image_data_s im_data; - char *buffer = NULL; - unsigned int buffer_size = 0; - - LOGD("Received sample from appsink"); - - /* map buffer */ - gst_buffer_map(buf, &info, GST_MAP_READ); - buffer = (char *) info.data; - - /* Fill image data */ - gst_video_info_from_caps(&vinfo, caps); - im_data.image_width = vinfo.width; - im_data.image_height = vinfo.height; - - /* Look to : - * http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoFormat */ - switch(GST_VIDEO_FORMAT_INFO_FORMAT(vinfo.finfo)) - { - case(GST_VIDEO_FORMAT_GRAY8): - im_data.image_colorspace = MEDIA_VISION_COLORSPACE_Y800; - break; - case(GST_VIDEO_FORMAT_I420): - im_data.image_colorspace = MEDIA_VISION_COLORSPACE_I420; - break; - case(GST_VIDEO_FORMAT_NV12): - im_data.image_colorspace = MEDIA_VISION_COLORSPACE_NV12; - break; - case(GST_VIDEO_FORMAT_YV12): - im_data.image_colorspace = MEDIA_VISION_COLORSPACE_YV12; - break; - case(GST_VIDEO_FORMAT_NV21): - im_data.image_colorspace = MEDIA_VISION_COLORSPACE_NV21; - break; - case(GST_VIDEO_FORMAT_YUY2): - im_data.image_colorspace = MEDIA_VISION_COLORSPACE_YUYV; - break; - case(GST_VIDEO_FORMAT_UYVY): - im_data.image_colorspace = MEDIA_VISION_COLORSPACE_UYVY; - break; - case(GST_VIDEO_FORMAT_RGB): - im_data.image_colorspace = MEDIA_VISION_COLORSPACE_RGB888; - break; - case(GST_VIDEO_FORMAT_RGBA): - im_data.image_colorspace = MEDIA_VISION_COLORSPACE_RGBA; - break; - default: - LOGE("Video pixel format is not supported\n"); - - gst_buffer_unmap(buf, &info); - gst_sample_unref(sample); - return GST_FLOW_ERROR; - } - - pthread_spin_lock(&(handle->new_sample_cb_guard)); - if (handle->new_sample_cb != NULL) - { - handle->new_sample_cb( - buffer, - info.size, - im_data, - handle->new_sample_cb_user_data); - } - pthread_spin_unlock(&(handle->new_sample_cb_guard)); - - gst_buffer_unmap(buf, &info); - gst_sample_unref(sample); - } - else - { - LOGE("Failed to pull sample from appsink"); - return GST_FLOW_ERROR; - } - - return GST_FLOW_OK; + mv_video_reader_s *handle = NULL; + GstSample *sample = gst_app_sink_pull_sample(appsink); + + if (user_data == NULL) { + LOGE("NULL pointer passed"); + return MEDIA_VISION_ERROR_INVALID_PARAMETER; + } + + if (sample != NULL) { + handle = (mv_video_reader_s *) user_data; + GstVideoInfo vinfo; + GstMapInfo info = GST_MAP_INFO_INIT; + GstBuffer *buf = gst_sample_get_buffer(sample); + GstCaps *caps = gst_sample_get_caps(sample); + image_data_s im_data; + char *buffer = NULL; + unsigned int buffer_size = 0; + + LOGD("Received sample from appsink"); + + /* map buffer */ + gst_buffer_map(buf, &info, GST_MAP_READ); + buffer = (char *) info.data; + + /* Fill image data */ + gst_video_info_from_caps(&vinfo, caps); + im_data.image_width = vinfo.width; + im_data.image_height = vinfo.height; + + /* Look to : + * http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoFormat */ + switch (GST_VIDEO_FORMAT_INFO_FORMAT(vinfo.finfo)) { + case(GST_VIDEO_FORMAT_GRAY8): + im_data.image_colorspace = MEDIA_VISION_COLORSPACE_Y800; + break; + case(GST_VIDEO_FORMAT_I420): + im_data.image_colorspace = MEDIA_VISION_COLORSPACE_I420; + break; + case(GST_VIDEO_FORMAT_NV12): + im_data.image_colorspace = MEDIA_VISION_COLORSPACE_NV12; + break; + case(GST_VIDEO_FORMAT_YV12): + im_data.image_colorspace = MEDIA_VISION_COLORSPACE_YV12; + break; + case(GST_VIDEO_FORMAT_NV21): + im_data.image_colorspace = MEDIA_VISION_COLORSPACE_NV21; + break; + case(GST_VIDEO_FORMAT_YUY2): + im_data.image_colorspace = MEDIA_VISION_COLORSPACE_YUYV; + break; + case(GST_VIDEO_FORMAT_UYVY): + im_data.image_colorspace = MEDIA_VISION_COLORSPACE_UYVY; + break; + case(GST_VIDEO_FORMAT_RGB): + im_data.image_colorspace = MEDIA_VISION_COLORSPACE_RGB888; + break; + case(GST_VIDEO_FORMAT_RGBA): + im_data.image_colorspace = MEDIA_VISION_COLORSPACE_RGBA; + break; + default: + LOGE("Video pixel format is not supported\n"); + + gst_buffer_unmap(buf, &info); + gst_sample_unref(sample); + return GST_FLOW_ERROR; + } + + pthread_spin_lock(&(handle->new_sample_cb_guard)); + if (handle->new_sample_cb != NULL) { + handle->new_sample_cb( + buffer, + info.size, + im_data, + handle->new_sample_cb_user_data); + } + pthread_spin_unlock(&(handle->new_sample_cb_guard)); + + gst_buffer_unmap(buf, &info); + gst_sample_unref(sample); + } else { + LOGE("Failed to pull sample from appsink"); + return GST_FLOW_ERROR; + } + + return GST_FLOW_OK; } static void appsink_eos( - GstAppSink *appsink, - gpointer user_data) + GstAppSink *appsink, + gpointer user_data) { - if (user_data == NULL) - { - LOGE("NULL pointer passed"); - return; - } - - mv_video_reader_s *handle = (mv_video_reader_s *) user_data; - - /* EOS callback to terminate reading */ - pthread_spin_lock(&(handle->eos_cb_guard)); - if (handle->eos_cb != NULL) - { - handle->eos_cb(handle->eos_cb_user_data); - } - pthread_spin_unlock(&(handle->eos_cb_guard)); + if (user_data == NULL) { + LOGE("NULL pointer passed"); + return; + } + + mv_video_reader_s *handle = (mv_video_reader_s *) user_data; + + /* EOS callback to terminate reading */ + pthread_spin_lock(&(handle->eos_cb_guard)); + if (handle->eos_cb != NULL) + handle->eos_cb(handle->eos_cb_user_data); + + pthread_spin_unlock(&(handle->eos_cb_guard)); } static void cb_newpad( - GstElement *decodebin, - GstPad *pad, - gpointer user_data) + GstElement *decodebin, + GstPad *pad, + gpointer user_data) { - mv_video_reader_s *reader = (mv_video_reader_s *) user_data; - GstStructure *str = NULL; - GstCaps *caps = NULL; - GstPad *video_pad = NULL; - - LOGI("Received pad from decodebin. Linking"); - video_pad = gst_element_get_static_pad(reader->videoconvert, "sink"); - if (GST_PAD_IS_LINKED(video_pad)) - { - LOGI("Already linked"); - g_object_unref(video_pad); - return; - } - - /* Check for pad is video */ - reader->caps = gst_pad_query_caps(pad, NULL); - str = gst_caps_get_structure(reader->caps, 0); - if (!g_strrstr(gst_structure_get_name(str), "video")) - { - LOGI("Not a video pad"); - gst_object_unref(video_pad); - return; - } - - gst_pad_link(pad, video_pad); - g_object_unref(video_pad); + mv_video_reader_s *reader = (mv_video_reader_s *) user_data; + GstStructure *str = NULL; + GstCaps *caps = NULL; + GstPad *video_pad = NULL; + + LOGI("Received pad from decodebin. Linking"); + video_pad = gst_element_get_static_pad(reader->videoconvert, "sink"); + if (GST_PAD_IS_LINKED(video_pad)) { + LOGI("Already linked"); + g_object_unref(video_pad); + return; + } + + /* Check for pad is video */ + reader->caps = gst_pad_query_caps(pad, NULL); + str = gst_caps_get_structure(reader->caps, 0); + if (!g_strrstr(gst_structure_get_name(str), "video")) { + LOGI("Not a video pad"); + gst_object_unref(video_pad); + return; + } + + gst_pad_link(pad, video_pad); + g_object_unref(video_pad); } diff --git a/test/testsuites/face/face_test_suite.c b/test/testsuites/face/face_test_suite.c index 6afbf5a..eb6665f 100644 --- a/test/testsuites/face/face_test_suite.c +++ b/test/testsuites/face/face_test_suite.c @@ -1068,9 +1068,8 @@ int perform_recognize() print_action_result(names[sel_opt - 1], err, notification_type); - if (sel_opt != 11) { + if (sel_opt != 11) sel_opt = 0; - } } return err; @@ -1821,9 +1820,8 @@ int perform_track() print_action_result(names[sel_opt - 1], err, notification_type); - if (sel_opt != 6) { + if (sel_opt != 6) sel_opt = 0; - } } return err; diff --git a/test/testsuites/surveillance/surveillance_test_suite.c b/test/testsuites/surveillance/surveillance_test_suite.c index 6057121..b89301a 100644 --- a/test/testsuites/surveillance/surveillance_test_suite.c +++ b/test/testsuites/surveillance/surveillance_test_suite.c @@ -137,7 +137,7 @@ int main(void) "Exit" }; - while(1) { + while (1) { char exit = 'n'; int sel_opt = show_menu("Select action:", options, names, 8); switch (sel_opt) { @@ -367,7 +367,7 @@ void subscribe_to_event() video_stream_id, NULL, detect_person_appeared_cb, - NULL); + NULL); } else if (strncmp(event_type, MV_SURVEILLANCE_EVENT_TYPE_PERSON_RECOGNIZED, MAX_EVENT_TYPE_LEN) == 0) { @@ -546,7 +546,7 @@ void unsubscribe_from_all_events() } unsubscribed_number > 0 ? - PRINT_S("%d event(s) was successfully unsubscribed", unsubscribed_number): + PRINT_S("%d event(s) was successfully unsubscribed", unsubscribed_number) : PRINT_Y("\nThere are no triggers can be unsubscribed."); } @@ -628,7 +628,7 @@ void turn_on_off_saving_to_image() save_results_to_image = !save_results_to_image; save_results_to_image ? - PRINT_Y("Save event results to image files ON."): + PRINT_Y("Save event results to image files ON.") : PRINT_Y("Save event results to image files OFF."); } @@ -656,8 +656,7 @@ void detect_person_appeared_cb( mv_source_get_height(source, &(image_data.image_height)) || mv_source_get_colorspace(source, &(image_data.image_colorspace)) || out_buffer == NULL || - buf_size == 0)) - { + buf_size == 0)) { PRINT_R("ERROR: Creating out image is impossible."); return; @@ -978,8 +977,7 @@ void person_recognized_cb( mv_source_get_height(source, &(image_data.image_height)) || mv_source_get_colorspace(source, &(image_data.image_colorspace)) || out_buffer == NULL || - buf_size == 0)) - { + buf_size == 0)) { PRINT_R("ERROR: Creating out image is impossible."); return; @@ -1087,8 +1085,7 @@ void movement_detected_cb( mv_source_get_height(source, &(image_data.image_height)) || mv_source_get_colorspace(source, &(image_data.image_colorspace)) || out_buffer == NULL || - buf_size == 0)) - { + buf_size == 0)) { PRINT_R("ERROR: Creating out image is impossible."); if (movement_regions != NULL) -- 2.7.4