C语言通过libjpeg-turbo将NV12转为jpeg

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