summaryrefslogtreecommitdiff
path: root/src/libvdpau/nal_parser.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libvdpau/nal_parser.h')
-rw-r--r--src/libvdpau/nal_parser.h377
1 files changed, 0 insertions, 377 deletions
diff --git a/src/libvdpau/nal_parser.h b/src/libvdpau/nal_parser.h
deleted file mode 100644
index 7c43070cb..000000000
--- a/src/libvdpau/nal_parser.h
+++ /dev/null
@@ -1,377 +0,0 @@
-#ifndef NAL_PARSER_H_
-#define NAL_PARSER_H_
-
-#include <stdlib.h>
-
-#include "xine_internal.h"
-
-enum nal_unit_types {
- NAL_UNSPECIFIED = 0,
- NAL_SLICE,
- NAL_PART_A,
- NAL_PART_B,
- NAL_PART_C,
- NAL_SLICE_IDR,
- NAL_SEI,
- NAL_SPS,
- NAL_PPS,
- NAL_AU_DELIMITER,
- NAL_END_OF_SEQUENCE,
- NAL_END_OF_STREAM,
- NAL_FILLER_DATA,
- NAL_SPS_EXT
-};
-
-/* slice types repeat from 5-9, we
- * need a helper function for comparison
- */
-enum slice_types {
- SLICE_P = 0,
- SLICE_B,
- SLICE_I,
- SLICE_SP,
- SLICE_SI
-};
-
-enum aspect_ratio {
- ASPECT_UNSPECIFIED = 0,
- ASPECT_1_1,
- ASPECT_12_11,
- ASPECT_10_11,
- ASPECT_16_11,
- ASPECT_40_33,
- ASPECT_24_11,
- ASPECT_20_11,
- ASPECT_32_11,
- ASPECT_80_33,
- ASPECT_18_11,
- ASPECT_15_11,
- ASPECT_64_33,
- ASPECT_160_99,
- ASPECT_4_3,
- ASPECT_3_2,
- ASPECT_2_1,
- ASPECT_RESERVED
-};
-
-static inline uint32_t slice_type(uint32_t slice_type) { return (slice_type < 10 ? slice_type % 5 : slice_type); }
-
-struct nal_unit {
- uint8_t nal_ref_idc; // 0x03
- uint8_t nal_unit_type; // 0x1f
-
- struct seq_parameter_set_rbsp *sps;
- struct pic_parameter_set_rbsp *pps;
- struct slice_header *slc;
-};
-
-struct hrd_parameters {
- uint32_t cpb_cnt_minus1;
- uint8_t bit_rate_scale;
- uint8_t cpb_size_scale;
-
- uint32_t bit_rate_value_minus1[32];
- uint32_t cpb_size_value_minus1[32];
- uint8_t cbr_flag[32];
-
- uint8_t initial_cpb_removal_delay_length_minus1;
- uint8_t cpb_removal_delay_length_minus1;
- uint8_t dpb_output_delay_length_minus1;
- uint8_t time_offset_length;
-};
-
-struct seq_parameter_set_rbsp {
- uint8_t profile_idc; // 0xff
- uint8_t constraint_setN_flag; // 0x0f
- uint8_t level_idc; // 0xff
- uint32_t seq_parameter_set_id;
- uint32_t chroma_format_idc;
- uint8_t residual_colour_transform_flag; // 0x01
- uint32_t bit_depth_luma_minus8;
- uint32_t bit_depth_chroma_minus8;
- uint8_t qpprime_y_zero_transform_bypass_flag;
- uint8_t seq_scaling_matrix_present_flag;
-
- /* if(seq_scaling_matrix_present_flag) */
- uint8_t seq_scaling_list_present_flag[8];
-
- uint8_t scaling_lists_4x4[6][16];
- uint8_t scaling_lists_8x8[2][64];
- /* endif */
-
- uint32_t log2_max_frame_num_minus4;
- uint32_t pic_order_cnt_type;
- // if pic_order_cnt_type==0
- uint32_t log2_max_pic_order_cnt_lsb_minus4;
- // else
- uint8_t delta_pic_order_always_zero_flag;
- int32_t offset_for_non_ref_pic;
- int32_t offset_for_top_to_bottom_field;
- uint8_t num_ref_frames_in_pic_order_cnt_cycle;
- int32_t offset_for_ref_frame[256];
- // TODO: some more ignored here
- uint32_t num_ref_frames;
- uint8_t gaps_in_frame_num_value_allowed_flag;
- /*uint32_t pic_width_in_mbs_minus1;
- uint32_t pic_height_in_map_units_minus1;*/
- uint32_t pic_width;
- uint32_t pic_height;
- uint8_t frame_mbs_only_flag;
- uint8_t mb_adaptive_frame_field_flag;
- uint8_t direct_8x8_inference_flag;
- uint8_t frame_cropping_flag;
- uint32_t frame_crop_left_offset;
- uint32_t frame_crop_right_offset;
- uint32_t frame_crop_top_offset;
- uint32_t frame_crop_bottom_offset;
- uint8_t vui_parameters_present_flag;
-
- /* vui_parameters */
- union {
- uint8_t aspect_ration_info_present_flag;
-
- /* aspect_ration_info_present_flag == 1 */
- uint8_t aspect_ratio_idc;
- uint16_t sar_width;
- uint16_t sar_height;
-
- uint8_t overscan_info_present_flag;
- /* overscan_info_present_flag == 1 */
- uint8_t overscan_appropriate_flag;
-
- uint8_t video_signal_type_present_flag;
- /* video_signal_type_present_flag == 1 */
- uint8_t video_format;
- uint8_t video_full_range_flag;
- uint8_t colour_description_present;
- /* colour_description_present == 1 */
- uint8_t colour_primaries;
- uint8_t transfer_characteristics;
- uint8_t matrix_coefficients;
-
- uint8_t chroma_loc_info_present_flag;
- /* chroma_loc_info_present_flag == 1 */
- uint8_t chroma_sample_loc_type_top_field;
- uint8_t chroma_sample_loc_type_bottom_field;
-
- uint8_t timing_info_present_flag;
- /* timing_info_present_flag == 1 */
- uint32_t num_units_in_tick;
- uint32_t time_scale;
- uint8_t fixed_frame_rate_flag;
-
- uint8_t nal_hrd_parameters_present_flag;
- struct hrd_parameters nal_hrd_parameters;
-
- uint8_t vc1_hrd_parameters_present_flag;
- struct hrd_parameters vc1_hrd_parameters;
-
- uint8_t low_delay_hrd_flag;
-
- uint8_t pic_struct_present_flag;
- uint8_t bitstream_restriction_flag;
-
- /* bitstream_restriction_flag == 1 */
- uint8_t motion_vectors_over_pic_boundaries;
- uint32_t max_bytes_per_pic_denom;
- uint32_t max_bits_per_mb_denom;
- uint32_t log2_max_mv_length_horizontal;
- uint32_t log2_max_mv_length_vertical;
- uint32_t num_reorder_frames;
- uint32_t max_dec_frame_buffering;
- } vui_parameters;
-
-};
-
-struct pic_parameter_set_rbsp {
- uint32_t pic_parameter_set_id;
- uint32_t seq_parameter_set_id;
- uint8_t entropy_coding_mode_flag;
- uint8_t pic_order_present_flag;
-
- uint32_t num_slice_groups_minus1;
-
- /* num_slice_groups_minus1 > 0 */
- uint32_t slice_group_map_type;
-
- /* slice_group_map_type == 1 */
- uint32_t run_length_minus1[64];
-
- /* slice_group_map_type == 2 */
- uint32_t top_left[64];
- uint32_t bottom_right[64];
-
- /* slice_group_map_type == 3,4,5 */
- uint8_t slice_group_change_direction_flag;
- uint32_t slice_group_change_rate_minus1;
-
- /* slice_group_map_type == 6 */
- uint32_t pic_size_in_map_units_minus1;
- uint8_t slice_group_id[64];
-
- uint32_t num_ref_idx_l0_active_minus1;
- uint32_t num_ref_idx_l1_active_minus1;
- uint8_t weighted_pred_flag;
- uint8_t weighted_bipred_idc;
- int32_t pic_init_qp_minus26;
- int32_t pic_init_qs_minus26;
- int32_t chroma_qp_index_offset;
- uint8_t deblocking_filter_control_present_flag;
- uint8_t constrained_intra_pred_flag;
- uint8_t redundant_pic_cnt_present_flag;
-
- /* if(more_rbsp_data) */
- uint8_t transform_8x8_mode_flag;
- uint8_t pic_scaling_matrix_present_flag;
-
- /* if(pic_scaling_matrix_present_flag) */
- uint8_t pic_scaling_list_present_flag[8];
-
- uint8_t scaling_lists_4x4[6][16];
- uint8_t scaling_lists_8x8[2][64];
-
- int32_t second_chroma_qp_index_offset;
-};
-
-struct slice_header {
- uint32_t first_mb_in_slice;
- uint32_t slice_type;
- uint32_t pic_parameter_set_id;
- uint32_t frame_num;
- uint8_t field_pic_flag;
- uint8_t bottom_field_flag;
- uint32_t idr_pic_id;
-
- /* sps->pic_order_cnt_type == 0 */
- uint32_t pic_order_cnt_lsb;
- int32_t delta_pic_order_cnt_bottom;
- /* sps->pic_order_cnt_type == 1 && !sps->delta_pic_order_always_zero_flag */
- int32_t delta_pic_order_cnt[2];
-
- /* pps->redundant_pic_cnt_present_flag == 1 */
- int32_t redundant_pic_cnt;
-
- /* slice_type == B */
- uint8_t direct_spatial_mv_pred_flag;
-
- /* slice_type == P, SP, B */
- uint8_t num_ref_idx_active_override_flag;
- /* num_ref_idx_active_override_flag == 1 */
- uint32_t num_ref_idx_l0_active_minus1;
- /* slice type == B */
- uint32_t num_ref_idx_l1_active_minus1;
-
- /* ref_pic_list_reordering */
- union {
- /* slice_type != I && slice_type != SI */
- uint8_t ref_pic_list_reordering_flag_l0;
-
- /* slice_type == B */
- uint8_t ref_pic_list_reordering_flag_l1;
-
- /* ref_pic_list_reordering_flag_l0 == 1 */
- uint32_t reordering_of_pic_nums_idc;
-
- /* reordering_of_pic_nums_idc == 0, 1 */
- uint32_t abs_diff_pic_num_minus1;
-
- /* reordering_of_pic_nums_idc == 2) */
- uint32_t long_term_pic_num;
- } ref_pic_list_reordering;
-
- /* pred_weight_table */
- union {
- uint32_t luma_log2_weight_denom;
-
- /* chroma_format_idc != 0 */
- uint32_t chroma_log2_weight_denom;
-
- int32_t luma_weight_l0[32];
- int32_t luma_offset_l0[32];
-
- int32_t chroma_weight_l0[32][2];
- int32_t chroma_offset_l0[32][2];
-
- int32_t luma_weight_l1[32];
- int32_t luma_offset_l1[32];
-
- int32_t chroma_weight_l1[32][2];
- int32_t chroma_offset_l1[32][2];
- } pred_weight_table;
-
- /* def_rec_pic_marking */
- union {
-
- /* nal_unit_type == NAL_SLICE_IDR */
- uint8_t no_output_of_prior_pics_flag;
- uint8_t long_term_reference_flag;
-
- /* else */
- uint8_t adaptive_ref_pic_marking_mode_flag;
- uint32_t memory_management_control_operation;
-
- uint32_t difference_of_pic_nums_minus1;
- uint32_t long_term_pic_num;
- uint32_t long_term_frame_idx;
- uint32_t max_long_term_frame_idx_plus1;
- } dec_ref_pic_marking;
-};
-
-
-struct decoded_picture {
- //VdpReferenceFrameH264 surface;
- struct nal_unit *nal;
-};
-
-/* Decoded Picture Buffer */
-struct dpb {
- uint32_t max_frame_num;
-
- uint32_t prev_ref_frame_number;
- uint32_t unused_short_term_frame_num;
- uint32_t non_existing_pictures[32];
-
- struct decoded_picture *pictures;
-};
-
-#define MAX_FRAME_SIZE 1024*1024
-
-struct nal_parser {
- uint8_t buf[MAX_FRAME_SIZE];
- int buf_len;
- int found_sps;
- int found_pps;
- int last_nal_res;
-
- int is_idr;
- int field; /* 0=top, 1=bottom, -1=both */
- int slice;
- int slice_cnt;
- int have_top;
- int have_frame;
-
- struct nal_unit *nal0;
- struct nal_unit *nal1;
- struct nal_unit *current_nal;
- struct nal_unit *last_nal;
-
- /* pic_order_cnt */
- int32_t top_field_order_cnt;
- int32_t bottom_field_order_cnt;
- int32_t pic_order_cnt_msb;
- int32_t prev_pic_order_cnt_msb;
- int32_t prev_pic_order_cnt_lsb;
-
- struct dpb *dpb;
-};
-
-int parse_nal(uint8_t *buf, int buf_len, struct nal_parser *parser);
-
-int seek_for_nal(uint8_t *buf, int buf_len);
-
-struct nal_parser* init_parser();
-void free_parser(struct nal_parser *parser);
-int parse_frame(struct nal_parser *parser, uint8_t *inbuf, int inbuf_len,
- uint8_t **ret_buf, uint32_t *ret_len, uint32_t *ret_slice_cnt);
-
-#endif