我现在是想把jpeg图片读到缓冲区,然后通过硬件解码,解码后放到另外一个缓冲区,代码如下,麻烦帮我分析下,不知道问题出在哪里?多谢了
#define LOG_TAG "hwjpeg_test"
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <ctype.h>
#include <unistd.h>
#include <sys/mman.h>
#include <string.h>
#include <errno.h>
#include <signal.h>
#include <math.h>
#include <sys/poll.h>
#include <cutils/log.h>
#include "jpeg_hal.h"
#ifndef LOGD
#define LOGE ALOGE
#define LOGI ALOGI
#define LOGV ALOGV
#define LOGD ALOGD
#define LOGW ALOGW
#endif
int main(int argc, char **argv)
{
int fd;
FILE *fp;
int ret;
struct jpeg_buf buf;
struct jpeg_buf dec_buf;
char *InBuf;
long fileSize;
fd = jpeghal_dec_init();
if (fd < 0)
{
LOGE("[%s]: JPEG dec open failed", __func__);
return -1;
}
buf.memory = V4L2_MEMORY_MMAP;
ret = jpeghal_set_outbuf(fd, &buf);
if (ret < 0)
{
close(fd);
LOGE("[%s:%d]: Set Output failed", __func__, ret);
return -1;
}
dec_buf.memory = V4L2_MEMORY_MMAP;
ret = jpeghal_set_inbuf(fd, &dec_buf);
if (ret < 0)
{
close(fd);
LOGE("[%s:%d]: Set Input failed", __func__, ret);
return -1;
}
fp = fopen(argv[1], "rb");
if(fp == NULL){
jpeghal_deinit(fd, &dec_buf, &buf);
return -1;
}
fseek(fp, 0, SEEK_END);
fileSize = ftell(fp);
fseek(fp, 0, SEEK_SET);
//InBuf = (char *)malloc(fileSize);
//memset(InBuf, 0, fileSize);
LOGI("fileSize:%ld\n", fileSize);
fread(buf.start[0], 1, fileSize, fp);
ret = jpeghal_dec_exe(fd, &dec_buf, &buf);
LOGI("[%s:%d]", __func__, ret);
fclose(fp);
close(fd);
return 0;
}