📄 al242_decoder.lst
字号:
528 {
529 1
530 1 if (!bSStHvLock || bSStNoSignal)
531 1 {
532 2 return FALSE;
533 2 }
534 1 else
535 1 {
536 2
537 2 switch(cNewStandard)
538 2 {
539 3 case STD_NTSC_M:
540 3 case STD_NTSC_J:
541 3 if (bSStLowSignal)
542 3
543 3 return (!bSSt625line ) ? TRUE : FALSE;
544 3 else
545 3 if ( gucInputChannel == INPUT2 )
546 3 return (!bSSt625line ) ? TRUE : FALSE;
547 3 return (!bSSt625line && bSStChromaLock && !bSStFcMore && !bSStFcLess && !bSStPal) ? TRUE : FALSE;
548 3
549 3 case STD_NTSC_443:
C51 COMPILER V7.50 AL242_DECODER 08/11/2008 14:05:28 PAGE 10
550 3 return (!bSSt625line && bSStChromaLock && !bSStFcMore && !bSStFcLess && !bSStPal) ? TRUE : FALSE;
551 3
552 3 case STD_BW525:
553 3
554 3 return (!bSSt625line && bSStBwSignal ) ? TRUE : FALSE;
555 3
556 3
557 3 case STD_PAL_60:
558 3 return (!bSSt625line && bSStChromaLock && !bSStFcMore && !bSStFcLess && bSStPal) ? TRUE : FALSE;
559 3
560 3 case STD_PAL_M:
561 3
562 3 return (!bSSt625line && !bSStFcMore && !bSStFcLess && bSStPal) ? TRUE : FALSE;
563 3
564 3
565 3
566 3 case STD_PAL_I:
567 3 if (bSStLowSignal)
568 3 return (bSSt625line ) ? TRUE : FALSE;
569 3 else
570 3 return (bSSt625line && bSStChromaLock && !bSStFcMore && !bSStFcLess && bSStPal) ? TRUE : FALSE;
571 3
572 3 case STD_PAL_N:
573 3 return (bSSt625line && bSStChromaLock && !bSStFcMore && !bSStFcLess && bSStPal) ? TRUE : FALSE;
574 3
575 3 case STD_PAL_CN:
576 3 return (bSSt625line && bSStChromaLock && ( bSStPal || bSStSecam)) ? TRUE : FALSE;
577 3
578 3
579 3 case STD_SECAM:
580 3 return (bSSt625line && bSStChromaLock && bSStSecam ) ? TRUE : FALSE;
581 3
582 3 case STD_BW625:
583 3 return (bSSt625line && bSStBwSignal ) ? TRUE : FALSE;
584 3
585 3
586 3
587 3 default:
588 3 return FALSE;
589 3
590 3 }
591 2
592 2 }
593 1 }
594
595 void SignalStatusDisplay(void)
596 {
597 1 if (cPreSignalStatus != cSignalStatus)
598 1 {
599 2 cPreSignalStatus = cSignalStatus;
600 2 signaldetectcount = 0;
601 2 cWaitStableCount = WAIT_STABLE_TIME;
602 2 bWaitStable = 1;
603 2 }
604 1 else
605 1 {
606 2 if( cCurStandard== STD_SECAM)
607 2 {
608 3 bWaitStable = 0;
609 3 cWaitStableCount = 0;
610 3 }
611 2 else
C51 COMPILER V7.50 AL242_DECODER 08/11/2008 14:05:28 PAGE 11
612 2 {
613 3 if(signaldetectcount > WAIT_STABLE_COUNT)
614 3 {
615 4 bWaitStable = 0;
616 4 cWaitStableCount = 0;
617 4 }
618 3 else
619 3 {
620 4 signaldetectcount++;
621 4 }
622 3 }
623 2 }
624 1 // printf("st4\n");
625 1 }
626
627 void GetSignalStatus(void)
628 {
629 1 unsigned char cData;
630 1 unsigned char cTemp1;
631 1
632 1 unsigned int iTemp1;
633 1
634 1
635 1
636 1 cData=GetReg(SLAVE_ADDRESS_AL242,AL242REG_SIGNAL_STATUS1);
637 1
638 1 if (cData & 0x01)
639 1 {
640 2 if (cNoSignalCount > NOSIGNAL_THD)
641 2 {
642 3 bSStNoSignal = TRUE;
643 3 cNoSignalCount = 0;
644 3 }
645 2 else
646 2 {
647 3 cNoSignalCount++;
648 3 }
649 2 }
650 1 else
651 1 {
652 2 bSStNoSignal = FALSE;
653 2 cNoSignalCount = 0;
654 2 }
655 1
656 1 bSStHvLock = ((cData & 0x06) == 0x06) ? TRUE : FALSE;
657 1 bSStChromaLock = (cData & 0x08) ? TRUE : FALSE;
658 1
659 1 cData=GetReg(SLAVE_ADDRESS_AL242,AL242REG_SIGNAL_STATUS3);
660 1
661 1 bSStPal = (cData & 0x01) ? TRUE : FALSE;
662 1 bSStSecam = (cData & 0x02) ? TRUE : FALSE;
663 1 bSSt625line = (cData & 0x04) ? TRUE : FALSE;
664 1
665 1 // Repeat Read Register to filter out jitter value
666 1 iTemp1 = REPEAT_READ_COUNT_MAX;
667 1 while( iTemp1--)
668 1 {
669 2 cData=GetReg(SLAVE_ADDRESS_AL242,AL242REG_CHROMA_FREQ_ST);
670 2
671 2 cTemp1 = cData;
672 2
673 2 cData=GetReg(SLAVE_ADDRESS_AL242,AL242REG_CHROMA_FREQ_ST);
C51 COMPILER V7.50 AL242_DECODER 08/11/2008 14:05:28 PAGE 12
674 2
675 2 if ( cabs((signed)cData - (signed)cTemp1) < CHROMA_FREQ_TOLERANCE)
676 2 break;
677 2 }
678 1
679 1 bSStFcMore = (cData >=128) && (cData < FCMORE_THD) ? TRUE : FALSE;
680 1 bSStFcLess = (cData <128) && (cData > FCLESS_THD) ? TRUE : FALSE;
681 1
682 1
683 1 // Use AFE gain, HAGC and CAGC to decide pure Black & White signal
684 1
685 1 // Read 16bit register value, maybe generate read error
686 1 // while low byte's carry add to high byte.
687 1 // register value toggle between 02ff to 0300,
688 1 // read result will generate 0200, 03ff error value
689 1
690 1 cData=GetReg(SLAVE_ADDRESS_AL242,AL242REG_CHROMA_AGC_HI);
691 1 cTemp1 = cData<<3;
692 1
693 1 cData=GetReg(SLAVE_ADDRESS_AL242,AL242REG_CHROMA_AGC_LO);
694 1 cTemp1 += cData>>5;
695 1
696 1 iTemp1 = cTemp1;
697 1
698 1 cData=GetReg(SLAVE_ADDRESS_AL242,AL242REG_LUMA_AGC_HI);
699 1 cTemp1 = cData<<4;
700 1
701 1 cData=GetReg(SLAVE_ADDRESS_AL242,AL242REG_LUMA_AGC_LO);
702 1 cTemp1 += cData>>4;
703 1
704 1 iTemp1 *= cTemp1;
705 1
706 1 cData=GetReg(SLAVE_ADDRESS_AL242,AL242REG_AFE_GAIN);
707 1 cData &= 0x03;
708 1
709 1 iTemp1 <<= cData;
710 1
711 1 bSStBwSignal = (iTemp1 > BWSIGNAL_THRESHOLD) ? TRUE : FALSE;
712 1
713 1 cData=GetReg(SLAVE_ADDRESS_AL242,AL242REG_AFE_GAIN);
714 1 cTemp1=GetReg(SLAVE_ADDRESS_AL242,AL242REG_LUMA_AGC_HI);
715 1 bSStLowSignal = (cData == AFE_GAIN_X4) && (cTemp1 > LOW_LEVEL_SIGNAL_THD) ? TRUE : FALSE;
716 1
717 1 if (bSStBwSignal || bSStNoSignal)
718 1 {
719 2 bSStFcMore = FALSE;
720 2 bSStFcLess = FALSE;
721 2 }
722 1
723 1
724 1 }
725
726 void StandardDetect(void)
727 {
728 1 unsigned char cDat,cDat1;
729 1
730 1 unsigned char Page_temp;
731 1
732 1 Page_temp=GetReg(SLAVE_ADDRESS_AL320,0xff);
733 1 if (Page_temp==1)
734 1 {
735 2 SetReg(SLAVE_ADDRESS_AL320,0xff,0x00);
C51 COMPILER V7.50 AL242_DECODER 08/11/2008 14:05:28 PAGE 13
736 2 }
737 1
738 1 GetSignalStatus();
739 1
740 1 SignalStatusDisplay();
741 1
742 1
743 1
744 1
745 1 if (bWaitStable)
746 1 {
747 2 if (cWaitStableCount)
748 2 {
749 3 cWaitStableCount--;
750 3 return;
751 3 }
752 2 else
753 2 {
754 3 bWaitStable = FALSE;
755 3 }
756 2
757 2 }
758 1 cDat=GetReg(SLAVE_ADDRESS_AL242,0x3b);
759 1 cDat=(cDat&0x01)<<5;
760 1 cDat1=GetReg(SLAVE_ADDRESS_AL242,0x39);
761 1 cDat1=(cDat1&0xdf)|cDat;
762 1 SetReg(SLAVE_ADDRESS_AL242,0x39, cDat1);
763 1
764 1
765 1 switch (cDetectStatus)
766 1 {
767 2 case NO_SIGNAL:
768 2 if (bSStHvLock)
769 2 {
770 3 cDetectStatus = HV_LOCK;
771 3 }
772 2 break;
773 2
774 2 case HV_LOCK:
775 2 if (bSStHvLock)
776 2
777 2 {
778 3 if (!bSStLowSignal)
779 3 {
780 4 if (bSSt625line)
781 4 {
782 5 cDetectStatus = PRE_DETECT_625MODE1;
783 5 cNewStandard = STD_PAL_I;
784 5 bUpdateStandard = TRUE;
785 5 bWaitStable = TRUE;
786 5 cWaitStableCount = WAIT_TIME_PRE_625MODE1;
787 5 }
788 4 else
789 4 {
790 5 cDetectStatus = PRE_DETECT_525MODE1;
791 5 cNewStandard = STD_NTSC_M;
792 5 bUpdateStandard = TRUE;
793 5
794 5 bWaitStable = TRUE;
795 5 cWaitStableCount = WAIT_TIME_PRE_525MODE1;
796 5 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -