[svn-commits] russell: branch russell/g722-sillyness r106494 - in /team/russell/g722-sillyn...
SVN commits to the Digium repositories
svn-commits at lists.digium.com
Thu Mar 6 16:28:25 CST 2008
Author: russell
Date: Thu Mar 6 16:28:25 2008
New Revision: 106494
URL: http://svn.digium.com/view/asterisk?view=rev&rev=106494
Log:
Fix up some places where numbers of samples were improperly generated and interpreted
for G.722. This explains why recording to wav and then playing it back was broken,
but converting g.722 to wav via the "file convert" CLI command worked. That was because
the frames coming in from RTP had the correct numbers of samples in the frames.
However, reading from the g722 file stream had the incorrect number of samples. I
fixed this, but that unfortunately means that both methods are now equally broken.
Next, figure out where playing back a non-g722 format to a g722 phone is broken.
(issue #12130)
Modified:
team/russell/g722-sillyness/formats/format_pcm.c
team/russell/g722-sillyness/main/file.c
Modified: team/russell/g722-sillyness/formats/format_pcm.c
URL: http://svn.digium.com/view/asterisk/team/russell/g722-sillyness/formats/format_pcm.c?view=diff&rev=106494&r1=106493&r2=106494
==============================================================================
--- team/russell/g722-sillyness/formats/format_pcm.c (original)
+++ team/russell/g722-sillyness/formats/format_pcm.c Thu Mar 6 16:28:25 2008
@@ -89,7 +89,10 @@
return NULL;
}
s->fr.datalen = res;
- *whennext = s->fr.samples = res;
+ if (s->fmt->format == AST_FORMAT_G722)
+ *whennext = s->fr.samples = res * 2;
+ else
+ *whennext = s->fr.samples = res;
return &s->fr;
}
@@ -367,24 +370,32 @@
static int au_seek(struct ast_filestream *fs, off_t sample_offset, int whence)
{
off_t min, max, cur;
- long offset = 0, samples;
-
- samples = sample_offset;
+ long offset = 0, bytes;
+
+ if (fs->fmt->format == AST_FORMAT_G722)
+ bytes = sample_offset / 2;
+ else
+ bytes = sample_offset;
+
min = AU_HEADER_SIZE;
cur = ftello(fs->f);
fseek(fs->f, 0, SEEK_END);
max = ftello(fs->f);
+
if (whence == SEEK_SET)
- offset = samples + min;
+ offset = bytes + min;
else if (whence == SEEK_CUR || whence == SEEK_FORCECUR)
- offset = samples + cur;
+ offset = bytes + cur;
else if (whence == SEEK_END)
- offset = max - samples;
- if (whence != SEEK_FORCECUR) {
+ offset = max - bytes;
+
+ if (whence != SEEK_FORCECUR) {
offset = (offset > max) ? max : offset;
}
+
/* always protect the header space. */
offset = (offset < min) ? min : offset;
+
return fseeko(fs->f, offset, SEEK_SET);
}
Modified: team/russell/g722-sillyness/main/file.c
URL: http://svn.digium.com/view/asterisk/team/russell/g722-sillyness/main/file.c?view=diff&rev=106494&r1=106493&r2=106494
==============================================================================
--- team/russell/g722-sillyness/main/file.c (original)
+++ team/russell/g722-sillyness/main/file.c Thu Mar 6 16:28:25 2008
@@ -669,7 +669,8 @@
ast_settimeout(s->owner, whennext, ast_fsread_audio, s);
else
#endif
- s->owner->streamid = ast_sched_add(s->owner->sched, whennext / 8, ast_fsread_audio, s);
+ s->owner->streamid = ast_sched_add(s->owner->sched,
+ whennext / (ast_format_rate(s->fmt->format) / 1000), ast_fsread_audio, s);
s->lasttimeout = whennext;
return FSREAD_SUCCESS_NOSCHED;
}
@@ -713,7 +714,8 @@
}
if (whennext != s->lasttimeout) {
- s->owner->vstreamid = ast_sched_add(s->owner->sched, whennext / 8,
+ s->owner->vstreamid = ast_sched_add(s->owner->sched,
+ whennext / (ast_format_rate(s->fmt->format) / 1000),
ast_fsread_video, s);
s->lasttimeout = whennext;
return FSREAD_SUCCESS_NOSCHED;
More information about the svn-commits
mailing list