Languages

Menu
Sites
Language
When using barcode detect function to scan camera preview stream , "Key not available "  allows returned

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
}

 

Responses

4 Replies
jian chen

the related log :

01-11 10:41:45.965 : ERROR / TIZEN_MEDIA_VISION ( 5829 : 5910 ) : EngineConfig.cpp: getIntegerAttribute(146) > Attempt to access to the unsupported integer attribute [MV_BARCODE_DETECT_ATTR_TARGET] of the engine config 0x2a576b6001-11 10:41:45.965 : ERROR / TIZEN_MEDIA_VISION ( 5829 : 5910 ) : mv_common_c.cpp: mv_engine_config_get_int_attribute_c(564) > Failed to get attribute [MV_BARCODE_DETECT_ATTR_TARGET]. Error code (0xffffff82)01-11 10:41:45.965 : ERROR / QrCode ( 5829 : 5910 ) : mv_barcode_detect::error code = -126 ​

jian chen

Why the interger attribute is unsupported ,  the official document says  :

For example, to define the detection target, use the mv_engine_config_set_int_attribute() function with the MV_BARCODE_DETECT_ATTR_TARGET attribute. The possible values are defined in the mv_barcode_detect_attr_target_e enumeration. The default value is MV_BARCODE_DETECT_ATTR_TARGET_ALL.

   when I not use the function  or  use the code

mv_engine_config_set_int_attribute(bardetdata.g_engine_cfg, MV_BARCODE_DETECT_ATTR_TARGET,
      MV_BARCODE_DETECT_ATTR_TARGET_2D_BARCODE);

  I will get the same log error :  the interger attribute is unsupported

 

K Johnson

Hi,

First of all according to my findings till now, there're few things on Tizen Developer Guide which are written as supported in the documentations though they don't work.

Please share the implementations you included in "QrcodeScan.h" and the full source code of the overall implementation if possible.

 

Regards.

jian chen

#ifndef QRCODE_QRCODESCAN_H_
#define QRCODE_QRCODESCAN_H_

#include <mv_barcode.h>
#include <camera.h>


#define QRSCAN_VIEW_EDJ "/edje/Qrcode/QrScan.edj"

typedef struct _bardetdata_s
{
    /* Camera display variables */
 Evas_Object *win;
 Evas *evas;
 int width;
 int height;

 /* Media source handle */
 mv_source_h g_source;
 mv_engine_config_h g_engine_cfg;

 /* Camera handle */
 camera_h g_camera;
}bardetdata_s;

typedef struct _qrscan_view_data
{
 Evas_Object *layout;
 Evas_Object *camera_ret;
}qrscan_view_data;

void CreateQrcodeScanPage();

#endif /* QRCODE_QRCODESCAN_H_ */

above is the .h file content