diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-10-16 16:12:51 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-10-16 16:12:51 +0000 |
commit | 74600d9030a3cbd53b43ccda099e482aed7357cb (patch) | |
tree | 9833feece35fa9711477b198d46dab2c6d58e60d /formats/format_ogg_vorbis.c | |
parent | 897d8edb51ed4288446304ec5c6811ea4cff540d (diff) |
Use FILE * instead of fd for files to support buffering
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@6801 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'formats/format_ogg_vorbis.c')
-rwxr-xr-x | formats/format_ogg_vorbis.c | 48 |
1 files changed, 24 insertions, 24 deletions
diff --git a/formats/format_ogg_vorbis.c b/formats/format_ogg_vorbis.c index e8cb733f1..b39a7741c 100755 --- a/formats/format_ogg_vorbis.c +++ b/formats/format_ogg_vorbis.c @@ -54,7 +54,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") struct ast_filestream { void *reserved[AST_RESERVED_POINTERS]; - int fd; + FILE *f; /* structures for handling the Ogg container */ ogg_sync_state oy; @@ -92,10 +92,10 @@ static char *exts = "ogg"; /*! * \brief Create a new OGG/Vorbis filestream and set it up for reading. - * \param fd Descriptor that points to on disk storage of the OGG/Vorbis data. + * \param f File that points to on disk storage of the OGG/Vorbis data. * \return The new filestream. */ -static struct ast_filestream *ogg_vorbis_open(int fd) +static struct ast_filestream *ogg_vorbis_open(FILE *f) { int i; int bytes; @@ -109,12 +109,12 @@ static struct ast_filestream *ogg_vorbis_open(int fd) memset(tmp, 0, sizeof(struct ast_filestream)); tmp->writing = 0; - tmp->fd = fd; + tmp->f = f; ogg_sync_init(&tmp->oy); buffer = ogg_sync_buffer(&tmp->oy, BLOCK_SIZE); - bytes = read(tmp->fd, buffer, BLOCK_SIZE); + bytes = fread(buffer, 1, BLOCK_SIZE, f); ogg_sync_wrote(&tmp->oy, bytes); result = ogg_sync_pageout(&tmp->oy, &tmp->og); @@ -124,7 +124,7 @@ static struct ast_filestream *ogg_vorbis_open(int fd) } else { ast_log(LOG_ERROR, "Input does not appear to be an Ogg bitstream.\n"); } - close(fd); + fclose(f); ogg_sync_clear(&tmp->oy); free(tmp); return NULL; @@ -136,7 +136,7 @@ static struct ast_filestream *ogg_vorbis_open(int fd) if(ogg_stream_pagein(&tmp->os, &tmp->og) < 0) { ast_log(LOG_ERROR, "Error reading first page of Ogg bitstream data.\n"); - close(fd); + fclose(f); ogg_stream_clear(&tmp->os); vorbis_comment_clear(&tmp->vc); vorbis_info_clear(&tmp->vi); @@ -147,7 +147,7 @@ static struct ast_filestream *ogg_vorbis_open(int fd) if(ogg_stream_packetout(&tmp->os, &tmp->op) != 1) { ast_log(LOG_ERROR, "Error reading initial header packet.\n"); - close(fd); + fclose(f); ogg_stream_clear(&tmp->os); vorbis_comment_clear(&tmp->vc); vorbis_info_clear(&tmp->vi); @@ -158,7 +158,7 @@ static struct ast_filestream *ogg_vorbis_open(int fd) if(vorbis_synthesis_headerin(&tmp->vi, &tmp->vc, &tmp->op) < 0) { ast_log(LOG_ERROR, "This Ogg bitstream does not contain Vorbis audio data.\n"); - close(fd); + fclose(f); ogg_stream_clear(&tmp->os); vorbis_comment_clear(&tmp->vc); vorbis_info_clear(&tmp->vi); @@ -181,7 +181,7 @@ static struct ast_filestream *ogg_vorbis_open(int fd) break; if(result < 0) { ast_log(LOG_ERROR, "Corrupt secondary header. Exiting.\n"); - close(fd); + fclose(f); ogg_stream_clear(&tmp->os); vorbis_comment_clear(&tmp->vc); vorbis_info_clear(&tmp->vi); @@ -196,10 +196,10 @@ static struct ast_filestream *ogg_vorbis_open(int fd) } buffer = ogg_sync_buffer(&tmp->oy, BLOCK_SIZE); - bytes = read(tmp->fd, buffer, BLOCK_SIZE); + bytes = fread(buffer, 1, BLOCK_SIZE, f); if(bytes == 0 && i < 2) { ast_log(LOG_ERROR, "End of file before finding all Vorbis headers!\n"); - close(fd); + fclose(f); ogg_stream_clear(&tmp->os); vorbis_comment_clear(&tmp->vc); vorbis_info_clear(&tmp->vi); @@ -231,7 +231,7 @@ static struct ast_filestream *ogg_vorbis_open(int fd) if(tmp->vi.rate != 8000) { ast_log(LOG_ERROR, "Only 8000Hz OGG/Vorbis files are currently supported!\n"); - close(fd); + fclose(f); ogg_stream_clear(&tmp->os); vorbis_block_clear(&tmp->vb); vorbis_dsp_clear(&tmp->vd); @@ -247,7 +247,7 @@ static struct ast_filestream *ogg_vorbis_open(int fd) if(ast_mutex_lock(&ogg_vorbis_lock)) { ast_log(LOG_WARNING, "Unable to lock ogg_vorbis list\n"); - close(fd); + fclose(f); ogg_stream_clear(&tmp->os); vorbis_block_clear(&tmp->vb); vorbis_dsp_clear(&tmp->vd); @@ -266,11 +266,11 @@ static struct ast_filestream *ogg_vorbis_open(int fd) /*! * \brief Create a new OGG/Vorbis filestream and set it up for writing. - * \param fd File descriptor that points to on-disk storage. + * \param f File pointer that points to on-disk storage. * \param comment Comment that should be embedded in the OGG/Vorbis file. * \return A new filestream. */ -static struct ast_filestream *ogg_vorbis_rewrite(int fd, const char *comment) +static struct ast_filestream *ogg_vorbis_rewrite(FILE *f, const char *comment) { ogg_packet header; ogg_packet header_comm; @@ -282,7 +282,7 @@ static struct ast_filestream *ogg_vorbis_rewrite(int fd, const char *comment) memset(tmp, 0, sizeof(struct ast_filestream)); tmp->writing = 1; - tmp->fd = fd; + tmp->f = f; vorbis_info_init(&tmp->vi); @@ -310,15 +310,15 @@ static struct ast_filestream *ogg_vorbis_rewrite(int fd, const char *comment) while(!tmp->eos) { if(ogg_stream_flush(&tmp->os, &tmp->og) == 0) break; - write(tmp->fd, tmp->og.header, tmp->og.header_len); - write(tmp->fd, tmp->og.body, tmp->og.body_len); + fwrite(tmp->og.header, 1, tmp->og.header_len, tmp->f); + fwrite(tmp->og.body, 1, tmp->og.body_len, tmp->f); if(ogg_page_eos(&tmp->og)) tmp->eos = 1; } if(ast_mutex_lock(&ogg_vorbis_lock)) { ast_log(LOG_WARNING, "Unable to lock ogg_vorbis list\n"); - close(fd); + fclose(f); ogg_stream_clear(&tmp->os); vorbis_block_clear(&tmp->vb); vorbis_dsp_clear(&tmp->vd); @@ -350,8 +350,8 @@ static void write_stream(struct ast_filestream *s) if(ogg_stream_pageout(&s->os, &s->og) == 0) { break; } - write(s->fd, s->og.header, s->og.header_len); - write(s->fd, s->og.body, s->og.body_len); + fwrite(s->og.header, 1, s->og.header_len, s->f); + fwrite(s->og.body, 1, s->og.body_len, s->f); if(ogg_page_eos(&s->og)) { s->eos = 1; } @@ -434,7 +434,7 @@ static void ogg_vorbis_close(struct ast_filestream *s) ogg_sync_clear(&s->oy); } - close(s->fd); + fclose(s->f); free(s); } @@ -503,7 +503,7 @@ static int read_samples(struct ast_filestream *s, float ***pcm) /* get a buffer from OGG to read the data into */ buffer = ogg_sync_buffer(&s->oy, BLOCK_SIZE); /* read more data from the file descriptor */ - bytes = read(s->fd, buffer, BLOCK_SIZE); + bytes = fread(buffer, 1, BLOCK_SIZE, s->f); /* Tell OGG how many bytes we actually read into the buffer */ ogg_sync_wrote(&s->oy, bytes); if(bytes == 0) { |