123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- /*
- * 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_RESAMPLE_H__
- #define __PJMEDIA_RESAMPLE_H__
- /**
- * @file resample.h
- * @brief Sample rate converter.
- */
- #include <pjmedia/types.h>
- #include <pjmedia/port.h>
- /**
- * @defgroup PJMEDIA_RESAMPLE Resampling Algorithm
- * @ingroup PJMEDIA_FRAME_OP
- * @brief Sample rate conversion algorithm
- * @{
- *
- * This section describes the base resampling functions. In addition to this,
- * application can use the @ref PJMEDIA_RESAMPLE_PORT which provides
- * media port abstraction for the base resampling algorithm.
- */
- PJ_BEGIN_DECL
- /*
- * This file declares two types of API:
- *
- * Application can use #pjmedia_resample_create() and #pjmedia_resample_run()
- * to convert a frame from source rate to destination rate. The inpuit frame
- * must have a constant length.
- *
- * Alternatively, application can create a resampling port with
- * #pjmedia_resample_port_create() and connect the port to other ports to
- * change the sampling rate of the samples.
- */
- /**
- * Opaque resample session.
- */
- typedef struct pjmedia_resample pjmedia_resample;
- /**
- * Create a frame based resample session.
- *
- * @param pool Pool to allocate the structure and buffers.
- * @param high_quality If true, then high quality conversion will be
- * used, at the expense of more CPU and memory,
- * because temporary buffer needs to be created.
- * @param large_filter If true, large filter size will be used.
- * @param channel_count Number of channels.
- * @param rate_in Clock rate of the input samples.
- * @param rate_out Clock rate of the output samples.
- * @param samples_per_frame Number of samples per frame in the input.
- * @param p_resample Pointer to receive the resample session.
- *
- * @return PJ_SUCCESS on success.
- */
- PJ_DECL(pj_status_t) pjmedia_resample_create(pj_pool_t *pool,
- pj_bool_t high_quality,
- pj_bool_t large_filter,
- unsigned channel_count,
- unsigned rate_in,
- unsigned rate_out,
- unsigned samples_per_frame,
- pjmedia_resample **p_resample);
- /**
- * Use the resample session to resample a frame. The frame must have the
- * same size and settings as the resample session, or otherwise the
- * behavior is undefined.
- *
- * @param resample The resample session.
- * @param input Buffer containing the input samples.
- * @param output Buffer to store the output samples.
- */
- PJ_DECL(void) pjmedia_resample_run( pjmedia_resample *resample,
- const pj_int16_t *input,
- pj_int16_t *output );
- /**
- * Get the input frame size of a resample session.
- *
- * @param resample The resample session.
- *
- * @return The frame size, in number of samples.
- */
- PJ_DECL(unsigned) pjmedia_resample_get_input_size(pjmedia_resample *resample);
- /**
- * Destroy the resample.
- *
- * @param resample The resample session.
- */
- PJ_DECL(void) pjmedia_resample_destroy(pjmedia_resample *resample);
- /**
- * @}
- */
- /**
- * @defgroup PJMEDIA_RESAMPLE_PORT Resample Port
- * @ingroup PJMEDIA_PORT
- * @brief Audio sample rate conversion
- * @{
- *
- * This section describes media port abstraction for @ref PJMEDIA_RESAMPLE.
- */
- /**
- * Option flags that can be specified when creating resample port.
- */
- enum pjmedia_resample_port_options
- {
- /**
- * Do not use high quality resampling algorithm, but use linear
- * algorithm instead.
- */
- PJMEDIA_RESAMPLE_USE_LINEAR = 1,
- /**
- * Use small filter workspace when high quality resampling is
- * used.
- */
- PJMEDIA_RESAMPLE_USE_SMALL_FILTER = 2,
- /**
- * Do not destroy downstream port when resample port is destroyed.
- */
- PJMEDIA_RESAMPLE_DONT_DESTROY_DN = 4
- };
- /**
- * Create a resample port. This creates a bidirectional resample session,
- * which will resample frames when the port's get_frame() and put_frame()
- * is called.
- *
- * When the resample port's get_frame() is called, this port will get
- * a frame from the downstream port and resample the frame to the target
- * clock rate before returning it to the caller.
- *
- * When the resample port's put_frame() is called, this port will resample
- * the frame to the downstream port's clock rate before giving the frame
- * to the downstream port.
- *
- * @param pool Pool to allocate the structure and buffers.
- * @param dn_port The downstream port, which clock rate is to
- * be converted to the target clock rate.
- * @param clock_rate Target clock rate.
- * @param options Flags from #pjmedia_resample_port_options.
- * When this flag is zero, the default behavior
- * is to use high quality resampling with
- * large filter, and to destroy downstream port
- * when resample port is destroyed.
- * @param p_port Pointer to receive the resample port instance.
- *
- * @return PJ_SUCCESS on success.
- */
- PJ_DECL(pj_status_t) pjmedia_resample_port_create( pj_pool_t *pool,
- pjmedia_port *dn_port,
- unsigned clock_rate,
- unsigned options,
- pjmedia_port **p_port );
- PJ_END_DECL
- /**
- * @}
- */
- #endif /* __PJMEDIA_RESAMPLE_H__ */
|