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

📄 dcc_display.c

📁 dcc code for smp 8634 media processor
💻 C
📖 第 1 页 / 共 5 页
字号:
		master = EMHWLIB_MODULE(DispDigitalOut, 0);	slave = EMHWLIB_MODULE(DispMainAnalogOut, 0);	slave2 = EMHWLIB_MODULE(DispComponentOut, 0);	slave3 = EMHWLIB_MODULE(DispCompositeOut, 0);		switch (route) {	case DCCRoute_Main:		mixer = EMHWLIB_MODULE(DispMainMixer, 0);		break;	case DCCRoute_Secondary:#ifdef RMFEATURE_HAS_VCR_MIXER		mixer = EMHWLIB_MODULE(DispVCRMixer, 0);		break;#else		return RM_ERROR;#endif	case DCCRoute_ColorBars:		mixer = EMHWLIB_MODULE(DispColorBars, 0);		break;	case DCCRoute_HDSD:		return RM_ERROR;	}	colorspace = EMhwlibColorSpace_RGB_0_255;	DCCSP(pDCC->pRUA, master, RMGenericPropertyID_ColorSpace, &colorspace, sizeof(colorspace));	DCCSP(pDCC->pRUA, master, RMDispDigitalOutPropertyID_BusSize, &bus_size, sizeof(bus_size)); /* BusSize might be Pending forever if called after TVFormat without Validate inbetween */	DCCSP(pDCC->pRUA, master, RMGenericPropertyID_DigitalTVFormat, fmt_d, sizeof(*fmt_d));	DCCSP(pDCC->pRUA, master, RMGenericPropertyID_SyncSourceModuleID, &master, sizeof(master));	DCCSP(pDCC->pRUA, master, RMGenericPropertyID_AddSlaveOutput, &slave, sizeof(slave));	{		RMbool DoubleRate = DCCGetDoubleRate(EMhwlibTVStandard_Custom);		RMDBGLOG((LOCALDBG, "Applying DoubleRate(%s)\n", DoubleRate ? "TRUE" : "FALSE"));		DCCSP(pDCC->pRUA, DispDigitalOut, RMDispDigitalOutPropertyID_DoubleRate, &DoubleRate, sizeof(DoubleRate));	}	DCCSP(pDCC->pRUA, master, RMGenericPropertyID_Validate, NULL, 0);	 	enable = TRUE;	DCCSP(pDCC->pRUA, master, RMGenericPropertyID_Enable, &enable, sizeof(enable));	DCCSP(pDCC->pRUA, slave, RMGenericPropertyID_SyncSourceModuleID, &master, sizeof(master));	DCCSP(pDCC->pRUA, slave, RMDispMainAnalogOutPropertyID_TVFormat, fmt_a, sizeof(*fmt_a));	DCCSP(pDCC->pRUA, slave, RMGenericPropertyID_Validate, NULL, 0); 	enable = TRUE;	DCCSP(pDCC->pRUA, slave, RMGenericPropertyID_Enable, &enable, sizeof(enable));	disp_route.Enable = TRUE;	disp_route.SourceModuleID = mixer;	disp_route.DestinationModuleID = master;	DCCSP(pDCC->pRUA, routing, RMDispRoutingPropertyID_Route, &disp_route, sizeof(disp_route));	/* enable slave out */	disp_route.Enable = TRUE;	disp_route.SourceModuleID = mixer;	disp_route.DestinationModuleID = slave;	DCCSP(pDCC->pRUA, routing, RMDispRoutingPropertyID_Route, &disp_route, sizeof(disp_route));#ifdef RMFEATURE_HAS_COMPONENT_OUT	/* add component out on mambo configuration */	DCCSP(pDCC->pRUA, slave2, RMGenericPropertyID_SyncSourceModuleID, &master, sizeof(master));	DCCSP(pDCC->pRUA, slave2, RMDispComponentOutPropertyID_TVFormat, fmt_a, sizeof(*fmt_a));	DCCSP(pDCC->pRUA, master, RMGenericPropertyID_AddSlaveOutput, &slave2, sizeof(slave2));	DCCSP(pDCC->pRUA, master, RMGenericPropertyID_Validate, NULL, 0);	DCCSP(pDCC->pRUA, slave2, RMGenericPropertyID_Validate, NULL, 0);	enable = TRUE;	DCCSP(pDCC->pRUA, slave2, RMGenericPropertyID_Enable, &enable, sizeof(enable));	/* enable slave2 out */	disp_route.Enable = TRUE;	disp_route.SourceModuleID = mixer;	disp_route.DestinationModuleID = slave2;	DCCSP(pDCC->pRUA, routing, RMDispRoutingPropertyID_Route, &disp_route, sizeof(disp_route));#endif  // RMFEATURE_HAS_COMPONENT_OUT#ifdef RMFEATURE_HAS_COMPOSITE_OUT	/* add composite out on mambo configuration */	if (fmt_a->CompositeMode != EMhwlibCompositeMode_Disable) {		DCCSP(pDCC->pRUA, slave3, RMGenericPropertyID_SyncSourceModuleID, &master, sizeof(master));		DCCSP(pDCC->pRUA, slave3, RMDispCompositeOutPropertyID_TVFormat, fmt_a, sizeof(*fmt_a));				DCCSP(pDCC->pRUA, master, RMGenericPropertyID_AddSlaveOutput, &slave3, sizeof(slave2));		DCCSP(pDCC->pRUA, master, RMGenericPropertyID_Validate, NULL, 0);				DCCSP(pDCC->pRUA, slave3, RMGenericPropertyID_Validate, NULL, 0);				enable = TRUE;		DCCSP(pDCC->pRUA, slave3, RMGenericPropertyID_Enable, &enable, sizeof(enable));				/* enable slave3 out */		disp_route.Enable = TRUE;		disp_route.SourceModuleID = mixer;		disp_route.DestinationModuleID = slave3;		DCCSP(pDCC->pRUA, routing, RMDispRoutingPropertyID_Route, &disp_route, sizeof(disp_route));	}	else {		/* disable slave3 out */		disp_route.Enable = FALSE;		disp_route.SourceModuleID = mixer;		disp_route.DestinationModuleID = slave3;		DCCSP(pDCC->pRUA, routing, RMDispRoutingPropertyID_Route, &disp_route, sizeof(disp_route));		DCCSP(pDCC->pRUA, routing, RMGenericPropertyID_Validate, NULL, 0);		enable = FALSE; 		DCCSP(pDCC->pRUA, slave3, RMGenericPropertyID_Enable, &enable, sizeof(enable));		DCCSP(pDCC->pRUA, master, RMGenericPropertyID_RemoveSlaveOutput, &slave3, sizeof(slave3));		DCCSP(pDCC->pRUA, master, RMGenericPropertyID_Validate, NULL, 0);	}#endif  // RMFEATURE_HAS_COMPOSITE_OUT	DCCSP(pDCC->pRUA, routing, RMGenericPropertyID_Validate, NULL, 0);	enable = TRUE;	DCCSP(pDCC->pRUA, routing, RMGenericPropertyID_Enable, &enable, sizeof(enable));	return RM_OK;}RMstatus DCCSetSCART(struct DCC *pDCC, 	enum DCCRoute route, 	enum DCCVideoConnector connector, 	RMbool Enable, 	RMuint32 EnableBit, 	RMbool EnableInvert, 	RMuint32 WideBit, 	RMbool WideInvert, 	enum EMhwlibSCARTWideBitState WideState){	RMstatus err;	RMuint32 output;	struct EMhwlibSCARTConfig conf;		if (RMFAILED(err = DCCGetVideoConnectorModuleID(pDCC, route, connector, &output))) 		return err;		conf.EnableBit = EnableBit;	conf.EnableInvert = EnableInvert;	conf.WideBit = WideBit;	conf.WideInvert = WideInvert;		DCCSP(pDCC->pRUA, output, RMGenericPropertyID_SCARTConfig, &conf, sizeof(conf));	DCCSP(pDCC->pRUA, output, RMGenericPropertyID_SCARTWideScreen, &WideState, sizeof(WideState));	DCCSP(pDCC->pRUA, output, RMGenericPropertyID_SCART, &Enable, sizeof(Enable));		return RM_OK;}RMstatus DCCEnableVideoConnector(struct DCC *pDCC, enum DCCRoute route, enum DCCVideoConnector connector, RMbool enable){	RMuint32 output, mixer=0;	RMstatus err;	enum EMhwlibComponentMode compmode;	enum EMhwlibColorSpace colorspace;	switch (route) {	case DCCRoute_Main:		mixer = EMHWLIB_MODULE(DispMainMixer, 0);		break;	case DCCRoute_Secondary:#ifdef RMFEATURE_HAS_VCR_MIXER		mixer = EMHWLIB_MODULE(DispVCRMixer, 0);		break;#else		return RM_ERROR;#endif	case DCCRoute_ColorBars:		mixer = EMHWLIB_MODULE(DispColorBars, 0);		break;	case DCCRoute_HDSD:		return RM_ERROR;	}		if (RMFAILED(err = DCCGetVideoConnectorModuleID(pDCC, route, connector, &output))) 		return err;	DCCSP(pDCC->pRUA, output, RMGenericPropertyID_Enable, &enable, sizeof(enable));		switch (connector) {	case DCCVideoConnector_DVI:	case DCCVideoConnector_LVDS:	case DCCVideoConnector_Digital:		// ColorSpace has been set up already		DCCSP(pDCC->pRUA, output, RMDispDigitalOutPropertyID_SyncControlModuleID, &output, sizeof(output));		DCCSP(pDCC->pRUA, output, RMDispDigitalOutPropertyID_EnableSyncPAD, &enable, sizeof(enable));		DCCSP(pDCC->pRUA, output, RMGenericPropertyID_Validate, NULL, 0);				break;	case DCCVideoConnector_VGA:		DCCSP(pDCC->pRUA, DispDigitalOut, RMDispDigitalOutPropertyID_SyncControlModuleID, &output, sizeof(output));		DCCSP(pDCC->pRUA, DispDigitalOut, RMDispDigitalOutPropertyID_EnableSyncPAD, &enable, sizeof(enable));		DCCSP(pDCC->pRUA, DispDigitalOut, RMGenericPropertyID_Validate, NULL, 0);				DCCSP(pDCC->pRUA, DispDigitalOut, RMGenericPropertyID_Enable, &enable, sizeof(enable));		compmode = EMhwlibComponentMode_RGB_SCART;		DCCSP(pDCC->pRUA, output, RMGenericPropertyID_ComponentMode, &compmode, sizeof(compmode));		colorspace = EMhwlibColorSpace_RGB_0_255;		DCCSP(pDCC->pRUA, output, RMGenericPropertyID_ColorSpace, &colorspace, sizeof(colorspace));		DCCSP(pDCC->pRUA, output, RMGenericPropertyID_Validate, NULL, 0);		break;	case DCCVideoConnector_SCART:		compmode = EMhwlibComponentMode_RGB_SCART;		DCCSP(pDCC->pRUA, output, RMGenericPropertyID_ComponentMode, &compmode, sizeof(compmode));		colorspace = EMhwlibColorSpace_RGB_0_255;		DCCSP(pDCC->pRUA, output, RMGenericPropertyID_ColorSpace, &colorspace, sizeof(colorspace));		DCCSP(pDCC->pRUA, output, RMGenericPropertyID_Validate, NULL, 0);		break;			case DCCVideoConnector_COMPONENT:		// ColorSpace has been set up already for component.		// Set up colorspace for composite also		colorspace = EMhwlibColorSpace_YUV_601;#ifdef RMFEATURE_HAS_DUAL_MAINANALOGOUT 		DCCSP(pDCC->pRUA, output, RMDispMainAnalogOutPropertyID_ColorSpaceCVBS, &colorspace, sizeof(colorspace));#endif // RMFEATURE_HAS_DUAL_MAINANALOGOUT		DCCSP(pDCC->pRUA, output, RMGenericPropertyID_Validate, NULL, 0);		break;			case DCCVideoConnector_SVIDEO:	case DCCVideoConnector_COMPOSITE:		colorspace = EMhwlibColorSpace_YUV_601;#ifdef RMFEATURE_HAS_DUAL_MAINANALOGOUT 		DCCSP(pDCC->pRUA, output, RMDispMainAnalogOutPropertyID_ColorSpaceCVBS, &colorspace, sizeof(colorspace));#else 		DCCSP(pDCC->pRUA, output, RMGenericPropertyID_ColorSpace, &colorspace, sizeof(colorspace));#endif // RMFEATURE_HAS_DUAL_MAINANALOGOUT				DCCSP(pDCC->pRUA, output, RMGenericPropertyID_Validate, NULL, 0);		break;	}	return RM_OK;}RMstatus DCCGetVideoConnectorModuleID(struct DCC *pDCC, enum DCCRoute route, enum DCCVideoConnector connector, RMuint32 *moduleID){	// TODO the output connectors are board- and chip-dependent!	// We need a board/chip table 	// e.g. 	//   board 716, chip 8610L, connector: vga==>DispComponentOut, cvbs,svideo,component==>DispMainAnalogOut, dvi==>DispDigitalOut 	//   board 716, chip 8620L, connector: vga,cvbs,svideo,component==>DispMainAnalogOut, dvi==>DispDigitalOut 	// or we need to give the user a choice, e.g. vga_component, vga_main, scart_composite etc.	switch (route) {	case DCCRoute_Main:	case DCCRoute_Secondary:	case DCCRoute_ColorBars:	case DCCRoute_HDSD:		switch (connector) {		case DCCVideoConnector_DVI:		case DCCVideoConnector_LVDS:		case DCCVideoConnector_Digital:			*moduleID = EMHWLIB_MODULE(DispDigitalOut, 0);			break;		case DCCVideoConnector_VGA:#ifndef RMFEATURE_HAS_COMPONENT_OUT			*moduleID = EMHWLIB_MODULE(DispMainAnalogOut, 0);#else			*moduleID = EMHWLIB_MODULE(DispComponentOut, 0);#endif			break;		case DCCVideoConnector_SCART:		case DCCVideoConnector_COMPONENT:#ifndef RMFEATURE_HAS_COMPONENT_OUT			*moduleID = EMHWLIB_MODULE(DispMainAnalogOut, 0);#else			*moduleID = EMHWLIB_MODULE(DispComponentOut, 0);#endif			break;		case DCCVideoConnector_SVIDEO:			*moduleID = EMHWLIB_MODULE(DispMainAnalogOut, 0);			break;		case DCCVideoConnector_COMPOSITE:#ifndef RMFEATURE_HAS_COMPOSITE_OUT			*moduleID = EMHWLIB_MODULE(DispMainAnalogOut, 0);#else			*moduleID = EMHWLIB_MODULE(DispCompositeOut, 0);#endif			break;		}		break;	}			return RM_OK;}RMstatus DCCSetDVIOutFormat(struct DCC *pDCC, enum DCCRoute route, enum EMhwlibColorSpace color_space, enum EMhwlibDigitalTimingSignal timing, RMuint32 bus_size){	RMuint32 output;	enum EMhwlibColorOrder ColorOrder = EMhwlibColorOrder_RGB;	RMbool clipping;	enum DispDigitalOut_ClippingLevel_type level;		output = EMHWLIB_MODULE(DispDigitalOut, 0);	clipping = FALSE;	DCCSP(pDCC->pRUA, output, RMDispDigitalOutPropertyID_EnableClipping, &clipping, sizeof(clipping));	level = DispDigitalOut_ClippingLevel_Clip_1_254;	DCCSP(pDCC->pRUA, output, RMDispDigitalOutPropertyID_ClippingLevel, &level, sizeof(level));	DCCSP(pDCC->pRUA, output, RMDispDigitalOutPropertyID_ColorOrder, &ColorOrder, sizeof(ColorOrder));	DCCSP(pDCC->pRUA, output, RMDispDigitalOutPropertyID_TimingSignal, &timing, sizeof(timing));	DCCSP(pDCC->pRUA, output, RMDispDigitalOutPropertyID_BusSize, &bus_size, sizeof(bus_size));	DCCSP(pDCC->pRUA, output, RMGenericPropertyID_ColorSpace, &color_space, sizeof(color_space));	DCCSP(pDCC->pRUA, output, RMGenericPropertyID_Validate, NULL, 0);	return RM_OK;}RMstatus DCCSetComponentOutFormat(struct DCC *pDCC, enum DCCRoute route, enum EMhwlibColorSpace color_space, enum EMhwlibComponentMode component){	RMuint32 output;	RMstatus err = RM_OK;	if (RMFAILED(err = DCCGetVideoConnectorModuleID(pDCC, route, DCCVideoConnector_COMPONENT, &output)))		return err;	DCCSP(pDCC->pRUA, output, RMGenericPropertyID_ColorSpace, &color_space, sizeof(color_space));	DCCSP(pDCC->pRUA, output, RMGenericPropertyID_ComponentMode, &component, sizeof(component));	DCCSP(pDCC->pRUA, output, RMGenericPropertyID_Validate, NULL, 0);	return RM_OK;}RMstatus DCCEnableSPUSurface(struct DCC *pDCC, enum DCCRoute route, RMuint32 index, struct DCCVideoSource *pVideoSource, RMbool enable){	RMuint32 spu_scaler, src_index;	RMuint32 mixer=0;	RMuint32 video_scaler;	RMstatus err;	enum EMhwlibMixerSourceState state;	struct EMhwlibSubPictureSurface_type spu_surface;	switch (route) {	case DCCRoute_Main:		mixer = EMHWLIB_MODULE(DispMainMixer, 0);		break;	case DCCRoute_Secondary:#ifdef RMFEATURE_HAS_VCR_MIXER		mixer = EMHWLIB_MODULE(DispVCRMixer, 0);		break;#else		return RM_ERROR;#endif	case DCCRoute_ColorBars:		RMDBGLOG((ENABLE, "No spu on colorbars route\n"));		return RM_ERROR;	case DCCRoute_HDSD:		return RM_ERROR;	}	err = DCCGetScalerModuleID(pDCC, route, DCCSurface_SPU, index, &spu_scaler);	if (RMFAILED(err)) {		RMDBGLOG((ENABLE, "Cannot get spu surface scaler\n"));		return err;	}	err = DCCGetScalerModuleID(pDCC, route, DCCSurface_Video, index, &video_scaler);	if (RMFAILED(err)) {		RMDBGLOG((ENABLE, "Cannot get video surface scaler\n"));		return err;	}

⌨️ 快捷键说明

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