blob: 64f54b9aac6a94055aba13e4dfac11ff66a92d96 [file] [log] [blame]
Tristan Matthews0a329cc2013-07-17 13:20:14 -04001/* $Id$ */
2/*
3 * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
4 * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 */
20#ifndef __PJMEDIA_PLC_H__
21#define __PJMEDIA_PLC_H__
22
23
24/**
25 * @file plc.h
26 * @brief Packet Lost Concealment (PLC) API.
27 */
28#include <pjmedia/types.h>
29
30/**
31 * @defgroup PJMED_PLC Packet Lost Concealment (PLC)
32 * @ingroup PJMEDIA_FRAME_OP
33 * @brief Packet lost compensation algorithm
34 * @{
35 *
36 * This section describes PJMEDIA's implementation of Packet Lost
37 * Concealment algorithm. This algorithm is used to implement PLC for
38 * codecs that do not have built-in support for one (e.g. G.711 or GSM
39 * codecs).
40 *
41 * The PLC algorithm (either built-in or external) is embedded in
42 * PJMEDIA codec instance, and application can conceal lost frames
43 * by calling <b><tt>recover()</tt></b> member of the codec's member
44 * operation (#pjmedia_codec_op).
45 *
46 * See also @ref plc_codec for more info.
47 */
48
49
50PJ_BEGIN_DECL
51
52
53/**
54 * Opaque declaration for PLC.
55 */
56typedef struct pjmedia_plc pjmedia_plc;
57
58
59
60/**
61 * Create PLC session. This function will select the PLC algorithm to
62 * use based on the arguments.
63 *
64 * @param pool Pool to allocate memory for the PLC.
65 * @param clock_rate Media sampling rate.
66 * @param samples_per_frame Number of samples per frame.
67 * @param options Must be zero for now.
68 * @param p_plc Pointer to receive the PLC instance.
69 *
70 * @return PJ_SUCCESS on success.
71 */
72PJ_DECL(pj_status_t) pjmedia_plc_create( pj_pool_t *pool,
73 unsigned clock_rate,
74 unsigned samples_per_frame,
75 unsigned options,
76 pjmedia_plc **p_plc);
77
78
79/**
80 * Save a good frame to PLC.
81 *
82 * @param plc The PLC session.
83 * @param frame The good frame to be stored to PLC. This frame
84 * must have the same length as the configured
85 * samples per frame.
86 *
87 * @return PJ_SUCCESS on success.
88 */
89PJ_DECL(pj_status_t) pjmedia_plc_save( pjmedia_plc *plc,
90 pj_int16_t *frame );
91
92
93/**
94 * Generate a replacement for lost frame.
95 *
96 * @param plc The PLC session.
97 * @param frame Buffer to receive the generated frame. This buffer
98 * must be able to store the frame.
99 *
100 * @return PJ_SUCCESS on success.
101 */
102PJ_DECL(pj_status_t) pjmedia_plc_generate( pjmedia_plc *plc,
103 pj_int16_t *frame );
104
105
106
107
108PJ_END_DECL
109
110/**
111 * @}
112 */
113
114#endif /* __PJMEDIA_PLC_H__ */
115