summaryrefslogtreecommitdiff
path: root/formats
diff options
context:
space:
mode:
authorMartin Pycko <martinp@digium.com>2004-02-03 16:57:00 +0000
committerMartin Pycko <martinp@digium.com>2004-02-03 16:57:00 +0000
commit860f35a7ab5a4abecb78e738191307db583430af (patch)
tree737412e9d633692be843c8429cc62df22fc5cfd7 /formats
parent9bd6034f9b8c4e498b3d3ebc8a7373cc711198d1 (diff)
Add recording agent's calls patch. Basically the call starts recording when the agent picks up and the file is stamped with the agent's id and the timestamp. Also optionally a URL link to that file may be inserted in the userfield of the CDR record. By default the recorded file will be mixed if soxmix is available.
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@2121 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'formats')
-rwxr-xr-xformats/format_gsm.c15
-rwxr-xr-xformats/format_wav_gsm.c15
2 files changed, 29 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);
}
diff --git a/formats/format_wav_gsm.c b/formats/format_wav_gsm.c
index 009c576bb..5b502ff32 100755
--- a/formats/format_wav_gsm.c
+++ b/formats/format_wav_gsm.c
@@ -37,6 +37,15 @@
/* Portions of the conversion code are by guido@sienanet.it */
+/* begin binary data: */
+char msgsm_silence[] = /* 65 */
+{0x48,0x17,0xD6,0x84,0x02,0x80,0x24,0x49,0x92,0x24,0x89,0x02,0x80,0x24,0x49
+,0x92,0x24,0x89,0x02,0x80,0x24,0x49,0x92,0x24,0x89,0x02,0x80,0x24,0x49,0x92
+,0x24,0x09,0x82,0x74,0x61,0x4D,0x28,0x00,0x48,0x92,0x24,0x49,0x92,0x28,0x00
+,0x48,0x92,0x24,0x49,0x92,0x28,0x00,0x48,0x92,0x24,0x49,0x92,0x28,0x00,0x48
+,0x92,0x24,0x49,0x92,0x00};
+/* end binary data. size = 65 bytes */
+
struct ast_filestream {
void *reserved[AST_RESERVED_POINTERS];
/* Believe it or not, we must decode/recode to account for the
@@ -487,6 +496,12 @@ static int wav_seek(struct ast_filestream *fs, long sample_offset, int whence)
if (whence != SEEK_FORCECUR) {
offset = (offset < min)?min:offset;
offset = (offset > max)?max:offset;
+ } else if (offset > max) {
+ int i;
+ lseek(fs->fd, 0, SEEK_END);
+ for (i=0; i< (offset - max) / 65; i++) {
+ write(fs->fd, msgsm_silence, 65);
+ }
}
fs->secondhalf = 0;
return lseek(fs->fd, offset, SEEK_SET);