Changeset 2151:1871577d2258 in roaraudio


Ignore:
Timestamp:
07/24/09 17:35:34 (15 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

added stream_outputbuffer_request() and stream_outputbuffer_destroy(): functions to manage a per stream output buffer

Location:
roard
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • roard/include/streams.h

    r2082 r2151  
    7878 char * name; 
    7979 int ready; 
     80 struct roar_buffer * outputbuffer; 
    8081} * g_streams[ROAR_STREAMS_MAX]; 
    8182 
     
    120121int stream_unshift_buffer (int id, struct roar_buffer *  buf); 
    121122 
     123int stream_outputbuffer_request(int id, struct roar_buffer ** buf, size_t len); 
     124int stream_outputbuffer_destroy(int id); 
     125 
    122126int streams_check      (int id); 
    123127int streams_send_mon   (int id); 
  • roard/streams.c

    r2150 r2151  
    9595   s->primary         =  0; 
    9696   s->ready           =  0; 
     97   s->outputbuffer    = NULL; 
    9798 
    9899   s->mixer.scale     = 65535; 
     
    176177  client_stream_delete(s->client, id); 
    177178 } 
     179 
     180 stream_outputbuffer_destroy(id); 
    178181 
    179182 if ( s->buffer != NULL ) 
     
    10381041} 
    10391042 
     1043int stream_outputbuffer_request(int id, struct roar_buffer ** buf, size_t len) { 
     1044 register struct roar_stream_server *  ss; 
     1045 size_t buflen; 
     1046 int ret; 
     1047 
     1048 if ( (ss = g_streams[id]) == NULL ) 
     1049  return -1; 
     1050 
     1051 if ( buf != NULL ) /* just be be sure */ 
     1052  *buf = NULL; 
     1053 
     1054 if ( ss->outputbuffer != NULL ) { 
     1055  if ( roar_buffer_get_len(ss->outputbuffer, &buflen) == 0 ) { 
     1056   if ( buflen == len ) { 
     1057    if ( buf != NULL ) 
     1058     *buf = ss->outputbuffer; 
     1059    return 0; 
     1060   } else if ( buflen > len ) { 
     1061    if ( roar_buffer_set_len(ss->outputbuffer, len) == 0 ) { 
     1062     if ( buf != NULL ) 
     1063      *buf = ss->outputbuffer; 
     1064     return 0; 
     1065    } 
     1066   } 
     1067  } 
     1068 
     1069  // if the buffer is not suitable: 
     1070 
     1071  ret = roar_buffer_free(ss->outputbuffer); 
     1072  ss->outputbuffer = NULL; 
     1073  if ( ret == -1 ) 
     1074   return ret; 
     1075 } 
     1076 
     1077 if ( roar_buffer_new(&(ss->outputbuffer), len) == -1 ) 
     1078  return -1; 
     1079 
     1080 if ( buf != NULL ) 
     1081  *buf = ss->outputbuffer; 
     1082 
     1083 return 0; 
     1084} 
     1085 
     1086int stream_outputbuffer_destroy(int id) { 
     1087 int ret; 
     1088 register struct roar_stream_server *  ss; 
     1089 
     1090 if ( (ss = g_streams[id]) == NULL ) 
     1091  return -1; 
     1092 
     1093 if ( ss->outputbuffer != NULL ) { 
     1094  ret = roar_buffer_free(ss->outputbuffer); 
     1095  ss->outputbuffer = NULL; 
     1096  return ret; 
     1097 } 
     1098 
     1099 return 0; 
     1100} 
     1101 
    10401102int streams_check  (int id) { 
    10411103 int fh; 
Note: See TracChangeset for help on using the changeset viewer.