#include "EXTERN.h" #include "perl.h" #include "XSUB.h" #define NEED_newRV_noinc #define NEED_sv_2pv_nolen #include "ppport.h" #include "highgui.h" #include "decodeqr.h" MODULE = Image::DecodeQR PACKAGE = Image::DecodeQR PROTOTYPES: ENABLE SV * decode(filename) char *filename; PREINIT: IplImage *image; QrDecoderHandle decoder; QrCodeHeader header; char *buf; CODE: image = cvLoadImage(filename, 1); if (!image) croak("Can't load the file"); decoder = qr_decoder_open(); (void) qr_decoder_decode_image(decoder, image, DEFAULT_ADAPTIVE_TH_SIZE, DEFAULT_ADAPTIVE_TH_DELTA); if (qr_decoder_get_header(decoder, &header)) { buf = (char *) malloc(header.byte_size + 1); qr_decoder_get_body(decoder, buf, header.byte_size + 1); buf[header.byte_size] = '\0'; RETVAL = newSVpv(buf ,0); free(buf); } else { RETVAL = &PL_sv_undef; } qr_decoder_close(decoder); cvReleaseImage(&image); OUTPUT: RETVAL