Changeset 3288:cc632cc556e7 in roaraudio
- Timestamp:
- 02/01/10 16:40:13 (14 years ago)
- Branch:
- default
- Phase:
- public
- Location:
- libroar
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
libroar/Makefile
r3272 r3288 10 10 OBJS=libroar.o config.o debug.o basic.o stream.o simple.o auth.o socket.o ctl.o buffer.o meta.o file.o acl.o cdrom.o pinentry.o sshaskpass.o $(VIO) stack.o slp.o nnode.o 11 11 12 #DEFINES = -DDEBUG12 DEFINES = -DDEBUG 13 13 INCLUDE = -I../include -I../include/libroar 14 14 CFLAGS += -g -Wall -O2 $(DEFINES) $(INCLUDE) $(INCPATH) $(SHARED_CF) $(fPIC) -
libroar/vio_rtp.c
r3287 r3288 109 109 110 110 calls->inst = self; 111 //calls->read = roar_vio_rtp_read;111 calls->read = roar_vio_rtp_read; 112 112 calls->write = roar_vio_rtp_write; 113 113 // calls->lseek = roar_vio_rtp_lseek; … … 122 122 } 123 123 124 ssize_t roar_vio_rtp_read (struct roar_vio_calls * vio, void *buf, size_t count); 124 ssize_t roar_vio_rtp_read (struct roar_vio_calls * vio, void *buf, size_t count) { 125 struct roar_rtp_inst * self = vio->inst; 126 size_t len_need = self->mtu * 4 + sizeof(struct roar_rtp_header); // we hope to never get pkgs with size > 4*mtu 127 size_t len_have; 128 size_t have = 0; 129 ssize_t ret; 130 union { 131 void * vp; 132 char * cp; 133 uint16_t * u16; 134 uint32_t * u32; 135 } data; 136 size_t dataoffset; 137 int i; 138 139 ROAR_DBG("roar_vio_rtp_read(vio=%p, buf=%p, count=%llu) = ?", vio, buf, (long long unsigned)count); 140 141 if ( self->rx_decoded != NULL ) { 142 // handle this case and set to NULL if the buffer is empty 143 // set have; 144 // increment buf, decrement count 145 } 146 147 if ( count == 0 ) 148 return have; 149 150 if ( self->io == NULL ) { 151 if ( roar_buffer_new(&(self->io), len_need) == -1 ) 152 return have ? have : -1; 153 154 len_have = len_need; 155 } else { 156 if ( roar_buffer_get_len(self->io, &len_have) == -1 ) 157 return have ? have : -1; 158 159 if ( len_have < len_need ) { 160 if ( roar_buffer_set_len(self->io, len_need) == -1 ) { 161 if ( roar_buffer_free(self->io) == -1 ) 162 return have ? have : -1; 163 164 self->io = NULL; 165 if ( have != 0 ) { 166 return have; 167 } else { 168 return roar_vio_rtp_read(vio, buf, count); // restart ower self from the beginning with no buffer 169 } 170 } 171 } 172 } 173 174 if ( roar_buffer_get_data(self->io, &(data.vp)) == -1 ) 175 return have ? have : -1; 176 177 if ( (ret = roar_vio_read(self->vio, data.vp, len_need)) == -1 ) 178 return have ? have : -1; 179 180 if ( (data.cp[0] && 0x02) == 0x02 ) /* version check */ 181 return have ? have : -1; 182 183 self->header.csrc_count = (data.cp[0] & 0xF0) >> 4; 184 self->header.payload_type = (data.cp[1] & 0xFE) >> 1; 185 186 // TODO: check old seqnum < new seqnum 187 self->header.seq_num = data.u16[1]; 188 189 // TODO: check timestamp: 190 self->header.ts = data.u32[1]; 191 192 self->header.ssrc = data.u32[2]; 193 194 for (i = 0; i < self->header.csrc_count; i++) { 195 self->header.csrc[i] = data.u32[3+i]; 196 } 197 198 dataoffset = 3*4 + self->header.csrc_count*4; 199 200 ret -= dataoffset; 201 data.vp += dataoffset; 202 203 if ( ret <= count ) { 204 memcpy(buf, data.vp, ret); 205 ROAR_DBG("roar_vio_rtp_read(vio=%p, buf=%p, count=?) = %llu", vio, buf, (long long unsigned)(have+ret)); 206 return have + ret; 207 } else { 208 } 209 210 ROAR_DBG("roar_vio_rtp_read(vio=%p, buf=%p, count=?) = -1", vio, buf); 211 return -1; 212 } 213 125 214 ssize_t roar_vio_rtp_write (struct roar_vio_calls * vio, void *buf, size_t count) { 126 215 struct roar_rtp_inst * self = vio->inst;
Note: See TracChangeset
for help on using the changeset viewer.