Diff for /margi2/dvb_demux.c between versions 1.2 and 1.3

version 1.2, 2001/03/08 01:41:26 version 1.3, 2001/03/14 01:43:11
Line 1 Line 1
 /*   /* 
  * dvb_demux.c - DVB kernel demux API   * dvb_demux.c - DVB kernel demux API
  *   *
  * Copyright (C) 2000 Ralph  Metzler <ralph@convergence.de>   * Copyright (C) 2000-2001 Ralph  Metzler <ralph@convergence.de>
  *                  & Marcus Metzler <marcus@convergence.de>   *                       & Marcus Metzler <marcus@convergence.de>
                       for convergence integrated media GmbH   *                         for convergence integrated media GmbH
  *   *
  * This program is free software; you can redistribute it and/or   * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public License   * modify it under the terms of the GNU Lesser General Public License
Line 471  dmx_ts_feed_start_filtering(struct dmx_t Line 471  dmx_ts_feed_start_filtering(struct dmx_t
         if (dvbdmxfeed->type!=DMX_TYPE_TS)          if (dvbdmxfeed->type!=DMX_TYPE_TS)
                 return -EINVAL;                  return -EINVAL;
   
           if (!dvbdmx->start_feed)
                   return -1;
         ret=dvbdmx->start_feed(dvbdmxfeed);           ret=dvbdmx->start_feed(dvbdmxfeed); 
         if (ret<0)           if (ret<0) 
               return ret;                return ret;
Line 489  dmx_ts_feed_stop_filtering(struct dmx_ts Line 491  dmx_ts_feed_stop_filtering(struct dmx_ts
         //printk ("function : %s\n", __FUNCTION__);          //printk ("function : %s\n", __FUNCTION__);
         if (dvbdmxfeed->state<DMX_STATE_GO)          if (dvbdmxfeed->state<DMX_STATE_GO)
                 return -EINVAL;                  return -EINVAL;
           if (!dvbdmx->stop_feed)
                   return -1;
         ret=dvbdmx->stop_feed(dvbdmxfeed);           ret=dvbdmx->stop_feed(dvbdmxfeed); 
         feed->is_filtering=0;          feed->is_filtering=0;
         dvbdmxfeed->state=DMX_STATE_ALLOCATED;          dvbdmxfeed->state=DMX_STATE_ALLOCATED;
Line 540  static int dvbdmx_release_ts_feed(dmx_de Line 544  static int dvbdmx_release_ts_feed(dmx_de
   
         if (dvbdmxfeed->state==DMX_STATE_FREE)          if (dvbdmxfeed->state==DMX_STATE_FREE)
                 return -EINVAL;                  return -EINVAL;
         if (dvbdmxfeed->buffer)           if (dvbdmxfeed->buffer) { 
                 vfree(dvbdmxfeed->buffer);                  vfree(dvbdmxfeed->buffer);
         dvbdmxfeed->buffer=0;                  dvbdmxfeed->buffer=0;
           }
         dvbdmxfeed->state=DMX_STATE_FREE;          dvbdmxfeed->state=DMX_STATE_FREE;
         dvbdmxfeed->filter->state=DMX_STATE_FREE;          dvbdmxfeed->filter->state=DMX_STATE_FREE;
         if (dvbdmxfeed->pid!=0xffff) {          if (dvbdmxfeed->pid!=0xffff) {
Line 655  dmx_section_feed_set(struct dmx_section_ Line 660  dmx_section_feed_set(struct dmx_section_
         dvbdmxfeed->buffer=vmalloc(dvbdmxfeed->buffer_size);          dvbdmxfeed->buffer=vmalloc(dvbdmxfeed->buffer_size);
         if (!dvbdmxfeed->buffer)          if (!dvbdmxfeed->buffer)
                 return -ENOMEM;                  return -ENOMEM;
           dvbdmxfeed->state=DMX_STATE_READY;
         return 0;          return 0;
 }  }
   
Line 673  dmx_section_feed_start_filtering(dmx_sec Line 679  dmx_section_feed_start_filtering(dmx_sec
         dvbdmxfeed->secbufp=0;          dvbdmxfeed->secbufp=0;
         dvbdmxfeed->seclen=0;          dvbdmxfeed->seclen=0;
                   
           if (!dvbdmx->start_feed)
                   return -1;
         ret=dvbdmx->start_feed(dvbdmxfeed);           ret=dvbdmx->start_feed(dvbdmxfeed); 
         if (ret<0)           if (ret<0) 
                 return ret;                  return ret;
Line 686  dmx_section_feed_stop_filtering(struct d Line 694  dmx_section_feed_stop_filtering(struct d
 {  {
         dvb_demux_feed_t *dvbdmxfeed=(dvb_demux_feed_t *) feed;          dvb_demux_feed_t *dvbdmxfeed=(dvb_demux_feed_t *) feed;
         dvb_demux_t *dvbdmx=dvbdmxfeed->demux;          dvb_demux_t *dvbdmx=dvbdmxfeed->demux;
         int ret=dvbdmx->stop_feed(dvbdmxfeed);           int ret;
   
           if (!dvbdmx->stop_feed)
                   return -1;
           ret=dvbdmx->stop_feed(dvbdmxfeed); 
   
         dvbdmxfeed->state=DMX_STATE_READY;          dvbdmxfeed->state=DMX_STATE_READY;
         feed->is_filtering=0;          feed->is_filtering=0;
Line 707  dmx_section_feed_release_filter(dmx_sect Line 719  dmx_section_feed_release_filter(dmx_sect
                 //return -EBUSY;                  //return -EBUSY;
   
         f=dvbdmxfeed->filter;          f=dvbdmxfeed->filter;
         if (f==dvbdmxfeed->filter)          if (f==dvbdmxfilter)
                 dvbdmxfeed->filter=dvbdmxfilter->next;                  dvbdmxfeed->filter=dvbdmxfilter->next;
         else {          else {
                 while(f->next!=dvbdmxfilter)                  while(f->next!=dvbdmxfilter)
Line 754  static int dvbdmx_release_section_feed(d Line 766  static int dvbdmx_release_section_feed(d
   
         if (dvbdmxfeed->state==DMX_STATE_FREE)          if (dvbdmxfeed->state==DMX_STATE_FREE)
                 return -EINVAL;                  return -EINVAL;
         if (dvbdmxfeed->buffer)          if (dvbdmxfeed->buffer) {
                 vfree(dvbdmxfeed->buffer);                  vfree(dvbdmxfeed->buffer);
         dvbdmxfeed->buffer=0;                  dvbdmxfeed->buffer=0;
           }
         dvbdmxfeed->state=DMX_STATE_FREE;          dvbdmxfeed->state=DMX_STATE_FREE;
         dvbdmxfeed->demux->pid2feed[dvbdmxfeed->pid]=0;          dvbdmxfeed->demux->pid2feed[dvbdmxfeed->pid]=0;
         if (dvbdmxfeed->pid!=0xffff)          if (dvbdmxfeed->pid!=0xffff)
Line 769  static int dvbdmx_release_section_feed(d Line 782  static int dvbdmx_release_section_feed(d
  * dvb_demux kernel data API calls   * dvb_demux kernel data API calls
  ******************************************************************************/   ******************************************************************************/
   
 static int dvbdmx_open(struct dmx_demux_s *demux)  static int dvbdmx_open(dmx_demux_t *demux)
 {  {
         dvb_demux_t *dvbdemux=(dvb_demux_t *) demux;          dvb_demux_t *dvbdemux=(dvb_demux_t *) demux;
   
Line 876  static int dvbdmx_get_pes_pids(dmx_demux Line 889  static int dvbdmx_get_pes_pids(dmx_demux
 }  }
   
 int   int 
 DvbDmxInit(dvb_demux_t *dvbdemux, char *id, char *vendor, char *model)  DvbDmxInit(dvb_demux_t *dvbdemux)
 {  {
         dmx_demux_t *dmx=&dvbdemux->dmx;  
         int i;          int i;
           dmx_demux_t *dmx=&dvbdemux->dmx;
   
           dvbdemux->users=0;
         dvbdemux->filter=vmalloc(dvbdemux->filternum*sizeof(dvb_demux_filter_t));          dvbdemux->filter=vmalloc(dvbdemux->filternum*sizeof(dvb_demux_filter_t));
         if (!dvbdemux->filter)          if (!dvbdemux->filter)
                 return -ENOMEM;                  return -ENOMEM;
           
         dvbdemux->start_feed=0;  
         dvbdemux->stop_feed=0;  
         dvbdemux->write_to_decoder=0;  
         dvbdemux->frontend_list.next=  
           dvbdemux->frontend_list.prev=  
             &dvbdemux->frontend_list;  
         dvbdemux->users=0;  
   
         for (i=0; i<DVB_DEMUX_FILTER_MAX; i++) {          for (i=0; i<DVB_DEMUX_FILTER_MAX; i++) {
                 dvbdemux->filter[i].state=DMX_STATE_FREE;                  dvbdemux->filter[i].state=DMX_STATE_FREE;
                 dvbdemux->filter[i].index=i;                  dvbdemux->filter[i].index=i;
         }          }
         for (i=0; i<DVB_DEMUX_FEED_MAX; i++)          for (i=0; i<DVB_DEMUX_FEED_MAX; i++)
                 dvbdemux->feed[i].state=DMX_STATE_FREE;                  dvbdemux->feed[i].state=DMX_STATE_FREE;
           dvbdemux->frontend_list.next=
             dvbdemux->frontend_list.prev=
               &dvbdemux->frontend_list;
         for (i=0; i<DMX_TS_PES_OTHER; i++) {          for (i=0; i<DMX_TS_PES_OTHER; i++) {
                 dvbdemux->pesfilter[i]=NULL;                  dvbdemux->pesfilter[i]=NULL;
                 dvbdemux->pids[i]=0xffff;                  dvbdemux->pids[i]=0xffff;
Line 907  DvbDmxInit(dvb_demux_t *dvbdemux, char * Line 915  DvbDmxInit(dvb_demux_t *dvbdemux, char *
         memset(dvbdemux->pid2feed, 0, 0x2000*sizeof(dvb_demux_feed_t *));          memset(dvbdemux->pid2feed, 0, 0x2000*sizeof(dvb_demux_feed_t *));
         dvbdemux->tsbufp=0;          dvbdemux->tsbufp=0;
   
         dmx->id=id;  
         dmx->vendor=vendor;  
         dmx->model=model;  
         dmx->frontend=0;          dmx->frontend=0;
         dmx->reg_list.next=dmx->reg_list.prev=&dmx->reg_list;          dmx->reg_list.next=dmx->reg_list.prev=&dmx->reg_list;
         dmx->priv=(void *) dvbdemux;          dmx->priv=(void *) dvbdemux;
           //dmx->users=0;                  // reset in dmx_register_demux() 
         dmx->open=dvbdmx_open;          dmx->open=dvbdmx_open;
         dmx->close=dvbdmx_close;          dmx->close=dvbdmx_close;
         dmx->write=dvbdmx_write;          dmx->write=dvbdmx_write;
Line 935  DvbDmxInit(dvb_demux_t *dvbdemux, char * Line 941  DvbDmxInit(dvb_demux_t *dvbdemux, char *
   
         if (dmx_register_demux(dmx)<0)           if (dmx_register_demux(dmx)<0) 
                 return -1;                  return -1;
         if (dmx->open(dmx)<0)          //if (dmx->open(dmx)<0)
                 return -1;          //        return -1;
         return 0;          return 0;
 }  }
   

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


LinuxTV legacy CVS <linuxtv.org/cvs>