Changeset 3664:fdbfa4ac9e3b in roaraudio


Ignore:
Timestamp:
04/04/10 12:32:30 (14 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

added a lot things in direction of HT_VIO, fixed some bugs with mixer code

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libroaross/libroaross.c

    r3663 r3664  
    355355 
    356356static void _close_handle(struct handle * handle) { 
     357 int need_close = 0; 
     358 
    357359 if (handle == NULL) 
    358360  return; 
     
    363365 
    364366 if ( handle->refc == 0 ) { 
    365   if ( handle->stream_opened ) 
     367  switch (handle->type) { 
     368   case HT_VIO: 
     369     need_close = 1; 
     370    break; 
     371   case HT_STREAM: 
     372     if ( handle->stream_opened ) 
     373      need_close = 1; 
     374    break; 
     375  } 
     376 
     377  if ( need_close ) 
    366378   roar_vio_close(&(handle->stream_vio)); 
    367379 
    368   handle->session->refc--; 
    369  
    370   _close_session(handle->session); 
     380  if ( handle->session != NULL ) { 
     381   handle->session->refc--; 
     382 
     383   _close_session(handle->session); 
     384  } 
    371385 
    372386  roar_mm_free(handle); 
     
    900914  ROAR_DBG("write(fd=%i, buf=%p, count=%lu) = ? // pointer write", fd, buf, (long unsigned int) count); 
    901915  switch (pointer->handle->type) { 
    902    case HT_STREAM: 
     916   case HT_STREAM: // handle stream specific stuff 
    903917     if ( pointer->handle->stream_opened == 0 ) { 
    904918      if ( _open_stream(pointer->handle) == -1 ) { 
     
    907921      } 
    908922     } 
     923   case HT_VIO: // from here we only look at the VIO object of streams, or handle simple VIOs 
    909924     ret = roar_vio_write(&(pointer->handle->stream_vio), (char*)buf, count); 
    910925     if ( ret > 0 ) 
     
    912927     return ret; 
    913928    break; 
    914    case HT_DMX: 
     929   case HT_DMX: // DMX need specal handling as we need to convert the protocol 
    915930     if ( pointer->handle->stream_opened == 0 ) { 
    916931      if ( _open_stream(pointer->handle) == -1 ) { 
     
    942957     return count; 
    943958    break; 
     959   default: // we don't know what to do with other types 
     960     errno = EINVAL; 
     961     return -1; 
     962    break; 
     963  } 
     964 } 
     965 
     966 return _os.write(fd, buf, count); 
     967} 
     968 
     969ssize_t read(int fd, void *buf, size_t count) { 
     970 struct pointer * pointer; 
     971 ssize_t ret; 
     972 
     973 _init(); 
     974 
     975 if ( (pointer = _get_pointer_by_fh(fd)) != NULL ) { 
     976  switch (pointer->handle->type) { 
     977   case HT_STREAM: 
     978     if ( pointer->handle->stream_opened == 0 ) { 
     979      if ( _open_stream(pointer->handle) == -1 ) { 
     980       errno = EIO; 
     981       return -1; 
     982      } 
     983     } 
     984   case HT_VIO: 
     985     ret = roar_vio_read(&(pointer->handle->stream_vio), buf, count); 
     986     if ( ret > 0 ) 
     987      pointer->handle->readc += ret; 
     988     return ret; 
     989    break; 
    944990   default: 
    945991     errno = EINVAL; 
     
    949995 } 
    950996 
    951  return _os.write(fd, buf, count); 
    952 } 
    953  
    954 ssize_t read(int fd, void *buf, size_t count) { 
    955  struct pointer * pointer; 
    956  ssize_t ret; 
    957  
    958  _init(); 
    959  
    960  if ( (pointer = _get_pointer_by_fh(fd)) != NULL ) { 
    961   if ( pointer->handle->type == HT_STREAM ) { 
    962    if ( pointer->handle->stream_opened == 0 ) { 
    963     if ( _open_stream(pointer->handle) == -1 ) { 
    964      errno = EIO; 
    965      return -1; 
    966     } 
    967    } 
    968    ret = roar_vio_read(&(pointer->handle->stream_vio), buf, count); 
    969    if ( ret > 0 ) 
    970     pointer->handle->readc += ret; 
    971    return ret; 
    972   } else { 
    973    errno = EINVAL; 
    974    return -1; 
    975   } 
    976  } 
    977  
    978997 return _os.read(fd, buf, count); 
    979998} 
     
    9851004 
    9861005 if ( (pointer = _get_pointer_by_fh(fildes)) != NULL ) { 
    987   if ( pointer->handle->type == HT_DMX ) { 
    988    switch (whence) { 
    989     case SEEK_SET: 
    990       pointer->handle->pos  = offset; 
    991      break; 
    992     case SEEK_CUR: 
    993       pointer->handle->pos += offset; 
    994      break; 
    995     case SEEK_END: 
    996     default: 
    997       errno = EINVAL; 
    998       return -1; 
    999      break; 
    1000    } 
    1001    return pointer->handle->pos; 
    1002   } else { 
    1003    errno = EINVAL; 
    1004    return -1; 
     1006  switch (pointer->handle->type) { 
     1007   case HT_DMX: 
     1008     switch (whence) { 
     1009      case SEEK_SET: 
     1010        pointer->handle->pos  = offset; 
     1011       break; 
     1012      case SEEK_CUR: 
     1013        pointer->handle->pos += offset; 
     1014       break; 
     1015      case SEEK_END: 
     1016      default: 
     1017        errno = EINVAL; 
     1018        return -1; 
     1019       break; 
     1020     } 
     1021     return pointer->handle->pos; 
     1022    break; 
     1023   case HT_VIO: 
     1024     return roar_vio_lseek(&(pointer->handle->stream_vio), offset, whence); 
     1025    break; 
     1026   default: 
     1027     errno = EINVAL; 
     1028     return -1; 
     1029    break; 
    10051030  } 
    10061031 } 
Note: See TracChangeset for help on using the changeset viewer.