diff options
Diffstat (limited to 'formats/format_gsm.c')
-rwxr-xr-x | formats/format_gsm.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/formats/format_gsm.c b/formats/format_gsm.c index 88ca9fde7..4ac2b5a5d 100755 --- a/formats/format_gsm.c +++ b/formats/format_gsm.c @@ -33,11 +33,18 @@ #endif #include "msgsm.h" - /* Some Ideas for this code came from makegsme.c by Jeffrey Chilton */ /* Portions of the conversion code are by guido@sienanet.it */ +/* silent gsm frame */ +/* begin binary data: */ +char gsm_silence[] = /* 33 */ +{0xD8,0x20,0xA2,0xE1,0x5A,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49 +,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24 +,0x92,0x49,0x24}; +/* end binary data. size = 33 bytes */ + struct ast_filestream { void *reserved[AST_RESERVED_POINTERS]; /* Believe it or not, we must decode/recode to account for the @@ -193,6 +200,12 @@ static int gsm_seek(struct ast_filestream *fs, long sample_offset, int whence) if (whence != SEEK_FORCECUR) { offset = (offset > max)?max:offset; offset = (offset < min)?min:offset; + } else if (offset > max) { + int i; + lseek(fs->fd, 0, SEEK_END); + for (i=0; i< (offset - max) / 33; i++) { + write(fs->fd, gsm_silence, 33); + } } return lseek(fs->fd, offset, SEEK_SET); } |