xine-lib  1.2.9
alterh264_decode.h
Go to the documentation of this file.
1 /* kate: tab-indent on; indent-width 4; mixedindent off; indent-mode cstyle; remove-trailing-space on; */
2 /*
3  * Copyright (C) 2008-2013 the xine project
4  *
5  * This file is part of xine, a free video player.
6  *
7  * xine is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * xine is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
20  *
21  */
22 
23 #ifndef ALTERH264_DECODE_H
24 #define ALTERH264_DECODE_H
25 
26 //#define LOG
27 #define LOG_MODULE "vdpau_h264"
28 
29 #ifdef HAVE_CONFIG_H
30 #include "config.h"
31 #endif
32 
33 #include <stdio.h>
34 #include <stdlib.h>
35 #include <string.h>
36 #include <sys/types.h>
37 #include <unistd.h>
38 
39 #include <xine/xine_internal.h>
40 #include <xine/video_out.h>
41 #include <xine/buffer.h>
42 #include <xine/xineutils.h>
43 #include "accel_vdpau.h"
44 #include <vdpau/vdpau.h>
45 
46 #include "alterh264_bits_reader.h"
47 
48 
49 
51 {
71 };
72 
73 
74 
75 static const uint8_t zigzag_4x4[16] = {
76  0, 1, 4, 8,
77  5, 2, 3, 6,
78  9, 12, 13, 10,
79  7, 11, 14, 15
80 };
81 
82 static const uint8_t zigzag_8x8[64] = {
83  0, 1, 8, 16, 9, 2, 3, 10,
84  17, 24, 32, 25, 18, 11, 4, 5,
85  12, 19, 26, 33, 40, 48, 41, 34,
86  27, 20, 13, 6, 7, 14, 21, 28,
87  35, 42, 49, 56, 57, 50, 43, 36,
88  29, 22, 15, 23, 30, 37, 44, 51,
89  58, 59, 52, 45, 38, 31, 39, 46,
90  53, 60, 61, 54, 47, 55, 62, 63
91 };
92 
93 static const uint8_t default_4x4_intra[16] = {
94  6, 13, 13, 20,
95  20, 20, 28, 28,
96  28, 28, 32, 32,
97  32, 37, 37, 42
98 };
99 
100 static const uint8_t default_4x4_inter[16] = {
101  10, 14, 14, 20,
102  20, 20, 24, 24,
103  24, 24, 27, 27,
104  27, 30, 30, 34
105 };
106 
107 static const uint8_t default_8x8_intra[64] = {
108  6, 10, 10, 13, 11, 13, 16, 16,
109  16, 16, 18, 18, 18, 18, 18, 23,
110  23, 23, 23, 23, 23, 25, 25, 25,
111  25, 25, 25, 25, 27, 27, 27, 27,
112  27, 27, 27, 27, 29, 29, 29, 29,
113  29, 29, 29, 31, 31, 31, 31, 31,
114  31, 33, 33, 33, 33, 33, 36, 36,
115  36, 36, 38, 38, 38, 40, 40, 42
116 };
117 
118 static const uint8_t default_8x8_inter[64] = {
119  9, 13, 13, 15, 13, 15, 17, 17,
120  17, 17, 19, 19, 19, 19, 19, 21,
121  21, 21, 21, 21, 21, 22, 22, 22,
122  22, 22, 22, 22, 24, 24, 24, 24,
123  24, 24, 24, 24, 25, 25, 25, 25,
124  25, 25, 25, 27, 27, 27, 27, 27,
125  27, 28, 28, 28, 28, 28, 30, 30,
126  30, 30, 32, 32, 32, 33, 33, 35
127 };
128 
129 
130 
131 typedef struct
132 {
135  uint16_t sar_width;
136  uint16_t sar_height;
137  uint8_t colour_desc;
139  uint8_t timing_info;
141  uint32_t time_scale;
142 } vui_param_t;
143 
144 
145 
146 typedef struct
147 {
148  uint8_t profile_idc;
149  uint8_t level_idc;
161  uint8_t scaling_lists_4x4[6][16];
162  uint8_t scaling_lists_8x8[2][64];
170  int32_t offset_for_ref_frame[256];
171  uint8_t num_ref_frames;
185 } seq_param_t;
186 
187 
188 
189 typedef struct
190 {
195  /*uint8_t num_slice_groups_minus1;
196  uint8_t slice_group_map_type;
197  uint16_t run_length_minus1[64];
198  uint16_t top_left[64];
199  uint16_t bottom_right[64];
200  uint8_t slice_group_change_direction_flag;
201  uint16_t slice_group_change_rate_minus1;
202  uint16_t pic_size_in_map_units_minus1;
203  uint8_t slice_group_id[64]; */
216  uint8_t pic_scaling_list_present_flag[8];
217  uint8_t scaling_lists_4x4[6][16];
218  uint8_t scaling_lists_8x8[2][64];
220 } pic_param_t;
221 
222 
223 
224 typedef struct
225 {
226  uint8_t nal_ref_idc;
227  uint8_t nal_unit_type;
228  uint8_t slice_type;
230  uint16_t frame_num;
231  uint32_t MaxFrameNum;
232  uint8_t field_pic_flag;
234  uint16_t idr_pic_id;
237  int32_t delta_pic_order_cnt[2];
241 } slice_param_t;
242 
243 
244 #define PICTURE_TOP_DONE 1
245 #define PICTURE_BOTTOM_DONE 2
246 #define PICTURE_DONE 3
247 
248 #define SHORT_TERM_REF 1
249 #define LONG_TERM_REF 2
250 
251 typedef struct
252 {
253  uint8_t used;
254  uint8_t missing_header;
255  int64_t pts;
256  uint8_t drop_pts;
257  uint8_t completed;
259  uint16_t FrameNum;
260  int32_t FrameNumWrap;
261  int32_t PicNum[2]; /* 0:top, 1:bottom */
262  uint8_t is_reference[2]; /* 0:top, 1:bottom, short or long term */
263  uint8_t field_pic_flag;
264  int32_t PicOrderCntMsb;
268  uint8_t mmc5;
269 
271 } dpb_frame_t;
272 
273 
274 
275 typedef struct
276 {
277  uint32_t buf_offset;
278  uint32_t len;
279 } slice_t;
280 
281 
282 
283 typedef struct
284 {
285  uint32_t coded_width;
287  uint32_t coded_height;
289  uint64_t video_step; /* frame duration in pts units */
290  uint64_t reported_video_step; /* frame duration in pts units */
291  double ratio;
293 
294  slice_t slices[68];
297 
298  seq_param_t *seq_param[32];
299  pic_param_t *pic_param[256];
301 
304  uint16_t prevFrameNum;
306  uint8_t prevMMC5;
307 
308  int chroma;
310  VdpDecoderProfile profile;
311 
312  uint8_t *buf; /* accumulate data */
313  int bufseek;
314  uint32_t bufsize;
315  uint32_t bufpos;
316  int start;
317 
318  int64_t pic_pts;
319 
321 
324 
325  int reset;
327 
328  uint8_t mode_frame;
329  uint8_t flag_header;
331 
333 
334 } sequence_t;
335 
336 
337 
338 typedef struct
339 {
342 
343 
344 
346 {
347  video_decoder_t video_decoder; /* parent video decoder structure */
348 
351 
353 
354  VdpDecoder decoder;
355  VdpDecoderProfile decoder_profile;
356  uint32_t decoder_width;
357  uint32_t decoder_height;
358 
360 
361 #endif /* ALTERH264_DECODE_H */
uint8_t transform_8x8_mode_flag
Definition: alterh264_decode.h:214
static const uint8_t default_4x4_inter[16]
Definition: alterh264_decode.h:100
Definition: alterh264_decode.h:52
int top_field_first
Definition: alterh264_decode.h:309
Definition: alterh264_decode.h:283
uint8_t slice_type
Definition: alterh264_decode.h:228
uint8_t num_ref_idx_l0_active_minus1
Definition: alterh264_decode.h:239
uint16_t prevFrameNumOffset
Definition: alterh264_decode.h:305
uint16_t frame_crop_top_offset
Definition: alterh264_decode.h:181
struct vdpau_mpeg12_decoder_s vdpau_h264_alter_decoder_t
Definition: alterh264_decode.h:65
uint8_t profile_idc
Definition: alterh264_decode.h:148
double reported_ratio
Definition: alterh264_decode.h:292
uint8_t constraint_set1_flag
Definition: alterh264_decode.h:152
Definition: accel_vdpau.h:40
uint8_t seq_parameter_set_id
Definition: alterh264_decode.h:150
uint8_t seq_parameter_set_id
Definition: alterh264_decode.h:192
uint8_t nal_unit_type
Definition: alterh264_decode.h:227
Definition: alterh264_decode.h:61
int vdp_runtime_nr
Definition: alterh264_decode.h:322
int32_t offset_for_top_to_bottom_field
Definition: alterh264_decode.h:168
int bufseek
Definition: alterh264_decode.h:313
uint8_t drop_pts
Definition: alterh264_decode.h:256
uint8_t deblocking_filter_control_present_flag
Definition: alterh264_decode.h:211
static const uint8_t zigzag_8x8[64]
Definition: alterh264_decode.h:82
Definition: alterh264_decode.h:275
slice_param_t slice_param
Definition: alterh264_decode.h:300
uint16_t frame_num
Definition: alterh264_decode.h:230
Definition: alterh264_decode.h:146
Definition: alterh264_decode.h:62
uint8_t constraint_set0_flag
Definition: alterh264_decode.h:151
bits_reader_t br
Definition: alterh264_decode.h:320
uint8_t field_pic_flag
Definition: alterh264_decode.h:232
uint64_t reported_video_step
Definition: alterh264_decode.h:290
static const uint8_t zigzag_4x4[16]
Definition: alterh264_decode.h:75
Definition: alterh264_decode.h:55
int reset
Definition: alterh264_decode.h:325
uint8_t constraint_set3_flag
Definition: alterh264_decode.h:154
uint8_t top_field_first
Definition: alterh264_decode.h:258
Definition: alterh264_decode.h:251
uint8_t redundant_pic_cnt_present_flag
Definition: alterh264_decode.h:213
int start
Definition: alterh264_decode.h:316
uint8_t colour_primaries
Definition: alterh264_decode.h:138
Definition: alterh264_decode.h:59
uint8_t weighted_bipred_idc
Definition: alterh264_decode.h:207
uint8_t bit_depth_luma_minus8
Definition: alterh264_decode.h:157
uint8_t pic_order_cnt_type
Definition: alterh264_decode.h:164
uint8_t field_pic_flag
Definition: alterh264_decode.h:263
uint8_t pic_width_in_mbs_minus1
Definition: alterh264_decode.h:173
uint32_t reported_coded_height
Definition: alterh264_decode.h:288
uint8_t timing_info
Definition: alterh264_decode.h:139
uint32_t num_units_in_tick
Definition: alterh264_decode.h:140
Definition: alterh264_decode.h:53
uint8_t vui_parameters_present_flag
Definition: alterh264_decode.h:183
int slices_count
Definition: alterh264_decode.h:295
VdpDecoder decoder
Definition: alterh264_decode.h:354
video_decoder_t video_decoder
Definition: alterh264_decode.h:347
uint16_t pic_order_cnt_lsb
Definition: alterh264_decode.h:235
uint8_t pic_height_in_map_units_minus1
Definition: alterh264_decode.h:174
uint8_t colour_desc
Definition: alterh264_decode.h:137
Definition: alterh264_decode.h:54
uint8_t chroma_format_idc
Definition: alterh264_decode.h:155
uint32_t coded_height
Definition: alterh264_decode.h:287
Definition: alterh264_decode.h:68
uint32_t decoder_width
Definition: alterh264_decode.h:356
uint8_t pic_parameter_set_id
Definition: alterh264_decode.h:229
uint8_t frame_mbs_only_flag
Definition: alterh264_decode.h:175
xine_stream_t * stream
Definition: alterh264_decode.h:350
uint8_t pic_scaling_matrix_present_flag
Definition: alterh264_decode.h:215
uint8_t num_ref_frames_in_pic_order_cnt_cycle
Definition: alterh264_decode.h:169
uint8_t prevMMC5
Definition: alterh264_decode.h:306
Definition: alterh264_decode.h:60
uint8_t entropy_coding_mode_flag
Definition: alterh264_decode.h:193
Definition: alterh264_decode.h:131
int32_t FrameNumWrap
Definition: alterh264_decode.h:260
uint8_t pic_parameter_set_id
Definition: alterh264_decode.h:191
Definition: alterh264_decode.h:70
int32_t offset_for_non_ref_pic
Definition: alterh264_decode.h:167
int8_t pic_init_qs_minus26
Definition: alterh264_decode.h:209
uint8_t aspect_ratio_info
Definition: alterh264_decode.h:133
int32_t PicOrderCntMsb
Definition: alterh264_decode.h:264
int color_matrix
Definition: alterh264_decode.h:332
Definition: xine_internal.h:210
uint8_t completed
Definition: alterh264_decode.h:257
Definition: video_decoder.h:43
static const uint8_t default_4x4_intra[16]
Definition: alterh264_decode.h:93
uint8_t separate_colour_plane_flag
Definition: alterh264_decode.h:156
Definition: alterh264_decode.h:63
uint8_t level_idc
Definition: alterh264_decode.h:149
VdpDecoderProfile decoder_profile
Definition: alterh264_decode.h:355
Definition: alterh264_bits_reader.h:31
uint8_t log2_max_frame_num_minus4
Definition: alterh264_decode.h:163
uint8_t bottom_field_flag
Definition: alterh264_decode.h:233
dpb_frame_t cur_pic
Definition: alterh264_decode.h:303
int64_t pic_pts
Definition: alterh264_decode.h:318
aspect_ratio
Definition: alterh264_decode.h:50
uint32_t bufsize
Definition: alterh264_decode.h:314
uint8_t num_ref_idx_l1_active_minus1
Definition: alterh264_decode.h:240
uint32_t buf_offset
Definition: alterh264_decode.h:277
Definition: video_out.h:60
vui_param_t vui
Definition: alterh264_decode.h:184
Definition: alterh264_decode.h:58
uint16_t sar_width
Definition: alterh264_decode.h:135
video_decoder_class_t decoder_class
Definition: alterh264_decode.h:340
Definition: alterh264_decode.h:66
Definition: alterh264_decode.h:345
uint8_t pic_order_present_flag
Definition: alterh264_decode.h:194
uint8_t log2_max_pic_order_cnt_lsb_minus4
Definition: alterh264_decode.h:165
int chroma
Definition: alterh264_decode.h:308
uint8_t mmc5
Definition: alterh264_decode.h:268
Definition: alterh264_decode.h:56
uint32_t time_scale
Definition: alterh264_decode.h:141
Definition: alterh264_decode.h:64
uint8_t delta_pic_order_always_zero_flag
Definition: alterh264_decode.h:166
static const uint8_t default_8x8_inter[64]
Definition: alterh264_decode.h:118
uint8_t bit_depth_chroma_minus8
Definition: alterh264_decode.h:158
uint8_t qpprime_y_zero_transform_bypass_flag
Definition: alterh264_decode.h:159
int8_t second_chroma_qp_index_offset
Definition: alterh264_decode.h:219
uint8_t redundant_pic_cnt
Definition: alterh264_decode.h:238
uint8_t * buf
Definition: alterh264_decode.h:312
VdpDecoderProfile profile
Definition: alterh264_decode.h:310
int32_t BottomFieldOrderCnt
Definition: alterh264_decode.h:266
sequence_t sequence
Definition: alterh264_decode.h:352
uint8_t num_ref_idx_l0_active_minus1
Definition: alterh264_decode.h:204
uint8_t used
Definition: alterh264_decode.h:253
uint8_t flag_header
Definition: alterh264_decode.h:329
uint32_t bufpos
Definition: alterh264_decode.h:315
static const uint8_t default_8x8_intra[64]
Definition: alterh264_decode.h:107
uint16_t idr_pic_id
Definition: alterh264_decode.h:234
int8_t chroma_qp_index_offset
Definition: alterh264_decode.h:210
vo_frame_t * videoSurface
Definition: alterh264_decode.h:270
int8_t pic_init_qp_minus26
Definition: alterh264_decode.h:208
uint16_t frame_crop_bottom_offset
Definition: alterh264_decode.h:182
uint32_t frame_header_size
Definition: alterh264_decode.h:330
uint32_t coded_width
Definition: alterh264_decode.h:285
int64_t pts
Definition: alterh264_decode.h:255
uint8_t mb_adaptive_frame_field_flag
Definition: alterh264_decode.h:176
Definition: dpb.h:76
uint32_t reported_coded_width
Definition: alterh264_decode.h:286
uint8_t direct_8x8_inference_flag
Definition: alterh264_decode.h:177
uint16_t prevFrameNum
Definition: alterh264_decode.h:304
int32_t TopFieldOrderCnt
Definition: alterh264_decode.h:265
Definition: alterh264_decode.h:69
int slice_mode
Definition: alterh264_decode.h:296
uint32_t decoder_height
Definition: alterh264_decode.h:357
Definition: alterh264_decode.h:189
uint64_t video_step
Definition: alterh264_decode.h:289
uint8_t num_ref_idx_l1_active_minus1
Definition: alterh264_decode.h:205
uint32_t len
Definition: alterh264_decode.h:278
Definition: alterh264_decode.h:67
uint8_t gaps_in_frame_num_value_allowed_flag
Definition: alterh264_decode.h:172
Definition: alterh264_decode.h:224
int32_t delta_pic_order_cnt_bottom
Definition: alterh264_decode.h:236
uint16_t pic_order_cnt_lsb
Definition: alterh264_decode.h:267
uint8_t nal_ref_idc
Definition: alterh264_decode.h:226
Definition: video_decoder.h:75
uint8_t mode_frame
Definition: alterh264_decode.h:328
uint16_t FrameNum
Definition: alterh264_decode.h:259
uint8_t constraint_set2_flag
Definition: alterh264_decode.h:153
uint8_t constrained_intra_pred_flag
Definition: alterh264_decode.h:212
uint32_t MaxFrameNum
Definition: alterh264_decode.h:231
uint16_t frame_crop_left_offset
Definition: alterh264_decode.h:179
Definition: alterh264_decode.h:57
uint8_t frame_cropping_flag
Definition: alterh264_decode.h:178
uint8_t aspect_ratio_idc
Definition: alterh264_decode.h:134
uint8_t weighted_pred_flag
Definition: alterh264_decode.h:206
uint16_t frame_crop_right_offset
Definition: alterh264_decode.h:180
uint8_t seq_scaling_matrix_present_flag
Definition: alterh264_decode.h:160
int startup_frame
Definition: alterh264_decode.h:326
uint8_t num_ref_frames
Definition: alterh264_decode.h:171
Definition: alterh264_decode.h:338
uint8_t missing_header
Definition: alterh264_decode.h:254
double ratio
Definition: alterh264_decode.h:291
uint16_t sar_height
Definition: alterh264_decode.h:136
vdpau_accel_t * accel_vdpau
Definition: alterh264_decode.h:323