<div class="notebook">
<div class="nb-cell markdown" name="md5">
#
</div>
<div class="nb-cell markdown" name="md7">
# H.264 specification playground
This notebook contains facts and rules capturing information included in H.264 codec specification and a simple program showing how to make use of them facts to reason about possible values of fields or show dependencies between the fields.
</div>
<div class="nb-cell markdown" name="md2">
## Rules and facts fetched from H.264 specification
Please note that the database of facts and rules was created by LLM fed with content of the specification and guided to generate given facts and rules, therfore it is highly probable that it contains mistakes.
The following facts and rules are used in the database:
* `f/1`, `f/2` - field definition
* `type/2` - type of a field
* `depends_on/2` - association between a field and a list of all fields that affect the value of this field
* `constraints/2` - constraints on the value of given field
* `calculate/2` - specifies how value of given field can be inferred from values of other fields
</div>
<div class="nb-cell program" data-background="true" data-below="true" data-singleline="true" name="p1">
:- use_module(library(clpfd)).
% calculate/1
calculate(f(luma_weight_l0(_I)), X) :-
domain(f(luma_weight_l0_flag), Flag),
Flag #= 0,
domain(f(luma_log2_weight_denom), Denom),
X #= 2^Denom.
calculate(f(luma_offset_l0(_I)), X) :-
domain(f(luma_weight_l0_flag), Flag),
Flag #= 0,
X #= 0.
calculate(f(transform_size_8x8_flag), 0) :-
domain(f(mb_type), MbType),
mb_type('I_PCM', I_PCM),
MbType #= I_PCM.
calculate(f(transform_size_8x8_flag), 0) :-
domain(f(dMbPartPredMode), PredMode),
domain(f(dMbPartPredMode('Intra_16x16', _)), Intra_16x16),
PredMode #= Intra_16x16.
calculate(f(transform_size_8x8_flag), 0) :-
domain(f(dCodedBlockPatternLuma), CbpLuma),
CbpLuma #= 0.
calculate(f(transform_size_8x8_flag), 0) :-
domain(f(transform_8x8_mode_flag), T8x8Flag),
T8x8Flag #= 0.
calculate(f(transform_size_8x8_flag), 0) :-
domain(f(mb_type), MbType),
mb_type('I_NxN', I_NxN),
MbType #= I_NxN.
calculate(f(transform_size_8x8_flag), 0) :-
domain(f(dNoSubMbPartSizeLessThan8x8Flag), NoSubFlag),
NoSubFlag #= 0.
calculate(f(transform_size_8x8_flag), 0) :-
domain(f(mb_type), MbType),
domain(f(direct_8x8_inference_flag), DirectFlag),
DirectFlag #= 0,
mb_type('B_Direct_16x16', B_Direct_16x16),
MbType #= B_Direct_16x16,
f(coded_block_pattern).
calculate(f(dMbWidthC), 0) :-
domain(f(chroma_format_idc), 0),
domain(f(separate_colour_plane_flag), 1).
calculate(f(dMbWidthC), Value) :-
domain(f(chroma_format_idc), Chroma), Chroma #\= 0,
domain(f(separate_colour_plane_flag), 0),
domain(f(dSubWidthC), SubWidthC),
Value #= 16 // SubWidthC.
calculate(f(dMbHeightC), 0) :-
domain(f(chroma_format_idc), 0),
domain(f(separate_colour_plane_flag), 1).
calculate(f(dMbHeightC), Value) :-
domain(f(chroma_format_idc), Chroma), Chroma \= 0,
domain(f(separate_colour_plane_flag), 0),
domain(f(dSubHeightC), SubHeightC),
Value #= 16 // SubHeightC.
calculate(f(redundant_pic_cnt), Default) :-
default_value(f(redundant_pic_cnt), Default),
domain(f(redundant_pic_cnt_present_flag), Flag),
Flag #= 0.
calculate(f(cabac_alignment_one_bit), 1) :-
domain(f(entropy_coding_mode_flag), Flag), Flag #= 1,
domain(f(dByteAligned), BA), BA #= 0.
calculate(f(mb_field_decoding_flag), X) :-
domain(f(mbaff_frame_flag), 0),
domain(f(field_pic_flag), X).
calculate(f(mb_field_decoding_flag), X) :-
domain(f(mbaff_frame_flag), 1),
domain(f(dInferredMbFieldDecodingFlag), X).
calculate(f(dPicScalingListCount), N) :-
domain(f(chroma_format_idc), ChromaFormatIdc),
domain(f(transform_8x8_mode_flag), Transform8x8ModeFlag),
(ChromaFormatIdc #\= 3 #<==> IsNotChroma3),
(IsNotChroma3 #= 1 -> Factor #= 2; Factor #= 6),
N #= 6 + Factor * Transform8x8ModeFlag.
calculate(f(transform_8x8_mode_flag), X) :-
domain(f(more_rbsp_data), 0), default_value(f(transform_8x8_mode_flag), X).
calculate(f(pic_scaling_matrix_present_flag), X) :-
domain(f(more_rbsp_data), 0), default_value(f(pic_scaling_matrix_present_flag), X).
calculate(f(pic_scaling_list_present_flag(_I)), Value) :-
domain(f(pic_scaling_matrix_present_flag), 0),
domain(f(seq_scaling_matrix_present_flag), SeqFlag),
(SeqFlag #= 0 -> Value = 'Scaling list fall-back rule set A (Table 7-2)';
SeqFlag #= 1 -> Value = 'Scaling list fall-back rule set B (Table 7-2)').
calculate(f(second_chroma_qp_index_offset), X) :-
domain(f(more_rbsp_data), 0), default_value(f(second_chroma_qp_index_offset), X).
calculate(f(chroma_format_idc), X) :-
domain(f(profile_idc), Y),
\+ member(Y, [100, 110, 122, 244, 44, 83, 86, 118, 128, 138, 139, 134, 135]),
default_value(f(chroma_format_idc), X).
calculate(f(separate_colour_plane_flag), X) :-
domain(f(profile_idc), ProfileIdc),
domain(f(chroma_format_idc), ChromaFormatIdc),
( \+ member(ProfileIdc, [100, 110, 122, 244, 44, 83, 86, 118, 128, 138, 139, 134, 135])
; ChromaFormatIdc #\= 3
),
default_value(f(separate_colour_plane_flag), X).
calculate(f(bit_depth_luma_minus8), X) :-
domain(f(profile_idc), Y),
\+ member(Y, [100, 110, 122, 244, 44, 83, 86, 118, 128, 138, 139, 134, 135]),
default_value(f(bit_depth_luma_minus8), X).
calculate(f(bit_depth_chroma_minus8), X) :-
domain(f(profile_idc), Y),
\+ member(Y, [100, 110, 122, 244, 44, 83, 86, 118, 128, 138, 139, 134, 135]),
default_value(f(bit_depth_chroma_minus8), X).
calculate(f(qpprime_y_zero_transform_bypass_flag), X) :-
domain(f(profile_idc), Y),
\+ member(Y, [100, 110, 122, 244, 44, 83, 86, 118, 128, 138, 139, 134, 135]),
default_value(f(qpprime_y_zero_transform_bypass_flag), X).
calculate(f(seq_scaling_matrix_present_flag), X) :-
domain(f(profile_idc), Y),
\+ member(Y, [100, 110, 122, 244, 44, 83, 86, 118, 128, 138, 139, 134, 135]),
default_value(f(seq_scaling_matrix_present_flag), X).
calculate(f(seq_scaling_list_present_flag(_I)), X) :-
domain(f(profile_idc), ProfileIdc),
domain(f(seq_scaling_matrix_present_flag), SeqScalingMatrixPresentFlag),
( \+ member(ProfileIdc, [100, 110, 122, 244, 44, 83, 86, 118, 128, 138, 139, 134, 135])
; SeqScalingMatrixPresentFlag #\= 1
),
X #= 0.
calculate(f(mb_adaptive_frame_field_flag), 0) :-
domain(f(frame_mbs_only_flag), Flag), Flag #= 1.
calculate(f(frame_crop_left_offset), 0) :-
domain(f(frame_cropping_flag), Flag), Flag #= 0.
calculate(f(frame_crop_right_offset), 0) :-
domain(f(frame_cropping_flag), Flag), Flag #= 0.
calculate(f(frame_crop_top_offset), 0) :-
domain(f(frame_cropping_flag), Flag), Flag #= 0.
calculate(f(frame_crop_bottom_offset), 0) :-
domain(f(frame_cropping_flag), Flag), Flag #= 0.
calculate(f(coded_block_flag), 1) :-
domain(f(residual_block_cabac, dMaxNumCoeff), MaxCoeff),
domain(f(dChromaArrayType), ChromaType),
(MaxCoeff #= 64, ChromaType #\= 3).
calculate(f(delta_pic_order_cnt(1)), Val) :-
( domain(f(pic_order_cnt_type), CntType), CntType #\= 1
; domain(f(delta_pic_order_always_zero_flag), ZeroFlag), ZeroFlag #= 1
; domain(f(bottom_field_pic_order_in_frame_present_flag), PresentFlag), PresentFlag #= 0
; domain(f(field_pic_flag), FieldFlag), FieldFlag #= 1
),
default_value(f(delta_pic_order_cnt(1)), Val).
calculate(f(num_ref_idx_l0_active_minus1), Val) :-
domain(f(num_ref_idx_active_override_flag), OverrideFlag),
OverrideFlag #= 0,
domain(f(dNumRefIdxL0DefaultActiveMinus1), Val).
calculate(f(num_ref_idx_l1_active_minus1), Val) :-
( domain(f(num_ref_idx_active_override_flag), OverrideFlag), OverrideFlag #= 0
; domain(f(slice_type), SliceType), \+ member(SliceType, [b])
),
domain(f(dNumRefIdxL1DefaultActiveMinus1), Val).
calculate(f(disable_deblocking_filter_idc), Val) :-
domain(f(deblocking_filter_control_present_flag), Flag),
Flag #= 0,
default_value(f(disable_deblocking_filter_idc), Val).
calculate(f(slice_alpha_c0_offset_div2), Val) :-
( domain(f(deblocking_filter_control_present_flag), Flag), Flag #= 0
; domain(f(disable_deblocking_filter_idc), Idc), Idc #= 1
),
default_value(f(slice_alpha_c0_offset_div2), Val).
calculate(f(slice_beta_offset_div2), Val) :-
( domain(f(deblocking_filter_control_present_flag), Flag), Flag #= 0
; domain(f(disable_deblocking_filter_idc), Idc), Idc #= 1
),
default_value(f(slice_beta_offset_div2), Val).
calculate(f(sub_mb_type(MbPartIdx)), Val) :-
( domain(f(mb_type), MbType), mb_type('I_PCM', I_PCM), MbType == I_PCM
; domain(f(mb_type), MbType), mb_type('I_NxN', I_NxN), MbType == I_NxN
; domain(f(dMbPartPredMode(_MbType, 0)), PredMode), PredMode == 'Intra_16x16'
; domain(f(dNumMbPart(_MbType)), NumPart), NumPart #\= 4
),
default_value(f(sub_mb_type(MbPartIdx)), Val).
calculate(f(dPicScalingListCount), Count) :-
domain(f(chroma_format_idc), Cfi), Cfi #\= 3,
domain(f(transform_8x8_mode_flag), T8m),
Count #= 6 + 2 * T8m.
calculate(f(dPicScalingListCount), Count) :-
domain(f(chroma_format_idc), Cfi), Cfi #= 3,
domain(f(transform_8x8_mode_flag), T8m),
Count #= 6 + 6 * T8m.
calculate(f(dSeqScalingListCount), 8) :-
domain(f(chroma_format_idc), Cfi), Cfi #\= 3.
calculate(f(dSeqScalingListCount), 12) :-
domain(f(chroma_format_idc), Cfi), Cfi #= 3.
calculate(f(dIdrPicFlag), 1) :-
domain(f(nal_unit_type), NalUnitType),
NalUnitType #= 5.
calculate(f(dIdrPicFlag), 0) :-
domain(f(nal_unit_type), NalUnitType),
NalUnitType #\= 5.
calculate(f(dDepthFlag), 0) :-
domain(f(nal_unit_type), NalUnitType),
NalUnitType #\= 21.
calculate(f(dDepthFlag), DepthFlag) :-
domain(f(nal_unit_type), 21),
domain(f(avc_3d_extension_flag), 1),
domain(f(depth_flag), DepthFlag).
calculate(f(dDepthFlag), 1) :-
domain(f(nal_unit_type), 21),
domain(f(avc_3d_extension_flag), 0).
calculate(f(dChromaArrayType), ChromaFormatIdc) :-
domain(f(separate_colour_plane_flag), 0),
domain(f(chroma_format_idc), ChromaFormatIdc).
calculate(f(dChromaArrayType), 0) :-
domain(f(separate_colour_plane_flag), 1).
calculate(f(dBitDepthY), Value) :-
domain(f(bit_depth_luma_minus8), BitDepthLumaMinus8),
Value #= 8 + BitDepthLumaMinus8.
calculate(f(dQpBdOffsetY), Value) :-
domain(f(bit_depth_luma_minus8), BitDepthLumaMinus8),
Value #= 6 * BitDepthLumaMinus8.
calculate(f(dBitDepthC), Value) :-
domain(f(bit_depth_chroma_minus8), BitDepthChromaMinus8),
Value #= 8 + BitDepthChromaMinus8.
calculate(f(dQpBdOffsetC), Value) :-
domain(f(bit_depth_chroma_minus8), BitDepthChromaMinus8),
Value #= 6 * BitDepthChromaMinus8.
calculate(f(dRawMbBits), Value) :-
domain(f(dBitDepthY), BitDepthY),
domain(f(dMbWidthC), MbWidthC),
domain(f(dMbHeightC), MbHeightC),
domain(f(dBitDepthC), BitDepthC),
Value #= 256 * BitDepthY + 2 * MbWidthC * MbHeightC * BitDepthC.
calculate(f(dFlat_4x4_16(K)), 16) :-
K #>= 0, K #< 16.
calculate(f(dFlat_8x8_16(K)), 16) :-
K #>= 0, K #< 64.
calculate(f(dMaxFrameNum), Value) :-
domain(f(log2_max_frame_num_minus4), Log2Max),
Exp #= Log2Max + 4,
Value #= 2^Exp.
calculate(f(dMaxPicOrderCntLsb), Value) :-
domain(f(log2_max_pic_order_cnt_lsb_minus4), Log2Max),
Exp #= Log2Max + 4,
Value #= 2^Exp.
calculate(f(dExpectedDeltaPerPicOrderCntCycle), Sum) :-
domain(f(num_ref_frames_in_pic_order_cnt_cycle), N),
sum_offsets(0, N, Sum).
calculate(f(dPicWidthInMbs), Value) :-
domain(f(pic_width_in_mbs_minus1), PicWidthMinus1),
Value #= PicWidthMinus1 + 1.
calculate(f(dPicWidthInSamplesL), Value) :-
domain(f(dPicWidthInMbs), PicWidthInMbs),
Value #= PicWidthInMbs * 16.
calculate(f(dPicWidthInSamplesC), Value) :-
domain(f(dPicWidthInMbs), PicWidthInMbs),
domain(f(dMbWidthC), MbWidthC),
Value #= PicWidthInMbs * MbWidthC.
calculate(f(dPicHeightInMapUnits), Value) :-
domain(f(pic_height_in_map_units_minus1), PicHeightMinus1),
Value #= PicHeightMinus1 + 1.
calculate(f(dPicSizeInMapUnits), Value) :-
domain(f(dPicWidthInMbs), PicWidthInMbs),
domain(f(dPicHeightInMapUnits), PicHeightInMapUnits),
Value #= PicWidthInMbs * PicHeightInMapUnits.
calculate(f(dFrameHeightInMbs), Value) :-
domain(f(frame_mbs_only_flag), FrameMbsOnlyFlag),
domain(f(dPicHeightInMapUnits), PicHeightInMapUnits),
Value #= (2 - FrameMbsOnlyFlag) * PicHeightInMapUnits.
calculate(f(dCropUnitX), 1) :-
domain(f(dChromaArrayType), ChromaArrayType),
ChromaArrayType #= 0.
calculate(f(dCropUnitX), SubWidthC) :-
domain(f(dChromaArrayType), ChromaArrayType),
ChromaArrayType #\= 0,
domain(f(dSubWidthC), SubWidthC).
calculate(f(dCropUnitY), Val) :-
domain(f(dChromaArrayType), 0),
domain(f(frame_mbs_only_flag), FrameMbsOnlyFlag),
Val #= 2 - FrameMbsOnlyFlag.
calculate(f(dCropUnitY), Val) :-
domain(f(dChromaArrayType), ChromaArrayType),
ChromaArrayType #\= 0,
domain(f(dSubHeightC), SubHeightC),
domain(f(frame_mbs_only_flag), FrameMbsOnlyFlag),
Val #= SubHeightC * (2 - FrameMbsOnlyFlag).
calculate(f(dCroppedWidthL), Val) :-
domain(f(dPicWidthInSamplesL), PicWidthInSamples),
domain(f(dCropUnitX), CropUnitX),
domain(f(frame_crop_left_offset), LeftOffset),
domain(f(frame_crop_right_offset), RightOffset),
Val #= PicWidthInSamples - CropUnitX * (LeftOffset + RightOffset).
calculate(f(dCroppedWidthC), Val) :-
domain(f(dPicWidthInSamplesC), PicWidthInSamples),
domain(f(dCropUnitX), CropUnitX),
domain(f(frame_crop_left_offset), LeftOffset),
domain(f(frame_crop_right_offset), RightOffset),
Val #= PicWidthInSamples - CropUnitX * (LeftOffset + RightOffset).
calculate(f(dCroppedHeight), Val) :-
domain(f(dFrameHeightInMbs), FrameHeightInMbs),
domain(f(dCropUnitY), CropUnitY),
domain(f(frame_crop_top_offset), TopOffset),
domain(f(frame_crop_bottom_offset), BottomOffset),
Val #= 16 * FrameHeightInMbs - CropUnitY * (TopOffset + BottomOffset).
calculate(f(dSliceGroupChangeRate), Val) :-
domain(f(slice_group_change_rate_minus1), RateMinus1),
Val #= RateMinus1 + 1.
calculate(f(dMbaffFrameFlag), 1) :-
domain(f(mb_adaptive_frame_field_flag), Mbaff),
Mbaff #= 1,
domain(f(field_pic_flag), FieldPic),
FieldPic #= 0.
calculate(f(dMbaffFrameFlag), 0) :-
domain(f(mb_adaptive_frame_field_flag), Mbaff),
domain(f(field_pic_flag), FieldPic),
(Mbaff #= 0; FieldPic #= 1).
calculate(f(dPicHeightInMbs), Val) :-
domain(f(dFrameHeightInMbs), FrameHeightInMbs),
domain(f(field_pic_flag), FieldPicFlag),
Val #= FrameHeightInMbs // (1 + FieldPicFlag).
calculate(f(dPicHeightInSamplesL), Val) :-
domain(f(dPicHeightInMbs), PicHeightInMbs),
Val #= PicHeightInMbs * 16.
calculate(f(dPicHeightInSamplesC), Val) :-
domain(f(dPicHeightInMbs), PicHeightInMbs),
domain(f(dMbHeightC), MbHeightC),
Val #= PicHeightInMbs * MbHeightC.
calculate(f(dPicSizeInMbs), Val) :-
domain(f(dPicWidthInMbs), PicWidthInMbs),
domain(f(dPicHeightInMbs), PicHeightInMbs),
Val #= PicWidthInMbs * PicHeightInMbs.
calculate(f(dMaxPicNum), MaxFrameNum) :-
domain(f(field_pic_flag), FieldPicFlag),
FieldPicFlag #= 0,
domain(f(dMaxFrameNum), MaxFrameNum).
calculate(f(dMaxPicNum), Val) :-
domain(f(field_pic_flag), FieldPicFlag),
FieldPicFlag #= 1,
domain(f(dMaxFrameNum), MaxFrameNum),
Val #= 2 * MaxFrameNum.
calculate(f(dCurrPicNum), FrameNum) :-
domain(f(field_pic_flag), FieldPicFlag),
FieldPicFlag #= 0,
domain(f(frame_num), FrameNum).
calculate(f(dCurrPicNum), Val) :-
domain(f(field_pic_flag), FieldPicFlag),
FieldPicFlag #= 1,
domain(f(frame_num), FrameNum),
Val #= 2 * FrameNum + 1.
calculate(f(dSliceQPY), Val) :-
domain(f(pic_init_qp_minus26), PicInitQp),
domain(f(slice_qp_delta), SliceQpDelta),
Val #= 26 + PicInitQp + SliceQpDelta.
calculate(f(dQSY), Val) :-
domain(f(pic_init_qs_minus26), PicInitQs),
domain(f(slice_qs_delta), SliceQsDelta),
Val #= 26 + PicInitQs + SliceQsDelta.
calculate(f(dFilterOffsetA), Val) :-
domain(f(slice_alpha_c0_offset_div2), OffsetDiv2),
Val #= OffsetDiv2 * 2.
calculate(f(dFilterOffsetB), Val) :-
domain(f(slice_beta_offset_div2), OffsetDiv2),
Val #= OffsetDiv2 * 2.
calculate(f(dMapUnitsInSliceGroup0), Val) :-
domain(f(slice_group_change_cycle), Cycle),
domain(f(dSliceGroupChangeRate), Rate),
domain(f(dPicSizeInMapUnits), PicSize),
Term1 #= Cycle * Rate,
Val #= min(Term1, PicSize).
calculate(f(dCodedBlockPatternLuma), Val) :-
domain(f(coded_block_pattern), Cbp),
Val #= Cbp mod 16.
calculate(f(dCodedBlockPatternChroma), Val) :-
domain(f(coded_block_pattern), Cbp),
Val #= Cbp // 16.
calculate(f(dSubWidthC), 2) :-
domain(f(chroma_format_idc), 1),
domain(f(separate_colour_plane_flag), 0).
calculate(f(dSubWidthC), 2) :-
domain(f(chroma_format_idc), 2),
domain(f(separate_colour_plane_flag), 0).
calculate(f(dSubWidthC), 1) :-
domain(f(chroma_format_idc), 3),
domain(f(separate_colour_plane_flag), 0).
calculate(f(dSubHeightC), 2) :-
domain(f(chroma_format_idc), 1),
domain(f(separate_colour_plane_flag), 0).
calculate(f(dSubHeightC), 1) :-
domain(f(chroma_format_idc), 2),
domain(f(separate_colour_plane_flag), 0).
calculate(f(dSubHeightC), 1) :-
domain(f(chroma_format_idc), 3),
domain(f(separate_colour_plane_flag), 0).
calculate(f(dQpy), Qpy) :-
domain(f(dQpyPrev), QpyPrev),
domain(f(mb_qp_delta), MbQpDelta),
domain(f(dQpBdOffsetY), QpBdOffsetY),
Qpy #= ( ( QpyPrev + MbQpDelta + 52 + 2 * QpBdOffsetY ) mod ( 52 + QpBdOffsetY ) ) - QpBdOffsetY.
calculate(f(dQpPrimeY), QpPrimeY) :-
domain(f(dQpy), Qpy),
domain(f(dQpBdOffsetY), QpBdOffsetY),
QpPrimeY #= Qpy + QpBdOffsetY.
calculate(f(dTransformBypassModeFlag), 1) :-
domain(f(qpprime_y_zero_transform_bypass_flag), Flag),
Flag #= 1,
domain(f(dQpPrimeY), QpPrimeY),
QpPrimeY #= 0.
calculate(f(dTransformBypassModeFlag), 0) :-
domain(f(qpprime_y_zero_transform_bypass_flag), Flag),
Flag #= 0.
calculate(f(dTransformBypassModeFlag), 0) :-
domain(f(dQpPrimeY), QpPrimeY),
QpPrimeY #\= 0.
calculate(f(chroma_weight_l0(_I, _J)), X) :-
domain(f(chroma_weight_l0_flag), Flag),
Flag #= 0,
domain(f(chroma_log2_weight_denom), Denom),
X #= 2^Denom.
calculate(f(chroma_offset_l0(_I, _J)), X) :-
domain(f(chroma_weight_l0_flag), Flag),
Flag #= 0,
X #= 0.
calculate(f(dMbPartPredMode(mb_type, 0)), Value) :-
domain(f(mb_type), MbType),
( MbType = 0 -> Value = 'Direct' % B_Direct_16x16
; between(1, 3, MbType) -> Value = 'Pred_L0' % B_L0_16x16, B_L1_16x16, B_Bi_16x16
; between(4, 5, MbType) -> Value = 'Pred_L0' % B_L0_L0_16x8, B_L0_L0_8x16
; between(6, 7, MbType) -> Value = 'Pred_L1' % B_L1_L1_16x8, B_L1_L1_8x16
; between(8, 9, MbType) -> Value = 'Pred_L0' % B_L0_L1_16x8, B_L0_L1_8x16
; between(10, 11, MbType) -> Value = 'Pred_L1' % B_L1_L0_16x8, B_L1_L0_8x16
; between(12, 13, MbType) -> Value = 'Pred_L0' % B_L0_Bi_16x8, B_L0_Bi_8x16
; between(14, 15, MbType) -> Value = 'Pred_L1' % B_L1_Bi_16x8, B_L1_Bi_8x16
; between(16, 17, MbType) -> Value = 'BiPred' % B_Bi_L0_16x8, B_Bi_L0_8x16
; between(18, 19, MbType) -> Value = 'BiPred' % B_Bi_L1_16x8, B_Bi_L1_8x16
; between(20, 21, MbType) -> Value = 'BiPred' % B_Bi_Bi_16x8, B_Bi_Bi_8x16
).
calculate(f(dMbPartPredMode(mb_type, 1)), Value) :-
domain(f(mb_type), MbType),
( between(4, 5, MbType) -> Value = 'Pred_L0' % B_L0_L0_16x8, B_L0_L0_8x16
; between(6, 7, MbType) -> Value = 'Pred_L1' % B_L1_L1_16x8, B_L1_L1_8x16
; MbType = 8 -> Value = 'Pred_L1' % B_L0_L1_16x8
; MbType = 9 -> Value = 'Pred_L1' % B_L0_L1_8x16
; MbType = 10 -> Value = 'Pred_L0' % B_L1_L0_16x8
; MbType = 11 -> Value = 'Pred_L0' % B_L1_L0_8x16
; between(12, 13, MbType) -> Value = 'BiPred' % B_L0_Bi_16x8, B_L0_Bi_8x16
; between(14, 15, MbType) -> Value = 'BiPred' % B_L1_Bi_16x8, B_L1_Bi_8x16
; between(16, 17, MbType) -> Value = 'Pred_L0' % B_Bi_L0_16x8, B_Bi_L0_8x16
; between(18, 19, MbType) -> Value = 'Pred_L1' % B_Bi_L1_16x8, B_Bi_L1_8x16
; between(20, 21, MbType) -> Value = 'BiPred' % B_Bi_Bi_16x8, B_Bi_Bi_8x16
; Value = 'na' % For mb_types with only one part or B_8x8
).
calculate(f(dMbPartPredMode(mb_type, 0)), Value) :-
domain(f(mb_type), MbType),
( MbType = 0 ->
domain(f(transform_size_8x8_flag), Flag),
( Flag = 0 -> Value = 'Intra_4x4'
; Flag = 1 -> Value = 'Intra_8x8'
)
; between(1, 24, MbType) -> Value = 'Intra_16x16' % I_16x16_* cases
; MbType = 25 -> Value = 'na' % I_PCM
).
calculate(f(dMbPartPredMode(mb_type, 1)), 'na') :-
domain(f(mb_type), MbType),
between(0, 25, MbType). % Any valid I-slice mb_type
calculate(f(residual(_StartIdx, _EndIdx), dResidualBlock), residual_block_cavlc) :-
domain(f(entropy_coding_mode_flag), Flag),
Flag #= 0.
calculate(f(residual(_StartIdx, _EndIdx), dResidualBlock), residual_block_cabac) :-
domain(f(entropy_coding_mode_flag), Flag),
Flag #= 1.
calculate(f(residual, dLumaLevel8x8), 'DERIVED').
calculate(f(residual, dNumC8x8), 'DERIVED') :-
domain(f(dChromaArrayType), CAT),
(CAT #= 1; CAT #= 2).
calculate(f(residual, dCbIntra16x16DCLevel), 'DERIVED') :-
domain(f(dChromaArrayType), CAT), CAT #= 3.
calculate(f(residual, dCbIntra16x16ACLevel), 'DERIVED') :-
domain(f(dChromaArrayType), CAT), CAT #= 3.
calculate(f(residual, dCbLevel4x4), 'DERIVED') :-
domain(f(dChromaArrayType), CAT), CAT #= 3.
calculate(f(residual, dCbLevel8x8), 'DERIVED') :-
domain(f(dChromaArrayType), CAT), CAT #= 3.
calculate(f(residual, dCrIntra16x16DCLevel), 'DERIVED') :-
domain(f(dChromaArrayType), CAT), CAT #= 3.
calculate(f(residual, dCrIntra16x16ACLevel), 'DERIVED') :-
domain(f(dChromaArrayType), CAT), CAT #= 3.
calculate(f(residual, dCrLevel4x4), 'DERIVED') :-
domain(f(dChromaArrayType), CAT), CAT #= 3.
calculate(f(residual, dCrLevel8x8), 'DERIVED') :-
domain(f(dChromaArrayType), CAT), CAT #= 3.
calculate(f(slice_data, dPrevMbSkipped), derived) :-
domain(f(dMoreDataFlag), MoreDataFlag), MoreDataFlag #= 1,
domain(f(slice_type), SliceType), \+ member(SliceType, [i, si]),
domain(f(entropy_coding_mode_flag), EntropyFlag), EntropyFlag #= 0.
calculate(f(slice_data, dCurrMbAddr), derived) :-
domain(f(dMoreDataFlag), MoreDataFlag), MoreDataFlag #= 1,
domain(f(slice_type), SliceType), \+ member(SliceType, [i, si]),
domain(f(entropy_coding_mode_flag), EntropyFlag), EntropyFlag #= 0,
domain(f(mb_skip_run), MbSkipRun), domain(f(mb_skip_run), MbSkipRun), MbSkipRun #> 0.
calculate(f(slice_data, dMoreDataFlag), derived) :-
domain(f(dMoreDataFlag), MoreDataFlag), MoreDataFlag #= 1,
domain(f(slice_type), SliceType), \+ member(SliceType, [i, si]),
domain(f(entropy_coding_mode_flag), EntropyFlag), EntropyFlag #= 0,
domain(f(mb_skip_run), MbSkipRun), MbSkipRun #> 0.
calculate(f(slice_data, dMoreDataFlag), derived) :-
domain(f(dMoreDataFlag), MoreDataFlag), MoreDataFlag #= 1,
domain(f(slice_type), SliceType), \+ member(SliceType, [i, si]),
domain(f(entropy_coding_mode_flag), EntropyFlag), EntropyFlag #= 1.
calculate(f(slice_data, dMoreDataFlag), derived) :-
domain(f(dMoreDataFlag), MoreDataFlag), MoreDataFlag #= 1,
domain(f(entropy_coding_mode_flag), EntropyFlag), EntropyFlag #= 0.
calculate(f(slice_data, dPrevMbSkipped), derived) :-
domain(f(dMoreDataFlag), MoreDataFlag), MoreDataFlag #= 1,
domain(f(entropy_coding_mode_flag), EntropyFlag), EntropyFlag #= 1,
domain(f(slice_type), SliceType), \+ member(SliceType, [i, si]).
calculate(f(slice_data, dMoreDataFlag), derived) :-
domain(f(dMoreDataFlag), MoreDataFlag), MoreDataFlag #= 1,
domain(f(entropy_coding_mode_flag), EntropyFlag), EntropyFlag #= 1,
domain(f(mbaff_frame_flag), Mbaff), Mbaff #= 1,
domain(f(dCurrMbAddr), CurrMbAddr), (CurrMbAddr mod 2) #= 0.
calculate(f(slice_data, dMoreDataFlag), derived) :-
domain(f(dMoreDataFlag), MoreDataFlag), MoreDataFlag #= 1,
domain(f(entropy_coding_mode_flag), EntropyFlag), EntropyFlag #= 1,
(domain(f(mbaff_frame_flag), Mbaff), Mbaff #= 0; (domain(f(dCurrMbAddr), CurrMbAddr), (CurrMbAddr mod 2) #\= 0)).
calculate(f(slice_data, dCurrMbAddr), derived) :-
domain(f(dMoreDataFlag), MoreDataFlag), MoreDataFlag #= 1.
calculate(f(residual_luma, residual_block(I8x8)), residual_block) :-
I8x8 in 0..3,
domain(f(transform_size_8x8_flag), T8x8), T8x8 #= 1,
domain(f(entropy_coding_mode_flag), Ecm), Ecm #= 1,
domain(f(coded_block_pattern), Cbp),
CbpLuma #= Cbp mod 16,
(CbpLuma >> I8x8) mod 2 #= 1.
calculate(f(pic_parameter_set_rbsp, scaling_list(I)), scaling_list) :-
domain(f(dPicScalingListCount), N), I #>= 0, I #< N,
domain(f(pic_scaling_matrix_present_flag), Psmpf), Psmpf #= 1,
domain(f(pic_scaling_list_present_flag(I)), Pslpf), Pslpf #= 1,
I #< 6.
calculate(f(pic_parameter_set_rbsp, scaling_list(I)), scaling_list) :-
domain(f(dPicScalingListCount), N), I #>= 0, I #< N,
domain(f(pic_scaling_matrix_present_flag), Psmpf), Psmpf #= 1,
domain(f(pic_scaling_list_present_flag(I)), Pslpf), Pslpf #= 1,
I #>= 6.
calculate(f(pic_parameter_set_rbsp, rbsp_trailing_bits), rbsp_trailing_bits).
calculate(f(seq_parameter_set_data, scaling_list(I)), scaling_list) :-
domain(f(dSeqScalingListCount), N), I #>= 0, I #< N,
domain(f(profile_idc), Pidc), member(Pidc, [100, 110, 122, 244, 44, 83, 86, 118, 128, 138, 139, 134, 135]),
domain(f(seq_scaling_matrix_present_flag), Ssm), Ssm #= 1,
domain(f(seq_scaling_list_present_flag(I)), Ssl), Ssl #= 1,
I #< 6.
calculate(f(seq_parameter_set_data, scaling_list(I)), scaling_list) :-
domain(f(dSeqScalingListCount), N), I #>= 0, I #< N,
domain(f(profile_idc), Pidc), member(Pidc, [100, 110, 122, 244, 44, 83, 86, 118, 128, 138, 139, 134, 135]),
domain(f(seq_scaling_matrix_present_flag), Ssm), Ssm #= 1,
domain(f(seq_scaling_list_present_flag(I)), Ssl), Ssl #= 1,
I #>= 6.
calculate(f(seq_parameter_set_data, vui_parameters), vui_parameters) :-
domain(f(vui_parameters_present_flag), Vppf), Vppf #= 1.
calculate(f(slice_data_partition_b_layer_rbsp, slice_data), slice_data).
calculate(f(slice_data_partition_b_layer_rbsp, rbsp_slice_trailing_bits), rbsp_slice_trailing_bits).
calculate(f(slice_layer_without_partitioning_rbsp, slice_header), slice_header).
calculate(f(slice_layer_without_partitioning_rbsp, slice_data), slice_data).
calculate(f(slice_layer_without_partitioning_rbsp, rbsp_slice_trailing_bits), rbsp_slice_trailing_bits).
calculate(f(residual_block_cavlc, dLevelVal(I)), Val) :-
domain(f(dTotalCoeff), N), I #>= 0, I #< N,
domain(f(dTotalCoeff), TC), TC #> 0,
domain(f(dTrailingOnes), TO), I #< TO,
domain(f(level_suffix(I)), Suffix),
Val #= 1 - 2 * Suffix.
calculate(f(slice_layer_extension_rbsp, slice_header), slice_header) :-
domain(f(svc_extension_flag), SvcFlag), SvcFlag #= 0,
domain(f(avc_3d_extension_flag), Avc3dFlag), Avc3dFlag #= 0.
calculate(f(slice_layer_extension_rbsp, slice_data), slice_data) :-
domain(f(svc_extension_flag), SvcFlag), SvcFlag #= 0,
domain(f(avc_3d_extension_flag), Avc3dFlag), Avc3dFlag #= 0.
calculate(f(nal_unit, dNumBytesInRBSP), 'DERIVED').
calculate(f(nal_unit, dNalUnitHeaderBytes), 1) :-
domain(f(nal_unit_type), NalUnitType),
\+ member(NalUnitType, [14, 20, 21]).
calculate(f(nal_unit, dNalUnitHeaderBytes), 4) :-
domain(f(nal_unit_type), NalUnitType),
member(NalUnitType, [14, 20, 21]).
calculate(f(nal_unit, nal_unit_header_svc_extension), nal_unit_header_svc_extension) :-
domain(f(nal_unit_type), NalUnitType), member(NalUnitType, [14, 20, 21]),
domain(f(svc_extension_flag), SvcFlag), SvcFlag #= 1.
calculate(f(nal_unit, nal_unit_header_3davc_extension), nal_unit_header_3davc_extension) :-
domain(f(nal_unit_type), NalUnitType), member(NalUnitType, [14, 20, 21]),
domain(f(svc_extension_flag), SvcFlag), SvcFlag #= 0,
domain(f(avc_3d_extension_flag), Avc3dFlag), Avc3dFlag #= 1.
calculate(f(nal_unit, nal_unit_header_mvc_extension), nal_unit_header_mvc_extension) :-
domain(f(nal_unit_type), NalUnitType), member(NalUnitType, [14, 20, 21]),
domain(f(svc_extension_flag), SvcFlag), SvcFlag #= 0,
domain(f(avc_3d_extension_flag), Avc3dFlag), Avc3dFlag #= 0.
calculate(f(slice_header, ref_pic_list_mvc_modification), ref_pic_list_mvc_modification) :-
domain(f(nal_unit_type), NalUnitType),
member(NalUnitType, [20, 21]).
calculate(f(slice_header, ref_pic_list_modification), ref_pic_list_modification) :-
domain(f(nal_unit_type), NalUnitType),
\+ member(NalUnitType, [20, 21]).
calculate(f(slice_header, pred_weight_table), pred_weight_table) :-
domain(f(weighted_pred_flag), WpFlag), WpFlag #= 1,
domain(f(slice_type), SliceType),
( (SliceType mod 5) #= 0; (SliceType mod 5) #= 1 ).
calculate(f(slice_header, pred_weight_table), pred_weight_table) :-
domain(f(weighted_bipred_idc), WbIdc), WbIdc #= 1,
domain(f(slice_type), SliceType),
(SliceType mod 5) #= 2.
calculate(f(slice_header, dec_ref_pic_marking), dec_ref_pic_marking) :-
domain(f(nal_ref_idc), NalRefIdc),
NalRefIdc #\= 0.
calculate(f(sei_rbsp, sei_message), sei_message) :-
domain(f(dMoreRbspData), MoreData),
MoreData #= 1.
calculate(f(residual, dChromaDCLevel(_ICbCr, _I)), 'DERIVED') :-
domain(f(dChromaArrayType), CAT), (CAT #= 1; CAT #= 2),
domain(f(dCodedBlockPatternChroma), CBP),
domain(f(startIdx), StartIdx),
\+ ((CBP /\ 3) #\= 0, StartIdx #= 0).
calculate(f(residual_luma, dI16x16acLevel(Idx, I)), 0) :-
f(dI16x16acLevel(Idx, I)),
(domain(f(transform_size_8x8_flag), T8x8), T8x8 #= 0; domain(f(entropy_coding_mode_flag), Ecm), Ecm #= 0),
I8x8 #= Idx // 4,
domain(f(dCodedBlockPatternLuma), Cbp), (Cbp /\ (1 << I8x8)) #= 0,
domain(f(mb_type), MbType), mb_part_pred_mode_is_intra16x16(MbType).
calculate(f(residual_luma, dLevel4x4(Idx, I)), 0) :-
f(dLevel4x4(Idx, I)),
(domain(f(transform_size_8x8_flag), T8x8), T8x8 #= 0; domain(f(entropy_coding_mode_flag), Ecm), Ecm #= 0),
I8x8 #= Idx // 4,
domain(f(dCodedBlockPatternLuma), Cbp), (Cbp /\ (1 << I8x8)) #= 0,
domain(f(mb_type), MbType), \+ mb_part_pred_mode_is_intra16x16(MbType).
calculate(f(residual_luma, dLevel8x8(I8x8, Idx)), 0) :-
f(dLevel8x8(I8x8, Idx)),
domain(f(transform_size_8x8_flag), T8x8), T8x8 #= 1,
domain(f(entropy_coding_mode_flag), Ecm), Ecm #= 0.
calculate(f(residual_luma, dLevel8x8(I8x8, I)), 0) :-
I8x8 in 0..3, I in 0..63,
domain(f(transform_size_8x8_flag), T8x8), T8x8 #= 1,
domain(f(entropy_coding_mode_flag), Ecm), Ecm #= 1,
domain(f(coded_block_pattern), Cbp),
CbpLuma #= Cbp mod 16,
(CbpLuma >> I8x8) mod 2 #= 0.
calculate(f(residual, dChromaACLevel(_ICbCr, _I8x8, _I4x4, _I)), 'DERIVED') :-
domain(f(dChromaArrayType), CAT), (CAT #= 1; CAT #= 2),
domain(f(dCodedBlockPatternChroma), CBP),
(CBP /\ 2) #= 0.
% constraints/1
constraints(f(ff_byte), X) :-
X #= 0xFF.
constraints(f(luma_log2_weight_denom), X) :-
X in 0..7.
constraints(f(chroma_log2_weight_denom), X) :-
X in 0..7.
constraints(f(luma_weight_l0(_I)), X) :-
X in -128..127.
constraints(f(luma_offset_l0(_I)), X) :-
X in -128..127.
constraints(f(pcm_alignment_zero_bit), X) :-
X #= 0.
constraints(f(coded_block_pattern), _X) :-
domain(f(dChromaArrayType), CAT),
(CAT #= 0 ; CAT #= 3),
domain(f(dCodedBlockPatternChroma), CBPC),
CBPC #= 0.
constraints(f(bit_equal_to_one), X) :-
X #= 1.
constraints(f(additional_extension2_flag), X) :-
X #= 0.
constraints(f(delta_scale(_J)), X) :-
X in -128..127.
constraints(f(seq_parameter_set_id), X) :-
X in 0..31.
constraints(f(aux_format_idc), X) :-
X in 0..3.
constraints(f(bit_depth_aux_minus8), X) :-
X in 0..4.
constraints(f(additional_extension_flag), X) :-
X #= 0.
constraints(f(colour_plane_id), X) :-
X in 0..2.
constraints(f(redundant_pic_cnt), X) :-
X in 0..127.
constraints(f(abs_diff_pic_num_minus1), X) :-
domain(f(dMaxPicNum), MaxPicNumVal),
X in 0..(MaxPicNumVal - 1).
constraints(f(intra_chroma_pred_mode), X) :-
X in 0..3.
constraints(f(cabac_zero_word), X) :-
X #= 0.
constraints(f(long_term_frame_idx), X) :-
domain(f(dMaxLongTermFrameIdx), MaxLongTermFrameIdxVal),
X in 0..MaxLongTermFrameIdxVal.
constraints(f(max_long_term_frame_idx_plus1), X) :-
domain(f(dMaxNumRefFrames), MaxNumRefFramesVal),
X in 0..MaxNumRefFramesVal.
constraints(f(cabac_alignment_one_bit), X) :-
X #= 1.
constraints(f(mb_skip_run), X) :-
domain(f(dPicSizeInMbs), P),
domain(f(curr_mb_addr), C),
X in 0..(P - C).
constraints(f(pic_parameter_set_id), X) :-
X in 0..255.
constraints(f(slice_group_map_type), X) :-
X in 0..6.
constraints(f(slice_group_map_type), X) :-
domain(f(num_slice_groups_minus1), N), N #\= 1,
X #\= 3, X #\= 4, X #\= 5.
constraints(f(slice_group_change_rate_minus1), X) :-
domain(f(dPicSizeInMapUnits), P),
X in 0..(P - 1).
constraints(f(pic_size_in_map_units_minus1), X) :-
domain(f(dPicSizeInMapUnits), P),
X #= P - 1.
constraints(f(slice_group_id(_I)), X) :-
domain(f(num_slice_groups_minus1), N),
X in 0..N.
constraints(f(chroma_format_idc), X) :-
X in 0..3.
constraints(f(num_ref_idx_l0_default_active_minus1), X) :-
X in 0..31.
constraints(f(num_ref_idx_l1_default_active_minus1), X) :-
X in 0..31.
constraints(f(weighted_bipred_idc), X) :-
X in 0..2.
constraints(f(pic_init_qs_minus26), X) :-
X in -26..25.
constraints(f(chroma_qp_index_offset), X) :-
X in -12..12.
constraints(f(second_chroma_qp_index_offset), X) :-
X in -12..12.
constraints(f(constraint_set0_flag), X) :-
domain(f(profile_idc), ProfileIdc),
(member(ProfileIdc, [44, 100, 110, 122, 244]) -> X #= 0; true).
constraints(f(constraint_set1_flag), X) :-
domain(f(profile_idc), ProfileIdc),
(member(ProfileIdc, [44, 100, 110, 122, 244]) -> X #= 0; true).
constraints(f(constraint_set2_flag), X) :-
domain(f(profile_idc), ProfileIdc),
(member(ProfileIdc, [44, 100, 110, 122, 244]) -> X #= 0; true).
constraints(f(constraint_set3_flag), X) :-
domain(f(profile_idc), ProfileIdc),
(ProfileIdc #= 44 -> X #= 1; X #= 0).
constraints(f(constraint_set4_flag), X) :-
domain(f(profile_idc), ProfileIdc),
\+ member(ProfileIdc, [77, 88, 100, 110, 118, 128, 134]),
X #= 0.
constraints(f(reserved_zero_2bits), X) :-
X #= 0.
constraints(f(chroma_format_idc), X) :-
X in 0..3.
constraints(f(bit_depth_luma_minus8), X) :-
X in 0..6.
constraints(f(bit_depth_chroma_minus8), X) :-
X in 0..6.
constraints(f(log2_max_frame_num_minus4), X) :-
X in 0..12.
constraints(f(pic_order_cnt_type), X) :-
X in 0..2.
constraints(f(log2_max_pic_order_cnt_lsb_minus4), X) :-
X in 0..12.
constraints(f(offset_for_non_ref_pic), X) :-
X in -2147483647..2147483647.
constraints(f(offset_for_top_to_bottom_field), X) :-
X in -2147483647..2147483647.
constraints(f(num_ref_frames_in_pic_order_cnt_cycle), X) :-
X in 0..255.
constraints(f(offset_for_ref_frame(_)), X) :-
X in -2147483647..2147483647.
constraints(f(direct_8x8_inference_flag), X) :-
domain(f(frame_mbs_only_flag), Flag), Flag #= 0, X #= 1.
constraints(f(delta_pic_order_cnt(1)), X) :-
Min #= -2147483647, Max #= 2147483647, X in Min..Max.
constraints(f(rbsp_stop_one_bit), X) :-
X #= 1.
constraints(f(rbsp_alignment_zero_bit), X) :-
X #= 0.
constraints(f(frame_mbs_only_flag), X) :-
X in 0..1.
constraints(f(mb_adaptive_frame_field_flag), X) :-
X in 0..1.
constraints(f(field_pic_flag), X) :-
X in 0..1.
constraints(f(qpprime_y_zero_transform_bypass_flag), X) :-
X in 0..1.
constraints(f(chroma_weight_l0(_I, _J)), X) :-
X in -128..127.
constraints(f(chroma_offset_l0(_I, _J)), X) :-
X in -128..127.
constraints(f(mvd_l0(_, _)), X) :-
X in -8192..8191.
% default_value/1
default_value(f(transform_size_8x8_flag), 0).
default_value(f(mb_qp_delta), 0).
default_value(f(aux_format_idc), 0).
default_value(f(redundant_pic_cnt), 0).
default_value(f(ref_idx_l0(_)), 0).
default_value(f(ref_idx_l1(_)), 0).
default_value(f(mb_field_decoding_flag), field_pic_flag). % Part of the default value description
default_value(f(transform_8x8_mode_flag), 0).
default_value(f(pic_scaling_matrix_present_flag), 0).
default_value(f(second_chroma_qp_index_offset), f(chroma_qp_index_offset)).
default_value(f(chroma_format_idc), 1).
default_value(f(separate_colour_plane_flag), 0).
default_value(f(bit_depth_luma_minus8), 0).
default_value(f(bit_depth_chroma_minus8), 0).
default_value(f(qpprime_y_zero_transform_bypass_flag), 0).
default_value(f(seq_scaling_matrix_present_flag), 0).
default_value(f(delta_pic_order_cnt(1)), 0).
default_value(f(num_ref_idx_l0_active_minus1), dNumRefIdxL0DefaultActiveMinus1).
default_value(f(num_ref_idx_l1_active_minus1), dNumRefIdxL1DefaultActiveMinus1).
default_value(f(disable_deblocking_filter_idc), 0).
default_value(f(slice_alpha_c0_offset_div2), 0).
default_value(f(slice_beta_offset_div2), 0).
default_value(f(sub_mb_type(_)), dSubMbTypeDefault).
% depends_on/1 %
depends_on(f(ff_byte), []).
depends_on(f(chroma_log2_weight_denom), [f(dChromaArrayType)]).
depends_on(f(luma_weight_l0_flag), [f(num_ref_idx_l0_active_minus1)]).
depends_on(f(luma_weight_l0(_I)), [f(num_ref_idx_l0_active_minus1), f(luma_weight_l0_flag), f(luma_log2_weight_denom)]).
depends_on(f(luma_offset_l0(_I)), [f(num_ref_idx_l0_active_minus1), f(luma_weight_l0_flag)]).
depends_on(f(chroma_weight_l0_flag), [f(num_ref_idx_l0_active_minus1), f(luma_weight_l0_flag), f(dChromaArrayType)]).
depends_on(f(luma_weight_l1_flag(_I)), [f(slice_type), f(num_ref_idx_l1_active_minus1)]).
depends_on(f(luma_weight_l1(I)), [f(slice_type), f(num_ref_idx_l1_active_minus1), f(luma_weight_l1_flag(I))]).
depends_on(f(luma_offset_l1(I)), [f(slice_type), f(num_ref_idx_l1_active_minus1), f(luma_weight_l1_flag(I))]).
depends_on(f(chroma_weight_l1_flag(I)), [f(slice_type), f(num_ref_idx_l1_active_minus1), f(luma_weight_l1_flag(I)), f(dChromaArrayType)]).
depends_on(f(pcm_alignment_zero_bit), [f(mb_type)]).
depends_on(f(pcm_sample_luma(_I)), [f(mb_type), f(dBitDepthY)]).
depends_on(f(pcm_sample_chroma(_I)), [f(mb_type), f(dMbWidthC), f(dMbHeightC), f(dBitDepthC)]).
depends_on(f(transform_size_8x8_flag), [
f(mb_type),
f(dMbPartPredMode),
f(dCodedBlockPatternLuma),
f(transform_8x8_mode_flag),
f(dNoSubMbPartSizeLessThan8x8Flag),
f(direct_8x8_inference_flag)
]).
depends_on(f(coded_block_pattern), [f(mb_type), f(dMbPartPredMode)]).
depends_on(f(dMbPartPredMode), [f(mb_type)]).
depends_on(f(dMbWidthC), [f(chroma_format_idc), f(separate_colour_plane_flag), f(dSubWidthC)]).
depends_on(f(dMbHeightC), [f(chroma_format_idc), f(separate_colour_plane_flag), f(dSubHeightC)]).
depends_on(f(dCodedBlockPatternLuma), [f(coded_block_pattern)]).
depends_on(f(dCodedBlockPatternChroma), [f(coded_block_pattern)]).
depends_on(f(mb_qp_delta), [f(mb_type), f(coded_block_pattern_luma), f(coded_block_pattern_chroma)]).
depends_on(f(svc_vui_parameters_present_flag), [f(profile_idc)]).
depends_on(f(bit_equal_to_one), [f(profile_idc)]).
depends_on(f(mvc_vui_parameters_present_flag), [f(profile_idc)]).
depends_on(f(additional_extension2_flag), []).
depends_on(f(additional_extension2_data_flag), [f(additional_extension2_flag)]).
depends_on(f(delta_scale(_J)), [f(size_of_scaling_list), f(next_scale)]).
depends_on(f(primary_pic_type), []).
depends_on(f(seq_parameter_set_id), []).
depends_on(f(aux_format_idc), []).
depends_on(f(bit_depth_aux_minus8), [f(aux_format_idc)]).
depends_on(f(alpha_incr_flag), [f(aux_format_idc)]).
depends_on(f(alpha_opaque_value), [f(aux_format_idc), f(bit_depth_aux_minus8)]).
depends_on(f(alpha_transparent_value), [f(aux_format_idc), f(bit_depth_aux_minus8), f(alpha_incr_flag), f(alpha_opaque_value)]).
depends_on(f(additional_extension_flag), []).
depends_on(f(slice_id), [f(separate_colour_plane_flag), f(mbaff_frame_flag), f(pic_size_in_mbs), f(colour_plane_id)]).
depends_on(f(colour_plane_id), [f(separate_colour_plane_flag)]).
depends_on(f(redundant_pic_cnt), [f(redundant_pic_cnt_present_flag)]).
depends_on(f(ref_pic_list_modification_flag_l0), [f(slice_type)]).
depends_on(f(modification_of_pic_nums_idc(_I)), [f(slice_type), f(ref_pic_list_modification_flag_l1)]).
depends_on(f(abs_diff_pic_num_minus1), [f(slice_type), f(ref_pic_list_modification_flag_l1), f(modification_of_pic_nums_idc), f(dMaxPicNum)]).
depends_on(f(long_term_pic_num), [f(dIdrPicFlag), f(adaptive_ref_pic_marking_mode_flag), f(memory_management_control_operation)]).
depends_on(f(ref_pic_list_modification_flag_l1), [f(slice_type)]).
depends_on(f(prev_intra4x4_pred_mode_flag(_)), [f(mb_type)]).
depends_on(f(rem_intra4x4_pred_mode(Luma4x4BlkIdx)), [f(mb_type), f(prev_intra4x4_pred_mode_flag(Luma4x4BlkIdx))]).
depends_on(f(prev_intra8x8_pred_mode_flag(_)), [f(mb_type)]).
depends_on(f(rem_intra8x8_pred_mode(Luma8x8BlkIdx)), [f(mb_type), f(prev_intra8x8_pred_mode_flag(Luma8x8BlkIdx))]).
depends_on(f(intra_chroma_pred_mode), [f(mb_type), f(dChromaArrayType)]).
depends_on(f(ref_idx_l0(MbPartIdx)), [f(num_ref_idx_l0_active_minus1), f(mb_field_decoding_flag), f(field_pic_flag), f(mb_type), f(sub_mb_type(MbPartIdx))]).
depends_on(f(ref_idx_l1(MbPartIdx)), [f(num_ref_idx_l1_active_minus1), f(mb_field_decoding_flag), f(field_pic_flag), f(sub_mb_type(MbPartIdx))]).
depends_on(f(cabac_zero_word), [f(entropy_coding_mode_flag)]).
depends_on(f(no_output_of_prior_pics_flag), [f(dIdrPicFlag)]).
depends_on(f(long_term_reference_flag), [f(dIdrPicFlag)]).
depends_on(f(adaptive_ref_pic_marking_mode_flag), [f(dIdrPicFlag)]).
depends_on(f(memory_management_control_operation), [f(dIdrPicFlag), f(adaptive_ref_pic_marking_mode_flag)]).
depends_on(f(difference_of_pic_nums_minus1), [f(dIdrPicFlag), f(adaptive_ref_pic_marking_mode_flag), f(memory_management_control_operation)]).
depends_on(f(long_term_frame_idx), [f(dIdrPicFlag), f(adaptive_ref_pic_marking_mode_flag), f(memory_management_control_operation), f(dMaxLongTermFrameIdx)]).
depends_on(f(max_long_term_frame_idx_plus1), [f(dIdrPicFlag), f(adaptive_ref_pic_marking_mode_flag), f(memory_management_control_operation), f(dMaxNumRefFrames)]).
depends_on(f(cabac_alignment_one_bit), [f(entropy_coding_mode_flag), f(dByteAligned)]).
depends_on(f(mb_skip_run), [f(more_data_flag), f(slice_type), f(entropy_coding_mode_flag)]). % 'I' and 'SI' are values, not fields.
depends_on(f(mb_skip_flag), [f(more_data_flag), f(slice_type), f(entropy_coding_mode_flag)]). % 'I' and 'SI' are values, not fields.
depends_on(f(mb_field_decoding_flag), [f(more_data_flag), f(mbaff_frame_flag), f(curr_mb_addr), f(prev_mb_skipped)]).
depends_on(f(end_of_slice_flag), [f(more_data_flag), f(entropy_coding_mode_flag), f(mbaff_frame_flag), f(curr_mb_addr)]).
depends_on(f(last_payload_type_byte), []).
depends_on(f(last_payload_size_byte), []).
depends_on(f(pic_parameter_set_id), []).
depends_on(f(entropy_coding_mode_flag), []).
depends_on(f(bottom_field_pic_order_in_frame_present_flag), []).
depends_on(f(num_slice_groups_minus1), []).
depends_on(f(slice_group_map_type), [f(num_slice_groups_minus1)]).
depends_on(f(run_length_minus1(_IGroup)), [f(num_slice_groups_minus1), f(slice_group_map_type)]).
depends_on(f(top_left(_IGroup)), [f(num_slice_groups_minus1), f(slice_group_map_type)]).
depends_on(f(bottom_right(_IGroup)), [f(num_slice_groups_minus1), f(slice_group_map_type)]).
depends_on(f(slice_group_change_direction_flag), [f(num_slice_groups_minus1), f(slice_group_map_type)]).
depends_on(f(slice_group_change_rate_minus1), [f(num_slice_groups_minus1), f(slice_group_map_type)]).
depends_on(f(pic_size_in_map_units_minus1), [f(num_slice_groups_minus1), f(slice_group_map_type)]).
depends_on(f(slice_group_id(_I)), [f(num_slice_groups_minus1), f(slice_group_map_type), f(pic_size_in_map_units_minus1)]).
depends_on(f(dPicScalingListCount), [f(chroma_format_idc), f(transform_8x8_mode_flag)]).
depends_on(f(transform_8x8_mode_flag), [f(more_rbsp_data)]).
depends_on(f(pic_scaling_matrix_present_flag), [f(more_rbsp_data)]).
depends_on(f(pic_scaling_list_present_flag(_I)), [f(more_rbsp_data), f(pic_scaling_matrix_present_flag), f(dPicScalingListCount)]).
depends_on(f(second_chroma_qp_index_offset), [f(more_rbsp_data)]).
depends_on(f(constraint_set0_flag), [f(profile_idc)]).
depends_on(f(constraint_set1_flag), [f(profile_idc)]).
depends_on(f(constraint_set2_flag), [f(profile_idc)]).
depends_on(f(constraint_set3_flag), [f(profile_idc)]).
depends_on(f(constraint_set4_flag), [f(profile_idc)]).
depends_on(f(chroma_format_idc), [f(profile_idc)]).
depends_on(f(separate_colour_plane_flag), [f(profile_idc), f(chroma_format_idc)]).
depends_on(f(bit_depth_luma_minus8), [f(profile_idc)]).
depends_on(f(bit_depth_chroma_minus8), [f(profile_idc)]).
depends_on(f(qpprime_y_zero_transform_bypass_flag), [f(profile_idc)]).
depends_on(f(seq_scaling_matrix_present_flag), [f(profile_idc)]).
depends_on(f(seq_scaling_list_present_flag(_)), [f(profile_idc), f(seq_scaling_matrix_present_flag), f(chroma_format_idc)]).
depends_on(f(log2_max_pic_order_cnt_lsb_minus4), [f(pic_order_cnt_type)]).
depends_on(f(delta_pic_order_always_zero_flag), [f(pic_order_cnt_type)]).
depends_on(f(offset_for_non_ref_pic), [f(pic_order_cnt_type)]).
depends_on(f(offset_for_top_to_bottom_field), [f(pic_order_cnt_type)]).
depends_on(f(num_ref_frames_in_pic_order_cnt_cycle), [f(pic_order_cnt_type)]).
depends_on(f(offset_for_ref_frame(_)), [f(pic_order_cnt_type), f(num_ref_frames_in_pic_order_cnt_cycle)]).
depends_on(f(mb_adaptive_frame_field_flag), [f(frame_mbs_only_flag)]).
depends_on(f(direct_8x8_inference_flag), [f(frame_mbs_only_flag)]).
depends_on(f(frame_crop_left_offset), [f(frame_cropping_flag)]).
depends_on(f(frame_crop_right_offset), [f(frame_cropping_flag)]).
depends_on(f(frame_crop_top_offset), [f(frame_cropping_flag)]).
depends_on(f(frame_crop_bottom_offset), [f(frame_cropping_flag)]).
depends_on(f(trailing_ones_sign_flag(_I)), [
f(residual_block_cavlc, coeff_token),
f(residual_block_cavlc, dTotalCoeff),
f(residual_block_cavlc, dTrailingOnes)
]).
depends_on(f(level_prefix(_I)), [
f(residual_block_cavlc, coeff_token),
f(residual_block_cavlc, dTotalCoeff),
f(residual_block_cavlc, dTrailingOnes)
]).
depends_on(f(level_suffix(I)), [
f(residual_block_cavlc, coeff_token),
f(residual_block_cavlc, dTotalCoeff),
f(residual_block_cavlc, dTrailingOnes),
f(residual_block_cavlc, level_prefix(I)),
f(residual_block_cavlc, dSuffixLength)
]).
depends_on(f(total_zeros), [
f(residual_block_cavlc, coeff_token),
f(residual_block_cavlc, dTotalCoeff),
f(residual_block_cavlc, dEndIdx),
f(residual_block_cavlc, dStartIdx)
]).
depends_on(f(run_before(_I)), [
f(residual_block_cavlc, coeff_token),
f(residual_block_cavlc, dTotalCoeff),
f(residual_block_cavlc, dZerosLeft)
]).
depends_on(f(coded_block_flag), [f(residual_block_cabac, dMaxNumCoeff), f(dChromaArrayType)]).
depends_on(f(significant_coeff_flag(_I)), [
f(residual_block_cabac, dMaxNumCoeff),
f(dChromaArrayType),
f(residual_block_cabac, coded_block_flag),
f(residual_block_cabac, dNumCoeff)
]).
depends_on(f(last_significant_coeff_flag(I)), [
f(residual_block_cabac, dMaxNumCoeff),
f(dChromaArrayType),
f(residual_block_cabac, coded_block_flag),
f(residual_block_cabac, dNumCoeff),
f(residual_block_cabac, significant_coeff_flag(I))
]).
depends_on(f(delta_pic_order_cnt(1)), [f(pic_order_cnt_type), f(delta_pic_order_always_zero_flag), f(bottom_field_pic_order_in_frame_present_flag), f(field_pic_flag)]).
depends_on(f(direct_spatial_mv_pred_flag), [f(slice_type)]).
depends_on(f(num_ref_idx_active_override_flag), [f(slice_type)]).
depends_on(f(num_ref_idx_l0_active_minus1), [f(slice_type), f(num_ref_idx_active_override_flag)]).
depends_on(f(num_ref_idx_l1_active_minus1), [f(slice_type), f(num_ref_idx_active_override_flag)]).
depends_on(f(cabac_init_idc), [f(entropy_coding_mode_flag), f(slice_type)]).
depends_on(f(slice_qp_delta), []).
depends_on(f(sp_for_switch_flag), [f(slice_type)]).
depends_on(f(slice_qs_delta), [f(slice_type)]).
depends_on(f(disable_deblocking_filter_idc), [f(deblocking_filter_control_present_flag)]).
depends_on(f(slice_alpha_c0_offset_div2), [f(deblocking_filter_control_present_flag), f(disable_deblocking_filter_idc)]).
depends_on(f(slice_beta_offset_div2), [f(deblocking_filter_control_present_flag), f(disable_deblocking_filter_idc)]).
depends_on(f(slice_group_change_cycle), [f(num_slice_groups_minus1), f(slice_group_map_type)]).
depends_on(f(rbsp_stop_one_bit), []).
depends_on(f(rbsp_alignment_zero_bit), []).
depends_on(f(sub_mb_type(_)), []).
depends_on(f(dSubMbPred), [f(mb_type), f(dMbPartPredMode), f(dNumMbPart)]).
depends_on(f(dMbPred), [f(mb_type), f(dMbPartPredMode), f(dNumMbPart)]).
depends_on(f(dPicScalingListCount), [f(chroma_format_idc), f(transform_8x8_mode_flag)]).
depends_on(f(dSeqScalingListCount), [f(chroma_format_idc)]).
depends_on(f(dLevelVal(_), residual_block_cavlc), [f(dTotalCoeff), f(coeff_token), f(dTrailingOnes)]).
depends_on(f(dRunVal(_), residual_block_cavlc), [f(dTotalCoeff), f(coeff_token), f(dZerosLeft, residual_block_cavlc)]).
depends_on(f(dCoeffLevel(_), residual_block_cabac), [f(maxNumCoeff), f(dChromaArrayType), f(coded_block_flag), f(dNumCoeff, residual_block_cabac), f(startIdx), f(significant_coeff_flag(_))]).
depends_on(f(rbsp_trailing_bits), []).
depends_on(f(dIdrPicFlag), [f(nal_unit_type)]).
depends_on(f(dDepthFlag), [f(nal_unit_type), f(avc_3d_extension_flag), f(depth_flag)]).
depends_on(f(dChromaArrayType), [f(separate_colour_plane_flag), f(chroma_format_idc)]).
depends_on(f(dBitDepthY), [f(bit_depth_luma_minus8)]).
depends_on(f(dQpBdOffsetY), [f(bit_depth_luma_minus8)]).
depends_on(f(dBitDepthC), [f(bit_depth_chroma_minus8)]).
depends_on(f(dQpBdOffsetC), [f(bit_depth_chroma_minus8)]).
depends_on(f(dRawMbBits), [f(dBitDepthY), f(dMbWidthC), f(dMbHeightC), f(dBitDepthC)]).
depends_on(f(dFlat_4x4_16(_)), []).
depends_on(f(dFlat_8x8_16(_)), []).
depends_on(f(dMaxFrameNum), [f(log2_max_frame_num_minus4)]).
depends_on(f(dMaxPicOrderCntLsb), [f(log2_max_pic_order_cnt_lsb_minus4)]).
depends_on(f(dExpectedDeltaPerPicOrderCntCycle), [f(num_ref_frames_in_pic_order_cnt_cycle), f(offset_for_ref_frame(_))]).
depends_on(f(dPicWidthInMbs), [f(pic_width_in_mbs_minus1)]).
depends_on(f(dPicWidthInSamplesL), [f(dPicWidthInMbs)]).
depends_on(f(dPicWidthInSamplesC), [f(dPicWidthInMbs), f(dMbWidthC)]).
depends_on(f(dPicHeightInMapUnits), [f(pic_height_in_map_units_minus1)]).
depends_on(f(dPicSizeInMapUnits), [f(dPicWidthInMbs), f(dPicHeightInMapUnits)]).
depends_on(f(dFrameHeightInMbs), [f(frame_mbs_only_flag), f(dPicHeightInMapUnits)]).
depends_on(f(dCropUnitX), [f(dChromaArrayType), f(dSubWidthC)]).
depends_on(f(dCropUnitY), [f(dChromaArrayType), f(frame_mbs_only_flag), f(dSubHeightC)]).
depends_on(f(dCroppedWidthL), [f(dPicWidthInSamplesL), f(dCropUnitX), f(frame_crop_left_offset), f(frame_crop_right_offset)]).
depends_on(f(dCroppedWidthC), [f(dPicWidthInSamplesC), f(dCropUnitX), f(frame_crop_left_offset), f(frame_crop_right_offset)]).
depends_on(f(dCroppedHeight), [f(dFrameHeightInMbs), f(dCropUnitY), f(frame_crop_top_offset), f(frame_crop_bottom_offset)]).
depends_on(f(dSliceGroupChangeRate), [f(slice_group_change_rate_minus1)]).
depends_on(f(dMbaffFrameFlag), [f(mb_adaptive_frame_field_flag), f(field_pic_flag)]).
depends_on(f(dPicHeightInMbs), [f(dFrameHeightInMbs), f(field_pic_flag)]).
depends_on(f(dPicHeightInSamplesL), [f(dPicHeightInMbs)]).
depends_on(f(dPicHeightInSamplesC), [f(dPicHeightInMbs), f(dMbHeightC)]).
depends_on(f(dPicSizeInMbs), [f(dPicWidthInMbs), f(dPicHeightInMbs)]).
depends_on(f(dMaxPicNum), [f(field_pic_flag), f(dMaxFrameNum)]).
depends_on(f(dCurrPicNum), [f(field_pic_flag), f(frame_num)]).
depends_on(f(dSliceQPY), [f(pic_init_qp_minus26), f(slice_qp_delta)]).
depends_on(f(dQSY), [f(pic_init_qs_minus26), f(slice_qs_delta)]).
depends_on(f(dFilterOffsetA), [f(slice_alpha_c0_offset_div2)]).
depends_on(f(dFilterOffsetB), [f(slice_beta_offset_div2)]).
depends_on(f(dMapUnitsInSliceGroup0), [f(slice_group_change_cycle), f(dSliceGroupChangeRate), f(dPicSizeInMapUnits)]).
depends_on(f(dCodedBlockPatternLuma), [f(coded_block_pattern)]).
depends_on(f(dCodedBlockPatternChroma), [f(coded_block_pattern)]).
depends_on(f(dSubWidthC), [f(chroma_format_idc), f(separate_colour_plane_flag)]).
depends_on(f(dSubHeightC), [f(chroma_format_idc), f(separate_colour_plane_flag)]).
depends_on(f(dQpy), [f(dQpyPrev), f(mb_qp_delta), f(dQpBdOffsetY)]).
depends_on(f(dQpPrimeY), [f(dQpy), f(dQpBdOffsetY)]).
depends_on(f(dTransformBypassModeFlag), [f(qpprime_y_zero_transform_bypass_flag), f(dQpPrimeY)]).
depends_on(f(chroma_weight_l0(_I, _J)), [
f(num_ref_idx_l0_active_minus1),
f(luma_weight_l0_flag),
f(dChromaArrayType),
f(chroma_weight_l0_flag),
f(chroma_log2_weight_denom)
]).
depends_on(f(chroma_offset_l0(_I, _J)), [
f(num_ref_idx_l0_active_minus1),
f(luma_weight_l0_flag),
f(dChromaArrayType),
f(chroma_weight_l0_flag)
]).
depends_on(f(chroma_weight_l1(I, _J)), [
f(slice_type),
f(num_ref_idx_l1_active_minus1),
f(luma_weight_l1_flag(I)),
f(dChromaArrayType),
f(chroma_weight_l1_flag(I))
]).
depends_on(f(chroma_offset_l1(I, _J)), [
f(slice_type),
f(num_ref_idx_l1_active_minus1),
f(luma_weight_l1_flag(I)),
f(dChromaArrayType),
f(chroma_weight_l1_flag(I))
]).
depends_on(f(mvd_l0(_MbPartIdx, _CompIdx)), [f(mb_type), f(dNumMbPart(mb_type))]).
depends_on(f(mvd_l1(_MbPartIdx, _CompIdx)), [f(mb_type), f(dNumMbPart(mb_type))]).
depends_on(f(residual_block_cavlc, dTotalCoeff), [f(residual_block_cavlc, coeff_token)]).
depends_on(f(residual_block_cavlc, dTrailingOnes), [f(residual_block_cavlc, coeff_token)]).
depends_on(f(residual_block_cavlc, dSuffixLength), [f(residual_block_cavlc, coeff_token)]).
depends_on(f(residual_block_cavlc, dZerosLeft), [f(residual_block_cavlc, total_zeros)]).
depends_on(f(subset_seq_parameter_set_rbsp, seq_parameter_set_data), []).
depends_on(f(subset_seq_parameter_set_rbsp, seq_parameter_set_svc_extension), [f(profile_idc)]).
depends_on(f(subset_seq_parameter_set_rbsp, svc_vui_parameters_extension), [f(profile_idc), f(svc_vui_parameters_present_flag)]).
depends_on(f(subset_seq_parameter_set_rbsp, seq_parameter_set_mvc_extension), [f(profile_idc)]).
depends_on(f(subset_seq_parameter_set_rbsp, mvc_vui_parameters_extension), [f(profile_idc), f(mvc_vui_parameters_present_flag)]).
depends_on(f(subset_seq_parameter_set_rbsp, seq_parameter_set_mvcd_extension), [f(profile_idc)]).
depends_on(f(subset_seq_parameter_set_rbsp, seq_parameter_set_3davc_extension), [f(profile_idc)]).
depends_on(f(subset_seq_parameter_set_rbsp, rbsp_trailing_bits), []).
depends_on(f(access_unit_delimiter_rbsp, rbsp_trailing_bits), []).
depends_on(f(seq_parameter_set_extension_rbsp, rbsp_trailing_bits), []).
depends_on(f(slice_data_partition_c_layer_rbsp, slice_data), []).
depends_on(f(slice_data_partition_c_layer_rbsp, rbsp_slice_trailing_bits), []).
depends_on(f(rbsp_slice_trailing_bits, rbsp_trailing_bits), []).
depends_on(f(residual(_StartIdx, _EndIdx), dResidualBlock), [f(entropy_coding_mode_flag)]).
depends_on(f(residual(_StartIdx, _EndIdx), residual_luma), []).
depends_on(f(residual(_StartIdx, _EndIdx), dIntra16x16DCLevel), []).
depends_on(f(residual(_StartIdx, _EndIdx), dIntra16x16ACLevel), []).
depends_on(f(residual(_StartIdx, _EndIdx), dLumaLevel4x4), []).
depends_on(f(residual, dLumaLevel8x8), []).
depends_on(f(residual, dNumC8x8), [f(dChromaArrayType)]).
depends_on(f(residual, residual_block(_ICbCr)), [f(dChromaArrayType), f(dCodedBlockPatternChroma), f(startIdx)]).
depends_on(f(residual, residual_luma), [f(dChromaArrayType)]).
depends_on(f(residual, dCbIntra16x16DCLevel), [f(dChromaArrayType)]).
depends_on(f(residual, dCbIntra16x16ACLevel), [f(dChromaArrayType)]).
depends_on(f(residual, dCbLevel4x4), [f(dChromaArrayType)]).
depends_on(f(residual, dCbLevel8x8), [f(dChromaArrayType)]).
depends_on(f(residual, dCrIntra16x16DCLevel), [f(dChromaArrayType)]).
depends_on(f(residual, dCrIntra16x16ACLevel), [f(dChromaArrayType)]).
depends_on(f(residual, dCrLevel4x4), [f(dChromaArrayType)]).
depends_on(f(residual, dCrLevel8x8), [f(dChromaArrayType)]).
depends_on(f(filler_data_rbsp, rbsp_trailing_bits), []).
depends_on(f(prefix_nal_unit_rbsp, prefix_nal_unit_svc), [f(svc_extension_flag)]).
depends_on(f(seq_parameter_set_rbsp, seq_parameter_set_data), []).
depends_on(f(seq_parameter_set_rbsp, rbsp_trailing_bits), []).
depends_on(f(slice_data, dCurrMbAddr), []).
depends_on(f(slice_data, dMoreDataFlag), []).
depends_on(f(slice_data, dPrevMbSkipped), []).
depends_on(f(slice_data, dPrevMbSkipped), [f(dMoreDataFlag), f(slice_type), f(entropy_coding_mode_flag)]).
depends_on(f(slice_data, dCurrMbAddr), [f(dMoreDataFlag), f(slice_type), f(entropy_coding_mode_flag), f(mb_skip_run)]).
depends_on(f(slice_data, dMoreDataFlag), [f(dMoreDataFlag), f(slice_type), f(entropy_coding_mode_flag), f(mb_skip_run)]).
depends_on(f(slice_data, dMoreDataFlag), [f(dMoreDataFlag), f(slice_type), f(entropy_coding_mode_flag)]).
depends_on(f(slice_data, macroblock_layer), [f(dMoreDataFlag)]).
depends_on(f(slice_data, dMoreDataFlag), [f(dMoreDataFlag), f(entropy_coding_mode_flag)]).
depends_on(f(slice_data, dPrevMbSkipped), [f(dMoreDataFlag), f(entropy_coding_mode_flag), f(slice_type)]).
depends_on(f(slice_data, dMoreDataFlag), [f(dMoreDataFlag), f(entropy_coding_mode_flag), f(mbaff_frame_flag), f(dCurrMbAddr)]).
depends_on(f(slice_data, dMoreDataFlag), [f(dMoreDataFlag), f(entropy_coding_mode_flag), f(mbaff_frame_flag), f(dCurrMbAddr)]).
depends_on(f(slice_data, dCurrMbAddr), [f(dMoreDataFlag)]).
depends_on(f(sei_message, sei_payload), []).
depends_on(f(residual_luma, residual_block), [f(mb_type)]).
depends_on(f(residual_luma, residual_block), [f(transform_size_8x8_flag), f(entropy_coding_mode_flag), f(dCodedBlockPatternLuma), f(mb_type)]).
depends_on(f(residual_luma, residual_block), [f(transform_size_8x8_flag), f(entropy_coding_mode_flag), f(dCodedBlockPatternLuma), f(mb_type)]).
depends_on(f(residual_luma, residual_block(_I8x8)), [f(transform_size_8x8_flag), f(entropy_coding_mode_flag), f(coded_block_pattern)]).
depends_on(f(pic_parameter_set_rbsp, scaling_list(I)), [f(pic_scaling_matrix_present_flag), f(pic_scaling_list_present_flag(I)), f(dPicScalingListCount)]).
depends_on(f(pic_parameter_set_rbsp, rbsp_trailing_bits), []).
depends_on(f(seq_parameter_set_data, scaling_list(I)), [f(profile_idc), f(seq_scaling_matrix_present_flag), f(seq_scaling_list_present_flag(I)), f(dSeqScalingListCount)]).
depends_on(f(seq_parameter_set_data, vui_parameters), [f(vui_parameters_present_flag)]).
depends_on(f(slice_data_partition_b_layer_rbsp, slice_data), []).
depends_on(f(slice_data_partition_b_layer_rbsp, rbsp_slice_trailing_bits), []).
depends_on(f(slice_layer_without_partitioning_rbsp, slice_header), []).
depends_on(f(slice_layer_without_partitioning_rbsp, slice_data), []).
depends_on(f(slice_layer_without_partitioning_rbsp, rbsp_slice_trailing_bits), []).
depends_on(f(residual_block_cavlc, dSuffixLength), [f(dTotalCoeff)]).
depends_on(f(residual_block_cavlc, dLevelVal(I)), [f(dTotalCoeff), f(dTrailingOnes), f(level_suffix(I))]).
depends_on(f(residual_block_cavlc, dLevelCode(_I)), [f(dTotalCoeff), f(dTrailingOnes), f(level_prefix), f(residual_block_cavlc, dSuffixLength)]).
depends_on(f(dSuffixLength, residual_block_cavlc), [f(dTotalCoeff), f(coeff_token), f(dTrailingOnes), f(dLevelVal(_), residual_block_cavlc)]).
depends_on(f(dZerosLeft, residual_block_cavlc), [f(dTotalCoeff), f(coeff_token), f(endIdx), f(startIdx)]).
depends_on(f(dRunValLast, residual_block_cavlc), [f(dTotalCoeff), f(coeff_token)]).
depends_on(f(dCoeffNum, residual_block_cavlc), [f(dTotalCoeff), f(coeff_token)]).
depends_on(f(dCoeffLevelIndexed, residual_block_cavlc), [f(dTotalCoeff), f(coeff_token), f(startIdx), f(dCoeffNum, residual_block_cavlc)]).
depends_on(f(dNumCoeff, residual_block_cabac), [f(maxNumCoeff), f(dChromaArrayType), f(coded_block_flag), f(dI, residual_block_cabac), f(significant_coeff_flag(_)), f(last_significant_coeff_flag(_))]).
depends_on(f(dI, residual_block_cabac), [f(maxNumCoeff), f(dChromaArrayType), f(coded_block_flag)]).
depends_on(f(dCoeffLevelLast, residual_block_cabac), [f(maxNumCoeff), f(dChromaArrayType), f(coded_block_flag), f(dNumCoeff, residual_block_cabac)]).
depends_on(f(slice_header_in_scalable_extension, slice_layer_extension_rbsp), [f(svc_extension_flag)]).
depends_on(f(slice_data_in_scalable_extension, slice_layer_extension_rbsp), [f(svc_extension_flag), f(slice_skip_flag)]).
depends_on(f(slice_header_in_3davc_extension, slice_layer_extension_rbsp), [f(svc_extension_flag), f(avc_3d_extension_flag)]).
depends_on(f(slice_data_in_3davc_extension, slice_layer_extension_rbsp), [f(svc_extension_flag), f(avc_3d_extension_flag)]).
depends_on(f(slice_layer_extension_rbsp, slice_header), [f(svc_extension_flag), f(avc_3d_extension_flag)]).
depends_on(f(slice_layer_extension_rbsp, slice_data), [f(svc_extension_flag), f(avc_3d_extension_flag)]).
depends_on(f(slice_layer_extension_rbsp, rbsp_slice_trailing_bits), []).
depends_on(f(slice_data_partition_a_layer_rbsp, slice_header), []).
depends_on(f(slice_data_partition_a_layer_rbsp, slice_data), []).
depends_on(f(slice_data_partition_a_layer_rbsp, rbsp_slice_trailing_bits), []).
depends_on(f(nal_unit, dNumBytesInRBSP), []).
depends_on(f(nal_unit, dNalUnitHeaderBytes), [f(nal_unit_type)]).
depends_on(f(nal_unit, nal_unit_header_svc_extension), [f(nal_unit_type), f(svc_extension_flag)]).
depends_on(f(nal_unit, nal_unit_header_3davc_extension), [f(nal_unit_type), f(svc_extension_flag), f(avc_3d_extension_flag)]).
depends_on(f(nal_unit, nal_unit_header_mvc_extension), [f(nal_unit_type), f(svc_extension_flag), f(avc_3d_extension_flag)]).
depends_on(f(slice_header, ref_pic_list_mvc_modification), [f(nal_unit_type)]).
depends_on(f(slice_header, ref_pic_list_modification), [f(nal_unit_type)]).
depends_on(f(slice_header, pred_weight_table), [f(weighted_pred_flag), f(slice_type), f(weighted_bipred_idc)]).
depends_on(f(slice_header, dec_ref_pic_marking), [f(nal_ref_idc)]).
depends_on(f(sei_rbsp, sei_message), [f(dMoreRbspData)]).
depends_on(f(mvd_l0(MbPartIdx, _, _)), [f(sub_mb_type(MbPartIdx)), f(dNumSubMbPart(MbPartIdx))]).
depends_on(f(mvd_l1(MbPartIdx, _, _)), [f(sub_mb_type(MbPartIdx)), f(dNumSubMbPart(MbPartIdx))]).
depends_on(f(macroblock_layer, residual(0, 15)), [f(mb_type), f(dCodedBlockPatternLuma), f(dCodedBlockPatternChroma), f(dMbPartPredMode(mb_type, 0))]).
depends_on(f(residual, dChromaDCLevel(_ICbCr, _I)), [f(dChromaArrayType), f(dCodedBlockPatternChroma), f(startIdx), f(residual, dNumC8x8)]).
depends_on(f(residual_luma, dI16x16acLevel(_,_)), [f(transform_size_8x8_flag), f(entropy_coding_mode_flag), f(dCodedBlockPatternLuma), f(mb_type)]).
depends_on(f(residual_luma, dLevel4x4(_,_)), [f(transform_size_8x8_flag), f(entropy_coding_mode_flag), f(dCodedBlockPatternLuma), f(mb_type)]).
depends_on(f(residual_luma, dLevel8x8(_,_)), [f(transform_size_8x8_flag), f(entropy_coding_mode_flag)]).
depends_on(f(residual_luma, dLevel8x8(_I8x8, _I)), [f(transform_size_8x8_flag), f(entropy_coding_mode_flag), f(coded_block_pattern)]).
depends_on(f(residual, residual_block(_ICbCr, _I8x8, _I4x4)), [f(dChromaArrayType), f(residual, dNumC8x8), f(dCodedBlockPatternChroma)]).
depends_on(f(residual, dChromaACLevel(_ICbCr, _I8x8, _I4x4, _I)), [f(dChromaArrayType), f(residual, dNumC8x8), f(dCodedBlockPatternChroma)]).
% f/1
f(luma_weight_l0(I)) :-
domain(f(num_ref_idx_l0_active_minus1), N), I #>= 0, I #=< N.
f(luma_offset_l0(I)) :-
domain(f(num_ref_idx_l0_active_minus1), N), I #>= 0, I #=< N.
f(chroma_weight_l0_flag) :-
domain(f(num_ref_idx_l0_active_minus1), N), I #>= 0, I #=< N.
f(luma_weight_l1_flag(I)) :-
domain(f(num_ref_idx_l1_active_minus1), N), I #>= 0, I #=< N.
f(luma_weight_l1(I)) :-
domain(f(num_ref_idx_l1_active_minus1), N), I #>= 0, I #=< N.
f(luma_offset_l1(I)) :-
domain(f(num_ref_idx_l1_active_minus1), N), I #>= 0, I #=< N.
f(chroma_weight_l1_flag(I)) :-
domain(f(num_ref_idx_l1_active_minus1), N), I #>= 0, I #=< N.
f(mb_type).
f(luma_log2_weight_denom).
f(chroma_log2_weight_denom).
f(luma_weight_l0_flag).
f(pcm_alignment_zero_bit).
f(pcm_sample_luma(I)) :-
I #>= 0, I #< 256.
f(pcm_sample_chroma(I)) :-
domain(f(dMbWidthC), MbWC),
domain(f(dMbHeightC), MbHC),
N #= 2 * MbWC * MbHC,
I #>= 0, I #< N.
f(transform_size_8x8_flag).
f(dChromaArrayType).
f(num_ref_idx_l0_active_minus1).
f(num_ref_idx_l1_active_minus1).
f(slice_type).
f(dBitDepthY).
f(dMbWidthC).
f(dMbHeightC).
f(dBitDepthC).
f(dMbPartPredMode).
f(transform_8x8_mode_flag).
f(dNoSubMbPartSizeLessThan8x8Flag).
f(direct_8x8_inference_flag).
f(dCodedBlockPatternChroma).
f(mb_qp_delta).
f(svc_vui_parameters_present_flag).
f(bit_equal_to_one).
f(mvc_vui_parameters_present_flag).
f(additional_extension2_flag).
f(additional_extension2_data_flag).
f(delta_scale(J)) :-
domain(f(size_of_scaling_list), N), J #>= 0, J #< N.
f(primary_pic_type).
f(seq_parameter_set_id).
f(aux_format_idc).
f(bit_depth_aux_minus8).
f(alpha_incr_flag).
f(alpha_opaque_value).
f(alpha_transparent_value).
f(additional_extension_flag).
f(slice_id).
f(colour_plane_id).
f(redundant_pic_cnt).
f(ref_pic_list_modification_flag_l0).
f(dCodedBlockPatternLuma).
f(modification_of_pic_nums_idc(I)) :-
I #>= 0.
f(abs_diff_pic_num_minus1).
f(long_term_pic_num).
f(ref_pic_list_modification_flag_l1).
f(prev_intra4x4_pred_mode_flag(Luma4x4BlkIdx)) :-
Luma4x4BlkIdx #>= 0, Luma4x4BlkIdx #< 16.
f(rem_intra4x4_pred_mode(Luma4x4BlkIdx)) :-
Luma4x4BlkIdx #>= 0, Luma4x4BlkIdx #< 16.
f(prev_intra8x8_pred_mode_flag(Luma8x8BlkIdx)) :-
Luma8x8BlkIdx #>= 0, Luma8x8BlkIdx #< 4.
f(rem_intra8x8_pred_mode(Luma8x8BlkIdx)) :-
Luma8x8BlkIdx #>= 0, Luma8x8BlkIdx #< 4.
f(intra_chroma_pred_mode).
f(ref_idx_l0(MbPartIdx)) :-
MbPartIdx #>= 0, MbPartIdx #< 4.
f(ref_idx_l1(MbPartIdx)) :-
MbPartIdx #>= 0, MbPartIdx #< 4.
f(cabac_zero_word).
f(no_output_of_prior_pics_flag).
f(long_term_reference_flag).
f(adaptive_ref_pic_marking_mode_flag).
f(memory_management_control_operation).
f(difference_of_pic_nums_minus1).
f(long_term_frame_idx).
f(max_long_term_frame_idx_plus1).
f(dMaxPicNum).
f(dChromaArrayType).
f(dNumMbPart(_MbType)).
f(dMaxLongTermFrameIdx).
f(dMaxNumRefFrames).
f(ff_byte).
f(cabac_alignment_one_bit).
f(mb_skip_run).
f(mb_skip_flag).
f(mb_field_decoding_flag).
f(end_of_slice_flag).
f(last_payload_type_byte).
f(last_payload_size_byte).
f(pic_parameter_set_id).
f(entropy_coding_mode_flag).
f(bottom_field_pic_order_in_frame_present_flag).
f(num_slice_groups_minus1).
f(slice_group_map_type).
f(run_length_minus1(IGroup)) :-
domain(f(num_slice_groups_minus1), N), IGroup #>= 0, IGroup #=< N.
f(top_left(IGroup)) :-
domain(f(num_slice_groups_minus1), N), IGroup #>= 0, IGroup #< N.
f(bottom_right(IGroup)) :-
domain(f(num_slice_groups_minus1), N), IGroup #>= 0, IGroup #< N.
f(slice_group_change_direction_flag).
f(slice_group_change_rate_minus1).
f(pic_size_in_map_units_minus1).
f(slice_group_id(I)) :-
domain(f(pic_size_in_map_units_minus1), N), I #>= 0, I #=< N.
f(more_data_flag). % Context variable for loop termination
f(slice_type). % Syntax element
f(mbaff_frame_flag). % Syntax element
f(curr_mb_addr). % Context variable
f(prev_mb_skipped). % Context variable
f(field_pic_flag). % Syntax element / Context variable
f(dByteAligned). % Derived from byte_aligned() function
f(dPicSizeInMbs). % Derived value (PicSizeInMbs)
f(dPicSizeInMapUnits). % Derived value (PicSizeInMapUnits)
f(dInferredMbFieldDecodingFlag). % Derived value for mb_field_decoding_flag inference
f(more_rbsp_data).
f(seq_scaling_matrix_present_flag).
f(chroma_format_idc).
f(dPicScalingListCount).
f(num_ref_idx_l0_default_active_minus1).
f(num_ref_idx_l1_default_active_minus1).
f(weighted_pred_flag).
f(weighted_bipred_idc).
f(pic_init_qp_minus26).
f(pic_init_qs_minus26).
f(chroma_qp_index_offset).
f(deblocking_filter_control_present_flag).
f(constrained_intra_pred_flag).
f(redundant_pic_cnt_present_flag).
f(transform_8x8_mode_flag).
f(pic_scaling_matrix_present_flag).
f(pic_scaling_list_present_flag(I)) :-
domain(f(dPicScalingListCount), N), I #>= 0, I #< N.
f(second_chroma_qp_index_offset).
f(profile_idc).
f(constraint_set0_flag).
f(constraint_set1_flag).
f(constraint_set2_flag).
f(constraint_set3_flag).
f(constraint_set4_flag).
f(constraint_set5_flag).
f(reserved_zero_2bits).
f(level_idc).
f(chroma_format_idc).
f(separate_colour_plane_flag).
f(bit_depth_luma_minus8).
f(bit_depth_chroma_minus8).
f(qpprime_y_zero_transform_bypass_flag).
f(seq_scaling_matrix_present_flag).
f(seq_scaling_list_present_flag(I)) :-
domain(f(chroma_format_idc), ChromaFormatIdc),
(ChromaFormatIdc #\= 3 -> N #= 8 ; N #= 12),
I #>= 0, I #< N.
f(log2_max_frame_num_minus4).
f(pic_order_cnt_type).
f(log2_max_pic_order_cnt_lsb_minus4).
f(delta_pic_order_always_zero_flag).
f(offset_for_non_ref_pic).
f(offset_for_top_to_bottom_field).
f(num_ref_frames_in_pic_order_cnt_cycle).
f(offset_for_ref_frame(I)) :-
domain(f(num_ref_frames_in_pic_order_cnt_cycle), N),
I #>= 0, I #< N.
f(max_num_ref_frames).
f(gaps_in_frame_num_value_allowed_flag).
f(dChromaArrayType).
f(pic_width_in_mbs_minus1).
f(pic_height_in_map_units_minus1).
f(frame_mbs_only_flag).
f(mb_adaptive_frame_field_flag).
f(direct_8x8_inference_flag).
f(frame_cropping_flag).
f(frame_crop_left_offset).
f(frame_crop_right_offset).
f(frame_crop_top_offset).
f(frame_crop_bottom_offset).
f(vui_parameters_present_flag).
f(coeff_token).
f(trailing_ones_sign_flag(I)) :-
domain(f(residual_block_cavlc, dTotalCoeff), N), I #>= 0, I #< N.
f(level_prefix(I)) :-
domain(f(residual_block_cavlc, dTotalCoeff), N), I #>= 0, I #< N.
f(level_suffix(I)) :-
domain(f(residual_block_cavlc, dTotalCoeff), N), I #>= 0, I #< N.
f(total_zeros).
f(run_before(I)) :-
domain(f(residual_block_cavlc, dTotalCoeff), N), N_minus_1 #= N - 1, I #>= 0, I #< N_minus_1.
f(coded_block_flag).
f(significant_coeff_flag(I)) :-
domain(f(residual_block_cabac, dNumCoeff), N), N_minus_1 #= N - 1, I #>= 0, I #< N_minus_1.
f(last_significant_coeff_flag(I)) :-
domain(f(residual_block_cabac, dNumCoeff), N), N_minus_1 #= N - 1, I #>= 0, I #< N_minus_1.
f(delta_pic_order_cnt(1)).
f(direct_spatial_mv_pred_flag).
f(num_ref_idx_active_override_flag).
f(num_ref_idx_l0_active_minus1).
f(num_ref_idx_l1_active_minus1).
f(cabac_init_idc).
f(slice_qp_delta).
f(sp_for_switch_flag).
f(slice_qs_delta).
f(disable_deblocking_filter_idc).
f(slice_alpha_c0_offset_div2).
f(slice_beta_offset_div2).
f(slice_group_change_cycle).
f(rbsp_stop_one_bit).
f(rbsp_alignment_zero_bit).
f(sub_mb_type(MbPartIdx)) :-
MbPartIdx in 0..3.
f(dSubMbPred).
f(dMbPred).
f(mb_type).
f(dCodedBlockPatternLuma).
f(dCodedBlockPatternChroma).
f(profile_idc).
f(svc_vui_parameters_present_flag).
f(mvc_vui_parameters_present_flag).
f(entropy_coding_mode_flag).
f(dChromaArrayType).
f(dCodedBlockPatternChroma).
f(svc_extension_flag).
f(startIdx).
f(dCurrMbAddr).
f(dMoreDataFlag).
f(dPrevMbSkipped).
f(macroblock_layer).
f(sei_payload).
f(residual_block).
f(slice_type).
f(entropy_coding_mode_flag).
f(mb_skip_run).
f(mbaff_frame_flag).
f(mb_type).
f(transform_size_8x8_flag).
f(dCodedBlockPatternLuma).
f(dMbPartPredMode).
f(dPicScalingListCount).
f(dSeqScalingListCount).
f(dTotalCoeff).
f(coeff_token).
f(dTrailingOnes).
f(endIdx).
f(startIdx).
f(maxNumCoeff).
f(dChromaArrayType).
f(coded_block_flag).
f(significant_coeff_flag(_)).
f(last_significant_coeff_flag(_)).
f(svc_extension_flag).
f(slice_skip_flag).
f(avc_3d_extension_flag).
f(dNumBytesInRBSP).
f(dNalUnitHeaderBytes).
f(svc_extension_flag).
f(avc_3d_extension_flag).
f(nal_unit_type).
f(weighted_pred_flag).
f(slice_type).
f(weighted_bipred_idc).
f(nal_ref_idc).
f(dMoreRbspData).
f(rbsp_trailing_bits).
f(dIdrPicFlag).
f(dDepthFlag).
f(dChromaArrayType).
f(dBitDepthY).
f(dQpBdOffsetY).
f(dBitDepthC).
f(dQpBdOffsetC).
f(dRawMbBits).
f(dFlat_4x4_16(K)) :-
K #>= 0, K #< 16.
f(dFlat_8x8_16(K)) :-
K #>= 0, K #< 64.
f(dMaxFrameNum).
f(dMaxPicOrderCntLsb).
f(dExpectedDeltaPerPicOrderCntCycle).
f(offset_for_ref_frame(I)) :-
domain(f(num_ref_frames_in_pic_order_cnt_cycle), N), I #>= 0, I #< N.
f(dPicWidthInMbs).
f(dPicWidthInSamplesL).
f(dPicWidthInSamplesC).
f(dPicHeightInMapUnits).
f(dPicSizeInMapUnits).
f(dFrameHeightInMbs).
f(dCropUnitX).
f(dCropUnitY).
f(dCroppedWidthL).
f(dCroppedWidthC).
f(dCroppedHeight).
f(dSliceGroupChangeRate).
f(dMbaffFrameFlag).
f(dPicHeightInMbs).
f(dPicHeightInSamplesL).
f(dPicHeightInSamplesC).
f(dPicSizeInMbs).
f(dMaxPicNum).
f(dCurrPicNum).
f(dSliceQPY).
f(dQSY).
f(dFilterOffsetA).
f(dFilterOffsetB).
f(dMapUnitsInSliceGroup0).
f(dCodedBlockPatternLuma).
f(dCodedBlockPatternChroma).
f(dChromaArrayType).
f(dSubWidthC).
f(dSubHeightC).
f(dFrameHeightInMbs).
f(dMbHeightC).
f(dPicWidthInMbs).
f(dMaxFrameNum).
f(dPicSizeInMapUnits).
f(frame_mbs_only_flag).
f(frame_crop_left_offset).
f(frame_crop_right_offset).
f(frame_crop_top_offset).
f(frame_crop_bottom_offset).
f(slice_group_change_rate_minus1).
f(mb_adaptive_frame_field_flag).
f(field_pic_flag).
f(frame_num).
f(pic_init_qp_minus26).
f(slice_qp_delta).
f(pic_init_qs_minus26).
f(slice_qs_delta).
f(slice_alpha_c0_offset_div2).
f(slice_beta_offset_div2).
f(slice_group_change_cycle).
f(coded_block_pattern).
f(dQpy).
f(dQpPrimeY).
f(dTransformBypassModeFlag).
f(dQpyPrev).
f(mb_qp_delta).
f(dQpBdOffsetY).
f(qpprime_y_zero_transform_bypass_flag).
f(chroma_weight_l0(I, J)) :-
domain(f(num_ref_idx_l0_active_minus1), N_i), I #>= 0, I #=< N_i,
J #>= 0, J #< 2.
f(chroma_offset_l0(I, J)) :-
domain(f(num_ref_idx_l0_active_minus1), N_i), I #>= 0, I #=< N_i,
J #>= 0, J #< 2.
f(chroma_weight_l1(I, J)) :-
domain(f(num_ref_idx_l1_active_minus1), N_i), I #>= 0, I #=< N_i,
J #>= 0, J #< 2.
f(chroma_offset_l1(I, J)) :-
domain(f(num_ref_idx_l1_active_minus1), N_i), I #>= 0, I #=< N_i,
J #>= 0, J #< 2.
f(mvd_l0(MbPartIdx, CompIdx)) :-
domain(f(mb_type), MbType),
domain(f(dNumMbPart(MbType)), NumMbPartVal),
MbPartIdx #>= 0, MbPartIdx #< NumMbPartVal,
CompIdx #>= 0, CompIdx #< 2.
f(mvd_l1(MbPartIdx, CompIdx)) :-
domain(f(mb_type), MbType),
domain(f(dNumMbPart(MbType)), NumMbPartVal),
MbPartIdx #>= 0, MbPartIdx #< NumMbPartVal,
CompIdx #>= 0, CompIdx #< 2.
f(dMbPartPredMode(_MbType, _MbPartIdx)).
f(dI16x16acLevel(Idx, I)) :-
Idx in 0..15,
I in 0..14.
f(dLevel4x4(Idx, I)) :-
Idx in 0..15,
I in 0..15.
f(dLevel8x8(I8x8, Idx)) :-
I8x8 in 0..3,
Idx in 0..63.
f(mvd_l0(MbPartIdx, SubMbPartIdx, CompIdx)) :-
MbPartIdx in 0..3,
CompIdx in 0..1,
domain(f(dNumSubMbPart(MbPartIdx)), N),
SubMbPartIdx #>= 0, SubMbPartIdx #< N.
f(mvd_l1(MbPartIdx, SubMbPartIdx, CompIdx)) :-
MbPartIdx in 0..3,
CompIdx in 0..1,
domain(f(dNumSubMbPart(MbPartIdx)), N),
SubMbPartIdx #>= 0, SubMbPartIdx #< N.
% f/2
f(ref_pic_list_modification, abs_diff_pic_num_minus1).
f(dec_ref_pic_marking, long_term_pic_num).
f(ref_pic_list_modification, ref_pic_list_modification_flag_l1).
f(mb_pred, prev_intra4x4_pred_mode_flag(_Luma4x4BlkIdx)).
f(mb_pred, rem_intra4x4_pred_mode(_Luma4x4BlkIdx)).
f(mb_pred, prev_intra8x8_pred_mode_flag(_Luma8x8BlkIdx)).
f(mb_pred, rem_intra8x8_pred_mode(_Luma8x8BlkIdx)).
f(mb_pred, intra_chroma_pred_mode).
f(sub_mb_pred, ref_idx_l0(_MbPartIdx)).
f(sub_mb_pred, ref_idx_l1(_MbPartIdx)).
f(rbsp_slice_trailing_bits, cabac_zero_word).
f(dec_ref_pic_marking, no_output_of_prior_pics_flag).
f(dec_ref_pic_marking, long_term_reference_flag).
f(dec_ref_pic_marking, adaptive_ref_pic_marking_mode_flag).
f(dec_ref_pic_marking, memory_management_control_operation).
f(dec_ref_pic_marking, difference_of_pic_nums_minus1).
f(dec_ref_pic_marking, long_term_frame_idx).
f(dec_ref_pic_marking, max_long_term_frame_idx_plus1).
f(pic_parameter_set_rbsp, num_ref_idx_l0_default_active_minus1).
f(pic_parameter_set_rbsp, num_ref_idx_l1_default_active_minus1).
f(pic_parameter_set_rbsp, weighted_pred_flag).
f(pic_parameter_set_rbsp, weighted_bipred_idc).
f(pic_parameter_set_rbsp, pic_init_qp_minus26).
f(pic_parameter_set_rbsp, pic_init_qs_minus26).
f(pic_parameter_set_rbsp, chroma_qp_index_offset).
f(pic_parameter_set_rbsp, deblocking_filter_control_present_flag).
f(pic_parameter_set_rbsp, constrained_intra_pred_flag).
f(pic_parameter_set_rbsp, redundant_pic_cnt_present_flag).
f(pic_parameter_set_rbsp, transform_8x8_mode_flag).
f(pic_parameter_set_rbsp, pic_scaling_matrix_present_flag).
f(pic_parameter_set_rbsp, pic_scaling_list_present_flag(I)) :-
domain(f(dPicScalingListCount), N), I #>= 0, I #< N.
f(pic_parameter_set_rbsp, second_chroma_qp_index_offset).
f(seq_parameter_set_data, profile_idc).
f(seq_parameter_set_data, constraint_set0_flag).
f(seq_parameter_set_data, constraint_set1_flag).
f(seq_parameter_set_data, constraint_set2_flag).
f(seq_parameter_set_data, constraint_set3_flag).
f(seq_parameter_set_data, constraint_set4_flag).
f(seq_parameter_set_data, constraint_set5_flag).
f(seq_parameter_set_data, reserved_zero_2bits).
f(seq_parameter_set_data, level_idc).
f(seq_parameter_set_data, chroma_format_idc).
f(seq_parameter_set_data, separate_colour_plane_flag).
f(seq_parameter_set_data, bit_depth_luma_minus8).
f(seq_parameter_set_data, bit_depth_chroma_minus8).
f(seq_parameter_set_data, qpprime_y_zero_transform_bypass_flag).
f(seq_parameter_set_data, seq_scaling_matrix_present_flag).
f(seq_parameter_set_data, seq_scaling_list_present_flag(I)) :-
domain(f(chroma_format_idc), ChromaFormatIdc),
(ChromaFormatIdc #\= 3 -> N #= 8 ; N #= 12),
I #>= 0, I #< N.
f(seq_parameter_set_data, log2_max_frame_num_minus4).
f(seq_parameter_set_data, pic_order_cnt_type).
f(seq_parameter_set_data, log2_max_pic_order_cnt_lsb_minus4).
f(seq_parameter_set_data, delta_pic_order_always_zero_flag).
f(seq_parameter_set_data, offset_for_non_ref_pic).
f(seq_parameter_set_data, offset_for_top_to_bottom_field).
f(seq_parameter_set_data, num_ref_frames_in_pic_order_cnt_cycle).
f(seq_parameter_set_data, offset_for_ref_frame(I)) :-
domain(f(num_ref_frames_in_pic_order_cnt_cycle), N),
I #>= 0, I #< N.
f(seq_parameter_set_data, max_num_ref_frames).
f(seq_parameter_set_data, gaps_in_frame_num_value_allowed_flag).
f(residual(_StartIdx, _EndIdx), dResidualBlock).
f(residual(_StartIdx, _EndIdx), residual_luma).
f(residual(_StartIdx, _EndIdx), dIntra16x16DCLevel).
f(residual(_StartIdx, _EndIdx), dIntra16x16ACLevel).
f(residual(_StartIdx, _EndIdx), dLumaLevel4x4).
f(residual_block_cavlc, dTotalCoeff).
f(residual_block_cavlc, dTrailingOnes).
f(residual_block_cavlc, dSuffixLength).
f(residual_block_cavlc, dEndIdx).
f(residual_block_cavlc, dStartIdx).
f(residual_block_cavlc, dZerosLeft).
f(residual_block_cabac, dMaxNumCoeff).
f(residual_block_cabac, dNumCoeff).
f(seq_parameter_set_data, pic_width_in_mbs_minus1).
f(seq_parameter_set_data, pic_height_in_map_units_minus1).
f(seq_parameter_set_data, frame_mbs_only_flag).
f(seq_parameter_set_data, mb_adaptive_frame_field_flag).
f(seq_parameter_set_data, direct_8x8_inference_flag).
f(seq_parameter_set_data, frame_cropping_flag).
f(seq_parameter_set_data, frame_crop_left_offset).
f(seq_parameter_set_data, frame_crop_right_offset).
f(seq_parameter_set_data, frame_crop_top_offset).
f(seq_parameter_set_data, frame_crop_bottom_offset).
f(seq_parameter_set_data, vui_parameters_present_flag).
f(residual_block_cavlc, coeff_token).
f(residual_block_cavlc, trailing_ones_sign_flag(I)) :-
domain(f(residual_block_cavlc, dTotalCoeff), N), I #>= 0, I #< N.
f(residual_block_cavlc, level_prefix(I)) :-
domain(f(residual_block_cavlc, dTotalCoeff), N), I #>= 0, I #< N.
f(residual_block_cavlc, level_suffix(I)) :-
domain(f(residual_block_cavlc, dTotalCoeff), N), I #>= 0, I #< N.
f(residual_block_cavlc, total_zeros).
f(residual_block_cavlc, run_before(I)) :-
domain(f(residual_block_cavlc, dTotalCoeff), N), N_minus_1 #= N - 1, I #>= 0, I #< N_minus_1.
f(residual_block_cabac, coded_block_flag).
f(residual_block_cabac, significant_coeff_flag(I)) :-
domain(f(residual_block_cabac, dNumCoeff), N), N_minus_1 #= N - 1, I #>= 0, I #< N_minus_1.
f(residual_block_cabac, last_significant_coeff_flag(I)) :-
domain(f(residual_block_cabac, dNumCoeff), N), N_minus_1 #= N - 1, I #>= 0, I #< N_minus_1.
f(slice_header, delta_pic_order_cnt(1)).
f(slice_header, direct_spatial_mv_pred_flag).
f(slice_header, num_ref_idx_active_override_flag).
f(slice_header, num_ref_idx_l0_active_minus1).
f(slice_header, num_ref_idx_l1_active_minus1).
f(slice_header, cabac_init_idc).
f(slice_header, slice_qp_delta).
f(slice_header, sp_for_switch_flag).
f(slice_header, slice_qs_delta).
f(slice_header, disable_deblocking_filter_idc).
f(slice_header, slice_alpha_c0_offset_div2).
f(slice_header, slice_beta_offset_div2).
f(slice_header, slice_group_change_cycle).
f(rbsp_trailing_bits, rbsp_stop_one_bit).
f(rbsp_trailing_bits, rbsp_alignment_zero_bit).
f(sub_mb_pred, sub_mb_type(MbPartIdx)) :-
MbPartIdx in 0..3.
f(macroblock_layer, dSubMbPred).
f(macroblock_layer, dMbPred).
f(subset_seq_parameter_set_rbsp, seq_parameter_set_data).
f(subset_seq_parameter_set_rbsp, seq_parameter_set_svc_extension).
f(subset_seq_parameter_set_rbsp, svc_vui_parameters_extension).
f(subset_seq_parameter_set_rbsp, seq_parameter_set_mvc_extension).
f(subset_seq_parameter_set_rbsp, mvc_vui_parameters_extension).
f(subset_seq_parameter_set_rbsp, seq_parameter_set_mvcd_extension).
f(subset_seq_parameter_set_rbsp, seq_parameter_set_3davc_extension).
f(subset_seq_parameter_set_rbsp, rbsp_trailing_bits).
f(access_unit_delimiter_rbsp, rbsp_trailing_bits).
f(seq_parameter_set_extension_rbsp, rbsp_trailing_bits).
f(slice_data_partition_c_layer_rbsp, slice_data).
f(slice_data_partition_c_layer_rbsp, rbsp_slice_trailing_bits).
f(rbsp_slice_trailing_bits, rbsp_trailing_bits).
f(residual, dLumaLevel8x8).
f(residual, dNumC8x8).
f(residual, residual_block(ICbCr)) :-
ICbCr in 0..1.
f(residual, residual_luma).
f(residual, dCbIntra16x16DCLevel).
f(residual, dCbIntra16x16ACLevel).
f(residual, dCbLevel4x4).
f(residual, dCbLevel8x8).
f(residual, dCrIntra16x16DCLevel).
f(residual, dCrIntra16x16ACLevel).
f(residual, dCrLevel4x4).
f(residual, dCrLevel8x8).
f(filler_data_rbsp, rbsp_trailing_bits).
f(prefix_nal_unit_rbsp, prefix_nal_unit_svc).
f(seq_parameter_set_rbsp, seq_parameter_set_data).
f(seq_parameter_set_rbsp, rbsp_trailing_bits).
f(slice_data, dCurrMbAddr).
f(slice_data, dMoreDataFlag).
f(slice_data, dPrevMbSkipped).
f(slice_data, macroblock_layer).
f(sei_message, sei_payload).
f(residual_luma, residual_block).
f(residual_luma, residual_block(I8x8)) :-
I8x8 in 0..3.
f(pic_parameter_set_rbsp, scaling_list(I)) :-
domain(f(dPicScalingListCount), N), I #>= 0, I #< N.
f(pic_parameter_set_rbsp, rbsp_trailing_bits).
f(seq_parameter_set_data, scaling_list(I)) :-
domain(f(dSeqScalingListCount), N), I #>= 0, I #< N.
f(seq_parameter_set_data, vui_parameters).
f(slice_data_partition_b_layer_rbsp, slice_data).
f(slice_data_partition_b_layer_rbsp, rbsp_slice_trailing_bits).
f(slice_layer_without_partitioning_rbsp, slice_header).
f(slice_layer_without_partitioning_rbsp, slice_data).
f(slice_layer_without_partitioning_rbsp, rbsp_slice_trailing_bits).
f(residual_block_cavlc, dSuffixLength).
f(residual_block_cavlc, dLevelVal(I)) :-
domain(f(dTotalCoeff), N), I #>= 0, I #< N.
f(residual_block_cavlc, dLevelCode(I)) :-
domain(f(dTotalCoeff), N), I #>= 0, I #< N.
f(dSuffixLength, residual_block_cavlc).
f(dZerosLeft, residual_block_cavlc).
f(dRunValLast, residual_block_cavlc).
f(dCoeffNum, residual_block_cavlc).
f(dCoeffLevelIndexed, residual_block_cavlc).
f(dNumCoeff, residual_block_cabac).
f(dI, residual_block_cabac).
f(dCoeffLevelLast, residual_block_cabac).
f(slice_header_in_scalable_extension, slice_layer_extension_rbsp).
f(slice_data_in_scalable_extension, slice_layer_extension_rbsp).
f(slice_header_in_3davc_extension, slice_layer_extension_rbsp).
f(slice_data_in_3davc_extension, slice_layer_extension_rbsp).
f(slice_layer_extension_rbsp, slice_header).
f(slice_layer_extension_rbsp, slice_data).
f(slice_layer_extension_rbsp, rbsp_slice_trailing_bits).
f(slice_data_partition_a_layer_rbsp, slice_header).
f(slice_data_partition_a_layer_rbsp, slice_data).
f(slice_data_partition_a_layer_rbsp, rbsp_slice_trailing_bits).
f(nal_unit, dNumBytesInRBSP).
f(nal_unit, dNalUnitHeaderBytes).
f(nal_unit, nal_unit_header_svc_extension).
f(nal_unit, nal_unit_header_3davc_extension).
f(nal_unit, nal_unit_header_mvc_extension).
f(slice_header, ref_pic_list_mvc_modification).
f(slice_header, ref_pic_list_modification).
f(slice_header, pred_weight_table).
f(slice_header, dec_ref_pic_marking).
f(sei_rbsp, sei_message).
f(mb_pred, mvd_l0(_MbPartIdx, _CompIdx)).
f(mb_pred, mvd_l1(_MbPartIdx, _CompIdx)).
f(macroblock_layer, residual(0, 15)).
f(residual, dChromaDCLevel(ICbCr, I)) :-
ICbCr in 0..1, domain(f(residual, dNumC8x8), N), I #>= 0, I #< 4*N.
f(residual_luma, dI16x16acLevel(Idx, I)) :-
Idx in 0..15,
I in 0..14.
f(residual_luma, dLevel4x4(Idx, I)) :-
Idx in 0..15,
I in 0..15.
f(residual_luma, dLevel8x8(I8x8, Idx)) :-
I8x8 in 0..3,
Idx in 0..63.
f(residual_luma, dLevel8x8(I8x8, I)) :-
I8x8 in 0..3, I in 0..63.
f(sub_mb_pred, mvd_l0(MbPartIdx, SubMbPartIdx, CompIdx)) :-
MbPartIdx in 0..3,
CompIdx in 0..1,
domain(f(dNumSubMbPart(MbPartIdx)), N),
SubMbPartIdx #>= 0, SubMbPartIdx #< N.
f(sub_mb_pred, mvd_l1(MbPartIdx, SubMbPartIdx, CompIdx)) :-
MbPartIdx in 0..3,
CompIdx in 0..1,
domain(f(dNumSubMbPart(MbPartIdx)), N),
SubMbPartIdx #>= 0, SubMbPartIdx #< N.
f(residual, residual_block(ICbCr, I8x8, I4x4)) :-
ICbCr in 0..1, domain(f(residual, dNumC8x8), N), I8x8 #>= 0, I8x8 #< N, I4x4 in 0..3.
f(residual, dChromaACLevel(ICbCr, I8x8, I4x4, I)) :-
ICbCr in 0..1, domain(f(residual, dNumC8x8), N), I8x8 #>= 0, I8x8 #< N, I4x4 in 0..3, I in 0..14.
f(residual_block_cavlc, dLevelVal(I)) :-
domain(f(dTotalCoeff), N), I #>= 0, I #< N.
f(residual_block_cavlc, dRunVal(I)) :-
domain(dTotalCoeff, N), M #= N - 1, I #>= 0, I #< M.
f(residual_block_cabac, dCoeffLevel(I)) :-
domain(f(maxNumCoeff), N), I #>= 0, I #< N.
% mb_part_pred_mode_is_intra16x16/1
mb_part_pred_mode_is_intra16x16(_MbType) :-
fail.
% mb_type/2
mb_type('I_NxN', 0).
mb_type('I_16x16_0_0_0', 1).
mb_type('I_16x16_1_0_0', 2).
mb_type('I_16x16_2_0_0', 3).
mb_type('I_16x16_3_0_0', 4).
mb_type('I_16x16_0_1_0', 5).
mb_type('I_16x16_1_1_0', 6).
mb_type('I_16x16_2_1_0', 7).
mb_type('I_16x16_3_1_0', 8).
mb_type('I_16x16_0_2_0', 9).
mb_type('I_16x16_1_2_0', 10).
mb_type('I_16x16_2_2_0', 11).
mb_type('I_16x16_3_2_0', 12).
mb_type('I_16x16_0_0_1', 13).
mb_type('I_16x16_1_0_1', 14).
mb_type('I_16x16_2_0_1', 15).
mb_type('I_16x16_3_0_1', 16).
mb_type('I_16x16_0_1_1', 17).
mb_type('I_16x16_1_1_1', 18).
mb_type('I_16x16_2_1_1', 19).
mb_type('I_16x16_3_1_1', 20).
mb_type('I_16x16_0_2_1', 21).
mb_type('I_16x16_1_2_1', 22).
mb_type('I_16x16_2_2_1', 23).
mb_type('I_16x16_3_2_1', 24).
mb_type('I_PCM', 25).
mb_type('B_Direct_16x16', 0).
mb_type('B_L0_16x16', 1).
mb_type('B_L1_16x16', 2).
mb_type('B_Bi_16x16', 3).
mb_type('B_L0_L0_16x8', 4).
mb_type('B_L0_L0_8x16', 5).
mb_type('B_L1_L1_16x8', 6).
mb_type('B_L1_L1_8x16', 7).
mb_type('B_L0_L1_16x8', 8).
mb_type('B_L0_L1_8x16', 9).
mb_type('B_L1_L0_16x8', 10).
mb_type('B_L1_L0_8x16', 11).
mb_type('B_L0_Bi_16x8', 12).
mb_type('B_L0_Bi_8x16', 13).
mb_type('B_L1_Bi_16x8', 14).
mb_type('B_L1_Bi_8x16', 15).
mb_type('B_Bi_L0_16x8', 16).
mb_type('B_Bi_L0_8x16', 17).
mb_type('B_Bi_L1_16x8', 18).
mb_type('B_Bi_L1_8x16', 19).
mb_type('B_Bi_Bi_16x8', 20).
mb_type('B_Bi_Bi_8x16', 21).
mb_type('B_8x8', 22).
% sum_offsets/3
sum_offsets(N, N, 0).
sum_offsets(I, N, Sum) :-
I #< N,
I1 #= I + 1,
sum_offsets(I1, N, PartialSum),
domain(f(offset_for_ref_frame(I)), Offset),
Sum #= PartialSum + Offset.
% type/1
type(f(luma_log2_weight_denom), ue(v)).
type(f(chroma_log2_weight_denom), ue(v)).
type(f(luma_weight_l0_flag), u(1)).
type(f(luma_weight_l0(_I)), se(v)).
type(f(luma_offset_l0(_I)), se(v)).
type(f(chroma_weight_l0_flag), u(1)).
type(f(luma_weight_l1_flag(_I)), u(1)).
type(f(luma_weight_l1(_I)), se(v)).
type(f(luma_offset_l1(_I)), se(v)).
type(f(chroma_weight_l1_flag(_I)), u(1)).
type(f(mb_type), ue(v)).
type(f(pcm_alignment_zero_bit), f(1)).
type(f(pcm_sample_luma(_I)), u(v)).
type(f(pcm_sample_chroma(_I)), u(v)).
type(f(transform_size_8x8_flag), u(1)).
type(f(coded_block_pattern), me(v)).
type(f(mb_qp_delta), se(v)).
type(f(svc_vui_parameters_present_flag), u(1)).
type(f(bit_equal_to_one), f(1)).
type(f(mvc_vui_parameters_present_flag), u(1)).
type(f(additional_extension2_flag), u(1)).
type(f(additional_extension2_data_flag), u(1)).
type(f(delta_scale(_J)), se(v)).
type(f(primary_pic_type), u(3)).
type(f(seq_parameter_set_id), ue(v)).
type(f(aux_format_idc), ue(v)).
type(f(bit_depth_aux_minus8), ue(v)).
type(f(alpha_incr_flag), u(1)).
type(f(alpha_opaque_value), u(v)).
type(f(alpha_transparent_value), u(v)).
type(f(additional_extension_flag), u(1)).
type(f(slice_id), ue(v)).
type(f(colour_plane_id), u(2)).
type(f(redundant_pic_cnt), ue(v)).
type(f(ref_pic_list_modification_flag_l0), u(1)).
type(f(modification_of_pic_nums_idc(_I)), ue(v)).
type(f(abs_diff_pic_num_minus1), ue(v)).
type(f(long_term_pic_num), ue(v)).
type(f(ref_pic_list_modification_flag_l1), u(1)).
type(f(prev_intra4x4_pred_mode_flag(_)), u(1)).
type(f(rem_intra4x4_pred_mode(_)), u(3)).
type(f(prev_intra8x8_pred_mode_flag(_)), u(1)).
type(f(rem_intra8x8_pred_mode(_)), u(3)).
type(f(intra_chroma_pred_mode), ue(v)).
type(f(ref_idx_l0(_)), te(v)).
type(f(ref_idx_l1(_)), te(v)).
type(f(cabac_zero_word), f(16)).
type(f(no_output_of_prior_pics_flag), u(1)).
type(f(long_term_reference_flag), u(1)).
type(f(adaptive_ref_pic_marking_mode_flag), u(1)).
type(f(memory_management_control_operation), ue(v)).
type(f(difference_of_pic_nums_minus1), ue(v)).
type(f(long_term_frame_idx), ue(v)).
type(f(max_long_term_frame_idx_plus1), ue(v)).
type(f(cabac_alignment_one_bit), u(1)).
type(f(mb_skip_run), ue(v)).
type(f(mb_skip_flag), ae(v)).
type(f(end_of_slice_flag), ae(v)).
type(f(last_payload_type_byte), u(8)).
type(f(last_payload_size_byte), u(8)).
type(f(pic_parameter_set_id), ue(v)).
type(f(entropy_coding_mode_flag), u(1)).
type(f(bottom_field_pic_order_in_frame_present_flag), u(1)).
type(f(num_slice_groups_minus1), ue(v)).
type(f(slice_group_map_type), ue(v)).
type(f(run_length_minus1(_IGroup)), ue(v)).
type(f(top_left(_IGroup)), ue(v)).
type(f(bottom_right(_IGroup)), ue(v)).
type(f(slice_group_change_direction_flag), u(1)).
type(f(slice_group_change_rate_minus1), ue(v)).
type(f(pic_size_in_map_units_minus1), ue(v)).
type(f(slice_group_id(_I)), u(v)). % Length is variable, determined by num_slice_groups_minus1
type(f(more_rbsp_data), u(1)).
type(f(seq_scaling_matrix_present_flag), u(1)).
type(f(chroma_format_idc), ue(v)).
type(f(num_ref_idx_l0_default_active_minus1), ue(v)).
type(f(num_ref_idx_l1_default_active_minus1), ue(v)).
type(f(weighted_pred_flag), u(1)).
type(f(weighted_bipred_idc), u(2)).
type(f(pic_init_qp_minus26), se(v)).
type(f(pic_init_qs_minus26), se(v)).
type(f(chroma_qp_index_offset), se(v)).
type(f(deblocking_filter_control_present_flag), u(1)).
type(f(constrained_intra_pred_flag), u(1)).
type(f(redundant_pic_cnt_present_flag), u(1)).
type(f(transform_8x8_mode_flag), u(1)).
type(f(pic_scaling_matrix_present_flag), u(1)).
type(f(pic_scaling_list_present_flag(_I)), u(1)).
type(f(second_chroma_qp_index_offset), se(v)).
type(f(profile_idc), u(8)).
type(f(constraint_set0_flag), u(1)).
type(f(constraint_set1_flag), u(1)).
type(f(constraint_set2_flag), u(1)).
type(f(constraint_set3_flag), u(1)).
type(f(constraint_set4_flag), u(1)).
type(f(constraint_set5_flag), u(1)).
type(f(reserved_zero_2bits), u(2)).
type(f(level_idc), u(8)).
type(f(chroma_format_idc), ue(v)).
type(f(separate_colour_plane_flag), u(1)).
type(f(bit_depth_luma_minus8), ue(v)).
type(f(bit_depth_chroma_minus8), ue(v)).
type(f(qpprime_y_zero_transform_bypass_flag), u(1)).
type(f(seq_scaling_matrix_present_flag), u(1)).
type(f(seq_scaling_list_present_flag(_)), u(1)).
type(f(log2_max_frame_num_minus4), ue(v)).
type(f(pic_order_cnt_type), ue(v)).
type(f(log2_max_pic_order_cnt_lsb_minus4), ue(v)).
type(f(delta_pic_order_always_zero_flag), u(1)).
type(f(offset_for_non_ref_pic), se(v)).
type(f(offset_for_top_to_bottom_field), se(v)).
type(f(num_ref_frames_in_pic_order_cnt_cycle), ue(v)).
type(f(offset_for_ref_frame(_)), se(v)).
type(f(max_num_ref_frames), ue(v)).
type(f(gaps_in_frame_num_value_allowed_flag), u(1)).
type(f(pic_width_in_mbs_minus1), ue(v)).
type(f(pic_height_in_map_units_minus1), ue(v)).
type(f(frame_mbs_only_flag), u(1)).
type(f(mb_adaptive_frame_field_flag), u(1)).
type(f(direct_8x8_inference_flag), u(1)).
type(f(frame_cropping_flag), u(1)).
type(f(frame_crop_left_offset), ue(v)).
type(f(frame_crop_right_offset), ue(v)).
type(f(frame_crop_top_offset), ue(v)).
type(f(frame_crop_bottom_offset), ue(v)).
type(f(vui_parameters_present_flag), u(1)).
type(f(coeff_token), ce(v)).
type(f(trailing_ones_sign_flag(_I)), u(1)).
type(f(level_prefix(_I)), ce(v)).
type(f(level_suffix(_I)), u(v)).
type(f(total_zeros), ce(v)).
type(f(run_before(_I)), ce(v)).
type(f(coded_block_flag), ae(v)).
type(f(significant_coeff_flag(_I)), ae(v)).
type(f(last_significant_coeff_flag(_I)), ae(v)).
type(f(delta_pic_order_cnt(1)), se(v)).
type(f(direct_spatial_mv_pred_flag), u(1)).
type(f(num_ref_idx_active_override_flag), u(1)).
type(f(num_ref_idx_l0_active_minus1), ue(v)).
type(f(num_ref_idx_l1_active_minus1), ue(v)).
type(f(cabac_init_idc), ue(v)).
type(f(slice_qp_delta), se(v)).
type(f(sp_for_switch_flag), u(1)).
type(f(slice_qs_delta), se(v)).
type(f(disable_deblocking_filter_idc), ue(v)).
type(f(slice_alpha_c0_offset_div2), se(v)).
type(f(slice_beta_offset_div2), se(v)).
type(f(slice_group_change_cycle), u(v)).
type(f(rbsp_stop_one_bit), f(1)).
type(f(rbsp_alignment_zero_bit), f(1)).
type(f(sub_mb_type(_)), ue(v)).
type(f(frame_mbs_only_flag), u(1)).
type(f(frame_crop_left_offset), ue(v)).
type(f(frame_crop_right_offset), ue(v)).
type(f(frame_crop_top_offset), ue(v)).
type(f(frame_crop_bottom_offset), ue(v)).
type(f(slice_group_change_rate_minus1), ue(v)).
type(f(mb_adaptive_frame_field_flag), u(1)).
type(f(field_pic_flag), u(1)).
type(f(pic_init_qp_minus26), se(v)).
type(f(slice_qp_delta), se(v)).
type(f(pic_init_qs_minus26), se(v)).
type(f(slice_qs_delta), se(v)).
type(f(slice_alpha_c0_offset_div2), se(v)).
type(f(slice_beta_offset_div2), se(v)).
type(f(slice_group_change_cycle), ue(v)).
type(f(coded_block_pattern), ue(v)).
type(f(mb_qp_delta), se(v)).
type(f(qpprime_y_zero_transform_bypass_flag), u(1)).
type(f(chroma_weight_l0(_I, _J)), se(v)).
type(f(chroma_offset_l0(_I, _J)), se(v)).
type(f(chroma_weight_l1(_I, _J)), se(v)).
type(f(chroma_offset_l1(_I, _J)), se(v)).
type(f(mvd_l0(_, _)), se(v)).
type(f(mvd_l1(_, _)), se(v)).
type(f(mvd_l0(_, _, _)), se(v)).
type(f(mvd_l1(_, _, _)), se(v)).
type(f(ff_byte), u(8)).
dTotalCoeff.
</div>
<div class="nb-cell markdown" name="md3">
## Main program
</div>
<div class="nb-cell program" data-background="true" data-below="true" name="p3">
:- use_module(library(clpfd)).
:- dynamic provided_value/2.
% TYPES SPECIFICATION
type_range(u(S), 0..U) :- U is 2^S-1.
type_range(ue, 0..sup).
type_range(ue(v), 0..sup).
type_range(s(S), 0..U) :- U is 2^S-1.
type_range(se(v), inf..sup).
range(F, XS) :- F, type(F, T), type_range(T, R), constraints(F, X), X in R, fd_dom(X, XS).
range(F, XS) :- F, type(F, T), type_range(T, R), \+ constraints(F, _X), X in R, fd_dom(X, XS).
set_value(F, _X) :- provided_value(F, _), writeln("Value already set"), fail.
set_value(F, X) :-
\+ provided_value(F, _X),
nonvar(X),
(depends_on(F, Deps) ->
forall(member(M, Deps), provided_value(M, _Y));
true
),
domain(F, Dom), X #= Dom,
assertz(provided_value(F, X)).
is_calculable(F) :-
(depends_on(F, Deps) ->
forall(member(M, Deps), is_calculable(M));
provided_value(F, _)
).
domain(F, X) :- provided_value(F, X), !.
domain(F, X) :- \+ provided_value(F, _X), \+ is_calculable(F), range(F, R), X in R, !.
domain(F, X) :- \+ provided_value(F, _X), findall(Y, (calculate(F, D), fd_set(D, Y)), Ranges), foldl(fdset_union, Ranges, empty, Union), X in_set Union.
% HELPERS
is_bitstream_field(Field) :-
\+ calculate(Field, _).
is_bitstream_field(Field) :-
calculate(Field, _),
default_value(Field, _).
is_derived_field(Field) :-
calculate(Field, _),
\+ default_value(Field, _).
is_dependent_field(Field) :-
calculate(Field, _).
is_field_term(Field) :- (is_bitstream_field(Field); is_derived_field(Field)).
% PRINT DERIVATION
calculation_formula(F, Value, Body) :-
clause(calculate(F, Value), Body),
Body.
calculation_formula(F, Value, Body) :-
clause(calculate(F, Value), Body).
calculation_formula(F, (calculate(F, Value) :- Body)) :-
clause(calculate(F, Value), Body).
explain_derivation(Field) :-
explain_derivation(Field, [], 0).
explain_derivation(Field, _Visited, _Depth) :-
is_bitstream_field(Field), !.
explain_derivation(Field, Visited, Depth) :-
\+ member(Field, Visited),
depends_on(Field, UsedFields),
forall(member(UsedField, UsedFields),
explain_derivation(UsedField, [Field|Visited], Depth+1)),
findall(Formula, calculation_formula(Field, Formula), Formulas),
sort(Formulas, UniqueFormulas), % Remove duplicates
format('=================== FIELD ====================== ~n'),nl,
forall(member(Formula, UniqueFormulas),
(portray_clause(Formula))), nl, nl.
% MERMAID
generate_mermaid_graph(Field) :-
writeln('graph TD'),
generate_edges(Field),
nl.
generate_edges(Field) :-
depends_on(Field, Dependencies),
generate_edge(Field, Dependencies),
true.
generate_edge(f(_Field), []) :- true.
generate_edge(f(Field), [f(H)|T]) :-
format(' ~w --> ~w~n', [H, Field]),
generate_edge(f(Field), T),
(is_dependent_field(f(H)) ->
generate_edges(f(H));
true
).
</div>
<div class="nb-cell markdown" name="md6">
## Queries
</div>
<div class="nb-cell markdown" name="md4">
### Printing all valid values for `CroppedWidthC` and `ChromaArrayType` fields
</div>
<div class="nb-cell query" name="q2">
domain(f(dCroppedWidthC), CroppedWidthC),
domain(f(dChromaArrayType), ChromaArrayType).
</div>
<div class="nb-cell markdown" name="md1">
### Printing all valid values for `CroppedWidthC` and `ChromaArrayType` in "main" profile
</div>
<div class="nb-cell query" name="q1">
set_value(f(profile_idc), 77),
set_value(f(frame_cropping_flag), 0),
domain(f(dCroppedWidthC), CroppedWidthC),
domain(f(dChromaArrayType), ChromaArrayType).
</div>
<div class="nb-cell markdown" name="md8">
### Generating Mermaid graph showing relationship between the fields
</div>
<div class="nb-cell query" name="q3">
generate_mermaid_graph(f(dCroppedWidthC)).
</div>
<div class="nb-cell markdown" name="md10">
### Printing formulas needed for field value calculation
</div>
<div class="nb-cell query" name="q4">
explain_derivation(f(dChromaArrayType)).
</div>
<div class="nb-cell markdown" name="md9">
## Bottom line
If you want to create your own query, you can use the rules and facts defined in the database: `f/1`, `f/2`, `type/2`, `constraints/2`, `depends_on/2` and `calculate/2`.
To refer to a "bitstream field" (one with name written in snake_case) with name `field_name` you need to use `f(field_name)` clause, while to refer to a "derived field" (one with names written in PascalCase) with name `DerivedFieldName` you need to use `f(dDerivedFieldName)` (please note the `d` prefix which is necessary since Prolog treats all the names starting with capital letter as variables).
</div>
</div>