123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342 |
- /*
- * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
- * Copyright (C) 2003-2008 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
- */
- #ifndef __PJMEDIA_WAV_PORT_H__
- #define __PJMEDIA_WAV_PORT_H__
- /**
- * @file wav_port.h
- * @brief WAV file player and writer.
- */
- #include <pjmedia/port.h>
- PJ_BEGIN_DECL
- /**
- * @defgroup PJMEDIA_FILE_PLAY WAV File Player
- * @ingroup PJMEDIA_PORT
- * @brief Audio playback from WAV file
- * @{
- */
- /**
- * WAV file player options.
- */
- enum pjmedia_file_player_option
- {
- /**
- * Tell the file player to return NULL frame when the whole
- * file has been played.
- */
- PJMEDIA_FILE_NO_LOOP = 1
- };
- /**
- * Additional information about the WAV player.
- */
- typedef struct pjmedia_wav_player_info
- {
- /**
- * Format ID of the payload.
- */
- pjmedia_format_id fmt_id;
- /**
- * The number of bits per sample of the file payload. For example,
- * the value is 16 for PCM WAV and 8 for Alaw/Ulas WAV files.
- */
- unsigned payload_bits_per_sample;
- /**
- * The WAV payload size in bytes.
- */
- pj_uint32_t size_bytes;
- /**
- * The WAV payload size in samples.
- */
- pj_uint32_t size_samples;
- } pjmedia_wav_player_info;
- /**
- * Create a media port to play streams from a WAV file. WAV player port
- * supports for reading WAV file with uncompressed 16 bit PCM format or
- * compressed G.711 A-law/U-law format.
- *
- * @param pool Pool to create memory buffers for this port.
- * @param filename File name to open.
- * @param ptime The duration (in miliseconds) of each frame read
- * from this port. If the value is zero, the default
- * duration (20ms) will be used.
- * @param flags Port creation flags.
- * @param buff_size Buffer size to be allocated. If the value is zero or
- * negative, the port will use default buffer size (which
- * is about 4KB).
- * @param p_port Pointer to receive the file port instance.
- *
- * @return PJ_SUCCESS on success.
- */
- PJ_DECL(pj_status_t) pjmedia_wav_player_port_create( pj_pool_t *pool,
- const char *filename,
- unsigned ptime,
- unsigned flags,
- pj_ssize_t buff_size,
- pjmedia_port **p_port );
- /**
- * Get additional info about the file player.
- *
- * @param port The file port.
- * @param i The info.
- *
- * @return PJ_SUCCESS on success or the appropriate error code.
- */
- PJ_DECL(pj_status_t) pjmedia_wav_player_get_info(pjmedia_port *port,
- pjmedia_wav_player_info *i);
- /**
- * Get the data length, in bytes.
- *
- * @param port The file player port.
- *
- * @return The length of the data, in bytes. On error, the
- * error code is given as negative value.
- */
- PJ_DECL(pj_ssize_t) pjmedia_wav_player_get_len(pjmedia_port *port);
- /**
- * Set the file play position of WAV player.
- *
- * @param port The file player port.
- * @param offset Playback position in bytes, relative to the start of
- * the payload.
- *
- * @return PJ_SUCCESS on success.
- */
- PJ_DECL(pj_status_t) pjmedia_wav_player_port_set_pos( pjmedia_port *port,
- pj_uint32_t offset );
- /**
- * Get the file play position of WAV player, in bytes.
- *
- * @param port The file player port.
- *
- * @return The current play position, in bytes. On error, the
- * error code is given as negative value.
- */
- PJ_DECL(pj_ssize_t) pjmedia_wav_player_port_get_pos( pjmedia_port *port );
- #if !DEPRECATED_FOR_TICKET_2251
- /**
- * Register a callback to be called when the file reading has reached the
- * end of file. If the file is set to play repeatedly, then the callback
- * will be called multiple times. Note that only one callback can be
- * registered for each file port.
- *
- * @param port The file player port.
- * @param user_data User data to be specified in the callback
- * @param cb Callback to be called. If the callback returns non-
- * PJ_SUCCESS, the playback will stop. Note that if
- * application destroys the file port in the callback,
- * it must return non-PJ_SUCCESS here.
- *
- * @return PJ_SUCCESS on success.
- */
- PJ_DECL(pj_status_t)
- pjmedia_wav_player_set_eof_cb( pjmedia_port *port,
- void *user_data,
- pj_status_t (*cb)(pjmedia_port *port,
- void *usr_data));
- #endif
- /**
- * Register a callback to be called when the file reading has reached the
- * end of file. If the file is set to play repeatedly, then the callback
- * will be called multiple times. Note that only one callback can be
- * registered for each file port.
- *
- * @param port The file player port.
- * @param user_data User data to be specified in the callback
- * @param cb Callback to be called. Note that if
- * application wishes to stop the playback, it
- * can disconnect the port in the callback, and
- * only after all connections have been removed
- * could the application safely destroy the port.
- *
- * @return PJ_SUCCESS on success.
- */
- PJ_DECL(pj_status_t)
- pjmedia_wav_player_set_eof_cb2(pjmedia_port *port,
- void *user_data,
- void (*cb)(pjmedia_port *port,
- void *usr_data));
- /**
- * @}
- */
- /**
- * @defgroup PJMEDIA_FILE_REC File Writer (Recorder)
- * @ingroup PJMEDIA_PORT
- * @brief Audio capture/recording to WAV file
- * @{
- */
- /**
- * WAV file writer options.
- */
- enum pjmedia_file_writer_option
- {
- /**
- * Tell the file writer to save the audio in PCM format.
- */
- PJMEDIA_FILE_WRITE_PCM = 0,
- /**
- * Tell the file writer to save the audio in G711 Alaw format.
- */
- PJMEDIA_FILE_WRITE_ALAW = 1,
- /**
- * Tell the file writer to save the audio in G711 Alaw format.
- */
- PJMEDIA_FILE_WRITE_ULAW = 2,
- };
- /**
- * Create a media port to record streams to a WAV file. Note that the port
- * must be closed properly (with #pjmedia_port_destroy()) so that the WAV
- * header can be filled with correct values (such as the file length).
- * WAV writer port supports for writing audio in uncompressed 16 bit PCM format
- * or compressed G.711 U-law/A-law format, this needs to be specified in
- * \a flags param.
- *
- * @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 flags Port creation flags, see
- * #pjmedia_file_writer_option.
- * @param buff_size Buffer size to be allocated. If the value is
- * zero or negative, the port will use default buffer
- * size (which is about 4KB).
- * @param p_port Pointer to receive the file port instance.
- *
- * @return PJ_SUCCESS on success.
- */
- PJ_DECL(pj_status_t) pjmedia_wav_writer_port_create(pj_pool_t *pool,
- const char *filename,
- unsigned clock_rate,
- unsigned channel_count,
- unsigned samples_per_frame,
- unsigned bits_per_sample,
- unsigned flags,
- pj_ssize_t buff_size,
- pjmedia_port **p_port );
- /**
- * Get current writing position. Note that this does not necessarily match
- * the size written to the file, since the WAV writer employs some internal
- * buffering. Also the value reported here only indicates the payload size
- * (it does not include the size of the WAV header),
- *
- * @param port The file writer port.
- *
- * @return Positive value to indicate the position (in bytes),
- * or negative value containing the error code.
- */
- PJ_DECL(pj_ssize_t) pjmedia_wav_writer_port_get_pos( pjmedia_port *port );
- #if !DEPRECATED_FOR_TICKET_2251
- /**
- * 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_wav_writer_port_set_cb( pjmedia_port *port,
- pj_size_t pos,
- void *user_data,
- pj_status_t (*cb)(pjmedia_port *port,
- void *usr_data));
- #endif
- /**
- * 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. Note that if
- * application wishes to stop the writing, it
- * can disconnect the port in the callback, and
- * only after all connections have been removed
- * could the application safely destroy the port.
- *
- * @return PJ_SUCCESS on success.
- */
- PJ_DECL(pj_status_t)
- pjmedia_wav_writer_port_set_cb2(pjmedia_port *port,
- pj_size_t pos,
- void *user_data,
- void (*cb)(pjmedia_port *port,
- void *usr_data));
- /**
- * @}
- */
- PJ_END_DECL
- #endif /* __PJMEDIA_WAV_PORT_H__ */
|