Changeset 1612:ceb40fffd649 in roaraudio


Ignore:
Timestamp:
04/25/09 14:48:30 (15 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

added support to get a fh for reading, need to prebuffer data

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libroar/vio_cmd.c

    r1400 r1612  
    8181 calls->nonblock = roar_vio_cmd_nonblock; 
    8282 calls->sync     = roar_vio_cmd_sync; 
     83 calls->ctl      = roar_vio_cmd_ctl; 
    8384 calls->inst     = (void*) state; 
    8485 
     
    230231 int    nonblock = state->options & ROAR_VIO_CMD_OPTS_NONBLOCK; 
    231232 int    in, out; 
     233 int    eating = 1; 
    232234 
    233235 ROAR_DBG("roar_vio_cmd_read(*) = ?"); 
     
    247249 out = state->reader.out; 
    248250 
    249  while (done < count) { 
     251 while (done < count || eating) { 
    250252  if ( nonblock ) { 
    251253   tv.tv_sec  =    0; 
     
    295297   if ( out != -1 && FD_ISSET(out, wfhs) ) { 
    296298    ROAR_DBG("roar_vio_cmd_read(*): event on writer"); 
     299    eating = 1; 
    297300 
    298301    if ( !tlen ) { 
     
    312315     state->reader.out = out = -1; 
    313316    } 
     317   } else { 
     318    eating = 0; 
    314319   } 
    315320  } 
     
    470475 return ret; 
    471476} 
     477 
     478int     roar_vio_cmd_ctl     (struct roar_vio_calls * vio, int cmd, void * data) { 
     479 struct roar_vio_cmd_state * state = (struct roar_vio_cmd_state *)vio->inst; 
     480 char buf[1]; 
     481 int i; 
     482 
     483 ROAR_WARN("roar_vio_cmd_ctl(vio=%p, cmd=0x%.8x, data=%p) = ?", vio, cmd, data); 
     484 
     485 switch (cmd) { 
     486  case ROAR_VIO_CTL_GET_NEXT: 
     487    *(struct roar_vio_calls **)data = state->next; 
     488    return -1; 
     489   break; 
     490  case ROAR_VIO_CTL_GET_FH: 
     491    return -1; 
     492   break; 
     493  case ROAR_VIO_CTL_GET_READ_FH: 
     494//    if ( !state->reader.opened ) { 
     495     //for (i = 0; i < 128; i++) 
     496      roar_vio_cmd_read(vio, buf, 0); 
     497//    } 
     498    if ( state->reader.opened ) { 
     499     ROAR_WARN("roar_vio_cmd_ctl(vio=%p, cmd=ROAR_VIO_CTL_GET_READ_FH(0x%.8x), data=%p) = 0 // fh=%i", vio, cmd, data, state->reader.in); 
     500     *(int*)data = state->reader.in; 
     501     return 0; 
     502    } 
     503    return -1; 
     504   break; 
     505  case ROAR_VIO_CTL_GET_WRITE_FH: 
     506    return -1; 
     507   break; 
     508  default: 
     509    return -1; 
     510 } 
     511 
     512 return 0; 
     513} 
    472514#endif 
    473515 
Note: See TracChangeset for help on using the changeset viewer.