]> git.sesse.net Git - vlc/blob - modules/codec/h264_nal.h
upnp: change item b_net and i_type
[vlc] / modules / codec / h264_nal.h
1 /*****************************************************************************
2  * Copyright © 2010-2014 VideoLAN
3  *
4  * Authors: Jean-Baptiste Kempf <jb@videolan.org>
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms of the GNU Lesser General Public License as published by
8  * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
19  *****************************************************************************/
20
21 #ifndef H264_NAL_H
22 # define H264_NAL_H
23
24 # ifdef HAVE_CONFIG_H
25 #  include "config.h"
26 # endif
27
28 # include <vlc_common.h>
29 # include <vlc_codec.h>
30
31 #define PROFILE_H264_BASELINE             66
32 #define PROFILE_H264_MAIN                 77
33 #define PROFILE_H264_EXTENDED             88
34 #define PROFILE_H264_HIGH                 100
35 #define PROFILE_H264_HIGH_10              110
36 #define PROFILE_H264_HIGH_422             122
37 #define PROFILE_H264_HIGH_444             144
38 #define PROFILE_H264_HIGH_444_PREDICTIVE  244
39
40 #define PROFILE_H264_CAVLC_INTRA          44
41 #define PROFILE_H264_SVC_BASELINE         83
42 #define PROFILE_H264_SVC_HIGH             86
43 #define PROFILE_H264_MVC_STEREO_HIGH      128
44 #define PROFILE_H264_MVC_MULTIVIEW_HIGH   118
45
46 /* Parse the SPS/PPS Metadata and convert it to annex b format */
47 int convert_sps_pps( decoder_t *p_dec, const uint8_t *p_buf,
48                      uint32_t i_buf_size, uint8_t *p_out_buf,
49                      uint32_t i_out_buf_size, uint32_t *p_sps_pps_size,
50                      uint32_t *p_nal_size);
51
52 /* Convert H.264 NAL format to annex b in-place */
53 struct H264ConvertState {
54     uint32_t nal_len;
55     uint32_t nal_pos;
56 };
57
58 void convert_h264_to_annexb( uint8_t *p_buf, uint32_t i_len,
59                              size_t i_nal_size,
60                              struct H264ConvertState *state );
61
62 /* Get level and Profile */
63 bool h264_get_profile_level(const es_format_t *p_fmt, size_t *p_profile,
64                             size_t *p_level, size_t *p_nal_size);
65
66 #endif /* H264_NAL_H */