Hi ,I'm using barcode detection to scan camera preview stream,but allways get errorcode: -126(Key not available ).
My code is follow:
#include "../../inc/Qrcode/QrcodeScan.h" static bardetdata_s bardetdata; qrscan_view_data *qr_scan_vm; static void _on_layout_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _destroty_camera() { dlog_print(DLOG_DEBUG,"QrCode","%s",__func__); int error_code = 0; error_code = camera_unset_media_packet_preview_cb(bardetdata.g_camera); if(error_code != CAMERA_ERROR_NONE) dlog_print(DLOG_ERROR, "QrCode", "camera_unset_media_packet_preview_cb ::error code = %d", error_code); error_code = camera_stop_preview(bardetdata.g_camera); if(error_code != CAMERA_ERROR_NONE) dlog_print(DLOG_ERROR, "QrCode", "camera_stop_preview ::error code = %d", error_code); error_code = camera_destroy(bardetdata.g_camera); if(error_code != CAMERA_ERROR_NONE) dlog_print(DLOG_ERROR, "QrCode", "camera_destroy::error code = %d", error_code); error_code = mv_destroy_engine_config(bardetdata.g_engine_cfg); if(error_code != MEDIA_VISION_ERROR_NONE) dlog_print(DLOG_ERROR, "QrCode", "mv_destroy_engine_config::error code = %d", error_code); error_code = mv_destroy_source(bardetdata.g_source); if(error_code != MEDIA_VISION_ERROR_NONE) dlog_print(DLOG_ERROR, "QrCode", "mv_destroy_source::error code = %d", error_code); } static void _barcode_detected_cb(mv_source_h source, mv_engine_config_h engine_cfg, const mv_quadrangle_s *barcode_locations, const char *message[], const mv_barcode_type_e *types, int number_of_barcodes, void *user_data) { dlog_print(DLOG_DEBUG,"QrCode","%s",__func__); int i = 0; char type[50] = { '\0' }; /* Clear the source for the next preview image */ mv_source_clear(source); if(number_of_barcodes > 0) { for(i = 0; i < number_of_barcodes; i++) dlog_print(DLOG_INFO, "QrCode", "%d >> message: %s\n", i, message[i]); } } static void _camera_media_packet_preview_cb(media_packet_h pkt, void *user_data) { mv_rectangle_s mv_roi = { { 0, 0 }, bardetdata.width, bardetdata.height }; if(pkt == NULL) return; int error_code = 0; error_code = mv_source_fill_by_media_packet(bardetdata.g_source, pkt); if(error_code!=0) dlog_print(DLOG_ERROR, "QrCode", "mv_source_fill_by_media_packet::error code = %d", error_code); if(pkt) { error_code = media_packet_destroy(pkt); pkt = NULL; } error_code = mv_barcode_detect(bardetdata.g_source, bardetdata.g_engine_cfg, mv_roi, _barcode_detected_cb, NULL); dlog_print(DLOG_DEBUG,"QrCode","MEDIA_VISION_ERROR_INVALID_PARAMETER:%d,MEDIA_VISION_ERROR_NOT_SUPPORTED:%d,MEDIA_VISION_ERROR_NOT_SUPPORTED_FORMAT:%d,MEDIA_VISION_ERROR_INTERNAL:%d",MEDIA_VISION_ERROR_INVALID_PARAMETER,MEDIA_VISION_ERROR_NOT_SUPPORTED,MEDIA_VISION_ERROR_NOT_SUPPORTED_FORMAT,MEDIA_VISION_ERROR_INTERNAL); if(error_code != MEDIA_VISION_ERROR_NONE) dlog_print(DLOG_ERROR, "QrCode", "mv_barcode_detect::error code = %d", error_code); } void _start_preview() { int error_code = 0; //qrcode about error_code = mv_create_source(&bardetdata.g_source); if(error_code != MEDIA_VISION_ERROR_NONE) dlog_print(DLOG_ERROR, "QrCode", "mv_create_source::error code = %d", error_code); error_code = mv_create_engine_config(&bardetdata.g_engine_cfg); if(error_code != MEDIA_VISION_ERROR_NONE) dlog_print(DLOG_ERROR, "QrCode", "mv_create_engine_config::error code = %d", error_code); /* Create the camera handle */ error_code = camera_create(CAMERA_DEVICE_CAMERA0, &bardetdata.g_camera); if(error_code != CAMERA_ERROR_NONE) dlog_print(DLOG_ERROR, "QrCode", "camera_create::error code = %d", error_code); /*Check the camera state */ camera_state_e state; error_code = camera_get_state(bardetdata.g_camera, &state); if(state != CAMERA_STATE_CREATED) dlog_print(DLOG_ERROR, "QrCode", "camera state: %d", state); /*set image quality*/ error_code = camera_attr_set_image_quality(bardetdata.g_camera, 100); if(error_code != CAMERA_ERROR_NONE) dlog_print(DLOG_ERROR, "QrCode", "camera_attr_set_image_quality::error code = %d", error_code); /* Set the camera display */ error_code = camera_set_display(bardetdata.g_camera, CAMERA_DISPLAY_TYPE_EVAS, GET_DISPLAY(qr_scan_vm->camera_ret)); if(error_code != CAMERA_ERROR_NONE) dlog_print(DLOG_ERROR, "QrCode", "camera_set_display::error code = %d", error_code); /* Get the camera preview resolution */ error_code = camera_get_preview_resolution(bardetdata.g_camera, &bardetdata.width, &bardetdata.height); if(error_code != CAMERA_ERROR_NONE) dlog_print(DLOG_ERROR, "QrCode", "camera_get_preview_resolution::error code %d", error_code); /* Set the camera preview callback */ error_code = camera_set_media_packet_preview_cb(bardetdata.g_camera, _camera_media_packet_preview_cb, NULL); if(error_code != CAMERA_ERROR_NONE) dlog_print(DLOG_ERROR, "QrCode", "camera_set_media_packet_preview_cb::error code = %d", error_code); /* Start the camera preview */ error_code = camera_start_preview(bardetdata.g_camera); dlog_print(DLOG_DEBUG, "Qrcode", "CAMERA_ERROR_INVALID_STATE:%d,CAMERA_ERROR_SOUND_POLICY:%d,CAMERA_ERROR_INVALID_OPERATION:%d,CAMERA_ERROR_DEVICE_BUSY:%d,CAMERA_ERROR_DEVICE_NOT_FOUND:%d,CAMERA_ERROR_PERMISSION_DENIED:%d,CAMERA_ERROR_NOT_SUPPORTED:%d",CAMERA_ERROR_SOUND_POLICY,CAMERA_ERROR_INVALID_STATE,CAMERA_ERROR_INVALID_OPERATION,CAMERA_ERROR_DEVICE_BUSY,CAMERA_ERROR_DEVICE_NOT_FOUND,CAMERA_ERROR_PERMISSION_DENIED,CAMERA_ERROR_NOT_SUPPORTED); if(error_code != CAMERA_ERROR_NONE) dlog_print(DLOG_ERROR, "QrCode", "camera_start_preview::error code = %d", error_code); } void CreateQrcodeScanPage() { dlog_print(DLOG_DEBUG, "QrCode", "%s", __func__); qr_scan_vm = (qrscan_view_data*) calloc(1, sizeof(qrscan_view_data)); if(qr_scan_vm == NULL) return; /*layout */ char edj_file_path[PATH_MAX] = { 0, }; app_get_resource(QRSCAN_VIEW_EDJ, edj_file_path, PATH_MAX); Evas_Object *layout = elm_layout_add(appData->navframe); elm_layout_file_set(layout, edj_file_path, "main"); evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_show(layout); qr_scan_vm->layout = layout; //camera preview Evas *evas = evas_object_evas_get(appData->navframe); Evas_Object *camera_rect = evas_object_image_filled_add(evas); evas_object_show(camera_rect); elm_object_part_content_set(layout, "camera", camera_rect); qr_scan_vm->camera_ret = camera_rect; //set naviframe elm_naviframe_item_push(appData->navframe, "QrScan", NULL, NULL, layout, NULL); //set callback evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, _on_layout_del_cb, NULL); _start_preview(); } static void _on_layout_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) { //destroy camera source _destroty_camera(); //to do: free view data }