diff options
Diffstat (limited to 'third_party/mp3/mp3_port.h')
-rw-r--r-- | third_party/mp3/mp3_port.h | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/third_party/mp3/mp3_port.h b/third_party/mp3/mp3_port.h new file mode 100644 index 00000000..a4fc7e5f --- /dev/null +++ b/third_party/mp3/mp3_port.h @@ -0,0 +1,147 @@ +/* $Id$ */ +/* + * Copyright (C) 2003-2007 Benny Prijono <benny@prijono.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* + * Contributed by: + * Toni < buldozer at aufbix dot org > + */ + +#ifndef __PJMEDIA_MP3_PORT_H__ +#define __PJMEDIA_MP3_PORT_H__ + + +/** + * @file mp3_port.h + * @brief MP3 writer + */ +#include <pjmedia/port.h> + +/** + * @defgroup PJMEDIA_MP3_FILE_REC MP3 Audio File Writer (Recorder) + * @ingroup PJMEDIA_PORT + * @brief MP3 Audio File Writer (Recorder) + * @{ + * + * This section describes MP3 file writer. Currently it only works on Windows + * using BladeEncDLL of the LAME MP3 encoder. <b>Note that the LAME_ENC.DLL + * file must exist in the PATH so that the encoder can work properly.</b> + * + * The MP3 file writer is created with #pjmedia_mp3_writer_port_create() which + * among other things specifies the desired file name and audio properties. + * It then takes PCM input when #pjmedia_port_put_frame() is called and encode + * the PCM input into MP3 streams before writing it to the .mp3 file. + */ + + +PJ_BEGIN_DECL + + +/** + * This structure contains encoding options that can be specified during + * MP3 writer port creation. Application should always zero the structure + * before setting some value to make sure that default options will be used. + */ +typedef struct pjmedia_mp3_encoder_option +{ + /** Specify whether variable bit rate should be used. Variable bitrate + * would normally produce better quality at the expense of probably + * larger file. + */ + pj_bool_t vbr; + + /** Target bitrate, in bps. If VBR is enabled, this settings specifies + * the average bit-rate requested, and will make the encoder ignore + * the quality setting. For CBR, this specifies the actual bitrate, + * and if this option is zero, it will be set to the sampling rate + * multiplied by number of channels. + */ + unsigned bit_rate; + + /** Encoding quality, 0-9, with 0 is the highest quality. For VBR, the + * quality setting will only take effect when bit_rate setting is zero. + */ + unsigned quality; + +} pjmedia_mp3_encoder_option; + + +/** + * Create a media port to record PCM media to a MP3 file. After the port + * is created, application can call #pjmedia_port_put_frame() to feed the + * port with PCM frames. The port then will encode the PCM frame into MP3 + * stream, and store it to MP3 file specified in the argument. + * + * When application has finished with writing MP3 file, it must destroy the + * media port with #pjmedia_port_destroy() so that the MP3 file can be + * closed properly. + * + * @param pool Pool to create memory buffers for this port. + * @param filename File name. + * @param clock_rate The sampling rate. + * @param channel_count Number of channels. + * @param samples_per_frame Number of samples per frame. + * @param bits_per_sample Number of bits per sample (eg 16). + * @param option Optional option to set encoding parameters. + * @param p_port Pointer to receive the file port instance. + * + * @return PJ_SUCCESS on success. + */ +PJ_DECL(pj_status_t) +pjmedia_mp3_writer_port_create(pj_pool_t *pool, + const char *filename, + unsigned clock_rate, + unsigned channel_count, + unsigned samples_per_frame, + unsigned bits_per_sample, + const pjmedia_mp3_encoder_option *option, + pjmedia_port **p_port ); + +/** + * Register the callback to be called when the file writing has reached + * certain size. Application can use this callback, for example, to limit + * the size of the output file. + * + * @param port The file writer port. + * @param pos The file position on which the callback will be called. + * @param user_data User data to be specified in the callback, and will be + * given on the callback. + * @param cb Callback to be called. If the callback returns non- + * PJ_SUCCESS, the writing will stop. Note that if + * application destroys the port in the callback, it must + * return non-PJ_SUCCESS here. + * + * @return PJ_SUCCESS on success. + */ +PJ_DECL(pj_status_t) +pjmedia_mp3_writer_port_set_cb( pjmedia_port *port, + pj_size_t pos, + void *user_data, + pj_status_t (*cb)(pjmedia_port *port, + void *usr_data)); + + +/** + * @} + */ + + +PJ_END_DECL + +#endif /* __PJMEDIA_MP3_PORT_H__ */ + |