HEVC_SAMPLES =                  \
    AMP_A_Samsung_4             \
    AMP_A_Samsung_6             \
    AMP_B_Samsung_4             \
    AMP_B_Samsung_6             \
    AMP_D_Hisilicon             \
    AMP_E_Hisilicon             \
    AMP_F_Hisilicon_3           \
    AMVP_A_MTK_4                \
    AMVP_B_MTK_4                \
    AMVP_C_Samsung_4            \
    AMVP_C_Samsung_6            \
    BUMPING_A_ericsson_1        \
    CAINIT_A_SHARP_4            \
    CAINIT_B_SHARP_4            \
    CAINIT_C_SHARP_3            \
    CAINIT_D_SHARP_3            \
    CAINIT_E_SHARP_3            \
    CAINIT_F_SHARP_3            \
    CAINIT_G_SHARP_3            \
    CAINIT_H_SHARP_3            \
    CIP_A_Panasonic_3           \
    cip_B_NEC_3                 \
    CIP_C_Panasonic_2           \
    CONFWIN_A_Sony_1            \
    DBLK_A_SONY_3               \
    DBLK_B_SONY_3               \
    DBLK_C_SONY_3               \
    DBLK_D_VIXS_2               \
    DBLK_E_VIXS_2               \
    DBLK_F_VIXS_2               \
    DBLK_G_VIXS_2               \
    DELTAQP_A_BRCM_4            \
    DELTAQP_B_SONY_3            \
    DELTAQP_C_SONY_3            \
    DSLICE_A_HHI_5              \
    DSLICE_B_HHI_5              \
    DSLICE_C_HHI_5              \
    ENTP_A_Qualcomm_1           \
    ENTP_B_Qualcomm_1           \
    ENTP_C_Qualcomm_1           \
    EXT_A_ericsson_4            \
    FILLER_A_Sony_1             \
    HRD_A_Fujitsu_2             \
    HRD_A_Fujitsu_3             \
    INITQP_A_Sony_1             \
    ipcm_A_NEC_3                \
    ipcm_B_NEC_3                \
    ipcm_C_NEC_3                \
    ipcm_D_NEC_3                \
    ipcm_E_NEC_2                \
    IPRED_A_docomo_2            \
    IPRED_B_Nokia_3             \
    IPRED_C_Mitsubishi_3        \
    LS_A_Orange_2               \
    LS_B_ORANGE_4               \
    LTRPSPS_A_Qualcomm_1        \
    MAXBINS_A_TI_4              \
    MAXBINS_B_TI_4              \
    MAXBINS_C_TI_4              \
    MERGE_A_TI_3                \
    MERGE_B_TI_3                \
    MERGE_C_TI_3                \
    MERGE_D_TI_3                \
    MERGE_E_TI_3                \
    MERGE_F_MTK_4               \
    MERGE_G_HHI_4               \
    MVCLIP_A_qualcomm_3         \
    MVDL1ZERO_A_docomo_3        \
    MVEDGE_A_qualcomm_3         \
    NoOutPrior_A_Qualcomm_1     \
    NoOutPrior_B_Qualcomm_1     \
    NUT_A_ericsson_5            \
    OPFLAG_A_Qualcomm_1         \
    OPFLAG_B_Qualcomm_1         \
    OPFLAG_C_Qualcomm_1         \
    PICSIZE_A_Bossen_1          \
    PICSIZE_B_Bossen_1          \
    PICSIZE_C_Bossen_1          \
    PICSIZE_D_Bossen_1          \
    PMERGE_A_TI_3               \
    PMERGE_B_TI_3               \
    PMERGE_C_TI_3               \
    PMERGE_D_TI_3               \
    PMERGE_E_TI_3               \
    POC_A_Bossen_3              \
    PPS_A_qualcomm_7            \
    PS_A_VIDYO_3                \
    PS_B_VIDYO_3                \
    RAP_A_docomo_4              \
    RAP_B_Bossen_1              \
    RPLM_A_qualcomm_4           \
    RPLM_B_qualcomm_4           \
    RPS_A_docomo_4              \
    RPS_B_qualcomm_5            \
    RPS_C_ericsson_5            \
    RPS_D_ericsson_6            \
    RPS_E_qualcomm_5            \
    RPS_F_docomo_1              \
    RQT_A_HHI_4                 \
    RQT_B_HHI_4                 \
    RQT_C_HHI_4                 \
    RQT_D_HHI_4                 \
    RQT_E_HHI_4                 \
    RQT_F_HHI_4                 \
    RQT_G_HHI_4                 \
    SAO_A_MediaTek_4            \
    SAO_B_MediaTek_5            \
    SAO_C_Samsung_4             \
    SAO_C_Samsung_5             \
    SAO_D_Samsung_4             \
    SAO_D_Samsung_5             \
    SAO_E_Canon_4               \
    SAO_F_Canon_3               \
    SAO_G_Canon_3               \
    SDH_A_Orange_3              \
    SLICES_A_Rovi_3             \
    SLIST_A_Sony_4              \
    SLIST_B_Sony_8              \
    SLIST_C_Sony_3              \
    SLIST_D_Sony_9              \
    SLPPLP_A_VIDYO_1            \
    SLPPLP_A_VIDYO_2            \
    STRUCT_A_Samsung_5          \
    STRUCT_B_Samsung_4          \
    STRUCT_B_Samsung_6          \
    TILES_A_Cisco_2             \
    TILES_B_Cisco_1             \
    TMVP_A_MS_3                 \
    TSCL_A_VIDYO_5              \
    TSCL_B_VIDYO_4              \
    TSKIP_A_MS_3                \
    TUSIZE_A_Samsung_1          \
    VPSID_A_VIDYO_1             \
    VPSID_A_VIDYO_2             \
    WP_A_Toshiba_3              \
    WP_B_Toshiba_3              \
    WPP_A_ericsson_MAIN_2       \
    WPP_B_ericsson_MAIN_2       \
    WPP_C_ericsson_MAIN_2       \
    WPP_D_ericsson_MAIN_2       \
    WPP_E_ericsson_MAIN_2       \
    WPP_F_ericsson_MAIN_2       \

HEVC_SAMPLES_10BIT =            \
    DBLK_A_MAIN10_VIXS_3        \
    WP_A_MAIN10_Toshiba_3       \
    WP_MAIN10_B_Toshiba_3       \
    WPP_A_ericsson_MAIN10_2     \
    WPP_B_ericsson_MAIN10_2     \
    WPP_C_ericsson_MAIN10_2     \
    WPP_D_ericsson_MAIN10_2     \
    WPP_E_ericsson_MAIN10_2     \
    WPP_F_ericsson_MAIN10_2     \
    INITQP_B_Sony_1             \

HEVC_SAMPLES_422_10BIT =        \
    ADJUST_IPRED_ANGLE_A_RExt_Mitsubishi_1 \
    IPCM_A_RExt_NEC             \

HEVC_SAMPLES_422_10BIN =        \
    Main_422_10_A_RExt_Sony_1   \

HEVC_SAMPLES_422_10BIN_LARGE =  \
    Main_422_10_B_RExt_Sony_1   \

HEVC_SAMPLES_444_8BIT =         \
    QMATRIX_A_RExt_Sony_1       \

HEVC_SAMPLES_444_12BIT =        \
    IPCM_B_RExt_NEC             \
    PERSIST_RPARAM_A_RExt_Sony_1\
    PERSIST_RPARAM_A_RExt_Sony_3\

HEVC_SAMPLES_444_12BIT_LARGE =  \
    SAO_A_RExt_MediaTek_1       \


# equivalent bitstreams
# AMP_D_Hisilicon_3 -- AMP_D_Hisilicon
# AMP_E_Hisilicon_3 -- AMP_E_Hisilicon
# MVDL1ZERO_A_docomo_4 -- MVDL1ZERO_A_docomo_3
# RAP_A_docomo_5 -- RAP_A_docomo_4
# RAP_B_bossen_2 -- RAP_B_bossen_1
# RPS_A_docomo_5 -- RPS_A_docomo_4
# RPS_F_docomo_2 -- RPS_F_docomo_1

# do not pass:
# TSUNEQBD_A_MAIN10_Technicolor_2.bit (segfault mix 9-10bits)
# PERSIST_RPARAM_A_RExt_Sony_1 (rext)


define FATE_HEVC_TEST
FATE_HEVC += fate-hevc-conformance-$(1)
fate-hevc-conformance-$(1): CMD = framecrc -flags unaligned -vsync drop -i $(TARGET_SAMPLES)/hevc-conformance/$(1).bit -pix_fmt yuv420p
endef

define FATE_HEVC_TEST_10BIT
FATE_HEVC += fate-hevc-conformance-$(1)
fate-hevc-conformance-$(1): CMD = framecrc -flags unaligned -i $(TARGET_SAMPLES)/hevc-conformance/$(1).bit -pix_fmt yuv420p10le
endef

define FATE_HEVC_TEST_422_10BIT
FATE_HEVC += fate-hevc-conformance-$(1)
fate-hevc-conformance-$(1): CMD = framecrc -flags unaligned -i $(TARGET_SAMPLES)/hevc-conformance/$(1).bit -pix_fmt yuv422p10le
endef

define FATE_HEVC_TEST_422_10BIN
FATE_HEVC += fate-hevc-conformance-$(1)
fate-hevc-conformance-$(1): CMD = framecrc -flags unaligned -i $(TARGET_SAMPLES)/hevc-conformance/$(1).bin -pix_fmt yuv422p10le
endef

define FATE_HEVC_TEST_422_10BIN_LARGE
FATE_HEVC_LARGE += fate-hevc-conformance-$(1)
fate-hevc-conformance-$(1): CMD = framecrc -flags unaligned -i $(TARGET_SAMPLES)/hevc-conformance/$(1).bin -pix_fmt yuv422p10le
endef

define FATE_HEVC_TEST_444_8BIT
FATE_HEVC += fate-hevc-conformance-$(1)
fate-hevc-conformance-$(1): CMD = framecrc -flags unaligned -i $(TARGET_SAMPLES)/hevc-conformance/$(1).bit -pix_fmt yuv444p
endef

define FATE_HEVC_TEST_444_12BIT
FATE_HEVC += fate-hevc-conformance-$(1)
fate-hevc-conformance-$(1): CMD = framecrc -flags unaligned -i $(TARGET_SAMPLES)/hevc-conformance/$(1).bit -pix_fmt yuv444p12le
endef

define FATE_HEVC_TEST_444_12BIT_LARGE
FATE_HEVC_LARGE += fate-hevc-conformance-$(1)
fate-hevc-conformance-$(1): CMD = framecrc -flags unaligned -i $(TARGET_SAMPLES)/hevc-conformance/$(1).bit -pix_fmt yuv444p12le
endef

$(foreach N,$(HEVC_SAMPLES),$(eval $(call FATE_HEVC_TEST,$(N))))
$(foreach N,$(HEVC_SAMPLES_10BIT),$(eval $(call FATE_HEVC_TEST_10BIT,$(N))))
$(foreach N,$(HEVC_SAMPLES_422_10BIT),$(eval $(call FATE_HEVC_TEST_422_10BIT,$(N))))
$(foreach N,$(HEVC_SAMPLES_422_10BIN),$(eval $(call FATE_HEVC_TEST_422_10BIN,$(N))))
$(foreach N,$(HEVC_SAMPLES_422_10BIN_LARGE),$(eval $(call FATE_HEVC_TEST_422_10BIN_LARGE,$(N))))
$(foreach N,$(HEVC_SAMPLES_444_8BIT),$(eval $(call FATE_HEVC_TEST_444_8BIT,$(N))))
$(foreach N,$(HEVC_SAMPLES_444_12BIT),$(eval $(call FATE_HEVC_TEST_444_12BIT,$(N))))
$(foreach N,$(HEVC_SAMPLES_444_12BIT_LARGE),$(eval $(call FATE_HEVC_TEST_444_12BIT_LARGE,$(N))))

fate-hevc-paramchange-yuv420p-yuv420p10: CMD = framecrc -vsync 0 -i $(TARGET_SAMPLES)/hevc/paramchange_yuv420p_yuv420p10.hevc -sws_flags area+accurate_rnd+bitexact
FATE_HEVC_LARGE += fate-hevc-paramchange-yuv420p-yuv420p10

tests/data/hevc-mp4.mov: TAG = GEN
tests/data/hevc-mp4.mov: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data
	$(M)$(TARGET_EXEC) $(TARGET_PATH)/$< \
	-i $(TARGET_SAMPLES)/hevc-conformance/WPP_A_ericsson_MAIN10_2.bit -c copy -flags +bitexact $(TARGET_PATH)/$@ -y 2>/dev/null

FATE_HEVC-$(call ALLYES, HEVC_DEMUXER MOV_DEMUXER HEVC_MP4TOANNEXB_BSF MOV_MUXER HEVC_MUXER) += fate-hevc-bsf-mp4toannexb
fate-hevc-bsf-mp4toannexb: tests/data/hevc-mp4.mov
fate-hevc-bsf-mp4toannexb: CMD = md5 -i $(TARGET_PATH)/tests/data/hevc-mp4.mov -c:v copy -fflags +bitexact -f hevc
fate-hevc-bsf-mp4toannexb: CMP = oneline
fate-hevc-bsf-mp4toannexb: REF = 1873662a3af1848c37e4eb25722c8df9

fate-hevc-skiploopfilter: CMD = framemd5 -skip_loop_filter nokey -i $(TARGET_SAMPLES)/hevc-conformance/SAO_D_Samsung_5.bit -sws_flags bitexact
FATE_HEVC += fate-hevc-skiploopfilter

FATE_HEVC-$(call DEMDEC, HEVC, HEVC) += $(FATE_HEVC)
FATE_HEVC-$(call ALLYES, HEVC_DEMUXER HEVC_DECODER LARGE_TESTS) += $(FATE_HEVC_LARGE)

# this sample has two stsd entries and needs to reload extradata
FATE_HEVC-$(call DEMDEC, MOV, HEVC) += fate-hevc-extradata-reload

fate-hevc-extradata-reload: CMD = framemd5 -i $(TARGET_SAMPLES)/hevc/extradata-reload-multi-stsd.mov -sws_flags bitexact

fate-hevc-paired-fields: CMD = probeframes -show_entries frame=interlaced_frame,top_field_first $(TARGET_SAMPLES)/hevc/paired_fields.hevc
FATE_HEVC_FFPROBE-$(call DEMDEC, HEVC, HEVC) += fate-hevc-paired-fields

fate-hevc-monochrome-crop: CMD = probeframes -show_entries frame=width,height:stream=width,height $(TARGET_SAMPLES)/hevc/hevc-monochrome.hevc
FATE_HEVC_FFPROBE-$(call DEMDEC, HEVC, HEVC) += fate-hevc-monochrome-crop

fate-hevc-two-first-slice: CMD = threads=2 framemd5 -i $(TARGET_SAMPLES)/hevc/two_first_slice.mp4 -sws_flags bitexact -t 00:02.00 -an
FATE_HEVC-$(call DEMDEC, MOV, HEVC) += fate-hevc-two-first-slice

fate-hevc-cabac-tudepth: CMD = framecrc -flags unaligned -i $(TARGET_SAMPLES)/hevc/cbf_cr_cb_TUDepth_4_circle.h265 -pix_fmt yuv444p
FATE_HEVC-$(call DEMDEC, HEVC, HEVC) += fate-hevc-cabac-tudepth

FATE_SAMPLES_AVCONV += $(FATE_HEVC-yes)
FATE_SAMPLES_FFPROBE += $(FATE_HEVC_FFPROBE-yes)

fate-hevc: $(FATE_HEVC-yes) $(FATE_HEVC_FFPROBE-yes)