Changeset 181
- Timestamp:
- 11/05/07 12:36:25
(10 months ago)
- Author:
- sip
- Message:
Fixed bug on frame creation.
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r180 |
r181 |
|
| 136 | 136 | unsigned int len = 0; |
|---|
| 137 | 137 | struct ast_frame* send; |
|---|
| | 138 | unsigned char* data = 0; |
|---|
| 138 | 139 | |
|---|
| 139 | 140 | /* Get data & size */ |
|---|
| … | … | |
| 163 | 164 | |
|---|
| 164 | 165 | /* Check correct mode and length */ |
|---|
| 165 | | if (bs==-1 || framelength<bs) |
|---|
| | 166 | if (bs==-1 || framelength<(unsigned)bs) |
|---|
| 166 | 167 | /* Exit */ |
|---|
| 167 | 168 | return NULL; |
|---|
| … | … | |
| 172 | 173 | send->data = (void*)send + AST_FRIENDLY_OFFSET; |
|---|
| 173 | 174 | send->datalen = framelength + 1; /* +1 because the the octet with the CMR */ |
|---|
| | 175 | data = send->data; |
|---|
| 174 | 176 | /* Set header cmr */ |
|---|
| 175 | | ((unsigned char*)(send->data))[0] = 0xF0; |
|---|
| | 177 | data[0] = 0xF0; |
|---|
| | 178 | /* Increase pointer to match frame */ |
|---|
| | 179 | data++; |
|---|
| 176 | 180 | /* Copy */ |
|---|
| 177 | | memcpy(send->data+1, framedata, framelength); |
|---|
| | 181 | memcpy(data, framedata, framelength); |
|---|
| 178 | 182 | |
|---|
| 179 | 183 | /*Convert IF2 into AMR MIME format*/ |
|---|
| 180 | 184 | |
|---|
| 181 | 185 | /*Reverse bytes*/ |
|---|
| 182 | | TIFFReverseBits(send->data+1, framelength); |
|---|
| | 186 | TIFFReverseBits(data, framelength); |
|---|
| 183 | 187 | |
|---|
| 184 | 188 | /*If amr has a byte more than if2 */ |
|---|
| … | … | |
| 186 | 190 | { |
|---|
| 187 | 191 | /* Set last byte */ |
|---|
| 188 | | ((unsigned char *)(send->data+1))[bs] = ((unsigned char *)(send->data+1))[bs - 1] << 4; |
|---|
| | 192 | data[bs] = data[bs - 1] << 4; |
|---|
| 189 | 193 | /*Increase size of frame*/ |
|---|
| 190 | 194 | send->datalen++; |
|---|
| … | … | |
| 193 | 197 | /* For each byte */ |
|---|
| 194 | 198 | for(j=bs-1; j>0; j--) |
|---|
| 195 | | ((unsigned char *)(send->data+1))[j] = ((unsigned char *)(send->data+1))[j] >> 4 | ((unsigned char *)(send->data+1))[j-1] << 4; |
|---|
| | 199 | data[j] = data[j] >> 4 | data[j-1] << 4; |
|---|
| 196 | 200 | |
|---|
| 197 | 201 | /* Calculate first byte */ |
|---|
| 198 | | ((unsigned char *)(send->data+1))[0] = mode << 3 | 0x04; |
|---|
| 199 | | |
|---|
| | 202 | data[0] = mode << 3 | 0x04; |
|---|
| 200 | 203 | |
|---|
| 201 | 204 | /* Set video type */ |
|---|
| … | … | |
| 254 | 257 | /* Create frame */ |
|---|
| 255 | 258 | send = (struct ast_frame *) malloc(sizeof(struct ast_frame) + AST_FRIENDLY_OFFSET + 2 + len); |
|---|
| | 259 | |
|---|
| | 260 | /* Set data*/ |
|---|
| | 261 | send->data = (unsigned char*)send + AST_FRIENDLY_OFFSET; |
|---|
| | 262 | data = send->data; |
|---|
| 256 | 263 | |
|---|
| 257 | 264 | /* if its first pcaket of a frame */ |
|---|
| 258 | 265 | if (vt->first) |
|---|
| 259 | 266 | { |
|---|
| 260 | | /* Set data*/ |
|---|
| 261 | | send->data = (unsigned char*)send + AST_FRIENDLY_OFFSET; |
|---|
| 262 | 267 | /* If it's not empty */ |
|---|
| 263 | 268 | if (vt->bufferLength) |
|---|
| … | … | |
| 266 | 271 | send->datalen = vt->bufferLength; |
|---|
| 267 | 272 | /* Copy */ |
|---|
| 268 | | memcpy(send->data+2, vt->buffer+2, vt->bufferLength-2); |
|---|
| | 273 | memcpy(data+2, vt->buffer+2, vt->bufferLength-2); |
|---|
| 269 | 274 | } else { |
|---|
| 270 | 275 | /* Only header part by bow */ |
|---|
| … | … | |
| 272 | 277 | } |
|---|
| 273 | 278 | /* Set header */ |
|---|
| 274 | | ((unsigned char*)(send->data))[0] = 0x04; |
|---|
| 275 | | ((unsigned char*)(send->data))[1] = 0x00; |
|---|
| | 279 | data[0] = 0x04; |
|---|
| | 280 | data[1] = 0x00; |
|---|
| 276 | 281 | } else { |
|---|
| 277 | | /* Set data*/ |
|---|
| 278 | | send->data = (unsigned char*)send + AST_FRIENDLY_OFFSET; |
|---|
| | 282 | /* Set data len */ |
|---|
| 279 | 283 | send->datalen = vt->bufferLength + 2 ; |
|---|
| 280 | 284 | /* If it's not empty */ |
|---|
| 281 | 285 | if (vt->bufferLength) |
|---|
| 282 | 286 | /* Copy */ |
|---|
| 283 | | memcpy(send->data+2, vt->buffer, vt->bufferLength); |
|---|
| | 287 | memcpy(data+2, vt->buffer, vt->bufferLength); |
|---|
| 284 | 288 | /* Set header */ |
|---|
| 285 | | ((unsigned char*)(send->data))[0] = 0x00; |
|---|
| 286 | | ((unsigned char*)(send->data))[1] = 0x00; |
|---|
| | 289 | data[0] = 0x00; |
|---|
| | 290 | data[1] = 0x00; |
|---|
| 287 | 291 | } |
|---|
| 288 | 292 | |
|---|
| … | … | |
| 297 | 301 | } else if (i>0 && found) { |
|---|
| 298 | 302 | /* Copy the begining to the packet to send*/ |
|---|
| 299 | | memcpy(send->data+send->datalen,framedata,i); |
|---|
| | 303 | memcpy(data+send->datalen,framedata,i); |
|---|
| 300 | 304 | /* Increase size */ |
|---|
| 301 | 305 | send->datalen += i; |
|---|
Download in other formats:
|
|