c yuv422转yuv420p
2024-01-09 21:40:20
    		思路:
yuv422 存储格式为 y? ?u? ?y? ? v? ?y? u? ?y? ?v?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? y? u? ? y? ? v? ?y? ?u? ?y? ?v
yuv420p? 存储最简单,先存所以的y,再存u,最后v
所以先把422所有的y存在一起,再提奇数行的u? ,偶数行舍弃。提完u后,再提v,v也是偶数行不提取。
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <linux/videodev2.h> 
#include <string.h>
#include <sys/mman.h>
#include <linux/fb.h>
#include <math.h>
#define PI 3.1415926
#define  pic_width   640
#define  pic_heigth  480
#define filename  "/home/wjs/Pictures/my.yuv"
#define file_out  "/home/wjs/Pictures/"           //输出文件目录
int  main(void) {
	FILE *f=fopen(filename,"rb");
	unsigned char i[2*pic_heigth*pic_width]={};
	fread(i,2*pic_heigth*pic_width,1,f);
	
	unsigned char out[pic_heigth*pic_width*3/2]={};
	int t=0;
    for(int a=0;a<2*pic_heigth*pic_width;a=a+2){
		out[t]=i[a];
		t++;
	}
	for(int a=0;a<pic_heigth;a=a+2){
		for(int b=0;b<2*pic_width;b=b+4){
			out[t]=i[a*(2*pic_width)+1+b];
			t++;
		}
	}
	for(int a=0;a<pic_heigth;a=a+2){
		for(int b=0;b<2*pic_width;b=b+4){
			out[t]=i[a*(2*pic_width)+3+b];
			t++;
		}
	}
	chdir(file_out);
	FILE *o=fopen("640480.yuv","w+b");
	fwrite(out,pic_heigth*pic_width*3/2,1,o);
	fclose(o);
	
	return 0;
}?
?
    			文章来源:https://blog.csdn.net/m0_59802969/article/details/135428388
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
    	本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!