Bug #1087. Fix wav49 format so it can be played. Make file functions
looking for extension use f->exts instead of f->name. Fix bug where error message didn't print file extension. Fix comments in header file. Everything is completely backwards compatible git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@2247 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
parent
38198d8cb3
commit
462cfbe8ae
|
@ -30,13 +30,13 @@ static char *app = "Record";
|
|||
static char *synopsis = "Record to a file";
|
||||
|
||||
static char *descrip =
|
||||
" Record(filename:extension|silence): Records from the channel into a given\n"
|
||||
" Record(filename:format|silence): Records from the channel into a given\n"
|
||||
"filename. If the file exists it will be overwritten. \n"
|
||||
"- 'extension' is the extension of the file type to be recorded (wav, gsm, etc).\n"
|
||||
"- 'format' is the format of the file type to be recorded (wav, gsm, etc).\n"
|
||||
"- 'silence' is the number of seconds of silence to allow before returning.\n\n"
|
||||
"If filename contains '%d', these characters will be replaced with a number\n"
|
||||
"incremented by one each time the file is recorded. \n\n"
|
||||
"Extensions: g723, g729, gsm, h263, ulaw, alaw, vox, wav, WAV\n\n"
|
||||
"Formats: g723, g729, gsm, h263, ulaw, alaw, vox, wav, WAV\n\n"
|
||||
"Returns -1 when the user hangs up.\n";
|
||||
|
||||
STANDARD_LOCAL_USER;
|
||||
|
|
24
file.c
24
file.c
|
@ -287,6 +287,22 @@ static char *build_filename(char *filename, char *ext)
|
|||
|
||||
}
|
||||
|
||||
static int exts_compare(char *exts, char *type)
|
||||
{
|
||||
char *stringp = NULL, *ext;
|
||||
char tmp[256];
|
||||
|
||||
strncpy(tmp, exts, sizeof(tmp) - 1);
|
||||
stringp = tmp;
|
||||
while ((ext = strsep(&stringp, "|"))) {
|
||||
if (!strcmp(ext, type)) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define ACTION_EXISTS 1
|
||||
#define ACTION_DELETE 2
|
||||
#define ACTION_RENAME 3
|
||||
|
@ -319,7 +335,7 @@ static int ast_filehelper(char *filename, char *filename2, char *fmt, int action
|
|||
}
|
||||
f = formats;
|
||||
while(f) {
|
||||
if (!fmt || !strcasecmp(f->name, fmt)) {
|
||||
if (!fmt || exts_compare(f->exts, fmt)) {
|
||||
char *stringp=NULL;
|
||||
exts = strdup(f->exts);
|
||||
/* Try each kind of extension */
|
||||
|
@ -376,7 +392,7 @@ static int ast_filehelper(char *filename, char *filename2, char *fmt, int action
|
|||
chan->vstream = s;
|
||||
} else {
|
||||
close(ret);
|
||||
ast_log(LOG_WARNING, "Unable to open fd on %s\n", filename);
|
||||
ast_log(LOG_WARNING, "Unable to open fd on %s\n", fn);
|
||||
}
|
||||
} else
|
||||
ast_log(LOG_WARNING, "Couldn't open file %s\n", fn);
|
||||
|
@ -748,7 +764,7 @@ struct ast_filestream *ast_readfile(char *filename, char *type, char *comment, i
|
|||
}
|
||||
f = formats;
|
||||
while(f) {
|
||||
if (!strcasecmp(f->name, type)) {
|
||||
if (exts_compare(f->exts, type)) {
|
||||
char *stringp=NULL;
|
||||
/* XXX Implement check XXX */
|
||||
ext = strdup(f->exts);
|
||||
|
@ -803,7 +819,7 @@ struct ast_filestream *ast_writefile(char *filename, char *type, char *comment,
|
|||
|
||||
f = formats;
|
||||
while(f) {
|
||||
if (!strcasecmp(f->name, type)) {
|
||||
if (exts_compare(f->exts, type)) {
|
||||
char *stringp=NULL;
|
||||
/* XXX Implement check XXX */
|
||||
ext = strdup(f->exts);
|
||||
|
|
|
@ -47,7 +47,7 @@ static int glistcnt = 0;
|
|||
|
||||
static char *name = "g723sf";
|
||||
static char *desc = "G.723.1 Simple Timestamp File Format";
|
||||
static char *exts = "g723";
|
||||
static char *exts = "g723|g723sf";
|
||||
|
||||
static struct ast_filestream *g723_open(int fd)
|
||||
{
|
||||
|
|
|
@ -68,7 +68,7 @@ static int glistcnt = 0;
|
|||
|
||||
static char *name = "wav49";
|
||||
static char *desc = "Microsoft WAV format (Proprietary GSM)";
|
||||
static char *exts = "WAV";
|
||||
static char *exts = "WAV|wav49";
|
||||
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
#define htoll(b) (b)
|
||||
|
@ -199,10 +199,12 @@ static int check_header(int fd)
|
|||
ast_log(LOG_WARNING, "Read failed (data)\n");
|
||||
return -1;
|
||||
}
|
||||
#if 0 /* Does this header actually exist? It doesn't appear to in the files that are created with ast_writefile using this format */
|
||||
if (memcmp(&data, "data", 4)) {
|
||||
ast_log(LOG_WARNING, "Does not say data\n");
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
/* Ignore the data length */
|
||||
if (read(fd, &data, 4) != 4) {
|
||||
ast_log(LOG_WARNING, "Read failed (data)\n");
|
||||
|
|
|
@ -142,19 +142,19 @@ char ast_waitstream_full(struct ast_channel *c, char *breakon, int audiofd, int
|
|||
|
||||
//! Starts reading from a file
|
||||
/*!
|
||||
* \param filename the name of the file to write to
|
||||
* \param type format of file you wish to write out to
|
||||
* \param filename the name of the file to read from
|
||||
* \param type format of file you wish to read from
|
||||
* \param comment comment to go with
|
||||
* \param oflags output file flags
|
||||
* \param flags file flags
|
||||
* \param check (unimplemented, hence negligible)
|
||||
* \param mode Open mode
|
||||
* Open an incoming file stream. oflags are flags for the open() command, and
|
||||
* if check is non-zero, then it will not write a file if there are any files that
|
||||
* Open an incoming file stream. flags are flags for the open() command, and
|
||||
* if check is non-zero, then it will not read a file if there are any files that
|
||||
* start with that name and have an extension
|
||||
* Please note, this is a blocking function. Program execution will not return until ast_waitstream completes it's execution.
|
||||
* Returns a struct ast_filestream on success, NULL on failure
|
||||
*/
|
||||
struct ast_filestream *ast_readfile(char *filename, char *type, char *comment, int oflags, int check, mode_t mode);
|
||||
struct ast_filestream *ast_readfile(char *filename, char *type, char *comment, int flags, int check, mode_t mode);
|
||||
|
||||
//! Starts writing a file
|
||||
/*!
|
||||
|
@ -170,7 +170,7 @@ struct ast_filestream *ast_readfile(char *filename, char *type, char *comment, i
|
|||
* Please note, this is a blocking function. Program execution will not return until ast_waitstream completes it's execution.
|
||||
* Returns a struct ast_filestream on success, NULL on failure
|
||||
*/
|
||||
struct ast_filestream *ast_writefile(char *filename, char *type, char *comment, int oflags, int check, mode_t mode);
|
||||
struct ast_filestream *ast_writefile(char *filename, char *type, char *comment, int flags, int check, mode_t mode);
|
||||
|
||||
//! Writes a frame to a stream
|
||||
/*!
|
||||
|
|
Loading…
Reference in New Issue