?? play_capture_tw.c
字號(hào):
/* * * 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; }
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -