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

DVD

开发平台:

Others

  1. #include "Config.h" // Global Configuration - do not remove!
  2. #ifdef TV_GUARDIAN_ENABLE
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5. #include "Playcoretvgtvglo.h"
  6. #include "Playcoretvgtvgcode.h"
  7. #include "Playcoretvgtvgram.h"
  8. #include "Playcoretvgtvgpar.h"
  9. #include "Playcoretvgtvgapi.h"
  10. //**********************************************************************
  11. //**********************************************************************
  12. //***
  13. //***  TVG Functions w/Hardware Dependencies (LOW Leval Funcs)
  14. //***
  15. //**********************************************************************
  16. //**********************************************************************
  17. // For Zoran Chipset
  18. void show_tvg_bug( uchar msg_index ) {
  19.   DisplayOperationalMessage(msg_index);
  20. }
  21. void transmit2chars( uchar *ccdata_out, uchar field ) {
  22.   uchar *pccdata;
  23.   if(iccfifo==occfifo) return;
  24.   pccdata=(ccfifo+occfifo);
  25.   occfifo += 2;
  26.   occfifo %= CCMAXFIFO;
  27.   // shift CC channel if necessary
  28.   shift_cc( pccdata ); // test to shift to CC2
  29.   // Apply Parity and send it out...
  30.   ccdata_out[0]=mkpar[(pccdata[0] & 0x7F)];
  31.   ccdata_out[1]=mkpar[(pccdata[1] & 0x7F)];
  32. }
  33. #define MUTE_CMD 1
  34. #define UNMUTE_CMD 0
  35. void mute_audio( void ) {
  36.   if(!(tvg_flags & TVG_MUTE)) {
  37.     MuteAudio( MUTE_CMD, &gop_offset );
  38.   }
  39.   tvg_flags |= TVG_MUTE;
  40.   return;
  41. }
  42. void check_to_unmute( void ) {
  43.   if(!(tvg_flags & TVG_MUTE)) return;
  44.   MuteAudio( UNMUTE_CMD, &gop_offset );
  45.   tvg_flags &= ~TVG_MUTE;
  46.   timer_mute=0; // clear any pending mute timer
  47.   return;
  48. }
  49. // for now, we will simply process timers on a frame basis.
  50. // probably adequate for DVD player application.  If this
  51. // later causes a problem, we can tie these timers to some
  52. // system-dependent timers.
  53. void tvg_process_timers( void ) {
  54.   if(timer_mute != 0) {
  55.     timer_mute--;
  56.     if(timer_mute==0) check_to_unmute();
  57.   }
  58.   return;
  59. }
  60. // This is a temporary kludge.... we are using the DEMO version
  61. // menu system, but implementing version 2 settings.
  62. // 
  63. // DEMO             VER2
  64. // ===========      ===========
  65. // TVG OFF          TVG OFF
  66. // TVG MOD          TVG TOLER
  67. //                  TVG MODER   (not available)
  68. // TVG STRICT       TVG STRICT
  69. //
  70. //                  FORCE ALL WORD SETS ON FOR NOW
  71. //
  72. //                  NO CHANGE TO CC SETTINGS
  73. void tvg_process_modes( void ) {
  74.   uchar testing;
  75.   uchar tvg_mode_tvg;
  76.   uchar tvg_mode_cc;
  77.   uchar tvg_ccshift;
  78.   uchar tvg_word_sets;
  79. // Temporary patch - make Demo Version User Menu map to Version 2 Algorithm
  80. //
  81. // Demo Mode          Ver 2 Mode
  82. // =========          ==========
  83. // (0)  OFF             (0) OFF
  84. //                      (1) TOL
  85. // (1)  MOD             (2) MOD
  86. // (2)  STR             (3) STR
  87.   testing = GetTVGMode();
  88.   if(testing) testing++;
  89.   tvg_mode_tvg = 0x01 << testing;
  90.   tvg_mode_cc  = 0x10 << GetTVGCCOperation();
  91.   tvg_ccshift  = 0x80 << GetCCShiftValue();
  92.   // tvg_word_sets = GetTVGWordset();
  93.   testing = tvg_mode_cc | tvg_mode_tvg | tvg_ccshift;
  94.   if(testing==io_map) return; // no change
  95.   io_map = testing;
  96.   tvg_word_sets = TOL_RELIGIOUS | TOL_SEXUAL | TOL_HELLDAMN;
  97.   if(io_map & TVG_MODER)  tvg_word_sets = TOL_SEXUAL | TOL_HELLDAMN;
  98.   // set flag TVG_CAPS if TVG is ON (not OFF) AND CC is ON (not OFF)
  99.   if((io_map & 0x60) && (io_map & 0x0E)) tvg_flags |= TVG_CAPS;
  100.   else tvg_flags &= ~TVG_CAPS;
  101.   iomap2=0;
  102.   if(io_map & TVG_OFF) tvg_word_sets=0;
  103.   else {
  104.     if(io_map & TVG_TOLRNT)  iomap2 = TOL_STRICT;
  105.     if(io_map & TVG_MODER)  iomap2 = TOL_STRICT | TOL_MODERATE;
  106.     if(io_map & TVG_STRICT) iomap2 = TOL_STRICT | TOL_MODERATE | TOL_MILD;
  107.     iomap2 |= (tvg_word_sets & USER_WSMASK);
  108.   }
  109.   return;
  110. }
  111. // This function shift_cc doesnt really depend on hardware, placed 
  112. // here for convenience.
  113. // This function shifts CC signal from the specified input channel
  114. // to the specified output channel.  Valid inputs 1=CC1, 2=CC2, etc
  115. // pointer points to the control byte pair...
  116. // This function will be called before parity is applied to the data
  117. /* 
  118.  * Control Pair:
  119.  *
  120.  * byte1:  0x10 - 0x1F only.  Bit 3 determines CC1/CC2 (or CC3/CC4)
  121.  * byte2:  0x20 - 0x7F only.
  122.  *
  123.  */
  124. void shift_cc( uchar *cp ) {
  125.   uchar ccin, ccout;
  126.   char parsave0, parsav1; /* used to store parity */
  127.   if(io_map & 0x80) return; // return if CC1
  128.   if((cp[0]<0x10) || (cp[0]>0x1F)) return; /* no action */
  129.   if( cp[0] <= 0x17 ) { /* incoming data is CC1/3 */
  130.     cp[0] |= 0x08; /* set bit 3 */
  131.   }
  132.   
  133.   return;
  134. }
  135. #endif //TV_GUARDIAN_ENABLE