blob: 77f236de8ec82d7a392b30c434f6dc1922277214 [file] [log] [blame]
/* $Id$ */
/*
* 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_MEM_PORT_H__
#define __PJMEDIA_MEM_PORT_H__
/**
* @file mem_port.h
* @brief Memory based media playback/capture port
*/
#include <pjmedia/port.h>
PJ_BEGIN_DECL
/**
* @defgroup PJMEDIA_MEM_PLAYER Memory/Buffer-based Playback Port
* @ingroup PJMEDIA_PORT
* @brief Media playback from a fixed size memory buffer
* @{
*
* A memory/buffer based playback port is used to play media from a fixed
* size buffer. This is useful over @ref PJMEDIA_FILE_PLAY for
* situation where filesystems are not available in the target system.
*/
/**
* Memory player options.
*/
enum pjmedia_mem_player_option
{
/**
* Tell the memory player to return NULL frame when the whole
* buffer has been played instead of rewinding the buffer back
* to start position.
*/
PJMEDIA_MEM_NO_LOOP = 1
};
/**
* Create the buffer based playback to play the media from the specified
* buffer.
*
* @param pool Pool to allocate memory for the port structure.
* @param buffer The buffer to play the media from, which should
* be available throughout the life time of the port.
* The player plays the media directly from this
* buffer (i.e. no copying is done).
* @param size The size of the buffer, in bytes.
* @param clock_rate 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.
* @param options Option flags, see #pjmedia_mem_player_option
* @param p_port Pointer to receive the port instance.
*
* @return PJ_SUCCESS on success, or the appropriate
* error code.
*/
PJ_DECL(pj_status_t) pjmedia_mem_player_create(pj_pool_t *pool,
const void *buffer,
pj_size_t size,
unsigned clock_rate,
unsigned channel_count,
unsigned samples_per_frame,
unsigned bits_per_sample,
unsigned options,
pjmedia_port **p_port );
/**
* Register a callback to be called when the buffer reading has reached the
* end of buffer. If the player is set to play repeatedly, then the callback
* will be called multiple times. Note that only one callback can be
* registered for each player port.
*
* @param port The memory 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 player port in the callback,
* it must return non-PJ_SUCCESS here.
*
* @return PJ_SUCCESS on success.
*/
PJ_DECL(pj_status_t)
pjmedia_mem_player_set_eof_cb( pjmedia_port *port,
void *user_data,
pj_status_t (*cb)(pjmedia_port *port,
void *usr_data));
/**
* @}
*/
/**
* @defgroup PJMEDIA_MEM_CAPTURE Memory/Buffer-based Capture Port
* @ingroup PJMEDIA_PORT
* @brief Media capture to fixed size memory buffer
* @{
*
* A memory based capture is used to save media streams to a fixed size
* buffer. This is useful over @ref PJMEDIA_FILE_REC for
* situation where filesystems are not available in the target system.
*/
/**
* Create media port to capture/record media into a fixed size buffer.
*
* @param pool Pool to allocate memory for the port structure.
* @param buffer The buffer to record the media to, which should
* be available throughout the life time of the port.
* @param size The maximum size of the buffer, in bytes.
* @param clock_rate 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.
* @param options Option flags.
* @param p_port Pointer to receive the port instance.
*
* @return PJ_SUCCESS on success, or the appropriate
* error code.
*/
PJ_DECL(pj_status_t) pjmedia_mem_capture_create(pj_pool_t *pool,
void *buffer,
pj_size_t size,
unsigned clock_rate,
unsigned channel_count,
unsigned samples_per_frame,
unsigned bits_per_sample,
unsigned options,
pjmedia_port **p_port);
/**
* Register a callback to be called when no space left in the buffer.
* Note that when a callback is registered, this callback will also be
* called when application destroys the port and the callback has not
* been called before.
*
* @param port The memory recorder 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 recording will stop. In other cases
* recording will be restarted and the rest of the frame
* will be stored starting from the beginning of the
* buffer. Note that if application destroys the capture
* port in the callback, it must return non-PJ_SUCCESS
* here.
*
* @return PJ_SUCCESS on success.
*/
PJ_DECL(pj_status_t)
pjmedia_mem_capture_set_eof_cb(pjmedia_port *port,
void *user_data,
pj_status_t (*cb)(pjmedia_port *port,
void *usr_data));
/**
* Return the current size of the recorded data in the buffer.
*
* @param port The memory recorder port.
* @return The size of buffer data..
*/
PJ_DECL(pj_size_t)
pjmedia_mem_capture_get_size(pjmedia_port *port);
/**
* @}
*/
PJ_END_DECL
#endif /* __PJMEDIA_MEM_PORT_H__ */