1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
|
/* $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_VID_CODEC_UTIL_H__
#define __PJMEDIA_VID_CODEC_UTIL_H__
/**
* @file vid_codec_util.h
* @brief Video codec utilities.
*/
#include <pjmedia/vid_codec.h>
#include <pjmedia/sdp_neg.h>
PJ_BEGIN_DECL
/**
* Definition of H.263 parameters.
*/
typedef struct pjmedia_vid_codec_h263_fmtp
{
unsigned mpi_cnt; /**< # of parsed MPI param */
struct mpi {
pjmedia_rect_size size; /**< Picture size/resolution */
unsigned val; /**< MPI value */
} mpi[32]; /**< Minimum Picture Interval parameter */
} pjmedia_vid_codec_h263_fmtp;
/**
* Parse SDP fmtp of H.263.
*
* @param fmtp The H.263 SDP fmtp to be parsed.
* @param h263_fmtp The parsing result.
*
* @return PJ_SUCCESS on success.
*/
PJ_DECL(pj_status_t) pjmedia_vid_codec_h263_parse_fmtp(
const pjmedia_codec_fmtp *fmtp,
pjmedia_vid_codec_h263_fmtp *h263_fmtp);
/**
* Parse, negotiate, and apply the encoding and decoding SDP fmtp of H.263
* in the specified codec parameter.
*
* @param param The codec parameter.
*
* @return PJ_SUCCESS on success.
*/
PJ_DECL(pj_status_t) pjmedia_vid_codec_h263_apply_fmtp(
pjmedia_vid_codec_param *param);
/**
* Definition of H.264 parameters.
*/
typedef struct pjmedia_vid_codec_h264_fmtp
{
/* profile-level-id */
pj_uint8_t profile_idc; /**< Profile ID */
pj_uint8_t profile_iop; /**< Profile constraints bits */
pj_uint8_t level; /**< Level */
/* packetization-mode */
pj_uint8_t packetization_mode; /**< Packetization mode */
/* max-mbps, max-fs, max-cpb, max-dpb, and max-br */
unsigned max_mbps; /**< Max macroblock processing rate */
unsigned max_fs; /**< Max frame size (in macroblocks) */
unsigned max_cpb; /**< Max coded picture buffer size */
unsigned max_dpb; /**< Max decoded picture buffer size */
unsigned max_br; /**< Max video bit rate */
/* sprop-parameter-sets, in NAL units */
pj_size_t sprop_param_sets_len; /**< Parameter set length */
pj_uint8_t sprop_param_sets[256]; /**< Parameter set (SPS & PPS),
in NAL unit bitstream */
} pjmedia_vid_codec_h264_fmtp;
/**
* Parse SDP fmtp of H.264.
*
* @param fmtp The H.264 SDP fmtp to be parsed.
* @param h264_fmtp The parsing result.
*
* @return PJ_SUCCESS on success.
*/
PJ_DECL(pj_status_t) pjmedia_vid_codec_h264_parse_fmtp(
const pjmedia_codec_fmtp *fmtp,
pjmedia_vid_codec_h264_fmtp *h264_fmtp);
/**
* Match H.264 format in the SDP media offer and answer. This will compare
* H.264 identifier parameters in SDP fmtp, i.e: "profile-level-id" and
* "packetization-mode" fields. For better interoperability, when the option
* #PJMEDIA_SDP_NEG_FMT_MATCH_ALLOW_MODIFY_ANSWER is set, this function
* may update the answer so the parameters in the answer match to ones
* in the offer.
*
* @param pool The memory pool.
* @param offer The SDP media offer.
* @param o_fmt_idx Index of the H.264 format in the SDP media offer.
* @param answer The SDP media answer.
* @param a_fmt_idx Index of the H.264 format in the SDP media answer.
* @param option The format matching option, see
* #pjmedia_sdp_neg_fmt_match_flag.
*
* @return PJ_SUCCESS when the formats in offer and answer match.
*/
PJ_DECL(pj_status_t) pjmedia_vid_codec_h264_match_sdp(
pj_pool_t *pool,
pjmedia_sdp_media *offer,
unsigned o_fmt_idx,
pjmedia_sdp_media *answer,
unsigned a_fmt_idx,
unsigned option);
/**
* Parse and apply the encoding and decoding SDP fmtp of H.264 in the
* specified codec parameter. This will validate size and fps to conform
* to H.264 level specified in SDP fmtp "profile-level-id".
*
* @param param The codec parameter.
*
* @return PJ_SUCCESS on success.
*/
PJ_DECL(pj_status_t) pjmedia_vid_codec_h264_apply_fmtp(
pjmedia_vid_codec_param *param);
PJ_END_DECL
#endif /* __PJMEDIA_VID_CODEC_UTIL_H__ */
|