rendered paste bodyIndex: include/asterisk/frame.h
===================================================================
--- include/asterisk/frame.h (revision 110613)
+++ include/asterisk/frame.h (working copy)
@@ -130,6 +130,9 @@
* The translator can not be free'd if the frame inside of it still has
* this flag set. */
AST_FRFLAG_FROM_TRANSLATOR = (1 << 1),
+ /*! This is the last frame from the current source. An example is when
+ * reading from a file, we have reached the end of it. */
+ AST_FRFLAG_LAST = (1 << 2),
};
/*! \brief Data structure associated with a single frame of data
Index: codecs/codec_resample.c
===================================================================
--- codecs/codec_resample.c (revision 110613)
+++ codecs/codec_resample.c (working copy)
@@ -117,7 +117,7 @@
out_buf_used = resample_process(resampler, resample_factor,
&in_buf_f[total_in_buf_used], f->samples - total_in_buf_used,
- 0, &in_buf_used,
+ ast_test_flag(f, AST_FRFLAG_LAST), &in_buf_used,
&out_buf_f[total_out_buf_used], ARRAY_LEN(out_buf_f) - total_out_buf_used);
if (out_buf_used < 0)
Index: formats/format_gsm.c
===================================================================
--- formats/format_gsm.c (revision 110613)
+++ formats/format_gsm.c (working copy)
@@ -61,6 +61,9 @@
ast_log(LOG_WARNING, "Short read (%d) (%s)!\n", res, strerror(errno));
return NULL;
}
+ if (feof(s->f)) {
+ ast_set_flag(&s->fr, AST_FRFLAG_LAST);
+ }
*whennext = s->fr.samples = GSM_SAMPLES;
return &s->fr;
}
Index: formats/format_g729.c
===================================================================
--- formats/format_g729.c (revision 110613)
+++ formats/format_g729.c (working copy)
@@ -55,6 +55,9 @@
ast_log(LOG_WARNING, "Short read (%d) (%s)!\n", res, strerror(errno));
return NULL;
}
+ if (feof(s->f)) {
+ ast_set_flag(&s->fr, AST_FRFLAG_LAST);
+ }
*whennext = s->fr.samples;
return &s->fr;
}
Index: formats/format_sln.c
===================================================================
--- formats/format_sln.c (revision 110613)
+++ formats/format_sln.c (working copy)
@@ -47,7 +47,10 @@
ast_log(LOG_WARNING, "Short read (%d) (%s)!\n", res, strerror(errno));
return NULL;
}
- *whennext = s->fr.samples = res/2;
+ *whennext = s->fr.samples = res / 2;
+ if (feof(s->f)) {
+ ast_set_flag(&s->fr, AST_FRFLAG_LAST);
+ }
s->fr.datalen = res;
return &s->fr;
}
Index: formats/format_wav.c
===================================================================
--- formats/format_wav.c (revision 110613)
+++ formats/format_wav.c (working copy)
@@ -362,6 +362,9 @@
ast_log(LOG_WARNING, "Short read (%d) (%s)!\n", res, strerror(errno));
return NULL;
}
+ if (feof(s->f)) {
+ ast_set_flag(&s->fr, AST_FRFLAG_LAST);
+ }
s->fr.datalen = res;
s->fr.samples = samples = res / 2;
Index: formats/format_ogg_vorbis.c
===================================================================
--- formats/format_ogg_vorbis.c (revision 110613)
+++ formats/format_ogg_vorbis.c (working copy)
@@ -483,6 +483,10 @@
fs->fr.samples = samples_out;
*whennext = samples_out;
+ if (feof(fs->f)) {
+ ast_set_flag(&fs->fr, AST_FRFLAG_LAST);
+ }
+
return &fs->fr;
} else {
return NULL;
Index: formats/format_sln16.c
===================================================================
--- formats/format_sln16.c (revision 110613)
+++ formats/format_sln16.c (working copy)
@@ -48,7 +48,10 @@
ast_log(LOG_WARNING, "Short read (%d) (%s)!\n", res, strerror(errno));
return NULL;
}
- *whennext = s->fr.samples = res/2;
+ *whennext = s->fr.samples = res / 2;
+ if (feof(s->f)) {
+ ast_set_flag(&s->fr, AST_FRFLAG_LAST);
+ }
s->fr.datalen = res;
return &s->fr;
}
Index: formats/format_wav_gsm.c
===================================================================
--- formats/format_wav_gsm.c (revision 110613)
+++ formats/format_wav_gsm.c (working copy)
@@ -413,6 +413,9 @@
/* Just return a frame based on the second GSM frame */
s->fr.data = (char *)s->fr.data + GSM_FRAME_SIZE;
s->fr.offset += GSM_FRAME_SIZE;
+ if (feof(s->f)) {
+ ast_set_flag(&s->fr, AST_FRFLAG_LAST);
+ }
} else {
/* read and convert */
unsigned char msdata[MSGSM_FRAME_SIZE];
Index: formats/format_ilbc.c
===================================================================
--- formats/format_ilbc.c (revision 110613)
+++ formats/format_ilbc.c (working copy)
@@ -53,6 +53,9 @@
ast_log(LOG_WARNING, "Short read (%d) (%s)!\n", res, strerror(errno));
return NULL;
}
+ if (feof(s->f)) {
+ ast_set_flag(&s->fr, AST_FRFLAG_LAST);
+ }
*whennext = s->fr.samples = ILBC_SAMPLES;
return &s->fr;
}
Index: formats/format_vox.c
===================================================================
--- formats/format_vox.c (revision 110613)
+++ formats/format_vox.c (working copy)
@@ -49,6 +49,9 @@
ast_log(LOG_WARNING, "Short read (%d) (%s)!\n", res, strerror(errno));
return NULL;
}
+ if (feof(s->f)) {
+ ast_set_flag(&s->fr, AST_FRFLAG_LAST);
+ }
*whennext = s->fr.samples = res * 2;
s->fr.datalen = res;
return &s->fr;
Index: formats/format_pcm.c
===================================================================
--- formats/format_pcm.c (revision 110613)
+++ formats/format_pcm.c (working copy)
@@ -88,6 +88,9 @@
ast_log(LOG_WARNING, "Short read (%d) (%s)!\n", res, strerror(errno));
return NULL;
}
+ if (feof(s->f)) {
+ ast_set_flag(&s->fr, AST_FRFLAG_LAST);
+ }
s->fr.datalen = res;
if (s->fmt->format == AST_FORMAT_G722)
*whennext = s->fr.samples = res * 2;
Index: formats/format_g723.c
===================================================================
--- formats/format_g723.c (revision 110613)
+++ formats/format_g723.c (working copy)
@@ -68,6 +68,9 @@
ast_log(LOG_WARNING, "Short read (%d of %d bytes) (%s)!\n", res, size, strerror(errno));
return NULL;
}
+ if (feof(s->f)) {
+ ast_set_flag(&s->fr, AST_FRFLAG_LAST);
+ }
*whennext = s->fr.samples = 240;
return &s->fr;
}
Index: formats/format_g726.c
===================================================================
--- formats/format_g726.c (revision 110613)
+++ formats/format_g726.c (working copy)
@@ -128,6 +128,9 @@
ast_log(LOG_WARNING, "Short read (%d) (%s)!\n", res, strerror(errno));
return NULL;
}
+ if (feof(s->f)) {
+ ast_set_flag(&s->fr, AST_FRFLAG_LAST);
+ }
*whennext = s->fr.samples;
return &s->fr;
}