MWCapture SDK Mac  3.4.62314
mw_venc_common.h
1#ifndef MW_VENC_COMMON_H
2#define MW_VENC_COMMON_H
3
5// Copyright (c) 2011-2020 Magewell Electronics Co., Ltd. (Nanjing)
6//
7// Permission is hereby granted, free of charge, to any person obtaining a
8// copy of this software and associated documentation files (the "Software"),
9// to deal in the Software without restriction, including without limitation
10// the rights to use, copy, modify, merge, publish, distribute, sublicense,
11// and/or sell copies of the Software, and to permit persons to whom the
12// Software is furnished to do so, subject to the following conditions:
13//
14// The above copyright notice and this permission notice shall be included
15// in all copies or substantial portions of the Software.
16//
17// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23// THE SOFTWARE.
25
26#include <stdint.h>
27
40{
48
59typedef struct mw_venc_frame_info
60{
61 mw_venc_frame_type_t frame_type;
62 int32_t delay;
63 int64_t pts;
65
74typedef void(*MW_ENCODER_CALLBACK)(void * user_ptr, const uint8_t * p_frame, uint32_t frame_len, mw_venc_frame_info_t *p_frame_info);
75
76typedef void(*MW_ENCODER_CALLBACK_NALU)(void * user_ptr, const uint8_t *p_nalu_buf[], uint32_t nalu_len[], uint32_t nalu_num, mw_venc_frame_info_t *p_frame_info);
77
90{
98
111{
118
133{
140
152typedef enum mw_venc_profile
153{
161
173typedef enum mw_venc_level
174{
185
197typedef enum mw_venc_fourcc
198{
212
228{
230 union{
231 struct {
232 uint32_t target_bitrate;
233 uint32_t max_bitrate;
234 };
235 struct {
236 uint8_t qpi;
237 uint8_t qpb;
238 uint8_t qpp;
239 uint8_t reserved;
240 };
241 };
243
257typedef struct mw_venc_fps{
258 int32_t num;
259 int32_t den;
261
272typedef struct mw_venc_extdata {
273 uint8_t *p_extdata;
274 uint32_t extdata_len;
275 uint32_t len[3];
277
287{
298
304typedef enum mw_venc_status
305{
314
315
316//
317
325 MW_VENC_COLOR_PRI_RESERVED0 = 0,
327 MW_VENC_COLOR_PRI_UNSPECIFIED = 2,
328 MW_VENC_COLOR_PRI_RESERVED = 3,
330
337 MW_VENC_COLOR_PRI_SMPTEST428_1 = MW_VENC_COLOR_PRI_SMPTE428,
343
351 MW_VENC_COLOR_TRC_RESERVED0 = 0,
353 MW_VENC_COLOR_TRC_UNSPECIFIED = 2,
354 MW_VENC_COLOR_TRC_RESERVED = 3,
358 MW_VENC_COLOR_TRC_SMPTE240M = 7,
368 MW_VENC_COLOR_TRC_SMPTEST2084 = MW_VENC_COLOR_TRC_SMPTE2084,
370 MW_VENC_COLOR_TRC_SMPTEST428_1 = MW_VENC_COLOR_TRC_SMPTE428,
374
384 MW_VENC_COLOR_SPACE_UNSPECIFIED = 2,
385 MW_VENC_COLOR_SPACE_RESERVED = 3,
391 MW_VENC_COLOR_SPACE_YCOCG = MW_VENC_COLOR_SPACE_YCGCO,
400
401
420typedef struct mw_venc_param {
425 int32_t width;
426 int32_t height;
428 int32_t slice_num;
429 int32_t gop_pic_size;
430 int32_t gop_ref_size;
433 int32_t intel_async_depth;
434 int32_t yuv_is_full_range;
435 mw_venc_color_primaries_t color_primaries;
437 mw_venc_color_space_t color_space;
439
440#endif
void(* MW_ENCODER_CALLBACK)(void *user_ptr, const uint8_t *p_frame, uint32_t frame_len, mw_venc_frame_info_t *p_frame_info)
Callback functions.
Definition: mw_venc_common.h:74
mw_venc_fourcc
mw_venc_fourcc_t
Definition: mw_venc_common.h:198
mw_venc_color_space
mw_venc_color_space_t YUV colorspace type. These values match the ones defined by ISO/IEC 23001-8_201...
Definition: mw_venc_common.h:381
mw_venc_code_type
mw_venc_code_type_t
Definition: mw_venc_common.h:90
mw_venc_frame_type
mw_venc_frame_type_t
Definition: mw_venc_common.h:40
mw_venc_color_primaries
mw_venc_color_primaries_t Chromaticity coordinates of the source primaries. These values match the on...
Definition: mw_venc_common.h:324
enum mw_venc_frame_type mw_venc_frame_type_t
mw_venc_frame_type_t
enum mw_venc_code_type mw_venc_code_type_t
mw_venc_code_type_t
enum mw_venc_rate_control_mode mw_venc_rate_control_mode_t
mw_venc_rate_control_mode_t
mw_venc_level
mw_venc_level_t
Definition: mw_venc_common.h:174
mw_venc_status
mw_venc_status_t
Definition: mw_venc_common.h:305
enum mw_venc_profile mw_venc_profile_t
mw_venc_profile_t
mw_venc_color_transfer_characteristic
mw_venc_color_transfer_characteristic_t Color Transfer Characteristic. These values match the ones de...
Definition: mw_venc_common.h:350
mw_venc_targetusage
mw_venc_targetusage_t
Definition: mw_venc_common.h:111
enum mw_venc_fourcc mw_venc_fourcc_t
mw_venc_fourcc_t
enum mw_venc_level mw_venc_level_t
mw_venc_level_t
enum mw_venc_color_primaries mw_venc_color_primaries_t
mw_venc_color_primaries_t Chromaticity coordinates of the source primaries. These values match the on...
mw_venc_profile
mw_venc_profile_t
Definition: mw_venc_common.h:153
enum mw_venc_color_transfer_characteristic mw_venc_color_transfer_characteristic_t
mw_venc_color_transfer_characteristic_t Color Transfer Characteristic. These values match the ones de...
enum mw_venc_targetusage mw_venc_targetusage_t
mw_venc_targetusage_t
enum mw_venc_status mw_venc_status_t
mw_venc_status_t
enum mw_venc_property mw_venc_property_t
mw_venc_property_t
mw_venc_rate_control_mode
mw_venc_rate_control_mode_t
Definition: mw_venc_common.h:133
mw_venc_property
mw_venc_property_t
Definition: mw_venc_common.h:287
enum mw_venc_color_space mw_venc_color_space_t
mw_venc_color_space_t YUV colorspace type. These values match the ones defined by ISO/IEC 23001-8_201...
@ MW_VENC_FOURCC_UNKNOWN
Unknown.
Definition: mw_venc_common.h:199
@ MW_VENC_FOURCC_ARGB
ARGB equals MWFOURCC_ARGB.
Definition: mw_venc_common.h:208
@ MW_VENC_FOURCC_ABGR
ABGR equals MWFOURCC_ABGR.
Definition: mw_venc_common.h:209
@ MW_VENC_FOURCC_I420
I420 equals MWFOURCC_I420.
Definition: mw_venc_common.h:203
@ MW_VENC_FOURCC_RGBA
RGBA equals MWFOURCC_RGBA.
Definition: mw_venc_common.h:207
@ MW_VENC_FOURCC_COUNT
The maximum input value.
Definition: mw_venc_common.h:210
@ MW_VENC_FOURCC_YUY2
YUY2 equals MWFOURCC_YUY2.
Definition: mw_venc_common.h:204
@ MW_VENC_FOURCC_NV21
NV21 equals MWFOURCC_NV21.
Definition: mw_venc_common.h:201
@ MW_VENC_FOURCC_YV12
YV12 equals MWFOURCC_YV12.
Definition: mw_venc_common.h:202
@ MW_VENC_FOURCC_P010
P010 equals MWFOURCC_P010.
Definition: mw_venc_common.h:205
@ MW_VENC_FOURCC_BGRA
BGRA equals MWFOURCC_BGRA.
Definition: mw_venc_common.h:206
@ MW_VENC_FOURCC_NV12
NV12 equals MWFOURCC_NV12.
Definition: mw_venc_common.h:200
@ MW_VENC_COLOR_SPACE_SMPTE170M
also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC
Definition: mw_venc_common.h:388
@ MW_VENC_COLOR_SPACE_BT2020_CL
ITU-R BT2020 constant luminance system.
Definition: mw_venc_common.h:393
@ MW_VENC_COLOR_SPACE_COUNT
Not part of ABI.
Definition: mw_venc_common.h:398
@ MW_VENC_COLOR_SPACE_RGB
order of coefficients is actually GBR, also IEC 61966-2-1 (sRGB)
Definition: mw_venc_common.h:382
@ MW_VENC_COLOR_SPACE_SMPTE240M
functionally identical to above
Definition: mw_venc_common.h:389
@ MW_VENC_COLOR_SPACE_SMPTE2085
SMPTE 2085, Y'D'zD'x.
Definition: mw_venc_common.h:394
@ MW_VENC_COLOR_SPACE_BT709
also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B
Definition: mw_venc_common.h:383
@ MW_VENC_COLOR_SPACE_BT2020_NCL
ITU-R BT2020 non-constant luminance system.
Definition: mw_venc_common.h:392
@ MW_VENC_COLOR_SPACE_CHROMA_DERIVED_NCL
Chromaticity-derived non-constant luminance system.
Definition: mw_venc_common.h:395
@ MW_VENC_COLOR_SPACE_YCGCO
Used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16.
Definition: mw_venc_common.h:390
@ MW_VENC_COLOR_SPACE_CHROMA_DERIVED_CL
Chromaticity-derived constant luminance system.
Definition: mw_venc_common.h:396
@ MW_VENC_COLOR_SPACE_BT470BG
also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601
Definition: mw_venc_common.h:387
@ MW_VENC_COLOR_SPACE_ICTCP
ITU-R BT.2100-0, ICtCp.
Definition: mw_venc_common.h:397
@ MW_VENC_COLOR_SPACE_FCC
FCC Title 47 Code of Federal Regulations 73.682 (a)(20)
Definition: mw_venc_common.h:386
@ MW_VENC_CODE_TYPE_COUNT
The maximum input value.
Definition: mw_venc_common.h:96
@ MW_VENC_CODE_TYPE_HEVC
HEVC/H265.
Definition: mw_venc_common.h:93
@ MW_VENC_CODE_TYPE_H264
H264.
Definition: mw_venc_common.h:94
@ MW_VENC_CODE_TYPE_H265
H265.
Definition: mw_venc_common.h:95
@ MW_VENC_CODE_TYPE_UNKNOWN
Unknown.
Definition: mw_venc_common.h:91
@ MW_VENC_CODE_TYPE_AVC
AVC/H264.
Definition: mw_venc_common.h:92
@ MW_VENC_FRAME_TYPE_I
I-frame.
Definition: mw_venc_common.h:43
@ MW_VENC_FRAME_TYPE_B
B-frame.
Definition: mw_venc_common.h:45
@ MW_VENC_FRAME_TYPE_IDR
IDR frame.
Definition: mw_venc_common.h:42
@ MW_VENC_FRAME_TYPE_UNKNOWN
Unknown frame.
Definition: mw_venc_common.h:41
@ MW_VENC_FRAME_TYPE_P
P-frame.
Definition: mw_venc_common.h:44
@ MW_VENC_FRAME_TYPE_COUNT
Number of frame types enumerated.
Definition: mw_venc_common.h:46
@ MW_VENC_COLOR_PRI_JEDEC_P22
JEDEC P22 phosphors.
Definition: mw_venc_common.h:340
@ MW_VENC_COLOR_PRI_SMPTE428
SMPTE ST 428-1 (CIE 1931 XYZ)
Definition: mw_venc_common.h:336
@ MW_VENC_COLOR_PRI_SMPTE240M
functionally identical to above
Definition: mw_venc_common.h:333
@ MW_VENC_COLOR_PRI_BT470M
also FCC Title 47 Code of Federal Regulations 73.682 (a)(20)
Definition: mw_venc_common.h:329
@ MW_VENC_COLOR_PRI_SMPTE432
SMPTE ST 432-1 (2010) / P3 D65 / Display P3.
Definition: mw_venc_common.h:339
@ MW_VENC_COLOR_PRI_BT709
also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP177 Annex B
Definition: mw_venc_common.h:326
@ MW_VENC_COLOR_PRI_BT2020
ITU-R BT2020.
Definition: mw_venc_common.h:335
@ MW_VENC_COLOR_PRI_COUNT
Not part of ABI.
Definition: mw_venc_common.h:341
@ MW_VENC_COLOR_PRI_FILM
colour filters using Illuminant C
Definition: mw_venc_common.h:334
@ MW_VENC_COLOR_PRI_SMPTE170M
also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC
Definition: mw_venc_common.h:332
@ MW_VENC_COLOR_PRI_SMPTE431
SMPTE ST 431-2 (2011) / DCI P3.
Definition: mw_venc_common.h:338
@ MW_VENC_COLOR_PRI_BT470BG
also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM
Definition: mw_venc_common.h:331
@ MW_VENC_LEVEL_COUNT
The maximum input value.
Definition: mw_venc_common.h:183
@ MW_VENC_LEVEL_UNKNOWN
Unknown.
Definition: mw_venc_common.h:175
@ MW_VENC_LEVEL_2_1
Level 2.1.
Definition: mw_venc_common.h:176
@ MW_VENC_LEVEL_6_1
Level 6.1.
Definition: mw_venc_common.h:181
@ MW_VENC_LEVEL_3_1
Level 3.1.
Definition: mw_venc_common.h:177
@ MW_VENC_LEVEL_4_1
Level 4.1.
Definition: mw_venc_common.h:178
@ MW_VENC_LEVEL_5_2
Level 5.2.
Definition: mw_venc_common.h:180
@ MW_VENC_LEVEL_6_2
Level 6.2.
Definition: mw_venc_common.h:182
@ MW_VENC_LEVEL_5_1
Level 5.1.
Definition: mw_venc_common.h:179
@ MW_VENC_STATUS_BUSY
Busy.
Definition: mw_venc_common.h:309
@ MW_VENC_STATUS_COUNT
The maximum input value.
Definition: mw_venc_common.h:312
@ MW_VENC_STATUS_SUCCESS
Success.
Definition: mw_venc_common.h:306
@ MW_VENC_STATUS_INVALID_PARAM
Invalid parameter.
Definition: mw_venc_common.h:310
@ MW_VENC_STATUS_UNKNOWN_ERROR
Unknown error.
Definition: mw_venc_common.h:311
@ MW_VENC_STATUS_FAIL
Fail.
Definition: mw_venc_common.h:307
@ MW_VENC_STATUS_UNSUPPORT
Not supported.
Definition: mw_venc_common.h:308
@ MW_VENC_COLOR_TRC_BT709
also ITU-R BT1361
Definition: mw_venc_common.h:352
@ MW_VENC_COLOR_TRC_ARIB_STD_B67
ARIB STD-B67, known as "Hybrid log-gamma".
Definition: mw_venc_common.h:371
@ MW_VENC_COLOR_TRC_GAMMA28
also ITU-R BT470BG
Definition: mw_venc_common.h:356
@ MW_VENC_COLOR_TRC_LINEAR
"Linear transfer characteristics"
Definition: mw_venc_common.h:359
@ MW_VENC_COLOR_TRC_IEC61966_2_4
IEC 61966-2-4.
Definition: mw_venc_common.h:362
@ MW_VENC_COLOR_TRC_BT2020_10
ITU-R BT2020 for 10-bit system.
Definition: mw_venc_common.h:365
@ MW_VENC_COLOR_TRC_SMPTE428
SMPTE ST 428-1.
Definition: mw_venc_common.h:369
@ MW_VENC_COLOR_TRC_LOG_SQRT
"Logarithmic transfer characteristic (100 * Sqrt(10) : 1 range)"
Definition: mw_venc_common.h:361
@ MW_VENC_COLOR_TRC_IEC61966_2_1
IEC 61966-2-1 (sRGB or sYCC)
Definition: mw_venc_common.h:364
@ MW_VENC_COLOR_TRC_BT1361_ECG
ITU-R BT1361 Extended Colour Gamut.
Definition: mw_venc_common.h:363
@ MW_VENC_COLOR_TRC_SMPTE170M
also ITU-R BT601-6 525 or 625 / ITU-R BT1358 525 or 625 / ITU-R BT1700 NTSC
Definition: mw_venc_common.h:357
@ MW_VENC_COLOR_TRC_SMPTE2084
SMPTE ST 2084 for 10-, 12-, 14- and 16-bit systems.
Definition: mw_venc_common.h:367
@ MW_VENC_COLOR_TRC_COUNT
Not part of ABI.
Definition: mw_venc_common.h:372
@ MW_VENC_COLOR_TRC_BT2020_12
ITU-R BT2020 for 12-bit system.
Definition: mw_venc_common.h:366
@ MW_VENC_COLOR_TRC_GAMMA22
also ITU-R BT470M / ITU-R BT1700 625 PAL & SECAM
Definition: mw_venc_common.h:355
@ MW_VENC_COLOR_TRC_LOG
"Logarithmic transfer characteristic (100:1 range)"
Definition: mw_venc_common.h:360
@ MW_VENC_TARGETUSAGE_BEST_QUALITY
Quality first.
Definition: mw_venc_common.h:113
@ MW_VENC_TARGETUSAGE_BEST_SPEED
Speed first.
Definition: mw_venc_common.h:115
@ MW_VENC_TARGETUSAGE_COUNT
The maximum input value.
Definition: mw_venc_common.h:116
@ MW_VENC_TARGETUSAGE_BALANCED
Balance the coding quality and speed.
Definition: mw_venc_common.h:114
@ MW_VENC_TARGETUSAGE_UNKNOWN
Unknown.
Definition: mw_venc_common.h:112
@ MW_VENC_PROFILE_H264_HIGH
H264 high.
Definition: mw_venc_common.h:157
@ MW_VENC_PROFILE_COUNT
The maximum input value.
Definition: mw_venc_common.h:159
@ MW_VENC_PROFILE_UNKNOWN
Unknown.
Definition: mw_venc_common.h:154
@ MW_VENC_PROFILE_H265_MAIN
H265 main.
Definition: mw_venc_common.h:158
@ MW_VENC_PROFILE_H264_BASELINE
H264 baseline.
Definition: mw_venc_common.h:155
@ MW_VENC_PROFILE_H264_MAIN
H264 main.
Definition: mw_venc_common.h:156
@ MW_VENC_RATECONTROL_UNKNOWN
Unknown.
Definition: mw_venc_common.h:134
@ MW_VENC_RATECONTROL_CQP
Constant Quantization Parameter.
Definition: mw_venc_common.h:137
@ MW_VENC_RATECONTROL_CBR
Constant Bit Rate.
Definition: mw_venc_common.h:135
@ MW_VENC_RATECONTROL_COUNT
The maximum input value.
Definition: mw_venc_common.h:138
@ MW_VENC_RATECONTROL_VBR
Variable Bit Rate.
Definition: mw_venc_common.h:136
@ MW_VENC_PROPERTY_FORCE_IDR
Force IDR.
Definition: mw_venc_common.h:295
@ MW_VENC_PROPERTY_GOP_SIZE
GOP: int32_t default 60.
Definition: mw_venc_common.h:291
@ MW_VENC_PROPERTY_EXTDATA
Extened data: mw_venc_extdata_t just get vps sps pps.
Definition: mw_venc_common.h:294
@ MW_VENC_PROPERTY_RATE_CONTROL
Rate: mw_venc_rate_control_t default MW_VENC_RATECONTROL_CBR 4096k.
Definition: mw_venc_common.h:289
@ MW_VENC_PROPERTY_SLICE_NUM
Number of slices: int32_t default 1.
Definition: mw_venc_common.h:292
@ MW_VENC_PROPERTY_UNKNOWN
Unknown.
Definition: mw_venc_common.h:288
@ MW_VENC_PROPERTY_COUNT
The maximum input value.
Definition: mw_venc_common.h:296
@ MW_VENC_PROPERTY_FPS
Frame rate: mw_venc_fps_t default 60/1.
Definition: mw_venc_common.h:290
@ MW_VENC_PROPERTY_GOP_REF_SIZE
GOP reference size: int32_t defalut 0, if = 1 -> no b-frame.
Definition: mw_venc_common.h:293
struct mw_venc_fps mw_venc_fps_t
mw_venc_fps_t
struct mw_venc_frame_info mw_venc_frame_info_t
mw_venc_frame_info_t @detials Defines the types infomation of frame to be encoded....
struct mw_venc_extdata mw_venc_extdata_t
mw_venc_extdata_t
struct mw_venc_param mw_venc_param_t
mw_venc_param_t
struct mw_venc_rate_control mw_venc_rate_control_t
mw_venc_rate_control_t
mw_venc_extdata_t
Definition: mw_venc_common.h:272
uint32_t len[3]
len[0] vps_len;len[1] sps_len;len[2] pps_len
Definition: mw_venc_common.h:275
uint32_t extdata_len
The total length of entended data.
Definition: mw_venc_common.h:274
uint8_t * p_extdata
Extended data pointer. The data includes vps(Video Parameter Set),sps(Sequence Parameter Set) and pps...
Definition: mw_venc_common.h:273
mw_venc_fps_t
Definition: mw_venc_common.h:257
int32_t den
Denominator of frames.
Definition: mw_venc_common.h:259
int32_t num
Numerator of frames.
Definition: mw_venc_common.h:258
mw_venc_frame_info_t @detials Defines the types infomation of frame to be encoded....
Definition: mw_venc_common.h:60
mw_venc_param_t
Definition: mw_venc_common.h:420
mw_venc_level_t level
Level.
Definition: mw_venc_common.h:432
mw_venc_targetusage_t targetusage
Preset.
Definition: mw_venc_common.h:423
int32_t gop_ref_size
Referenced GOP size.
Definition: mw_venc_common.h:430
int32_t height
Height of input video.
Definition: mw_venc_common.h:426
mw_venc_rate_control_t rate_control
Frame control.
Definition: mw_venc_common.h:424
mw_venc_profile_t profile
Profile.
Definition: mw_venc_common.h:431
mw_venc_code_type_t code_type
Code type, H264 or H265.
Definition: mw_venc_common.h:421
int32_t width
width of input video
Definition: mw_venc_common.h:425
int32_t gop_pic_size
GOP size.
Definition: mw_venc_common.h:429
mw_venc_fourcc_t fourcc
Color format of input data.
Definition: mw_venc_common.h:422
mw_venc_fps_t fps
Frame rate.
Definition: mw_venc_common.h:427
int32_t slice_num
Slice number.
Definition: mw_venc_common.h:428
mw_venc_rate_control_t
Definition: mw_venc_common.h:228
uint32_t target_bitrate
Target bitrate(kbit/s): only valid when the bitrate is variable or constant.
Definition: mw_venc_common.h:232
uint8_t qpp
P-Frame QP.
Definition: mw_venc_common.h:238
mw_venc_rate_control_mode_t mode
Bitrate controlling methods.
Definition: mw_venc_common.h:229
uint8_t reserved
Reserved.
Definition: mw_venc_common.h:239
uint8_t qpb
B-Frame QP.
Definition: mw_venc_common.h:237
uint8_t qpi
I-Frame QP.
Definition: mw_venc_common.h:236
uint32_t max_bitrate
The maximun bitrate(kbit/s): only valid when the bitrate is variable.
Definition: mw_venc_common.h:233