📄 analog_audio.c
字号:
/* * * Copyright (c) 2001-2007 Sigma Designs, Inc. * All Rights Reserved. Proprietary and Confidential. * *//** @file analog_audio.c @brief Interface to access an analog video capture port @author Christian Wolff, Sean.Sekwon.Choi @date 2007-07-18*/// to enable or disable the debug messages of this source file, put 1 or 0 below#if 1#define LOCALDBG ENABLE#else#define LOCALDBG DISABLE#endif#include "common.h"#include "analog_audio.h"#include "WM8775.h"#include "MSP34x5.h"// internal state of the analog video capture portstruct cap_analog_audio_instance { // Access struct RUA *pRUA; struct cap_chip_instance *pChip;};RMstatus cap_analog_audio_open( struct RUA *pRUA, struct cap_analog_audio_instance **ppAnalogAudio, struct cap_chip_instance *pChip){ RMstatus err = RM_OK; struct cap_analog_audio_instance *pAnalogAudio = NULL; RMDBGLOG((FUNCNAME, "%s\n",__func__)); // Sanity checks if (ppAnalogAudio == NULL) return RM_FATALINVALIDPOINTER; *ppAnalogAudio = NULL; if (pRUA == NULL) return RM_FATALINVALIDPOINTER; // Allocate and clear local instance pAnalogAudio = (struct cap_analog_audio_instance *)RMMalloc(sizeof(struct cap_analog_audio_instance)); if (pAnalogAudio == NULL) { RMDBGLOG((ENABLE, "FATAL! Not enough memory for struct cap_analog_audio_instance!\n")); return RM_FATALOUTOFMEMORY; } RMMemset(pAnalogAudio, 0, sizeof(struct cap_analog_audio_instance)); *ppAnalogAudio = pAnalogAudio; // Set default and non-zero startup values pAnalogAudio->pRUA = pRUA; pAnalogAudio->pChip = pChip; // Open selected chip switch (pAnalogAudio->pChip->chip) { case cap_chip_none: err = RM_NOT_SUPPORTED; break; case cap_chip_WM8775: err = RM_OK; break; case cap_chip_MSP34x5: err = RM_OK; break; default: err = RM_INVALID_PARAMETER; } if (RMFAILED(err)) { RMFree(pAnalogAudio); *ppAnalogAudio = NULL; } return err;}RMstatus cap_analog_audio_close( struct cap_analog_audio_instance *pAnalogAudio){ RMstatus err = RM_OK; RMDBGLOG((FUNCNAME, "%s\n",__func__)); // Sanity checks if (pAnalogAudio == NULL) return RM_FATALINVALIDPOINTER; // Free all ressources switch (pAnalogAudio->pChip->chip) { case cap_chip_WM8775: err = RM_OK; break; case cap_chip_MSP34x5: err = RM_OK; break; case cap_chip_AD9883: err = RM_NOTIMPLEMENTED; // TODO break; default: err = RM_ERROR; } RMFree(pAnalogAudio); return err;}RMstatus cap_analog_audio_tristate(struct cap_analog_audio_instance *pAnalogAudio){ RMDBGLOG((FUNCNAME, "%s\n",__func__)); switch (pAnalogAudio->pChip->chip) { case cap_chip_WM8775: return cap_WM8775_tristate(pAnalogAudio->pChip->instance.pWM8775); break; case cap_chip_MSP34x5: return cap_MSP34x5_tristate(pAnalogAudio->pChip->instance.pMSP34x5); break; default: return RM_ERROR; break; } return RM_OK;}RMstatus cap_analog_audio_select_input(struct cap_analog_audio_instance *pAnalogAudio, enum cap_board board, enum cap_audio_input audio_input, RMuint32 audio_input_num ){ RMstatus err = RM_OK; RMDBGLOG((FUNCNAME, "%s\n",__func__)); // Sanity checks if (pAnalogAudio == NULL) return RM_FATALINVALIDPOINTER; switch (pAnalogAudio->pChip->chip) { case cap_chip_WM8775: err = cap_WM8775_init_capture(pAnalogAudio->pChip->instance.pWM8775, board, audio_input, audio_input_num); break; case cap_chip_MSP34x5: err = cap_MSP34x5_init_capture(pAnalogAudio->pChip->instance.pMSP34x5, board, audio_input, audio_input_num); // cap_board_sigma844e1dtv8624 board tuner input use both MSP3455G and WM8775 if( (board == cap_board_sigma844e1dtv8624) && (audio_input == cap_audio_input_tuner)){ err = cap_WM8775_init_capture(pAnalogAudio->pChip->instance.pWM8775, board, audio_input, audio_input_num); } break; case cap_chip_AD9883: err = RM_NOTIMPLEMENTED; // TODO break; default: err = RM_ERROR; } if(RMFAILED(err)){ RMDBGLOG((FUNCNAME, "%failed for input select\n")); } return err;}RMstatus cap_analog_audio_setup_output(struct cap_analog_audio_instance *pAnalogAudio, struct cap_update *pUpdate){ RMstatus err = RM_OK; RMDBGLOG((FUNCNAME, "%s\n",__func__)); // Sanity checks if (pAnalogAudio == NULL) return RM_FATALINVALIDPOINTER; if (pUpdate == NULL) return RM_FATALINVALIDPOINTER; switch (pAnalogAudio->pChip->chip) { case cap_chip_WM8775: err = cap_WM8775_setup_output(pAnalogAudio->pChip->instance.pWM8775, pUpdate); break; case cap_chip_MSP34x5: err = cap_MSP34x5_setup_output(pAnalogAudio->pChip->instance.pMSP34x5, pUpdate); break; default: err = RM_ERROR; } return err;}/*** Interrupt handling functions ***//* Returns RM_OK if cap_analog_audio_handle_int() needs to be called */RMstatus cap_analog_audio_check_int(struct cap_analog_audio_instance *pAnalogAudio){ // Sanity checks if (pAnalogAudio == NULL) return RM_FATALINVALIDPOINTER; switch (pAnalogAudio->pChip->chip) { case cap_chip_WM8775: return cap_WM8775_check_int(pAnalogAudio->pChip->instance.pWM8775); break; case cap_chip_MSP34x5: return cap_MSP34x5_check_int(pAnalogAudio->pChip->instance.pMSP34x5); default: return RM_ERROR; } return RM_OK;}/* check and handle interrupts and/or other changes on the chip, fill in update information to pUpdate */RMstatus cap_analog_audio_handle_int( struct cap_analog_audio_instance *pAnalogAudio, struct cap_update *pUpdate){ RMstatus err = RM_OK; // Sanity checks if (pAnalogAudio == NULL) return RM_FATALINVALIDPOINTER; switch (pAnalogAudio->pChip->chip) { case cap_chip_WM8775: err = cap_WM8775_handle_int(pAnalogAudio->pChip->instance.pWM8775, pUpdate); break; case cap_chip_MSP34x5: err = cap_MSP34x5_handle_int(pAnalogAudio->pChip->instance.pMSP34x5, pUpdate); break; default: err = RM_ERROR; break; } if (RMFAILED(err)) return err; return err;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -