Diff for /margi2/margi.c between versions 1.1 and 1.2

version 1.1, 2000/12/03 22:41:07 version 1.2, 2000/12/12 02:09:11
Line 177  void DACSetFrequency(struct cvdv_cards * Line 177  void DACSetFrequency(struct cvdv_cards *
         b &= 0xf8;          b &= 0xf8;
   
         switch (khz){          switch (khz){
           case 32:
                   b |= 0x04;
                   break;
         case 48:          case 48:
                 b |= 0x00;                  b |= 0x00;
                 break;                  break;
Line 241  int MargiFlush (struct cvdv_cards *card) Line 244  int MargiFlush (struct cvdv_cards *card)
   
   
   
 void init_p2t(p2t_t *p)  
 {  
         memset(p->pes,0,PBUFFER);  
         p->type = AUDIO;  
         p->pos = 0;  
         p->frags = 0;  
 }  
   
 void clear_p2t(p2t_t *p)  
 {  
         memset(p->pes,0,PBUFFER);  
         p->pos = 0;  
         p->frags = 0;  
 }  
   
   
 long int find_pes_header(u8 const *buf, long int length, int *frags)  
 {  
         int c = 0;  
         int found = 0;  
   
         *frags = 0;  
   
         while (c < length-3 && !found) {  
                 if (buf[c] == 0x00 && buf[c+1] == 0x00 &&   
                     buf[c+2] == 0x01) {  
                         switch ( buf[c+3] ) {  
                                   
                         case PROG_STREAM_MAP:  
                         case PRIVATE_STREAM2:  
                         case PROG_STREAM_DIR:  
                         case ECM_STREAM     :  
                         case EMM_STREAM     :  
                         case PADDING_STREAM :  
                         case DSM_CC_STREAM  :  
                         case ISO13522_STREAM:  
                         case PRIVATE_STREAM1:  
                         case AUDIO_STREAM_S ... AUDIO_STREAM_E:  
                         case VIDEO_STREAM_S ... VIDEO_STREAM_E:  
                                 found = 1;  
                                 break;  
                                   
                         default:  
                                 c++;  
                                 break;  
                         }         
                 } else c++;  
         }  
         if (c == length-3 && !found){  
                 if (buf[length-1] == 0x00) *frags = 1;  
                 if (buf[length-2] == 0x00 &&  
                     buf[length-1] == 0x00) *frags = 2;  
                 if (buf[length-3] == 0x00 &&  
                     buf[length-2] == 0x00 &&  
                     buf[length-1] == 0x01) *frags = 3;  
                 return -1;  
         }  
   
         return c;  
 }  
   
 void pes_out( u8 const *buf, long int length,p2t_t *p)  
 {  
     
         if ( length > 3 &&   
              buf[0] == 0x00 && buf[1] == 0x00 && buf[2] == 0x01 )  
                 switch (buf[3]){  
                         case PROG_STREAM_MAP:  
                         case PRIVATE_STREAM2:  
                         case PROG_STREAM_DIR:  
                         case ECM_STREAM     :  
                         case EMM_STREAM     :  
                         case PADDING_STREAM :  
                         case DSM_CC_STREAM  :  
                         case ISO13522_STREAM:  
                         case PRIVATE_STREAM1:  
                         case AUDIO_STREAM_S ... AUDIO_STREAM_E:  
                                 p->type = AUDIO;  
                                 break;  
                         case VIDEO_STREAM_S ... VIDEO_STREAM_E:  
                                 p->type = VIDEO;                  
                                 break;  
                         default:  
                                 break;  
                 }                         
   
           
 }  
   
 void get_pes( u8 const *buf, long int length, p2t_t *p)  
 {  
         int c,c2,l,add;  
         int check;  
   
         c = 0;  
         c2 = 0;  
         if (p->frags){  
                 check = 0;  
                 switch(p->frags){  
                 case 1:  
                         if ( buf[c] == 0x00 && buf[c+1] == 0x01 ){  
                                 check = 1;  
                                 c += 2;  
                         }  
                         break;  
                 case 2:  
                         if ( buf[c] == 0x01 ){  
                                 check = 1;  
                                 c++;  
                         }  
                         break;  
                 case 3:  
                         check = 1;  
                 }  
                 if(check){  
                         switch ( buf[c] ) {  
                                   
                         case PROG_STREAM_MAP:  
                         case PRIVATE_STREAM2:  
                         case PROG_STREAM_DIR:  
                         case ECM_STREAM     :  
                         case EMM_STREAM     :  
                         case PADDING_STREAM :  
                         case DSM_CC_STREAM  :  
                         case ISO13522_STREAM:  
                         case PRIVATE_STREAM1:  
                         case AUDIO_STREAM_S ... AUDIO_STREAM_E:  
                         case VIDEO_STREAM_S ... VIDEO_STREAM_E:  
                                 p->pes[0] = 0x00;  
                                 p->pes[1] = 0x00;  
                                 p->pes[2] = 0x01;  
                                 p->pes[3] = buf[c];  
                                 p->pos=4;  
                                 /*  
                                 memcpy(p->pes+p->pos,buf+c,  
                                        PBUFFER-p->pos);  
                                 c += PBUFFER-p->pos;  
                                 p->pos = PBUFFER;  
                                 */  
                                 pes_out(p->pes,p->pos,p);  
                                 clear_p2t(p);  
                                 break;  
                                   
                         default:  
                                 c=0;  
                                 break;  
                         }  
                 }  
                 p->frags = 0;  
         }  
                   
         add = 0;  
         while (c < length){  
                 c2 = find_pes_header(buf+c+add,length-c-add,&p->frags);  
                 if (c2 >= 0) {  
                         c2 += c+add;  
                         if (c2 > c){  
                                 pes_out(buf+c,c2-c,p);  
                                 c = c2;  
                                 clear_p2t(p);  
                                 add = 0;  
                         } else add = 1;  
                 } else {  
                         l = length-c;  
                         pes_out(buf+c,l,p);  
                         c = length;  
                 }  
         }  
 }  
   
   
   
 int MargiPush(struct cvdv_cards *card, int count, const char *data)  int MargiPush(struct cvdv_cards *card, int count, const char *data)
 {  {
 //      printk(KERN_DEBUG LOGNAME ": -- MargiPush(%d,0x%08lX)\n",count,(long)data);  //      printk(KERN_DEBUG LOGNAME ": -- MargiPush(%d,0x%08lX)\n",count,(long)data);
Line 498  u32 DecoderGetBufferSpace(struct cvdv_ca Line 329  u32 DecoderGetBufferSpace(struct cvdv_ca
         audio = DecoderGetAudioBufferSpace(card);          audio = DecoderGetAudioBufferSpace(card);
         video = DecoderGetVideoBufferSpace(card);          video = DecoderGetVideoBufferSpace(card);
   
                 if (audio > 2048) audio -= 2048;          if (audio > 2048) audio -= 2048;
                 if (video > 16384) video -= 16384;          if (video > 16384) video -= 16384;
   
         if (audio < video) return audio;          if (audio < video) return audio;
         return video;          return video;
Line 518  static int ringDMA (struct cvdv_cards *c Line 349  static int ringDMA (struct cvdv_cards *c
                 card->DMAABusy = 0;                  card->DMAABusy = 0;
                 wake_up_interruptible(&(card->wqA));                  wake_up_interruptible(&(card->wqA));
                 return 0;                  return 0;
         } else  if ( card->stream.sh.valid &&          } else  if ( card->stream.sh.valid )
                      card->setup.audioselect == audio_none)  
                 DecoderStartDecode(card);                  DecoderStartDecode(card);
   
   

Removed from v.1.1  
changed lines
  Added in v.1.2


LinuxTV legacy CVS <linuxtv.org/cvs>