⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 video_test.cpp

📁 嵌入式linux系统的网络编程(C++) 在ARM上实现视频会议 此程序获得全国研究生电子大赛一等奖 压缩包内为全部源码
💻 CPP
字号:
///////////////////////////////////////////////////////// FileName:	video_test.cpp// Author:		b1gm0use// Project:		myvideo#include <iostream>#include <getopt.h>#include <sys/ioctl.h>#include <linux/videodev.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <fstream>using namespace std;///////////////////////////////////////////////////////// Functions Declaration///////////////////////////////////////////////////////int test_capability ( ostream & out, int dev, video_capability & vid_cap );int test_frame_buffer ( ostream & out, int dev, video_buffer & vid_buf );int test_window ( ostream & out, int dev, video_window & vid_win );int test_channel ( ostream & out, int dev, video_channel & vid_chan, int channels );int test_image_properties ( ostream & out, int dev, video_picture & vid_pic );int test_tuner ( ostream & out, int dev, video_tuner & vid_tun, int tuners );int test_audio ( ostream & out, int dev, video_audio & vid_audio );///////////////////////////////////////////////////////// Public Functions///////////////////////////////////////////////////////// 构造函数// 也是测试开始void video_test ( const char * device, const char * filename ) // {{{{	int dev;	ostream * out = &cout;		video_capability vid_cap;	video_buffer vid_buf;	video_window vid_win;	video_channel vid_chan;	video_picture vid_pic;	cout << "Begin video device testing..." << endl << endl;	////////////////////////	// open device		if ( ( dev = open( device, O_RDWR ) ) == -1 )	{		cerr << "Can't open device:\t" << device << endl;		exit(1);	}	////////////////////////	// open file		if ( filename != NULL )	{		out = new ofstream( filename );		if ( out == NULL )		{			cerr << "Can't open output file:\t" << filename << endl;			exit( 1 );		}	}	test_capability ( *out, dev, vid_cap );	test_frame_buffer ( *out, dev, vid_buf );	test_window ( *out, dev, vid_win );	test_channel ( *out, dev, vid_chan, vid_cap.channels );	test_image_properties ( *out, dev, vid_pic );	return;}  // }}}int test_capability ( ostream & out, int dev, video_capability & vid_cap ) // {{{{	////////////////////////	// Capability Query	if ( ioctl( dev, VIDIOCGCAP, &vid_cap ) == -1 )	{		cerr << "ioctl( VIDIOCGCAP ) error!" << endl;		return -1;	}	// Capability report 		out << "There is the report of Capability Query Below." << endl;	out << "=====================================================" << endl;	out << "name:\t\t" << vid_cap.name << endl;	out << "type:\t\t" << vid_cap.type << endl;	out << "channels:\t" << vid_cap.channels << endl;	out << "audios:\t\t" << vid_cap.audios << endl;	out << "maxwidth:\t" << vid_cap.maxwidth << endl;	out << "maxheight:\t" << vid_cap.maxheight << endl;	out << "minwidth:\t" << vid_cap.minwidth << endl;	out << "minheight:\t" << vid_cap.minheight << endl;	out << endl << endl;	out << "type field:" << endl;	out << "---------------" << endl;	if ( ( vid_cap.type & VID_TYPE_CAPTURE ) != 0 ) out << "VID_TYPE_CAPTURE" << endl;	if ( ( vid_cap.type & VID_TYPE_TUNER ) != 0 ) out << "VID_TYPE_TUNER" << endl;	if ( ( vid_cap.type & VID_TYPE_TELETEXT ) != 0 ) out << "VID_TYPE_TELETEXT" << endl;	if ( ( vid_cap.type & VID_TYPE_OVERLAY ) != 0 ) out << "VID_TYPE_OVERLAY" << endl;	if ( ( vid_cap.type & VID_TYPE_CHROMAKEY ) != 0 ) out << "VID_TYPE_CHROMAKEY" << endl;	if ( ( vid_cap.type & VID_TYPE_CLIPPING ) != 0 ) out << "VID_TYPE_CLIPPING" << endl;	if ( ( vid_cap.type & VID_TYPE_FRAMERAM ) != 0 ) out << "VID_TYPE_FRAMERAM" << endl;	if ( ( vid_cap.type & VID_TYPE_SCALES ) != 0 ) out << "VID_TYPE_SCALES" << endl;	if ( ( vid_cap.type & VID_TYPE_MONOCHROME ) != 0 ) out << "VID_TYPE_MONOCHROME" << endl;	if ( ( vid_cap.type & VID_TYPE_SUBCAPTURE ) != 0 ) out << "VID_TYPE_SUBCAPTURE" << endl;	if ( ( vid_cap.type & VID_TYPE_MPEG_DECODER ) != 0 ) out << "VID_TYPE_MPEG_DECODER" << endl;	if ( ( vid_cap.type & VID_TYPE_MPEG_ENCODER ) != 0 ) out << "VID_TYPE_MPEG_ENCODER" << endl;	if ( ( vid_cap.type & VID_TYPE_MJPEG_DECODER ) != 0 ) out << "VID_TYPE_MJPEG_DECODER" << endl;	if ( ( vid_cap.type & VID_TYPE_MJPEG_ENCODER ) != 0 ) out << "VID_TYPE_MJPEG_ENCODER" << endl;	out << endl << endl;	return 0;} // }}}int test_frame_buffer ( ostream & out, int dev, video_buffer & vid_buf ) // {{{{		////////////////////////	// Frame Buffer Test		if ( ioctl( dev, VIDIOCGFBUF, &vid_buf ) == -1 )	{		cerr << "ioctl( VIDIOCGFBUF ) error!" << endl;		return -1;	}	// Frame Buffer Test report 		out << "There is the report of Frame Buffer Test Below." << endl;	out << "=====================================================" << endl;	out << "base:\t" << hex << vid_buf.base << endl;	out << "height:\t" << dec << vid_buf.height<< endl;	out << "width:\t" << vid_buf.width << endl;	out << "depth:\t" << vid_buf.depth << endl;	out << "bytesperline:\t" << vid_buf.bytesperline << endl;	out << endl << endl;	return 0;} // }}}int test_window ( ostream & out, int dev, video_window & vid_win ) // {{{{	////////////////////////	// Capture Windows Test		if ( ioctl( dev, VIDIOCGWIN, &vid_win ) == -1 )	{		cerr << "ioctl( VIDIOCGWIN ) error!" << endl;		return -1;	}	// Capture Windows Test report 		out << "There is the report of Capture Windows Test Below." << endl;	out << "=====================================================" << endl;	out << "x:\t" << vid_win.x<< endl;	out << "y:\t" << vid_win.y << endl;	out << "width:\t" << vid_win.width<< endl;	out << "height:\t" << vid_win.height << endl;	out << "chromakey:\t" << vid_win.chromakey << endl;	out << "flags:\t" << vid_win.flags << endl;	out << "clipcount:\t" << vid_win.clipcount << endl;	out << endl << endl;	return 0;} // }}}int test_channel ( ostream & out, int dev, video_channel & vid_chan, int channels ) // {{{{		video_tuner vid_tun;	video_audio vid_audio;	////////////////////////	// Video Channel Test		for ( int i = 0; i < channels; i++ )	{					vid_chan.channel = i;		if ( ioctl( dev, VIDIOCGCHAN, &vid_chan ) == -1 )		{			cerr << "ioctl( VIDIOCGCHAN ) error!" << endl;			return -1;		}		out << "There is the report of Video Channel[" << i << "] Test Below." << endl;		out << "=====================================================" << endl;		out << "channel:\t" << vid_chan.channel << endl;		out << "name:\t" << vid_chan.name << endl;		out << "tuners:\t" << vid_chan.tuners << endl;		out << "flags:\t" << vid_chan.flags << endl;		out << "type:\t" << vid_chan.type << endl;		out << "norm:\t" << vid_chan.norm << endl;		out << endl << endl;		out << "flags field:" << endl;		out << "---------------" << endl;		if ( ( vid_chan.flags & VIDEO_VC_TUNER ) != 0 ) out << "VIDEO_VC_TUNER" << endl;		if ( ( vid_chan.flags & VIDEO_VC_AUDIO ) != 0 ) out << "VIDEO_VC_AUDIO" << endl;		out << endl << endl;		out << "type field:" << endl;		out << "---------------" << endl;		if ( ( vid_chan.type & VIDEO_TYPE_TV ) != 0 ) out << "VIDEO_TYPE_TV" << endl;		if ( ( vid_chan.type & VIDEO_TYPE_CAMERA ) != 0 ) out << "VIDEO_TYPE_CAMERA" << endl;		out << endl << endl;		if ( vid_chan.tuners > 0 )		{			out << "Channel Sub Test" << endl;			out << "----------------------------------" << endl;			test_tuner ( out, dev, vid_tun, vid_chan.tuners );		}		if ( ( vid_chan.flags & VIDEO_VC_AUDIO ) != 0 )		{			out << "Channel Sub Test" << endl;			out << "----------------------------------" << endl;			test_audio ( out, dev, vid_audio );		}	}	return 0;} // }}}int test_image_properties ( ostream & out, int dev, video_picture & vid_pic ) // {{{{		////////////////////////	// Image Properties Test		if ( ioctl( dev, VIDIOCGPICT, &vid_pic ) == -1 )	{		cerr << "ioctl( VIDIOCGPICT ) error!" << endl;		return -1;	}	// Image Properties Test report 		out << "There is the report of Image Properties Test Below." << endl;	out << "=====================================================" << endl;	out << "brightness:\t" << vid_pic.brightness << endl;	out << "hue:\t" << vid_pic.hue << endl;	out << "colour:\t" << vid_pic.colour << endl;	out << "contrast:\t" << vid_pic.contrast << endl;	out << "whiteness:\t" << vid_pic.whiteness << endl;	out << "depth:\t" << vid_pic.depth << endl;	out << "palette:\t" << vid_pic.palette << endl;	out << endl << endl;	out << "palette field:" << endl;	out << "---------------" << endl;	switch ( vid_pic.palette )	{		case VIDEO_PALETTE_GREY: out << "VIDEO_PALETTE_GREY" << endl; break;		case VIDEO_PALETTE_HI240: out << "VIDEO_PALETTE_HI240" << endl; break;		case VIDEO_PALETTE_RGB565: out << "VIDEO_PALETTE_RGB565" << endl; break;		case VIDEO_PALETTE_RGB24: out << "VIDEO_PALETTE_RGB24" << endl; break;		case VIDEO_PALETTE_RGB32: out << "VIDEO_PALETTE_RGB32" << endl; break;		case VIDEO_PALETTE_RGB555: out << "VIDEO_PALETTE_RGB555" << endl; break;		case VIDEO_PALETTE_YUV422: out << "VIDEO_PALETTE_YUV422 or VIDEO_PALETTE_COMPONENT" << endl; break;		case VIDEO_PALETTE_YUYV: out << "VIDEO_PALETTE_YUYV" << endl; break;		case VIDEO_PALETTE_UYVY: out << "VIDEO_PALETTE_UYVY" << endl; break;		case VIDEO_PALETTE_YUV420: out << "VIDEO_PALETTE_YUV420" << endl; break;		case VIDEO_PALETTE_YUV411: out << "VIDEO_PALETTE_YUV411" << endl; break;		case VIDEO_PALETTE_RAW: out << "VIDEO_PALETTE_RAW" << endl; break;		case VIDEO_PALETTE_YUV422P: out << "VIDEO_PALETTE_YUV422P or VIDEO_PALETTE_PLANAR" << endl; break;		case VIDEO_PALETTE_YUV411P: out << "VIDEO_PALETTE_YUV411P" << endl; break;		case VIDEO_PALETTE_YUV420P: out << "VIDEO_PALETTE_YUV420P" << endl; break;		case VIDEO_PALETTE_YUV410P: out << "VIDEO_PALETTE_YUV410P" << endl; break;	}	out << endl << endl;	return 0;} // }}}int test_tuner ( ostream & out, int dev, video_tuner & vid_tun, int tuners ) // {{{{	////////////////////////	// Tuner Test		if ( ioctl( dev, VIDIOCGTUNER, &vid_tun ) == -1 )	{		cerr << "ioctl( VIDIOCGTUNER ) error!" << endl;		return -1;	}	// Frame Buffer Test report 		for ( int i = 0; i < tuners; i++ )	{		out << "There is the report of Tuner[" << i << "] Test Below." << endl;		out << "-----------------------------------------------------" << endl;		out << "tuner:\t" << vid_tun.tuner << endl;		out << "name:\t" << vid_tun.name << endl;		out << "rangelow:\t" << vid_tun.rangelow << endl;		out << "rangehigh:\t" << vid_tun.rangehigh << endl;		out << "flags:\t" << vid_tun.flags << endl;		out << "mode:\t" << vid_tun.mode << endl;		out << "signal:\t" << vid_tun.signal << endl;		out << endl << endl;		out << "flags field:" << endl;		out << "---------------" << endl;		if ( ( vid_tun.flags & VIDEO_TUNER_PAL ) != 0 ) out << "VIDEO_TUNER_PAL" << endl;		if ( ( vid_tun.flags & VIDEO_TUNER_NTSC ) != 0 ) out << "VIDEO_TUNER_NTSC" << endl;		if ( ( vid_tun.flags & VIDEO_TUNER_SECAM ) != 0 ) out << "VIDEO_TUNER_SECAM" << endl;		if ( ( vid_tun.flags & VIDEO_TUNER_LOW ) != 0 ) out << "VIDEO_TUNER_LOW" << endl;		if ( ( vid_tun.flags & VIDEO_TUNER_NORM ) != 0 ) out << "VIDEO_TUNER_NORM" << endl;		if ( ( vid_tun.flags & VIDEO_TUNER_STEREO_ON ) != 0 ) out << "VIDEO_TUNER_STEREO_ON" << endl;		if ( ( vid_tun.flags & VIDEO_TUNER_RDS_ON ) != 0 ) out << "VIDEO_TUNER_RDS_ON" << endl;		if ( ( vid_tun.flags & VIDEO_TUNER_MBS_ON ) != 0 ) out << "VIDEO_TUNER_MBS_ON" << endl;		out << endl << endl;		out << "mode field:" << endl;		out << "---------------" << endl;		if ( ( vid_tun.mode & VIDEO_MODE_PAL ) != 0 ) out << "VIDEO_MODE_PAL" << endl;		if ( ( vid_tun.mode & VIDEO_MODE_NTSC ) != 0 ) out << "VIDEO_MODE_NTSC" << endl;		if ( ( vid_tun.mode & VIDEO_MODE_SECAM ) != 0 ) out << "VIDEO_MODE_SECAM" << endl;		if ( ( vid_tun.mode & VIDEO_MODE_AUTO ) != 0 ) out << "VIDEO_MODE_AUTO" << endl;		out << endl << endl;	}	return 0;} // }}}	int test_audio ( ostream & out, int dev, video_audio & vid_audio ) // {{{{	////////////////////////	// Audio Test		if ( ioctl( dev, VIDIOCGAUDIO, &vid_audio ) == -1 )	{		cerr << "ioctl( VIDIOCGAUDIO ) error!" << endl;		return -1;	}	// Audio Test report 		out << "There is the report of Audio Test Below." << endl;	out << "-----------------------------------------------------" << endl;	out << "audio:\t" << vid_audio.audio << endl;	out << "volume:\t" << vid_audio.volume << endl;	out << "treble:\t" << vid_audio.treble << endl;	out << "flags:\t" << vid_audio.flags << endl;	out << "name:\t" << vid_audio.name << endl;	out << "mode:\t" << vid_audio.mode << endl;	out << "balance:\t" << vid_audio.balance << endl;	out << "step:\t" << vid_audio.step << endl;	out << endl << endl;	out << "flags field:" << endl;	out << "---------------" << endl;	if ( ( vid_audio.flags & VIDEO_AUDIO_MUTE ) != 0 ) out << "VIDEO_AUDIO_MUTE" << endl;	if ( ( vid_audio.flags & VIDEO_AUDIO_MUTABLE ) != 0 ) out << "VIDEO_AUDIO_MUTABLE" << endl;	if ( ( vid_audio.flags & VIDEO_AUDIO_VOLUME ) != 0 ) out << "VIDEO_AUDIO_VOLUME" << endl;	if ( ( vid_audio.flags & VIDEO_AUDIO_BASS ) != 0 ) out << "VIDEO_AUDIO_BASS" << endl;	if ( ( vid_audio.flags & VIDEO_AUDIO_TREBLE ) != 0 ) out << "VIDEO_AUDIO_TREBLE" << endl;	if ( ( vid_audio.flags & VIDEO_AUDIO_BALANCE ) != 0 ) out << "VIDEO_AUDIO_BALANCE" << endl;	out << endl << endl;	out << "mode field:" << endl;	out << "---------------" << endl;	if ( ( vid_audio.mode & VIDEO_SOUND_MONO ) != 0 ) out << "VIDEO_SOUND_MONO" << endl;	if ( ( vid_audio.mode & VIDEO_SOUND_STEREO ) != 0 ) out << "VIDEO_SOUND_STEREO" << endl;	if ( ( vid_audio.mode & VIDEO_SOUND_LANG1 ) != 0 ) out << "VIDEO_SOUND_LANG1" << endl;	if ( ( vid_audio.mode & VIDEO_SOUND_LANG2 ) != 0 ) out << "VIDEO_SOUND_LANG2" << endl;	out << endl << endl;	return 0;} // }}}

⌨️ 快捷键说明

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