forked from quinncy/yuv420p_jpg_linux_C
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest.c
115 lines (106 loc) · 1.95 KB
/
test.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <malloc.h>
#include <errno.h>
#include "yuv2jpg.h"
int get_Y_U_V(unsigned char*rData,unsigned char* in_Y,unsigned char* in_U,unsigned char* in_V,int nStride,int height)
{
int i = 0;
int y_n =0;
int u_n =0;
int v_n =0;
int u = 0;
int v = 2;
long size = nStride*height*3/2;
//yuv422格式读取
#if 0
while(i<size){
if(i%2 != 0){
in_Y[y_n]= rData[i];
y_n++;
}
else if(i == u){
in_U[u_n]= rData[i];
u += 4;
u_n++;
}
else if(i == v){
in_V[v_n] = rData[i];
v += 4;
v_n++;
}
i++;
}
#endif
//使用yuv420格式读取yu不连续放置
#if 1
while(i < 1280*720)
{
in_Y[y_n] = rData[i];
i++;
y_n++;
}
while(i < 1280*720*5/4)
{
in_U[u_n] = rData[i];
i++;
u_n++;
}
while(i < 1280*720*3/2)
{
in_V[v_n] = rData[i];
i++;
v_n++;
}
#endif
//使用yuv420格式读取yu连续放置
#if 0
while(i < 1280*720)
{
in_Y[y_n] = rData[i];
i++;
y_n++;
}
while(i < 1280*720*3/2)
{
if(i % 2 == 0) //u格式数据
{
in_U[u_n] = rData[i];
u_n++;
}
else
{
in_V[v_n] = rData[i];
v_n++;
}
i++;
}
#endif
return 0;
}
int main()
{
unsigned char* in_Y = (unsigned char*)malloc(1280*720);//
unsigned char* in_U = (unsigned char*)malloc(1280* 720/4);//
unsigned char* in_V = (unsigned char*)malloc(1280* 720 / 4);//
unsigned char* pData = (unsigned char*)malloc(1280 * 720);//
unsigned char* rData = (unsigned char*)malloc(1280*720*3/2);
unsigned long dwSize = 0;
FILE *rfp = fopen("./00001.yuv","rb");
//FILE *rfp = fopen("/home/zhangqi/00001.yuv","rb");
if(NULL == rfp)
fprintf(stderr,"fopen fp error:%s\n",strerror(errno));
fread(rData,1280*720*3/2,1,rfp);
get_Y_U_V(rData,in_Y,in_U,in_V,1280,720);
free(rData);
YUV2Jpg(in_Y,in_U,in_V,1280,720,100,1280,pData,&dwSize);
FILE *fp = fopen("2.jpg","wb");
fwrite(pData,dwSize,1,fp);
fclose(fp);
free(in_Y);
free(in_U);
free(in_V);
free(pData);
return 0;
}