Karaoke.c
上传用户:super_houu
上传日期:2008-09-21
资源大小:4099k
文件大小:7k
源码类别:

DVD

开发平台:

Others

  1. /****************************************************************************************
  2.  *  Copyright (c) 2002 ZORAN Corporation, All Rights Reserved
  3.  *  THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF ZORAN CORPORATION
  4.  *
  5.  *  File: $Workfile: Karaoke.c $             
  6.  *
  7.  * Description: Interface for creating and manipulating a generic Array.
  8.  * ============
  9.  * 
  10.  * 
  11.  * Log:
  12.  * ====
  13.  * $Revision: 10 $
  14.  * Last Modified by $Author: Chaol $ at $Modtime: 04-03-10 16:53 $ 
  15.  ****************************************************************************************
  16.  * Updates:
  17.  ****************************************************************************************
  18.  * $Log: /I76/I76_Common/I76_Reference/Playcore/Karaoke/Karaoke.c $
  19.  * 
  20.  * 10    04-03-10 16:53 Chaol
  21.  * clean karaoke code
  22.  * 
  23.  * 9     04-02-19 15:05 Chaol
  24.  * change DEC_SET_MICROPHONE_ON_OFF
  25.  * 
  26.  * 8     2/10/04 11:16p Lotan
  27.  * fix compilation bug
  28.  * 
  29.  * 7     2/10/04 7:46p Chaol
  30.  * add karaoke support
  31.  * 
  32.  * 6     03-03-20 10:04 Hannahh
  33.  * close the switch "EXTERNAL_KARAOKE"
  34.  * 
  35.  * 6     23/04/02 9:30 Nirm
  36.  * - Added dependency in "Config.h".
  37.  * 
  38.  * 5     18/02/02 10:59 Atai
  39.  * make global to static
  40.  * 
  41.  * 4     16/01/02 8:59 Nirm
  42.  * Changed included header.
  43.  * 
  44.  * 3     13/01/02 16:28 Atai
  45.  * Remove old Defines
  46.  * 
  47.  * 2     9/01/02 15:24 Nirm
  48.  * Corrected Include-Paths.
  49.  ****************************************************************************************/
  50. #include "Config.h" // Global Configuration - do not remove!
  51. #if (defined(INTERNAL_KARAOKE) || defined(EXTERNAL_KARAOKE) )
  52. #ifndef D_KEYSHIFT_SINGLE_KEY
  53. #ifdef _DEBUG
  54. #define IFTRACE if (gTraceCore)
  55. #include "DebugDbgMain.h"
  56. #endif
  57. #include "Includesysdefs.h"
  58. #include "Kernelker_api.h"
  59. #include "KernelEventDef.h"
  60. #include "Decoderdecoder.h"
  61. #include "PlaycoreCoremaincoregdef.h"
  62. #include "PlaycoreKaraokeio_kar.h"
  63. #include "PlaycoreKaraokeKaraoke.h"
  64. #include "PlaycorePSps.h"
  65. /* Vocal Partner is being process if = 1 */
  66. static int g_VPInProcess = 0;
  67. static BOOL gb_VoiceDetected = FALSE;
  68. static BOOL b_last_VoiceDetected = FALSE;
  69. #ifdef EXTERNAL_KARAOKE
  70. extern BYTE gc_Karaoke_mode;
  71. #endif
  72. #define COUNTER_TO_DEACTIVATE_4EXTERN 80 //Nbr of samples before deactivation of VP
  73. #define COUNTER_TO_ACTIVATE_4EXTERN 1 //Nbr of samples before activation of VP
  74. #define COUNTER_TO_DEACTIVATE 200 //Nbr of samples before deactivation of VP
  75. #define COUNTER_TO_ACTIVATE 10 //Nbr of samples before activation of VP
  76. #ifdef EXTERNAL_KARAOKE
  77. #define GET_COUNTER_TO_DEACTIVATE COUNTER_TO_DEACTIVATE_4EXTERN
  78. #define GET_COUNTER_TO_ACTIVATE COUNTER_TO_ACTIVATE_4EXTERN
  79. #else
  80. #define GET_COUNTER_TO_DEACTIVATE COUNTER_TO_DEACTIVATE
  81. #define GET_COUNTER_TO_ACTIVATE COUNTER_TO_ACTIVATE
  82. #endif
  83. /**************************************************************************
  84. *
  85. * Function : karSetVocalPartner
  86. *
  87. * In : void
  88. * Out : void
  89. *
  90. * Return : void 
  91. *
  92. * Desc : Manage the activation of the partner function by counting the 
  93. *    nbr of sample detection in a short time.
  94. *    This function is called every VSYNC by callback if the karaoke
  95. *    functionalities are activated.
  96. *
  97. ***************************************************************************/
  98. void karSetVocalPartner(void)
  99. {
  100. static int cCnt = 0;
  101. DWORD dCmd;
  102. /* We assume this function is call for VSYNC, it means every 16 or 20ms (sample)
  103. depending on video PAL or NTSC. The goal is to activate quickly the VP in case
  104. the singer starts singing, but we prefer to wait for a while before deactivation
  105. in case, the singer take only a breath and doesn't really stop singing
  106. */
  107. if (TRUE == gb_VoiceDetected)
  108. {
  109. if ((VP_DEACTIVATED == gcst.mPartner)&&(PARTNER_SETTING_OFF != gtps.mPartner))
  110. {
  111. if (cCnt < GET_COUNTER_TO_ACTIVATE)
  112. {
  113. cCnt++;
  114. }
  115. else
  116. {
  117. #ifdef EXTERNAL_KARAOKE
  118. if(KARAOKE_OFF == gc_Karaoke_mode)
  119. {
  120. return;
  121. }
  122. DEC_SET_MICROPHONE_ON_OFF(MICROPHONE_ON);
  123. #endif
  124. dCmd = (((DWORD)PS_UPDATE_PARTNER_STATE)<<16) + (DWORD)VP_ACTIVATED;
  125. k_ie_send_ex(IE_CORE_UPDATE_PS, (void *)dCmd);
  126. cCnt=0;
  127. }
  128. }
  129. #ifdef EXTERNAL_KARAOKE
  130. else if ((KARAOKE_AUTO == gc_Karaoke_mode) && (PARTNER_SETTING_OFF == gtps.mPartner) )
  131. {
  132. if(FALSE == b_last_VoiceDetected)
  133. {
  134. b_last_VoiceDetected = TRUE;
  135. cCnt=0;
  136. }
  137. else
  138. {
  139. if (cCnt < GET_COUNTER_TO_ACTIVATE)
  140. cCnt++;
  141. else if(0xFFFF != cCnt)
  142. {
  143. cCnt=0xFFFF;
  144. DEC_SET_MICROPHONE_ON_OFF(MICROPHONE_ON);
  145. b_last_VoiceDetected = TRUE;
  146. }
  147. }
  148. }
  149. #endif //EXTERNAL_KARAOKE
  150. else 
  151. {
  152. cCnt=0;
  153. }
  154. }
  155. else
  156. {
  157. if ((VP_ACTIVATED == gcst.mPartner) && (PARTNER_SETTING_OFF != gtps.mPartner))
  158. {
  159. if (cCnt < GET_COUNTER_TO_DEACTIVATE)
  160. cCnt++;
  161. else
  162. {
  163. #ifdef EXTERNAL_KARAOKE
  164. if(KARAOKE_OFF == gc_Karaoke_mode)
  165. {
  166. return;
  167. }
  168. DEC_SET_MICROPHONE_ON_OFF(MICROPHONE_OFF);
  169. #endif
  170. dCmd = (((DWORD)PS_UPDATE_PARTNER_STATE)<<16) + (DWORD)VP_DEACTIVATED;
  171. k_ie_send_ex(IE_CORE_UPDATE_PS, (void *)dCmd);
  172. cCnt=0;
  173. }
  174. }
  175. #ifdef EXTERNAL_KARAOKE
  176. else if((KARAOKE_AUTO == gc_Karaoke_mode) && (PARTNER_SETTING_OFF == gtps.mPartner))
  177. {
  178. if(b_last_VoiceDetected == TRUE)
  179. {
  180. b_last_VoiceDetected = FALSE;
  181. cCnt=0;
  182. }
  183. if (cCnt < GET_COUNTER_TO_DEACTIVATE)
  184. cCnt++;
  185. else if(0xFFFF != cCnt)
  186. {
  187. cCnt=0xFFFF;
  188. b_last_VoiceDetected = FALSE;
  189. DEC_SET_MICROPHONE_ON_OFF(MICROPHONE_OFF);
  190. }
  191. }
  192. #endif
  193. else
  194. {
  195. cCnt=0;
  196. }
  197. }
  198. /* Reset this variable for the next callback of this function */
  199. g_VPInProcess = 0;
  200. }
  201. /**************************************************************************
  202. *
  203. * Function : karVocalDetection
  204. *
  205. * In : void
  206. * Out : void
  207. *
  208. * Return : FALSE if karaoke and partner are inactive
  209. *  TRUE if active
  210. *
  211. * Desc : Manage the voice detection, check the VD input only if karaoke
  212. *    functions are activated
  213. *
  214. ***************************************************************************/
  215. int karVocalDetection(void)
  216. {
  217. int iResult = FALSE;
  218. #ifdef EXTERNAL_KARAOKE
  219. if(IS_KARAOKE_ON && (PARTNER_SETTING_ON ==  gtps.mPartner))
  220. {
  221. gb_VoiceDetected = ioVocalDetection();
  222. iResult = TRUE;
  223. }
  224. #endif
  225. return iResult;
  226. }
  227. /**************************************************************************
  228. *
  229. * Function : karKaraokeInit
  230. *
  231. * In : void
  232. * Out : void
  233. *
  234. * Return : void
  235. *
  236. * Desc : Set the vocal detection, Install the callback function for VD
  237. *    If the 'karVocalDetection' is TRUE, call the 'karSetVocalPartner' to
  238. *    deal with the Vocal Partner, and set 'g_VPInProgress' to 1.
  239. *    'g_VPInProgress' must be reset before the callback could be recalled.
  240. *
  241. ***************************************************************************/
  242. void karKaraokeInit(void)
  243. {
  244. /* Install the callback function for Vocal Detection and Set */
  245. DEC_install_fast_callback(karVocalDetection, karSetVocalPartner, &g_VPInProcess);
  246. }
  247. #endif
  248. #endif