/***************************************************************************** * set.h: h264 encoder ***************************************************************************** * Copyright (C) 2003 Laurent Aimar * $Id: set.h,v 1.1 2004/06/03 19:27:07 fenrir Exp $ * * Authors: Laurent Aimar * * 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, USA. *****************************************************************************/ #ifndef _SET_H #define _SET_H 1 enum profile_e { PROFILE_BASELINE = 66, PROFILE_MAIN = 77, PROFILE_EXTENTED = 88, PROFILE_HIGH = 100, PROFILE_HIGH10 = 110, PROFILE_HIGH422 = 122, PROFILE_HIGH444 = 144 }; enum cqm4_e { CQM_4IY = 0, CQM_4PY = 1, CQM_4IC = 2, CQM_4PC = 3 }; enum cqm8_e { CQM_8IY = 0, CQM_8PY = 1 }; typedef struct { int i_id; int i_profile_idc; int i_level_idc; int b_constraint_set0; int b_constraint_set1; int b_constraint_set2; int i_log2_max_frame_num; int i_poc_type; /* poc 0 */ int i_log2_max_poc_lsb; /* poc 1 */ int b_delta_pic_order_always_zero; int i_offset_for_non_ref_pic; int i_offset_for_top_to_bottom_field; int i_num_ref_frames_in_poc_cycle; int i_offset_for_ref_frame[256]; int i_num_ref_frames; int b_gaps_in_frame_num_value_allowed; int i_mb_width; int i_mb_height; int b_frame_mbs_only; int b_mb_adaptive_frame_field; int b_direct8x8_inference; int b_crop; struct { int i_left; int i_right; int i_top; int i_bottom; } crop; int b_vui; struct { int b_aspect_ratio_info_present; int i_sar_width; int i_sar_height; int b_overscan_info_present; int b_overscan_info; int b_signal_type_present; int i_vidformat; int b_fullrange; int b_color_description_present; int i_colorprim; int i_transfer; int i_colmatrix; int b_chroma_loc_info_present; int i_chroma_loc_top; int i_chroma_loc_bottom; int b_timing_info_present; int i_num_units_in_tick; int i_time_scale; int b_fixed_frame_rate; int b_bitstream_restriction; int b_motion_vectors_over_pic_boundaries; int i_max_bytes_per_pic_denom; int i_max_bits_per_mb_denom; int i_log2_max_mv_length_horizontal; int i_log2_max_mv_length_vertical; int i_num_reorder_frames; int i_max_dec_frame_buffering; /* FIXME to complete */ } vui; int b_qpprime_y_zero_transform_bypass; } x264_sps_t; typedef struct { int i_id; int i_sps_id; int b_cabac; int b_pic_order; int i_num_slice_groups; int i_num_ref_idx_l0_active; int i_num_ref_idx_l1_active; int b_weighted_pred; int b_weighted_bipred; int i_pic_init_qp; int i_pic_init_qs; int i_chroma_qp_index_offset; int b_deblocking_filter_control; int b_constrained_intra_pred; int b_redundant_pic_cnt; int b_transform_8x8_mode; int i_cqm_preset; const uint8_t *scaling_list[6]; /* could be 8, but we don't allow separate Cb/Cr lists */ } x264_pps_t; /* default quant matrices */ static const uint8_t x264_cqm_jvt4i[16] = { 6,13,20,28, 13,20,28,32, 20,28,32,37, 28,32,37,42 }; static const uint8_t x264_cqm_jvt4p[16] = { 10,14,20,24, 14,20,24,27, 20,24,27,30, 24,27,30,34 }; static const uint8_t x264_cqm_jvt8i[64] = { 6,10,13,16,18,23,25,27, 10,11,16,18,23,25,27,29, 13,16,18,23,25,27,29,31, 16,18,23,25,27,29,31,33, 18,23,25,27,29,31,33,36, 23,25,27,29,31,33,36,38, 25,27,29,31,33,36,38,40, 27,29,31,33,36,38,40,42 }; static const uint8_t x264_cqm_jvt8p[64] = { 9,13,15,17,19,21,22,24, 13,13,17,19,21,22,24,25, 15,17,19,21,22,24,25,27, 17,19,21,22,24,25,27,28, 19,21,22,24,25,27,28,30, 21,22,24,25,27,28,30,32, 22,24,25,27,28,30,32,33, 24,25,27,28,30,32,33,35 }; static const uint8_t x264_cqm_flat16[64] = { 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16 }; static const uint8_t * const x264_cqm_jvt[6] = { x264_cqm_jvt4i, x264_cqm_jvt4p, x264_cqm_jvt4i, x264_cqm_jvt4p, x264_cqm_jvt8i, x264_cqm_jvt8p }; int x264_cqm_init( x264_t *h ); void x264_cqm_delete( x264_t *h ); int x264_cqm_parse_file( x264_t *h, const char *filename ); #endif