mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-12 15:45:18 +00:00
Fix synchronization of recorded files when using Monitor application
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@1446 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -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;
|
||||
|
@@ -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);
|
||||
}
|
||||
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -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);
|
||||
}
|
||||
|
||||
|
@@ -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);
|
||||
}
|
||||
|
||||
|
@@ -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);
|
||||
}
|
||||
|
||||
|
@@ -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);
|
||||
}
|
||||
|
Reference in New Issue
Block a user