aboutsummaryrefslogtreecommitdiffstats
path: root/formats
diff options
context:
space:
mode:
authormartinp <martinp@f38db490-d61c-443f-a65b-d21fe96a405b>2003-08-28 20:02:10 +0000
committermartinp <martinp@f38db490-d61c-443f-a65b-d21fe96a405b>2003-08-28 20:02:10 +0000
commit0f7540708770a2ddd4c5afcb057e9ab89e658d3b (patch)
tree457a4a3e8dec7fcff81b0a750356704758734e0c /formats
parenta5c52defec739c228fbc6e9c9bbfd79bbf57c04e (diff)
Fix synchronization of recorded files when using Monitor application
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@1446 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'formats')
-rwxr-xr-xformats/format_g729.c12
-rwxr-xr-xformats/format_gsm.c10
-rwxr-xr-xformats/format_mp3.c3
-rwxr-xr-xformats/format_pcm.c12
-rwxr-xr-xformats/format_pcm_alaw.c12
-rwxr-xr-xformats/format_wav.c14
-rwxr-xr-xformats/format_wav_gsm.c10
7 files changed, 43 insertions, 30 deletions
diff --git a/formats/format_g729.c b/formats/format_g729.c
index b35ff966f..23a3c5a6d 100755
--- a/formats/format_g729.c
+++ b/formats/format_g729.c
@@ -174,14 +174,16 @@ static int g729_seek(struct ast_filestream *fs, long sample_offset, int whence)
max = lseek(fs->fd, 0, SEEK_END);
bytes = 20 * (sample_offset / 160);
- if(whence == SEEK_SET)
+ if (whence == SEEK_SET)
offset = bytes;
- if(whence == SEEK_CUR)
+ else if (whence == SEEK_CUR || whence == SEEK_FORCECUR)
offset = cur + bytes;
- if(whence == SEEK_END)
+ else if (whence == SEEK_END)
offset = max - bytes;
- offset = (offset > max)?max:offset;
- offset = (offset < min)?min:offset;
+ if (whence != SEEK_FORCECUR) {
+ offset = (offset > max)?max:offset;
+ offset = (offset < min)?min:offset;
+ }
if (lseek(fs->fd, offset, SEEK_SET) < 0)
return -1;
return 0;
diff --git a/formats/format_gsm.c b/formats/format_gsm.c
index 078d79d33..ad39c0a0f 100755
--- a/formats/format_gsm.c
+++ b/formats/format_gsm.c
@@ -185,12 +185,14 @@ static int gsm_seek(struct ast_filestream *fs, long sample_offset, int whence)
distance = (sample_offset/160) * 33;
if(whence == SEEK_SET)
offset = distance;
- if(whence == SEEK_CUR)
+ else if(whence == SEEK_CUR || whence == SEEK_FORCECUR)
offset = distance + cur;
- if(whence == SEEK_END)
+ else if(whence == SEEK_END)
offset = max - distance;
- offset = (offset > max)?max:offset;
- offset = (offset < min)?min:offset;
+ if (whence != SEEK_FORCECUR) {
+ offset = (offset > max)?max:offset;
+ offset = (offset < min)?min:offset;
+ }
return lseek(fs->fd, offset, SEEK_SET);
}
diff --git a/formats/format_mp3.c b/formats/format_mp3.c
index bff51d686..832110e67 100755
--- a/formats/format_mp3.c
+++ b/formats/format_mp3.c
@@ -41,8 +41,9 @@ struct ast_filestream {
struct timeval last;
};
-
+#if 0
static struct ast_filestream *glist = NULL;
+#endif
static ast_mutex_t mp3_lock = AST_MUTEX_INITIALIZER;
static int glistcnt = 0;
diff --git a/formats/format_pcm.c b/formats/format_pcm.c
index ebc9bf87a..038de171d 100755
--- a/formats/format_pcm.c
+++ b/formats/format_pcm.c
@@ -163,14 +163,16 @@ static int pcm_seek(struct ast_filestream *fs, long sample_offset, int whence)
min = 0;
cur = lseek(fs->fd, 0, SEEK_CUR);
max = lseek(fs->fd, 0, SEEK_END);
- if(whence == SEEK_SET)
+ if (whence == SEEK_SET)
offset = sample_offset;
- if(whence == SEEK_CUR)
+ else if (whence == SEEK_CUR || whence == SEEK_FORCECUR)
offset = sample_offset + cur;
- if(whence == SEEK_END)
+ else if (whence == SEEK_END)
offset = max - sample_offset;
- offset = (offset > max)?max:offset;
- offset = (offset < min)?min:offset;
+ if (whence != SEEK_FORCECUR) {
+ offset = (offset > max)?max:offset;
+ offset = (offset < min)?min:offset;
+ }
return lseek(fs->fd, offset, SEEK_SET);
}
diff --git a/formats/format_pcm_alaw.c b/formats/format_pcm_alaw.c
index 8e96b41af..54d79bb29 100755
--- a/formats/format_pcm_alaw.c
+++ b/formats/format_pcm_alaw.c
@@ -242,14 +242,16 @@ static int pcm_seek(struct ast_filestream *fs, long sample_offset, int whence)
min = 0;
cur = lseek(fs->fd, 0, SEEK_CUR);
max = lseek(fs->fd, 0, SEEK_END);
- if(whence == SEEK_SET)
+ if (whence == SEEK_SET)
offset = sample_offset;
- if(whence == SEEK_CUR)
+ else if (whence == SEEK_CUR || whence == SEEK_FORCECUR)
offset = sample_offset + cur;
- if(whence == SEEK_END)
+ else if (whence == SEEK_END)
offset = max - sample_offset;
- offset = (offset > max)?max:offset;
- offset = (offset < min)?min:offset;
+ if (whence != SEEK_FORCECUR) {
+ offset = (offset > max)?max:offset;
+ offset = (offset < min)?min:offset;
+ }
return lseek(fs->fd, offset, SEEK_SET);
}
diff --git a/formats/format_wav.c b/formats/format_wav.c
index 3771df354..2a549b710 100755
--- a/formats/format_wav.c
+++ b/formats/format_wav.c
@@ -499,14 +499,16 @@ static int wav_seek(struct ast_filestream *fs, long sample_offset, int whence)
min = 44; /* wav header is 44 bytes */
cur = lseek(fs->fd, 0, SEEK_CUR);
max = lseek(fs->fd, 0, SEEK_END);
- if(whence == SEEK_SET)
+ if (whence == SEEK_SET)
offset = samples + min;
- if(whence == SEEK_CUR)
+ else if (whence == SEEK_CUR || whence == SEEK_FORCECUR)
offset = samples + cur;
- if(whence == SEEK_END)
- offset = max - samples;
- offset = (offset > max)?max:offset;
- offset = (offset < min)?min:offset;
+ else if (whence == SEEK_END)
+ offset = max - samples;
+ if (whence != SEEK_FORCECUR) {
+ offset = (offset > max)?max:offset;
+ offset = (offset < min)?min:offset;
+ }
return lseek(fs->fd,offset,SEEK_SET);
}
diff --git a/formats/format_wav_gsm.c b/formats/format_wav_gsm.c
index fbb97d6ab..55a607d2f 100755
--- a/formats/format_wav_gsm.c
+++ b/formats/format_wav_gsm.c
@@ -478,12 +478,14 @@ static int wav_seek(struct ast_filestream *fs, long sample_offset, int whence)
distance = (sample_offset/320) * 65;
if(whence == SEEK_SET)
offset = distance + min;
- if(whence == SEEK_CUR)
+ else if(whence == SEEK_CUR || whence == SEEK_FORCECUR)
offset = distance + cur;
- if(whence == SEEK_END)
+ else if(whence == SEEK_END)
offset = max - distance;
- offset = (offset < min)?min:offset;
- offset = (offset > max)?max:offset;
+ if (whence != SEEK_FORCECUR) {
+ offset = (offset < min)?min:offset;
+ offset = (offset > max)?max:offset;
+ }
fs->secondhalf = 0;
return lseek(fs->fd, offset, SEEK_SET);
}