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

📄 play_capture_tw.c

📁 Sample code for use on smp 863x processor.
💻 C
📖 第 1 页 / 共 5 页
字号:
/* * * Copyright (c) Sigma Designs, Inc. 2003. All rights reserved. * *//**	@file play_capture.c	@brief sample application to access the 86xx chip family		@author Christian Wolff*/#include "i2c.h"#include "play_capture_TW.h"#include "tw9919eid.h"#ifndef NO_AUDIO#include "msp4450g.h"#endif#include "cpu_uart_gpio.h"#define STOP_AUDIO_IF_NO_VIDEO 1#include "ad9380.h"#include "mcp23008.h"RMuint32 ad9380_dev=0x98;RMuint32 ad9380_delay=10;RMuint32 I2C_ModuleID = I2C;static RMuint8 cc_buf[256], dtv_buf[128];static RMuint32 cc_size = 0, dtv_size = 0;RMuint32 TimerNumber = 3;#define SCANPARAM(x, msg, skip) do {	argi++;	if (argi < argc) {		param = strtoul(argv[argi], &endptr, 0);	if (endptr[0] == '\0') x = param;	else {			fprintf(stderr, msg " after %s\n", argv[argi - skip]);			err = RM_ERROR;	}} else {	fprintf(stderr, "Please specify %d number%s after %s\n", skip, (skip == 1) ? "" : "s", argv[argi - skip]);	err = RM_ERROR;	}} while(0)#define RUASetPendingProperty(inst, mod, prop, paramptr, paramsize, text) do { 	do { 	err = RUASetProperty(inst, mod, prop, paramptr, paramsize, 0); 	} while (err == RM_PENDING); 	if (RMFAILED(err)) { 	RMDBGLOG((ENABLE, text ": %s\n", RMstatusToString(err))); 	return err; 	} } while (0)struct display_cmdline disp_opt;struct capture_cmdline capture_opt[2];struct audio_cmdline audio_opt;RMuint32 chip_num;RMuint32 input_num;// options->output_window needs to be set when calling this!static RMstatus init_local_options(	struct local_cmdline *options){	options->zoom_force = FALSE;	options->zoom_x = ZOOM_0;	options->zoom_y = ZOOM_0;	options->zoom_w = ZOOM_1;	options->zoom_h = ZOOM_1;	options->zoomstep = 1;	set_default_out_window(options->output_window);	options->force_overscan_crop = FALSE;	options->overscan_crop = 0;	options->overscan_crop_amount = 5;  // 2.5% on each edge. ITU Bt.1379.1 specifies 3.5% "safe action" and 5% "safe title"	options->arg_vbi = 0;	options->parse_anc = FALSE;	options->print_anc = FALSE;	options->dump_vbi = FALSE;	options->i2c_init = FALSE;	options->i2c_module = 0;	options->enable_i2c_cc = FALSE;	options->enable_i2c_wss = FALSE;	options->ccfifo_print = FALSE;	options->use_soft_cc_decoder = 0;	options->ccfifo_id_in = 0;	options->ccfifo_id_send = 0;	options->ccfifo_id_out = 0;	options->ccfifo_addr_in = 0;	options->ccfifo_addr_out = 0;	options->VBIOffs = 0;	options->pVBIData = NULL;	options->vbidump = NULL;	options->update = FALSE;	options->use_gpio_fid = FALSE;	options->invert_fid = FALSE;	options->last_hotplug = FALSE;	options->pR = NULL;	options->pDmaReceive = NULL;	options->force_active_format = FALSE;	options->active_format = EMhwlibAF_same_as_picture;	options->force_wide_screen = FALSE;	options->wide_screen = FALSE;	options->wss_odd = 0;	options->wss_even = 0;	options->last_hdcp_ok = FALSE;	options->last_power = FALSE;	options->last_sync = FALSE;	options->last_clock = FALSE;	options->last_auth = FALSE;	options->last_crypt = FALSE;	options->cable_eq = 0x0C;	options->last_avi.valid = FALSE;	options->new_avi = FALSE;	options->update_videomode = FALSE;	options->follow_vfreq = FALSE;	options->verbouse = FALSE;	options->green_bg = FALSE;	options->hdmi_mode = mode_unknown;	options->upsample_from_422 = FALSE;	//options->last_isrc_header = 0;	//options->last_isrc2 = FALSE;	//RMMemset(options->last_isrc, 0xFF, sizeof(options->last_isrc));	options->i2c_init = TRUE;	options->i2c_port = cap_CVBS1;	//options->i2c_port = cap_SVideo1;	//options->i2c_video_chip = cap_SAA7119;	//options->i2c_video_dev = 0x20;	options->i2c_video_chip = cap_TW9919;	options->i2c_video_dev = 0x44;	options->i2c_video_delay = 10;		options->i2c_audio1_chip = cap_WM8775;	options->i2c_audio1_dev = 0x1A;	options->i2c_audio1_delay = 10;		//options->i2c_board = cap_sigma760e2hdlcd;	options->i2c_board = cap_sigma895e1;		options->i2c_audio2_chip = cap_MSP34x5;	options->i2c_audio2_dev = 0x44;	options->i2c_audio2_delay = 10;		return RM_OK;}static void show_local_options(void){	fprintf(stderr, "PLAY_CAPTURE OPTIONS\n");	fprintf(stderr, "  -v: verbouse (twice for more verbouse)\n");	fprintf(stderr, "  -m <chip>: number of the mambo chip (default: 0)\n");	fprintf(stderr, "  -window <x> <y> <w> <h>: specify position, width and height of the scaler window\n");	fprintf(stderr, "  -zoom <x> <y> <w> <h>: zoom window into the captured video\n");	fprintf(stderr, "    all zoom values: 0..4095: absolute pixel, 4096..8192: 0%%..100%% relative size\n");	fprintf(stderr, "  -inclip <mode>: set clipping or wide mode of input: (n)ormal, (w)ide, (l)etterbox\n");	fprintf(stderr, "  -vbidump <filename>: dump received VBI data to a binary file\n");	fprintf(stderr, "  -vbiprint: print a hex-dump of the received VBI data block\n");	fprintf(stderr, "  -anc: parse VBI data for ANC header and print any Line21-CC text or TeleText\n");	fprintf(stderr, "  -ancprint: print also the ANC header info and a payload hex dump\n");	fprintf(stderr, "  -i2c <module>: which i2c module to use (0=software, 1=hardware)\n");	fprintf(stderr, "  -I <board> <port> [<dev> [<delay>]]: do i2c initialisation, defaults in []\n");	fprintf(stderr, "    chip or board:\n");	fprintf(stderr, "      [775]  (A/V-Input with saa7119, WM8775), \n");	fprintf(stderr, "      760e1  (HD Ref. w/ adv7402, MSP34x5), \n");	fprintf(stderr, "      760e2  (LCD Ref. w/ saa7119, WM8775, MSP34x5), \n");	fprintf(stderr, "      844e1  (DTV Ref. w/ saa7119, SiI9031, AD9883, WM8775, MSP34x5), \n");	fprintf(stderr, "      jamo   (KiSS Jamo plasma w/ 2 saa7119, AD9888, MSP34x5)\n");	fprintf(stderr, "      809e1  (Pioneer Video Card w/ saa7119, SiI9031, WM8738)\n");	fprintf(stderr, "    port: [cvbs1], cvbs2, svideo1, svideo2, vga, yuv1, yuv2, \n");	fprintf(stderr, "      scart1, scart2, tuner1, tuner2, hdmi0, hdmi1\n");	fprintf(stderr, "    dev: i2c device address of the video chip [0x40] (optional)\n");	fprintf(stderr, "    delay: i2c delay [0] (optional)\n");	fprintf(stderr, "  -i2ccc: enable CC passthrough from Philips 7119 via i2c\n");	fprintf(stderr, "  -ccprint: print closed caption data from the CC fifo\n");	fprintf(stderr, "    (passing through the app instead of direct passthrough)\n");	fprintf(stderr, "  -softcc, -softcc608: enable NTSC software CC decoding on top of output picture\n");	fprintf(stderr, "  -softcc708: enable PAL software CC decoding on top of output picture\n");	fprintf(stderr, "  -i2cwss: enable WSS passthrough from Philips 7119 via i2c\n");	fprintf(stderr, "  -update: continuusly check for video mode change and adjust\n");	fprintf(stderr, "  -gpiofid: use input field ID from GPIO pin\n");	fprintf(stderr, "  -fidinv: invert detected field ID\n");	fprintf(stderr, "  -eq <len>: cable length equalisation, 0..15 [12]\n");	fprintf(stderr, "  -fv: follow the vertical frequency of the capture on the output\n");	fprintf(stderr, "  -bg: use a different background color than black\n");	fprintf(stderr, "  -ov <crop>: percentage of frame size to crop around edge for overscanned pictures [5] (applies to VGA, LVDS and digital outputs only)\n");}static RMstatus parse_local_cmdline(	int argc, 	char **argv, 	int *index, 	struct local_cmdline *options){	RMstatus err = RM_OK;	int argi = *index;	RMuint32 param;	RMascii *endptr;		if (argv[argi][0] == '-') {		if (! strcmp(&(argv[argi][1]), "zoom")) {			options->zoom_force = TRUE;			SCANPARAM(options->zoom_x, "please specify a x value", 1);			SCANPARAM(options->zoom_y, "please specify a y value", 2);			SCANPARAM(options->zoom_w, "please specify a w value", 3);			SCANPARAM(options->zoom_h, "please specify a h value", 4);		}		else if (! strcmp(&(argv[argi][1]), "inclip")) {			argi++;			if (argi < argc) {				switch (argv[argi][0]) {					default:					case 'n':  // NTSC WSS "4:3 frame"					case 'N':						options->force_active_format = TRUE;						options->active_format = EMhwlibAF_same_as_picture;						options->force_wide_screen = TRUE;						options->wide_screen = FALSE;						break;					case 'w':  // NTSC WSS "16:9 frame"					case 'W':						options->force_active_format = TRUE;						options->active_format = EMhwlibAF_same_as_picture;						options->active_format = EMhwlibAF_same_as_picture;						options->force_wide_screen = TRUE;						options->wide_screen = TRUE;						break;					case 'l':  // NTSC WSS "16:9 in 4:3 frame"					case 'L':						options->force_active_format = TRUE;						options->active_format = EMhwlibAF_16x9_centered;						options->force_wide_screen = TRUE;						options->wide_screen = FALSE;						break;				}			} else {				fprintf(stderr, "please specify a mode (normal, wide or letterbox) after %s\n", argv[argi - 1]);				err = RM_ERROR;			}		}		else if (! strcmp(&(argv[argi][1]), "window")) {			SCANPARAM(options->output_window->X, "please specify a x value", 1);			SCANPARAM(options->output_window->Y, "please specify a y value", 2);			SCANPARAM(options->output_window->Width, "please specify a w value", 3);			SCANPARAM(options->output_window->Height, "please specify a h value", 4);			options->output_window->XPositionMode = EMhwlibDisplayWindowPositionMode_FrontEdgeToBorder;			options->output_window->YPositionMode = EMhwlibDisplayWindowPositionMode_FrontEdgeToBorder;			options->output_window->XMode = EMhwlibDisplayWindowValueMode_Fixed;			options->output_window->YMode = EMhwlibDisplayWindowValueMode_Fixed;			options->output_window->WidthMode = EMhwlibDisplayWindowValueMode_Fixed;			options->output_window->HeightMode = EMhwlibDisplayWindowValueMode_Fixed;		}		else if (! strcmp(&(argv[argi][1]), "vbidump")) {			argi++;			if (argi < argc) {				options->arg_vbi = argi;			} else {				fprintf(stderr, "please specify a file name after %s\n", argv[argi - 1]);				err = RM_ERROR;			}		}		else if (! strcmp(&(argv[argi][1]), "vbiprint")) {			options->dump_vbi = TRUE;		}		else if (! strcmp(&(argv[argi][1]), "anc")) {			options->parse_anc = TRUE;		}		else if (! strcmp(&(argv[argi][1]), "ancprint")) {			options->parse_anc = TRUE;			options->print_anc = TRUE;		}		else if (! strcmp(&(argv[argi][1]), "m")) {			SCANPARAM(chip_num, "please specify a chip number", 1);		}		else if (! strcmp(&(argv[argi][1]), "i2ccc")) {			options->enable_i2c_cc = TRUE;		}		else if (! strcmp(&(argv[argi][1]), "i2cwss")) {			options->enable_i2c_wss = TRUE;		}		else if (! strcmp(&(argv[argi][1]), "ccprint")) {			options->ccfifo_print = TRUE;		}		else if (! strcmp(&(argv[argi][1]), "softcc")) {			options->use_soft_cc_decoder = 1;		}		else if (! strcmp(&(argv[argi][1]), "softcc608")) {			options->use_soft_cc_decoder = 1;		}		else if (! strcmp(&(argv[argi][1]), "softcc708")) {			options->use_soft_cc_decoder = 2;		}		else if (! strcmp(&(argv[argi][1]), "i2c")) {			SCANPARAM(options->i2c_module, "please specify a i2c module number", 1);		}		else if (! strcmp(&(argv[argi][1]), "I")) {			options->i2c_init = TRUE;			options->i2c_board = cap_sigma775avinput;			options->i2c_port = cap_CVBS1;			options->i2c_video_chip = cap_SAA7119;			options->i2c_video_dev = 0x20;			options->i2c_video_delay = 10; //0;			options->i2c_audio1_chip = cap_WM8775;			options->i2c_audio1_dev = 0x1A;			options->i2c_audio1_delay = 10; //0;			options->i2c_audio2_chip = cap_NoChip;			options->i2c_audio2_dev = 0x00;			options->i2c_audio2_delay = 10; //0;			if (argi + 1 >= argc) goto SKIP;			if (argv[argi + 1][0] == '-') goto SKIP;			argi++;			if (! strcmp(argv[argi], "775")) {				options->i2c_board = cap_sigma775avinput;			} else if (! strcmp(argv[argi], "760e2")) {				options->i2c_video_chip = cap_SAA7119;				options->i2c_video_dev = 0x20;				options->i2c_video_delay = 10;								options->i2c_board = cap_sigma760e2hdlcd;				options->i2c_audio2_chip = cap_MSP34x5;				options->i2c_audio2_dev = 0x44;				options->i2c_audio2_delay = 10;			} else if (! strcmp(argv[argi], "760e1")) {				options->i2c_board = cap_sigma760e1hdref;				options->i2c_video_chip = cap_ADV7402;				options->i2c_video_dev = 0x21;				options->i2c_audio1_chip = cap_MSP34x5;				options->i2c_audio1_dev = 0x44;			} else if (! strcmp(argv[argi], "844e1")) {				options->i2c_board = cap_sigma844e1dtv;				options->i2c_audio1_chip = cap_MSP34x5;				options->i2c_audio1_dev = 0x44;			} else if (! strcmp(argv[argi], "809e1")) {				options->i2c_board = cap_pioneer809e1video;				options->i2c_audio1_chip = cap_NoChip;				options->i2c_audio1_dev = 0x00;			} else if (! strcmp(argv[argi], "jamo")) {				options->i2c_board = cap_kissjamoplasma;				options->i2c_audio1_chip = cap_MSP34x5;				options->i2c_audio1_dev = 0x40;			} else if (! strcmp(argv[argi], "895e1")) {  //TW9919				options->i2c_board = cap_sigma895e1;				//				options->i2c_video_chip=cap_TW9919;				//				options->i2c_video_dev=0x88>>1; // 0x44 << 1 = 0x88				//				options->i2c_video_delay=10;				//				options->i2c_audio1_chip = cap_MSP34x5;  // ?				//				options->i2c_audio1_dev = 0x40; //0x44 ?			} else {				fprintf(stderr, "unknown capture board: %s\n", argv[argi]);				err = RM_ERROR;				goto SKIP;			}			if (argi + 1 >= argc) goto SKIP;			if (argv[argi + 1][0] == '-') goto SKIP;			argi++;			if (! strcmp(argv[argi], "direct")) {				options->i2c_port = cap_Direct;			} else if (! strcmp(argv[argi], "cvbs1")) {				options->i2c_port = cap_CVBS1;			} else if (! strcmp(argv[argi], "cvbs2")) {				options->i2c_port = cap_CVBS2;			} else if (! strcmp(argv[argi], "svideo1")) {				options->i2c_port = cap_SVideo1;			} else if (! strcmp(argv[argi], "svideo2")) {				options->i2c_port = cap_SVideo2;			} else if (! strcmp(argv[argi], "vga")) {				options->i2c_port = cap_VGA;			} else if (! strcmp(argv[argi], "yuv1")) {				options->i2c_port = cap_Component1;			} else if (! strcmp(argv[argi], "yuv2")) {				options->i2c_port = cap_Component2;			} else if (! strcmp(argv[argi], "scart1")) {				options->i2c_port = cap_ScartCVBS1;			} else if (! strcmp(argv[argi], "scart2")) {				options->i2c_port = cap_ScartCVBS2;			} else if (! strcmp(argv[argi], "tuner1")) {				options->i2c_port = cap_Tuner1;			} else if (! strcmp(argv[argi], "tuner2")) {				options->i2c_port = cap_Tuner2;			} else if (! strcmp(argv[argi], "hdmi0")) {				options->i2c_port = cap_HDMI0;			} else if (! strcmp(argv[argi], "hdmi1")) {				options->i2c_port = cap_HDMI1;			} else {				fprintf(stderr, "unknown capture port: %s\n", argv[argi]);				err = RM_ERROR;				goto SKIP;			}

⌨️ 快捷键说明

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