分析一段H264視頻數據

分析一段H264視頻數據

Posted on 2007-05-31 09:42 vcommon 閱讀(1968) 評論(8) ?編輯?收藏 引用

分析

00 00 00 01 67 42 00 1E 99 A0 B1 31 00 00 00 01

H264的數據流分為兩種,一種是NAL UNIT stream(RTP),一種是 bits stream,

兩者可以互相轉換。我們分析的這個是 bit stream,根據Annex B

00 00 00 01 67 42 00 1E 99 A0 B1 31 是 一個NAL,在兩個00 00 00 01之間

0110 0111 0100 0010 0000 0000 0001 1110 1001 1001 1010 0000 1011 0001 0011 0001

forbidden_zero_bit(1= 0

nal_ref_idc(2)= 11

nal_unit_type(5= 0 0111seq_parameter_set_rbsp(?)

所以 processSPS

profile_idc(8):42:0100 0010

constraint_set0_flag(1):0

constraint_set1_flag(1):0

constraint_set2_flag(1):0

constraint_set3_flag(1):0

reserved_zero_4bits(4):0

level_idc(8):1E

seq_parameter_set_id(UE(V)):

ue(v): unsigned integer Exp-Golomb-coded syntax element with the left bit first. The parsing process for this descriptor is specified in subclause 9.1

uvlC: 1001:根據Table9.1 , value= 0,只占1bit.

根據profile_idc忽略掉一部分。

log2_max_frame_num_minus4(ue(v): 001 1001,len = 5,value= 5

pic_order_cnt_type(ue(v)):01 1010,len = 3,value = 2

根據pic_order_cnt_type忽略幾個參數

num_ref_framesue):010,len = 3,value = 1

0000 1011 0001 0011 0001

gaps_in_frame_num_value_allowed_flag(1) = 0

pic_width_in_mbs_minus1(ue):000 1011 ,len = 7,value = 10;

pic_height_in_map_units_minus1(ue):0001 001,len = 7,value = 8

frame_mbs_only_flag(1) = 1

忽略1

direct_8x8_inference_flag(1):0

忽略

vui_parameters_present_flag(1):0

忽略

NALU結束

?

68 CE 38 80 00 00 00 01

0110 1000

forbidden_zero_bit(1= 0

nal_ref_idc(2)= 11

nal_unit_type(5=01000pic_parameter_set_rbsp(?),7.3.2.2

1100

pic_parameter_set_id (ue)=0

seq_parameter_set_id(ue)=0

entropy_coding_mode_flag(1)?:0,?? 重要的flag,0 表示編碼Exp-Golomb coded and CAVLC,1表示CABAC

pic_order_present_flag(1):0

1110

num_slice_groups_minus1(ue):0

忽略

num_ref_idx_l0_active_minus1(ue):0

num_ref_idx_l1_active_minus1(ue):0

weighted_pred_flag(1);0

0011 1000 1000 0000

weighted_bipred_idc(2):00

pic_init_qp_minus26?/* relative to?26 */(se):0

pic_init_qs_minus26?/* relative to?26 */(se):0

chroma_qp_index_offset(se):0

deblocking_filter_control_present_flag(1);0

constrained_intra_pred_flag(1):0

redundant_pic_cnt_present_flag(1):0

忽略

NALU結束

?

65 88 80 21 71 27 1B 88…….3888*16 byte

65:0110 0101

forbidden_zero_bit(1= 0

nal_ref_idc(2)= 11

nal_unit_type(50 0101slice_layer_without_partitioning_rbsp(?),IDR湞

Slice

Slice_Header:

first_mb_in_slice(ue):0

slice_type(ue):000 1000 = 7

pic_parameter_set_id(ue) = 0

80 21:000 0000 0010 0001

frame_num(u(v): frame_num is used as an identifier for pictures and shall be represented by log2_max_frame_num_minus4?+?4 bits,9 bits = 0

忽略

if( nal_unit_type?= =?5 ) //IDR frame

idr_pic_id(u(e)):0

忽略N

ref_pic_list_reordering(?) 見7。3。3。1忽略,Islice,SI slice,B slice

nal_ref_idc ?=11 所以dec_ref_pic_marking(?)

?????? nal_unit_type = 5,所以

?????? no_output_of_prior_pics_flag(1):0

long_term_reference_flag(1):0

忽略

。。71 27

001 0111 0001 0010 0111

slice_qp_deltasev):001 01 4-2

忽略

?

slice_data( ):7.3.4

對I-Slice:忽略N

進入if( moreDataFlag ) { if( MbaffFrameFlag && ( CurrMbAddr % 2?= =?0?| |???????????? ???? ( CurrMbAddr % 2?= =?1?&&?prevMbSkipped ) ) )mb_field_decoding_flag

macroblock_layer(?)}

mb_field_decoding_flag忽略

macroblock_layer(?)

mb_type(ue(v):0

mb_pred( mb_type )

prev_intra4x4_pred_mode_flag[?luma4x4BlkIdx?] (1bit, 對babac是ae(v)):1

1 27:0001 0010 0111

prev_intra4x4_pred_mode_flag[?1?] : 0001,0,001

0010 0111

prev_intra4x4_pred_mode_flag[?2?] : 0010,0,010

prev_intra4x4_pred_mode_flag[?3] : 0111,0,111

……16

1b 88 00 3e cf.

intra_chroma_pred_modeue(v)?: 最后的一個1bit:0

?

接下來是macroblock_layer的coded_block_pattern和run level,既系數

c0 06 ad a0 18

1100 0000 0000 0110 1010 0000 0001 1000

coded_block_pattern(me(v):0,根據Table?9?4,= 47,0x2f

mb_qp_delta(se(v):):0 len =1

residual(?)見7.3.5.3

residual_block( LumaLevel[?i8x8?*?4?+?i4x4?], 16 )

coeff_token(ce(v): 00 0000 0000 0110 1

?????? nc = 0(left block and top block 相關的)

len: {?? // 0702

????? { 1, 6, 8, 9,10,11,13,13,13,14,14,15,15,16,16,16,16},

????? { 0, 2, 6, 8, 9,10,11,13,13,14,14,15,15,15,16,16,16},

????? { 0, 0, 3, 7, 8, 9,10,11,13,13,14,14,15,15,16,16,16},

????? { 0, 0, 0, 5, 6, 7, 8, 9,10,11,13,14,14,15,15,16,16},

??? },????????????????????????????????????????????????

??? { ?????????????????????????????????????????????????

????? { 2, 6, 6, 7, 8, 8, 9,11,11,12,12,12,13,13,13,14,14},

????? { 0, 2, 5, 6, 6, 7, 8, 9,11,11,12,12,13,13,14,14,14},

????? { 0, 0, 3, 6, 6, 7, 8, 9,11,11,12,12,13,13,13,14,14},

????? { 0, 0, 0, 4, 4, 5, 6, 6, 7, 9,11,11,12,13,13,13,14},

??? },????????????????????????????????????????????????

??? {?????????????????????????????????????????????????

????? { 4, 6, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 9,10,10,10,10},

????? { 0, 4, 5, 5, 5, 5, 6, 6, 7, 8, 8, 9, 9, 9,10,10,10},

????? { 0, 0, 4, 5, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,10,10,10},

????? { 0, 0, 0, 4, 4, 4, 4, 4, 5, 6, 7, 8, 8, 9,10,10,10},

??? },

code:

????? { 1, 5, 7, 7, 7, 7,15,11, 8,15,11,15,11,15,11, 7,4},

????? { 0, 1, 4, 6, 6, 6, 6,14,10,14,10,14,10, 1,14,10,6},

????? { 0, 0, 1, 5, 5, 5, 5, 5,13, 9,13, 9,13, 9,13, 9,5},

????? { 0, 0, 0, 3, 3, 4, 4, 4, 4, 4,12,12, 8,12, 8,12,8},

??? },

??? {

????? { 3,11, 7, 7, 7, 4, 7,15,11,15,11, 8,15,11, 7, 9,7},

????? { 0, 2, 7,10, 6, 6, 6, 6,14,10,14,10,14,10,11, 8,6},

????? { 0, 0, 3, 9, 5, 5, 5, 5,13, 9,13, 9,13, 9, 6,10,5},

????? { 0, 0, 0, 5, 4, 6, 8, 4, 4, 4,12, 8,12,12, 8, 1,4},

??? },

??? {

????? {15,15,11, 8,15,11, 9, 8,15,11,15,11, 8,13, 9, 5,1},

????? { 0,14,15,12,10, 8,14,10,14,14,10,14,10, 7,12, 8,4},

????? { 0, 0,13,14,11, 9,13, 9,13,10,13, 9,13, 9,11, 7,3},

????? { 0, 0, 0,12,11,10, 9, 8,13,12,12,12, 8,12,10, 6,2},

??? },

根據表查的:

code = 13,len = 15,i= 12,j=2

?????? 所以numcoeff = 12,numtrailingones = 2

010 0000 0001 1000: totalzeros:根據numcoeff

?int lentab[TOTRUN_NUM][16] =

?{

???

??? { 1,3,3,4,4,5,5,6,6,7,7,8,8,9,9,9},?

??? { 3,3,3,3,3,4,4,4,4,5,5,6,6,6,6},?

??? { 4,3,3,3,4,4,3,3,4,5,5,6,5,6},?

??? { 5,3,4,4,3,3,3,4,3,4,5,5,5},?

??? { 4,4,4,3,3,3,3,3,4,5,4,5},?

??? { 6,5,3,3,3,3,3,3,4,3,6},?

??? { 6,5,3,3,3,2,3,4,3,6},?

??? { 6,4,5,3,2,2,3,3,6},?

??? { 6,6,4,2,2,3,2,5},?

??? { 5,5,3,2,2,2,4},?

??? { 4,4,3,3,1,3},?

?? ?{ 4,4,2,1,3},?numcoeff開始

??? { 3,3,1,2},?

??? { 2,2,1},?

??? { 1,1},?

?};

?

?int codtab[TOTRUN_NUM][16] =

?{

??? {1,3,2,3,2,3,2,3,2,3,2,3,2,3,2,1},

??? {7,6,5,4,3,5,4,3,2,3,2,3,2,1,0},

??? {5,7,6,5,4,3,4,3,2,3,2,1,1,0},

??? {3,7,5,4,6,5,4,3,3,2,2,1,0},

??? {5,4,3,7,6,5,4,3,2,1,1,0},

??? {1,1,7,6,5,4,3,2,1,1,0},

??? {1,1,5,4,3,3,2,1,1,0},

??? {1,1,1,3,3,2,2,1,0},

??? {1,0,1,3,2,1,1,1,},

??? {1,0,1,3,2,1,1,},

??? {0,1,1,2,1,3},

??? {0,1,1,1,1}, numcoeff開始

??? {0,1,1,1},

??? {0,1,1},

??? {0,1},?

?};

Code = 1,len = 2,i=2,j = 0, totzeros = 2

Read run: 0 0000 0001 1000根據totzeros = 2

?int lentab[TOTRUN_NUM][16] =

?{

??? {1,1},

?? ?{1,2,2},

??? {2,2,2,2},

??? {2,2,2,3,3},

??? {2,2,3,3,3,3},

??? {2,3,3,3,3,3,3},

??? {3,3,3,3,3,3,3,4,5,6,7,8,9,10,11},

?};

?

?int codtab[TOTRUN_NUM][16] =

?{

??? {1,0},

?? ?{1,1,0},

??? {3,2,1,0},

??? {3,2,1,1,0},

??? {3,2,3,2,1,0},

??? {3,0,1,3,2,5,4},

??? {7,6,5,4,3,2,1,1,1,1,1,1,1,1,1},

Code = 1,len =1,I = 0,j = 0

?

0.1.1???????? Slice data syntax

?

slice_data(?) {

C

Descriptor

???? if( entropy_coding_mode_flag )

?

?

???????? while( !byte_aligned(?) )

?

?

????????????? cabac_alignment_one_bit

2

f(1)

???? CurrMbAddr = first_mb_in_slice * ( 1 + MbaffFrameFlag )

?

?

???? moreDataFlag = 1

?

?

???? prevMbSkipped = 0

?

?

???? do {

?

?

???????? if( slice_type?!=?I?&&?slice_type?!=?SI )

?

?

????????????? if( !entropy_coding_mode_flag ) {

?

?

????????????????? mb_skip_run

2

ue(v)

????????????????? prevMbSkipped = ( mb_skip_run > 0 )

?

?

????????????????? for( i="0"; i<mb_skip_run; i++ )

?

?

?????????????????????? CurrMbAddr = NextMbAddress( CurrMbAddr )

?

?

????????????????? moreDataFlag = more_rbsp_data(?)

?

?

????????????? } else {

?

?

????????????????? mb_skip_flag

2

ae(v)

????????????????? moreDataFlag = !mb_skip_flag

?

?

????????????? }

?

?

???????? if( moreDataFlag ) {

?

?

????????????? if( MbaffFrameFlag && ( CurrMbAddr % 2?= =?0?| |?

????????????????? ( CurrMbAddr % 2?= =?1?&&?prevMbSkipped ) ) )

?

?

????????????????? mb_field_decoding_flag

2

u(1) | ae(v)

????????????? macroblock_layer(?)

2 | 3 | 4

?

???????? }

?

?

???????? if( !entropy_coding_mode_flag )

?

?

????????????? moreDataFlag = more_rbsp_data(?)

?

?

???????? else {

?

?

????????????? if( slice_type?!=?I?&&?slice_type?!=?SI )

?

?

????????????????? prevMbSkipped = mb_skip_flag

?

?

????????????? if( MbaffFrameFlag?&&?CurrMbAddr % 2?= =?0 )

?

?

????????????????? moreDataFlag = 1

?

?

????????????? else {

?

?

????????????????? end_of_slice_flag

2

ae(v)

????????????????? moreDataFlag = !end_of_slice_flag

?

?

????????????? }

?

?

???????? }

?

?

???????? CurrMbAddr = NextMbAddress( CurrMbAddr )

?

?

???? } while( moreDataFlag )

?

?

}

?

?

?

?

?

?

se(v)?: CABAC正式介紹。根據Table 9 5 – coeff_token mapping to TotalCoeff( coeff_token ) and TrailingOnes( coeff_token )

chroma_format_idc 無

?

?

?

?

Bit string form

Range of codeNum

????????? 1

0

??????? 0 1 x0

1-2

????? 0 0 1 x1 x0

3-6

??? 0 0 0 1 x2 x1 x0

7-14

?0 0 0 0 1 x3 x2 x1 x0

15-30

0 0 0 0 0 1 x4 x3 x2 x1 x0

31-62

?

0.1.1.1????? Slice layer without partitioning RBSP syntax

?

slice_layer_without_partitioning_rbsp(?) {

C

Descriptor

???? slice_header(?)

2

?

???? slice_data(?)?/* all categories of slice_data(?) syntax */

2 | 3 | 4

?

???? rbsp_slice_trailing_bits(?)

2

?

}

?

?

?

?

?

?

0.1.1.2????? Sequence parameter set RBSP syntax

?

seq_parameter_set_rbsp(?) {

C

Descriptor

???? profile_idc

0

u(8)

???? constraint_set0_flag

0

u(1)

???? constraint_set1_flag

0

u(1)

???? constraint_set2_flag

0

u(1)

???? constraint_set3_flag

0

u(1)

???? reserved_zero_4bits /* equal to?0 */

0

u(4)

???? level_idc

0

u(8)

???? seq_parameter_set_id

0

ue(v)

???? if( profile_idc?= =?100?| |?profile_idc?= =?110?| |
???????? ?profile_idc?= =?122?| |?profile_idc?= =?144 ) {

?

?

???????? chroma_format_idc

0

ue(v)

???????? if( chroma_format_idc?= =?3 )

?

?

????????????? residual_colour_transform_flag

0

u(1)

???????? bit_depth_luma_minus8

0

ue(v)

???????? bit_depth_chroma_minus8

0

ue(v)

???????? qpprime_y_zero_transform_bypass_flag

0

u(1)

???????? seq_scaling_matrix_present_flag

0

u(1)

???????? if( seq_scaling_matrix_present_flag )

?

?

????????????? for( i = 0; i < 8; i++ ) {

?

?

????????????????? seq_scaling_list_present_flag[ i ]

0

u(1)

????????????? ???? if( seq_scaling_list_present_flag[ i ] )

?

?

?????????????????????? if( i < 6 )

?

?

?????????????????????????? scaling_list( ScalingList4x4[ i ], 16,
???????????????????????????????????????????? ?? UseDefaultScalingMatrix4x4Flag[ i ])

0

?

?????????????????????? else

?

?

?????????????????????????? scaling_list( ScalingList8x8[ i?–?6 ], 64,
???????????????????????????????????????????? ?? UseDefaultScalingMatrix8x8Flag[ i?–?6 ] )

0

?

????????????? }

?

?

???? }

?

?

???? log2_max_frame_num_minus4

0

ue(v)

???? pic_order_cnt_type

0

ue(v)

???? if( pic_order_cnt_type?= =?0 )

?

?

???????? log2_max_pic_order_cnt_lsb_minus4

0

ue(v)

???? else if( pic_order_cnt_type?= =?1 ) {

?

?

???????? delta_pic_order_always_zero_flag

0

u(1)

???????? offset_for_non_ref_pic

0

se(v)

???????? offset_for_top_to_bottom_field

0

se(v)

???????? num_ref_frames_in_pic_order_cnt_cycle

0

ue(v)

???????? for( i = 0; i < num_ref_frames_in_pic_order_cnt_cycle; i++ )

?

?

????????????? offset_for_ref_frame[?i?]

0

se(v)

???? }

?

?

???? num_ref_frames

0

ue(v)

???? gaps_in_frame_num_value_allowed_flag

0

u(1)

???? pic_width_in_mbs_minus1

0

ue(v)

???? pic_height_in_map_units_minus1

0

ue(v)

???? frame_mbs_only_flag

0

u(1)

???? if( !frame_mbs_only_flag )

?

?

???????? mb_adaptive_frame_field_flag

0

u(1)

???? direct_8x8_inference_flag

0

u(1)

???? frame_cropping_flag

0

u(1)

???? if( frame_cropping_flag ) {

?

?

???????? frame_crop_left_offset

0

ue(v)

???????? frame_crop_right_offset

0

ue(v)

???????? frame_crop_top_offset

0

ue(v)

???????? frame_crop_bottom_offset

0

ue(v)

???? }

?

?

???? vui_parameters_present_flag

0

u(1)

???? if( vui_parameters_present_flag )

?

?

???????? vui_parameters(?)

0

?

???? rbsp_trailing_bits(?)

0

?

}

?

?

?

?

Table?7?1 – NAL unit type codes

nal_unit_type

Content of NAL unit and RBSP syntax structure

C

0

Unspecified

?

1

Coded slice of a non-IDR picture
slice_layer_without_partitioning_rbsp(?)

2, 3, 4

2

Coded slice data partition A
slice_data_partition_a_layer_rbsp(?)

2

3

Coded slice data partition B
slice_data_partition_b_layer_rbsp(?)

3

4

Coded slice data partition C
slice_data_partition_c_layer_rbsp(?)

4

5

Coded slice of an IDR picture
slice_layer_without_partitioning_rbsp(?)

2, 3

6

Supplemental enhancement information (SEI)
sei_rbsp(?)

5

7

Sequence parameter set
seq_parameter_set_rbsp(?)

0

8

Picture parameter set
pic_parameter_set_rbsp(?)

1

9

Access unit delimiter
access_unit_delimiter_rbsp(?)

6

10

End of sequence
end_of_seq_rbsp( )

7

11

End of stream
end_of_stream_rbsp( )

8

12

Filler data
filler_data_rbsp(?)

9

13

Sequence parameter set extension
seq_parameter_set_extension_rbsp(?)

10

14..18

Reserved

?

19

Coded slice of an auxiliary coded picture without partitioning
slice_layer_without_partitioning_rbsp(?)

2, 3, 4

20..23

Reserved

?

24..31

Unspecified

?

?

?

?

?

byte_stream_nal_unit(?NumBytesInNALunit?) {

C

Descriptor

???? while( next_bits(?24?)?!=?0x000001 &&
????????????????? next_bits( 32 ) != 0x00000001 )

?

?

???????? leading_zero_8bits?/* equal to 0x00 */

?

f(8)

???? if( next_bits( 24 ) != 0x000001 )

?

?

???????? zero_byte?/* equal to?0x00 */

?

f(8)

???? start_code_prefix_one_3bytes?/* equal to?0x000001 */

?

f(24)

???? nal_unit(?NumBytesInNALunit )

?

?

???? while( more_data_in_byte_stream( ) &&
????????????????? next_bits( 24 ) != 0x000001 &&
????????????????? next_bits( 32 ) != 0x00000001 )

?

?

???????? trailing_zero_8bits?/* equal to 0x00 */

?

f(8)

}

?

?

?

?

?

?

0.1.1.3????? Picture parameter set RBSP syntax

?

pic_parameter_set_rbsp(?) {

C

Descriptor

???? pic_parameter_set_id

1

ue(v)

???? seq_parameter_set_id

1

ue(v)

???? entropy_coding_mode_flag

1

u(1)

???? pic_order_present_flag

1

u(1)

???? num_slice_groups_minus1

1

ue(v)

???? if( num_slice_groups_minus1 > 0 ) {

?

?

???????? slice_group_map_type

1

ue(v)

???????? if( slice_group_map_type?= =?0 )

?

?

????????????? for( iGroup = 0; iGroup <= num_slice_groups_minus1; iGroup++ )

?

?

????????????????? run_length_minus1[?iGroup?]

1

ue(v)

???????? else if( slice_group_map_type?= =?2 )

?

?

????????????? for( iGroup = 0; iGroup < num_slice_groups_minus1; iGroup++ ) {

?

?

????????????????? top_left[?iGroup?]

1

ue(v)

????????????????? bottom_right[?iGroup?]

1

ue(v)

????????????? }

?

?

???????? else if(?slice_group_map_type?= =?3?| |?
?????????????????????? slice_group_map_type?= =?4?| |?
?????????????????????? slice_group_map_type?= =?5 ) {

?

?

????????????? slice_group_change_direction_flag

1

u(1)

????????????? slice_group_change_rate_minus1

1

ue(v)

???????? } else if( slice_group_map_type?= =?6 ) {

?

?

????????????? pic_size_in_map_units_minus1

1

ue(v)

????????????? for( i = 0; i <= pic_size_in_map_units_minus1; i++ )

?

?

????????????????? slice_group_id[?i?]

1

u(v)

???????? }

?

?

???? }

?

?

???? num_ref_idx_l0_active_minus1

1

ue(v)

???? num_ref_idx_l1_active_minus1

1

ue(v)

???? weighted_pred_flag

1

u(1)

???? weighted_bipred_idc

1

u(2)

???? pic_init_qp_minus26?/* relative to?26 */

1

se(v)

???? pic_init_qs_minus26?/* relative to?26 */

1

se(v)

???? chroma_qp_index_offset

1

se(v)

???? deblocking_filter_control_present_flag

1

u(1)

???? constrained_intra_pred_flag

1

u(1)

???? redundant_pic_cnt_present_flag

1

u(1)

???? if( more_rbsp_data( ) ) {

?

?

???????? transform_8x8_mode_flag

1

u(1)

???????? pic_scaling_matrix_present_flag

1

u(1)

???????? if( pic_scaling_matrix_present_flag )

?

?

????????????? for( i = 0; i < 6 + 2* transform_8x8_mode_flag; i++ ) {

?

?

????????????????? pic_scaling_list_present_flag[ i ]

1

u(1)

????????????????? if( pic_scaling_list_present_flag[ i ] )

?

?

?????????????????????? if( i < 6 )

?

?

?????????????????????????? scaling_list( ScalingList4x4[ i ], 16,
???????????????????????????????????????????? ?? UseDefaultScalingMatrix4x4Flag[ i ] )

1

?

?????????????????????? else

?

?

?????????????????????????? scaling_list( ScalingList8x8[ i?–?6 ], 64,
???????????????????????????????????????????? ?? UseDefaultScalingMatrix8x8Flag[ i?–?6 ] )

1

?

????????????? }

?

?

???????? second_chroma_qp_index_offset

1

se(v)

???? }

?

?

???? rbsp_trailing_bits(?)

1

?

}

?

?

?

0.1.2???????? Slice header syntax

?

slice_header(?) {

C

Descriptor

???? first_mb_in_slice

2

ue(v)

???? slice_type

2

ue(v)

???? pic_parameter_set_id

2

ue(v)

???? frame_num

2

u(v)

???? if( !frame_mbs_only_flag ) {

?

?

???????? field_pic_flag

2

u(1)

???????? if( field_pic_flag )

?

?

????????????? bottom_field_flag

2

u(1)

???? }

?

?

???? if( nal_unit_type?= =?5 )

?

?

???????? idr_pic_id

2

ue(v)

???? if( pic_order_cnt_type?= =?0 ) {

?

?

???????? pic_order_cnt_lsb

2

u(v)

???????? if( pic_order_present_flag &&?!field_pic_flag )

?

?

????????????? delta_pic_order_cnt_bottom

2

se(v)

???? }

?

?

???? if( pic_order_cnt_type = = 1 && !delta_pic_order_always_zero_flag ) {

?

?

???????? delta_pic_order_cnt[ 0 ]

2

se(v)

???????? if( pic_order_present_flag?&&?!field_pic_flag )

?

?

????????????? delta_pic_order_cnt[ 1 ]

2

se(v)

???? }

?

?

???? if( redundant_pic_cnt_present_flag )

?

?

???????? redundant_pic_cnt

2

ue(v)

???? if( slice_type?= =?B )

?

?

???????? direct_spatial_mv_pred_flag

2

u(1)

???? if( slice_type = = P | | slice_type = = SP | | slice_type = = B ) {

?

?

???????? num_ref_idx_active_override_flag

2

u(1)

???????? if( num_ref_idx_active_override_flag ) {

?

?

????????????? num_ref_idx_l0_active_minus1

2

ue(v)

????????????? if( slice_type ?= =?B )

?

?

????????????????? num_ref_idx_l1_active_minus1

2

ue(v)

???????? }

?

?

???? }

?

?

???? ref_pic_list_reordering(?)

2

?

???? if( ( weighted_pred_flag?&&?( slice_type = = P?| |?slice_type = = SP ) )?| |
???????? ( weighted_bipred_idc?= =?1?&&?slice_type?= =?B ) )

?

?

???????? pred_weight_table(?)

2

?

???? if( nal_ref_idc != 0 )

?

?

???????? dec_ref_pic_marking(?)

2

?

???? if( entropy_coding_mode_flag?&&?slice_type?!=?I?&&?slice_type?!=?SI )

?

?

???????? cabac_init_idc

2

ue(v)

???? slice_qp_delta

2

se(v)

???? if( slice_type ?= =?SP?| |?slice_type?= =?SI ) {

?

?

???????? if( slice_type?= =?SP )

?

?

????????????? sp_for_switch_flag

2

u(1)

???????? slice_qs_delta

2

se(v)

???? }

?

?

???? if( deblocking_filter_control_present_flag ) {

?

?

???????? disable_deblocking_filter_idc

2

ue(v)

???????? if( disable_deblocking_filter_idc?!=?1 ) {

?

?

????????????? slice_alpha_c0_offset_div2

2

se(v)

????????????? slice_beta_offset_div2

2

se(v)

???????? }

?

?

???? }

?

?

???? if( num_slice_groups_minus1 > 0?&&
???????? slice_group_map_type >= 3?&&?slice_group_map_type <= 5)

?

?

???????? slice_group_change_cycle

2

u(v)

}

?

?

?

0.1.3???????? Slice data syntax

?

slice_data(?) {

C

Descriptor

???? if( entropy_coding_mode_flag )

?

?

???????? while( !byte_aligned(?) )

?

?

????????????? cabac_alignment_one_bit

2

f(1)

???? CurrMbAddr = first_mb_in_slice * ( 1 + MbaffFrameFlag )

?

?

???? moreDataFlag = 1

?

?

???? prevMbSkipped = 0

?

?

???? do {

?

?

???????? if( slice_type?!=?I?&&?slice_type?!=?SI )

?

?

????????????? if( !entropy_coding_mode_flag ) {

?

?

????????????????? mb_skip_run

2

ue(v)

????????????????? prevMbSkipped = ( mb_skip_run > 0 )

?

?

????????????????? for( i="0"; i<mb_skip_run; i++ )

?

?

?????????????????????? CurrMbAddr = NextMbAddress( CurrMbAddr )

?

?

????????????????? moreDataFlag = more_rbsp_data(?)

?

?

????????????? } else {

?

?

????????????????? mb_skip_flag

2

ae(v)

????????????????? moreDataFlag = !mb_skip_flag

?

?

????????????? }

?

?

???????? if( moreDataFlag ) {

?

?

????????????? if( MbaffFrameFlag && ( CurrMbAddr % 2?= =?0?| |?

????????????????? ( CurrMbAddr % 2?= =?1?&&?prevMbSkipped ) ) )

?

?

????????????????? mb_field_decoding_flag

2

u(1) | ae(v)

????????????? macroblock_layer(?)

2 | 3 | 4

?

???????? }

?

?

???????? if( !entropy_coding_mode_flag )

?

?

????????????? moreDataFlag = more_rbsp_data(?)

?

?

???????? else {

?

?

????????????? if( slice_type?!=?I?&&?slice_type?!=?SI )

?

?

????????????????? prevMbSkipped = mb_skip_flag

?

?

????????????? if( MbaffFrameFlag?&&?CurrMbAddr % 2?= =?0 )

?

?

????????????????? moreDataFlag = 1

?

?

????????????? else {

?

?

????????????????? end_of_slice_flag

2

ae(v)

????????????????? moreDataFlag = !end_of_slice_flag

?

?

????????????? }

?

?

???????? }

?

?

???????? CurrMbAddr = NextMbAddress( CurrMbAddr )

?

?

???? } while( moreDataFlag )

?

?

}

?

?

The variable MbaffFrameFlag is derived as follows.

MbaffFrameFlag = ( mb_adaptive_frame_field_flag?&&?!field_pic_flag )?????????????????????????? (7-22)

?

0.1.4???????? Macroblock layer syntax

?

macroblock_layer(?) {

C

Descriptor

???? mb_type

2

ue(v) | ae(v)

???? if( mb_type?= =?I_PCM ) {

?

?

???????? while( !byte_aligned(?) )

?

?

????????????? pcm_alignment_zero_bit

2

f(1)

???????? for( i = 0; i < 256; i++ )

?

?

????????????? pcm_sample_luma[?i?]

2

u(v)

???????? for( i = 0; i < 2 * MbWidthC * MbHeightC; i++ )

?

?

????????????? pcm_sample_chroma[?i?]

2

u(v)

???? } else {

?

?

???????? noSubMbPartSizeLessThan8x8Flag = 1

?

?

???????? if( mb_type?!=?I_NxN?&&

????????????? MbPartPredMode(?mb_type,?0?)?!=?Intra_16x16?&&

????????????? NumMbPart(?mb_type?)?= =?4 ) {

?

?

????????????? sub_mb_pred( mb_type )

2

?

????????????? for( mbPartIdx = 0; mbPartIdx < 4; mbPartIdx++ )

?

?

????????????????? if( sub_mb_type[?mbPartIdx?]?!=?B_Direct_8x8 ) {

?

?

?????????????????????? if( NumSubMbPart(?sub_mb_type[?mbPartIdx?]?)?>?1 )

?

?

?????????????????????????? noSubMbPartSizeLessThan8x8Flag = 0

?

?

????????????????? } else if( !direct_8x8_inference_flag )

?

?

?????????????????????? noSubMbPartSizeLessThan8x8Flag = 0

?

?

???????? } else {

?

?

????????????? if( transform_8x8_mode_flag?&&?mb_type?= =?I_NxN )

?

?

????????????????? transform_size_8x8_flag

2

u(1) | ae(v)

????????????? mb_pred( mb_type )

2

?

???????? }

?

?

???????? if( MbPartPredMode(?mb_type,?0?)?!=?Intra_16x16 ) {

?

?

???????? ???? coded_block_pattern

2

me(v) | ae(v)

????????????? if( CodedBlockPatternLuma > 0?&&

????????????????? ?transform_8x8_mode_flag?&&?mb_type?!=?I_NxN?&&

????????????????? ?noSubMbPartSizeLessThan8x8Flag?&&

????????????????? ?( mb_type?!=?B_Direct_16x16?| |?direct_8x8_inference_flag ) )

?

?

????????????????? transform_size_8x8_flag

2

u(1) | ae(v)

???????? }

?

?

???????? if( CodedBlockPatternLuma > 0?| |?CodedBlockPatternChroma > 0?| |
????????????? MbPartPredMode(?mb_type,?0?)?= =?Intra_16x16 ) {

?

?

????????????? mb_qp_delta

2

se(v) | ae(v)

????????????? residual(?)

3 | 4

?

???????? }

?

?

???? }

?

?

}

?

?

?

0.1.4.1????? Macroblock prediction syntax

?

mb_pred( mb_type ) {

C

Descriptor

???? if( MbPartPredMode(?mb_type,?0?)?= =?Intra_4x4?| |?
???????? MbPartPredMode(?mb_type,?0?)?= =?Intra_8x8?| |?
???????? MbPartPredMode(?mb_type,?0?)?= =?Intra_16x16 ) {

?

?

???????? if( MbPartPredMode(?mb_type,?0?)?= =?Intra_4x4 )

?

?

????????????? for( luma4x4BlkIdx=0; luma4x4BlkIdx<16; luma4x4BlkIdx++ ) {

?

?

????????????????? prev_intra4x4_pred_mode_flag[?luma4x4BlkIdx?]

2

u(1) | ae(v)

????????????????? if( !prev_intra4x4_pred_mode_flag[?luma4x4BlkIdx?] )

?

?

?????????????????????? rem_intra4x4_pred_mode[?luma4x4BlkIdx?]

2

u(3) | ae(v)

????????????? }

?

?

???????? if( MbPartPredMode(?mb_type,?0?)?= =?Intra_8x8 )

?

?

????????????? for( luma8x8BlkIdx=0; luma8x8BlkIdx<4; luma8x8BlkIdx++ ) {

?

?

????????????????? prev_intra8x8_pred_mode_flag[?luma8x8BlkIdx?]

2

u(1) | ae(v)

????????????????? if( !prev_intra8x8_pred_mode_flag[?luma8x8BlkIdx?] )

?

?

?????????????????????? rem_intra8x8_pred_mode[?luma8x8BlkIdx?]

2

u(3) | ae(v)

????????????? }

?

?

???????? if( chroma_format_idc?!=?0 )

?

?

????????????? intra_chroma_pred_mode

2

ue(v) | ae(v)

???? } else if( MbPartPredMode(?mb_type,?0?)?!=?Direct ) {

?

?

???????? for( mbPartIdx = 0; mbPartIdx < NumMbPart(?mb_type?); mbPartIdx++)

?

?

???????? ???? if( ( num_ref_idx_l0_active_minus1 > 0?| |
?????????????????????? mb_field_decoding_flag ) &&?
????????????? ???? MbPartPredMode(?mb_type,?mbPartIdx?)?!=?Pred_L1 )

?

?

????????????????? ref_idx_l0[?mbPartIdx?]

2

te(v) | ae(v)

???????? for( mbPartIdx = 0; mbPartIdx < NumMbPart(?mb_type?); mbPartIdx++)

?

?

???????? ???? if( ( num_ref_idx_l1_active_minus1?>?0?| |
?????????????????????? mb_field_decoding_flag ) &&?
????????????????? MbPartPredMode(?mb_type,?mbPartIdx?)?!=?Pred_L0 )

?

?

????????????????? ref_idx_l1[?mbPartIdx?]

2

te(v) | ae(v)

???????? for( mbPartIdx = 0; mbPartIdx < NumMbPart(?mb_type?); mbPartIdx++)

?

?

????????????? if( MbPartPredMode (?mb_type,?mbPartIdx?)?!=?Pred_L1 )

?

?

????????????????? for( compIdx = 0; compIdx < 2; compIdx++ )

?

?

?????????????????????? mvd_l0[?mbPartIdx?][?0?][?compIdx?]

2

se(v) | ae(v)

???????? for( mbPartIdx = 0; mbPartIdx < NumMbPart(?mb_type?); mbPartIdx++)

?

?

????????????? if( MbPartPredMode(?mb_type,?mbPartIdx?)?!=?Pred_L0 )

?

?

????????????????? for( compIdx = 0; compIdx < 2; compIdx++ )

?

?

?????????????????????? mvd_l1[?mbPartIdx?][?0?][?compIdx?]

2

se(v) | ae(v)

???? }

?

?

}

?

?

?

0.1.4.2????? Residual data syntax

?

residual(?) {

C

Descriptor

???? if( !entropy_coding_mode_flag )

?

?

???????? residual_block = residual_block_cavlc

?

?

???? else

?

?

???????? residual_block = residual_block_cabac

?

?

???? if( MbPartPredMode(?mb_type,?0?)?= =?Intra_16x16 )

?

?

???????? residual_block( Intra16x16DCLevel, 16 )

3

?

???? for( i8x8 = 0; i8x8 < 4; i8x8++ )?/* each luma 8x8 block */

?

?

???????? if( !transform_size_8x8_flag?| |?!entropy_coding_mode_flag )

?

?

????????????? for( i4x4 = 0; i4x4 < 4; i4x4++ ) {?/* each 4x4 sub-block of block */

?

?

????????????????? if( CodedBlockPatternLuma & ( 1 << i8x8 ) )

?

?

?????????????????????? if( MbPartPredMode(?mb_type,?0?)?= =?Intra_16x16 )

?

?

?????????????????????????? residual_block( Intra16x16ACLevel[?i8x8?*?4?+?i4x4?], 15 )

3

?

?????????????????????? else

?

?

?????????????????????????? residual_block( LumaLevel[?i8x8?*?4?+?i4x4?], 16 )

3 | 4

?

????????????????? else if( MbPartPredMode(?mb_type,?0?)?= =?Intra_16x16 )

?

?

?????????????????????? for( i = 0; i < 15; i++ )

?

?

?????????????????????????? Intra16x16ACLevel[?i8x8?*?4?+?i4x4?][?i?] = 0

?

?

????????????????? else

?

?

?????????????????????? for( i = 0; i < 16; i++ )

?

?

?????????????????????????? LumaLevel[?i8x8?*?4?+?i4x4?][?i?] = 0

?

?

????????????????? if( !entropy_coding_mode_flag?&&?transform_size_8x8_flag )

?

?

?????????????????????? for( i = 0; i < 16; i++ )

?

?

?????????????????????????? LumaLevel8x8[?i8x8?][?4?*?i?+?i4x4?] =
???????????????????????????????????????????????????? LumaLevel[?i8x8?*?4?+?i4x4?][?i?]

?

?

????????????? }

?

?

???????? else if( CodedBlockPatternLuma & ( 1 << i8x8 ) )

?

?

????????????? residual_block( LumaLevel8x8[?i8x8?], 64 )

3 | 4

?

???????? else

?

?

????????????? for( i = 0; i < 64; i++ )

?

?

????????????????? LumaLevel8x8[?i8x8?][?i?] = 0

?

?

???? if( chroma_format_idc?!=?0 ) {

?

?

???????? NumC8x8 = 4 / ( SubWidthC * SubHeightC )

?

?

???????? for( iCbCr = 0; iCbCr < 2; iCbCr++ )

?

?

????????????? if( CodedBlockPatternChroma & 3 )?/* chroma DC residual present */

?

?

????????????????? residual_block( ChromaDCLevel[?iCbCr?], 4 * NumC8x8 )

3 | 4

?

????????????? else

?

?

????????????????? for( i = 0; i < 4 * NumC8x8; i++ )

?

?

?????????????????????? ChromaDCLevel[?iCbCr?][?i?] = 0

?

?

???????? for( iCbCr = 0; iCbCr < 2; iCbCr++ )

?

?

????????????? for( i8x8 = 0; i8x8 < NumC8x8; i8x8++ )

?

?

????????????????? for( i4x4 = 0; i4x4 < 4; i4x4++ )

?

?

?????????????????????? if( CodedBlockPatternChroma & 2 )
???????????????????????????????????????????????????????????? /* chroma AC residual present */

?

?

?????????????????????????? residual_block( ChromaACLevel[?iCbCr?][?i8x8*4+i4x4?], 15)

3 | 4

?

?????????????????????? else

?

?

?????????????????????????? for( i = 0; i < 15; i++ )

?

?

??????????????????????????????? ChromaACLevel[?iCbCr?][?i8x8*4+i4x4?][?i?] = 0

?

?

???? }

?

?

?

?

residual_block_cavlc( coeffLevel, maxNumCoeff ) {

C

Descriptor

??? for( i = 0; i < maxNumCoeff; i++ )

?

?

?????? coeffLevel[?i?] = 0

?

?

??? coeff_token

3 | 4

ce(v)

??? if( TotalCoeff( coeff_token ) > 0 ) {

?

?

?????? if( TotalCoeff( coeff_token ) > 10?&&?TrailingOnes( coeff_token ) < 3 )

?

?

?????????? suffixLength = 1

?

?

?????? else

?

?

?????????? suffixLength = 0

?

?

?????? for( i = 0; i < TotalCoeff( coeff_token ); i++ )

?

?

?????????? if( i < TrailingOnes( coeff_token ) ) {

?

?

????????????? trailing_ones_sign_flag

3 | 4

u(1)

????????????? level[?i?] = 1 – 2 * trailing_ones_sign_flag

?

?

?????????? } else {

?

?

????????????? level_prefix

3 | 4

ce(v)

????????????? levelCode = ( Min( 15, level_prefix ) << suffixLength )

?

?

????????????? if( suffixLength > 0?| |?level_prefix >= 14 ) {

?

?

????????????????? level_suffix

3 | 4

u(v)

????????????????? levelCode += level_suffix

?

?

????????????? }

?

?

????????????? if( level_prefix?> =?15?&&?suffixLength?= =?0 )

?

?

????????????????? levelCode += 15

?

?

????????????? if( level_prefix?> =?16 )

?

?

????????????????? levelCode += ( 1 << ( level_prefix – 3 ) ) – 4096

?

?

????????????? if( i?= =?TrailingOnes( coeff_token )?&&?
????????????????? ?TrailingOnes( coeff_token ) < 3 )

?

?

????????????????? levelCode += 2

?

?

????????????? if( levelCode % 2?= =?0 )

?

?

????????????????? level[ i ] = ( levelCode + 2 ) >> 1

?

?

????????????? else

?

?

????????????????? level[ i ] = ( –levelCode – 1 ) >> 1

?

?

????????????? if( suffixLength?= =?0 )

?

?

????????????????? suffixLength = 1

?

?

????????????? if( Abs( level[ i ] )?>?( 3 << ( suffixLength – 1 ) )?&&?
????????????????? ?suffixLength < 6 )

?

?

????????????????? suffixLength++

?

?

?????????? }

?

?

?????? if( TotalCoeff( coeff_token ) < maxNumCoeff ) {

?

?

?????????? total_zeros

3 | 4

ce(v)

?????????? zerosLeft = total_zeros

?

?

?????? } else

?

?

?????????? zerosLeft = 0

?

?

?????? for( i = 0; i < TotalCoeff( coeff_token ) – 1; i++ ) {

?

?

?????????? if( zerosLeft > 0 ) {

?

?

????????????? run_before

3 | 4

ce(v)

????????????? run[ i ] = run_before

?

?

?????????? } else

?

?

????????????? run[ i ] = 0

?

?

?????????? zerosLeft = zerosLeft – run[ i ]

?

?

?????? }

?

?

?????? run[ TotalCoeff( coeff_token ) – 1 ] = zerosLeft

?

?

?????? coeffNum = ?1

?

?

?????? for( i = TotalCoeff( coeff_token ) – 1; i >= 0; i-- ) {

?

?

?????????? coeffNum += run[ i ] + 1

?

?

?????????? coeffLevel[ coeffNum ] = level[ i ]

?

?

?????? }

?

?

??? }

?

?

}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455964.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455964.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455964.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SVN在vs2013中使用

http://download.csdn.net/download/show_594/9112963 內包含VisualSVN 5.0.1的官方原版安裝包及破解文件VisualSVN.Core.L.dll. 使用方法&#xff1a; 1、運行&#xff1a;VisualSVN-5.0.1.msi 進行原版的安裝。 2、打開VisualSVN的安裝路徑。進入其子目錄bin。將壓縮包內的Vi…

springboot springmvc mybatis_12道重點的Spring Boot面試題,幫你整理好了!

今天跟大家分享下SpringBoot常見面試題的知識。最新2020整理收集的一些面試題&#xff08;都整理成文檔&#xff09;&#xff0c;有很多干貨&#xff0c;包含mysql&#xff0c;netty&#xff0c;spring&#xff0c;線程&#xff0c;spring cloud等詳細講解&#xff0c;也有詳細…

【數據分析】快速獲取微博用戶數據,圖片,視頻

功能輸出實例運行環境使用說明 下載腳本安裝依賴程序設置設置數據庫&#xff08;可選&#xff09;運行腳本按需求修改腳本&#xff08;可選&#xff09; 如何獲取user_id添加cookie與不添加cookie的區別&#xff08;可選&#xff09;如何獲取cookie&#xff08;可選&#xff09…

“云計算”越來越重要 但更重要的是“云安全”

據Gartner公司的預測&#xff0c;云安全服務業務繼續保持強勁&#xff0c;2017年最終將達到59億美元的規模&#xff0c;比2016年上漲了21&#xff05;。 云安全服務市場的增長速度將超過整體信息安全市場。Gartner表示&#xff0c;電子郵件的安全性&#xff0c;網絡安全和身份識…

HTML中Head頭

HTML中Head頭 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>網頁標題</title> </head> <body>網頁顯示內容 </body> </html>HEAD標簽里面負責對網頁進行一些設置以及…

H.264的兩個概念:DC系數和AC系數。 MV預測過程詳解(附圖)

在做熵編碼之前&#xff0c;先明確兩個概念&#xff1a;DC系數和AC系數。 量化后得到的仍是64個系數&#xff0c;量化并沒有改變系數的性質。大家知到DCT變換是將數據域從時&#xff08;空&#xff09;域變換到頻域&#xff0c;在頻域平面上變換系數是二維頻域變量u和v的函數。…

1028. List Sorting (25)

題目鏈接&#xff1a;http://www.patest.cn/contests/pat-a-practise/1028 題目&#xff1a; 1028. List Sorting (25) 時間限制200 ms內存限制65536 kB代碼長度限制16000 B判題程序Standard作者CHEN, YueExcel can sort records according to any column. Now you are suppose…

【后端開發】分析抖音后臺架構

最后分享抖音美女爬蟲 https://github.com/wangshub/Douyin-Bot

看日本如何用IoT打造智能工廠

在技術、市場、政策等方面因素的推動下&#xff0c;全球正在掀起一股智能制造的熱潮&#xff0c;越來越多的國家大力推進智能工廠的建設。有機構預測&#xff0c;未來五年智能工廠領域的投資將促進生產力增長27%&#xff0c;預計到2022年年底&#xff0c;21%的工廠將會成為智能…

HTML標題

HTML標題 通過 <h1>、<h2>、<h3>、<h4>、<h5>、<h6>,標簽可以在網頁上定義6種級別的標題。 6種級別的標題表示文檔的6級目錄層級關系&#xff0c;比如說&#xff1a; <h1>用作主標題&#xff08;最重要的&#xff09;&#xff0c;其…

264中 POC的計算方法

作者&#xff1a;jogh.264 參考代碼 JM86 一參數說明 這一節闡述的是encoder.cfg 中的參數對編碼過程的影響 要注意的是encoder.cfg 中的參數跟input 結構體中的變量是一一對應的 ? StartFrame&#xff1a;從視頻流的第幾幀開始編碼 ? FramesToBeEncoded&#xff1a;指明…

c++ 測試串口速率_納米軟件案例之電流控制測試系統

項目背景西安某機電研究所電流控制測試系統軟件需要用記錄儀設置采樣速率對電流數據進行采集&#xff0c;并能夠進行數據實時顯示、保存。為更好的分析實驗現象&#xff0c;需要歷史測試數據可查詢并顯示。目前采用的傳統的手動測試&#xff0c;測試操作繁雜。數據保存困難&…

【Sublime】使用 Sublime 工具時運行python文件

使用 Sublime 工具時報Decode error - output not utf-8解決辦法 在菜單中tools中第四項編譯系統 內最后一項增添新的編譯系統 自動新建 Python.sublime-build文件,并添加"encoding":"cp936"這一行,保存即可 使用python2 則注釋encoding改為utf-8 {&quo…

智慧城市這份試卷 國外城市怎么答題?

在近五年&#xff0c;國內智慧城市建設的熱潮一直增無減。據媒體梳理&#xff0c;透過各地政府工作報告和“十三五”規劃發現&#xff0c;我國95%的副省級城市、76%的地級城市&#xff0c;總計超過500個城市&#xff0c;均在政府工作報告或“十三五”規劃中明確提出&#xff0c…

HTML段落,換行,字符實體

HTML段落,換行,字符實體 html段落 <p>標簽定義一個文本段落&#xff0c;一個段落含有默認的上下間距&#xff0c;段落之間會用這種默認間距隔開&#xff0c;代碼如下&#xff1a; <!DOCTYPE html> <html> <head><meta charset"UTF-8"&g…

【python】有意思的python小項目GitHub地址匯總

Licence_plate_recognize 車牌識別 Djang-Stu 基于python的Django框架學生信息管理系統 sklearn-machine-learning 數據分析-機器學習-深度學習【個人學習筆記】 movie_analysis 對電影影評分析生成詞云 spider_doubanTOP 爬取豆瓣電影top250/爬取豆瓣圖書top250 yuyin_re…

CBP詳解

cbp一共6bit&#xff0c;高2bit表示cbpc(2&#xff1a;cb、cr中至少一個4x4塊的AC系數不全為0&#xff1b;1&#xff1a;cb、cr中至少一個2x2的DC系數不全為0&#xff1b;0&#xff1a;所有色度系數全0&#xff09; 低4bit分別表示4個8x8亮度塊&#xff0c;其中從最低一位開始的…

R 包的安裝,使用,更新

R包的使用方法 包就是提供了種類繁多的函數&#xff0c;當然還有它的一些數據集&#xff0c;可以使用這些函數來操作這些數據集&#xff0c;來學習使用。 library()&#xff0c;當前的工作環境里&#xff0c;可以使用的包 包的幫助文檔&#xff1a;help(package"包名"…

nginx 電子書_13本免費的電子書,拿走,不謝

傻白甜程序員13本電子書的清單01《PyTorch官方教程中文版》傻白甜程序員中&#xff0c;后臺回復“pytorch”獲取02《Think Python》傻白甜程序員中&#xff0c;后臺回復“ThinkPython”獲取03《走向分布式》傻白甜程序員中&#xff0c;后臺回復“分布式”獲取04《Nginx教程&…

Redis數據類型:字符串

2019獨角獸企業重金招聘Python工程師標準>>> 概要 字符串類型是Redis最基本的數據類型&#xff0c;能夠存儲任何形式的字符串&#xff0c;單個健值最大能夠存放512兆的數據&#xff0c;據傳將來會放開512M的限制。 命令 設置值&#xff1a;set foo bar 獲取值&#…