y4mtoyuv.c

来自「Motion JPEG编解码器源代码」· C语言 代码 · 共 93 行

C
93
字号
/* * $Id: y4mtoyuv.c,v 1.8 2004/04/05 19:56:50 sms00 Exp $ * * Simple program to convert the YUV4MPEG2 format used by the  * mjpeg.sourceforge.net suite of programs into pure EYUV format used * by the mpeg4ip project and other programs.  * * 2001/10/19 - Rewritten to use the y4m_* routines from mjpegtools. * 2004/1/1 - Added XYSCSS tag handling to deal with 411, 422, 444 data  * 2004/4/5 - Rewritten to use the new YUV4MPEG2 API.*/#ifdef	HAVE_CONFIG_H#include "config.h"#else#define	HAVE_STDINT_H#endif#include <stdio.h>#include <sys/types.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include "yuv4mpeg.h"#include "mjpeg_logging.h"static	void	usage(void);int main(int argc, char **argv)	{	int	c, err;	int	fd_in = fileno(stdin), fd_out = fileno(stdout);	u_char	*yuv[3];	int	plane_length[3];	y4m_stream_info_t istream;	y4m_frame_info_t iframe;	opterr = 0;	while	((c = getopt(argc, argv, "h")) != EOF)		{		switch	(c)			{			case	'h':			case	'?':			default:				usage();			}		}	y4m_accept_extensions(1);	y4m_init_stream_info(&istream);	y4m_init_frame_info(&iframe);	err = y4m_read_stream_header(fd_in, &istream);	if	(err != Y4M_OK)		mjpeg_error_exit1("Input stream error: %s\n", y4m_strerr(err));	if	(y4m_si_get_plane_count(&istream) != 3)		mjpeg_error_exit1("only 3 plane formats supported");	plane_length[0] = y4m_si_get_plane_length(&istream, 0);	plane_length[1] = y4m_si_get_plane_length(&istream, 1);	plane_length[2] = y4m_si_get_plane_length(&istream, 2);	yuv[0] = malloc(plane_length[0]);	yuv[1] = malloc(plane_length[1]);	yuv[2] = malloc(plane_length[2]);	y4m_log_stream_info(LOG_INFO, "", &istream);	while	(y4m_read_frame(fd_in, &istream, &iframe, yuv) == Y4M_OK)		{		if	(y4m_write(fd_out, yuv[0], plane_length[0]) != Y4M_OK)			break;		if	(y4m_write(fd_out, yuv[1], plane_length[1]) != Y4M_OK)			break;		if	(y4m_write(fd_out, yuv[2], plane_length[2]) != Y4M_OK)			break;		}	y4m_fini_frame_info(&iframe);	y4m_fini_stream_info(&istream);	exit(0);	}static void usage()	{	mjpeg_error_exit1("<file.y4m > file.yuv");	/* NOTREACHED */	}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?