C语言通过libjpeg-turbo将NV12转为jpeg
前言
OpenHarmony5.0.0的环境中需要将底层生成的NV12格式照片转化为jpeg并保存。
搜了一下相关的文章,发现没有合适的源码可以拿来用,于是尝试了“文心一言”竟然是可以的。稍作调试即可使用。
直接贴源码
main.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "camera_operate.h"
int main(int argc, char* argv[])
{
char id[8];
memset(id, 0, sizeof(id));
strcpy(id, "0");
char path[128];
memset(path, 0, sizeof(path));
int ret = 0;
ret = initCamera(id);
if(0 != ret)
{
printf("initCamera failed\n");
}
ret = takePicture(path);
if(0 != ret)
{
printf("takePicture failed\n");
}
ret = releaseCamera(id);
if(0 != ret)
{
printf("releaseCamera failed\n");
}
return 0;
}
camera_operate.h
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// /dev/cam_sensor0 /dev/cam_sensor2
/* input:
"0": /system/profile/k1-x_MUSE-Paper_sensor0_gc08a8.json k1 camera in front
"1": /system/profile/k1-x_MUSE-Paper_sensor2_gc13a0.json k1 camera in back
"2": /system/profile/k1-x_MUSE-Paper-mini-4g_sensor0_gc2375h.json mini camera in front
"3": /system/profile/k1-x_MUSE-Paper-mini-4g_sensor2_gc5035.json mini camera in back*/
int initCamera(char* id);
/*output: photo path*/
int takePicture(char* photoPath);
/* input: same as initCamera*/
int releaseCamera(char* id);
camera_operate.c
以下部分extern和变量是没有用到的。主要接口为nv12_to_rgb()
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <time.h>
#include <sys/time.h>
#include <unistd.h>
#include <sys/stat.h>
#include <turbojpeg.h>
#include <jpeglib.h>
#include "camera_operate.h"
// 宏定义用于裁剪值的函数
#define CLAMP(x, low, high) ((x) > (high) ? (high) : ((x