static int decode_nal_sei_prefix(HEVCContext *s, int type, int size) { GetBitContext *gb = &s->HEVClc->gb; switch (type) { case 256: // Mismatched value from HM 8.1 return decode_nal_sei_decoded_picture_hash(s); case SEI_TYPE_FRAME_PACKING: return decode_nal_sei_frame_packing_arrangement(s); case SEI_TYPE_DISPLAY_ORIENTATION: return decode_nal_sei_display_orientation(s); case SEI_TYPE_PICTURE_TIMING: { int ret = decode_pic_timing(s); av_log(s->avctx, AV_LOG_DEBUG, "Skipped PREFIX SEI %d\n", type); skip_bits(gb, 8 * size); return ret; } case SEI_TYPE_ACTIVE_PARAMETER_SETS: active_parameter_sets(s); av_log(s->avctx, AV_LOG_DEBUG, "Skipped PREFIX SEI %d\n", type); return 0; case SEI_TYPE_USER_DATA_REGISTERED_ITU_T_T35: return decode_nal_sei_user_data_registered_itu_t_t35(s, size); default: av_log(s->avctx, AV_LOG_DEBUG, "Skipped PREFIX SEI %d\n", type); skip_bits_long(gb, 8 * size); return 0; } }
static int decode_nal_sei_message(HEVCContext *s) { GetBitContext *gb = &s->HEVClc->gb; int payload_type = 0; int payload_size = 0; int byte = 0xFF; av_log(s->avctx, AV_LOG_DEBUG, "Decoding SEI\n"); while (byte == 0xFF) { byte = get_bits(gb, 8); payload_type += byte; } byte = 0xFF; while (byte == 0xFF) { byte = get_bits(gb, 8); payload_size += byte; } if (s->nal_unit_type == NAL_SEI_PREFIX) { if (payload_type == 256 /*&& s->decode_checksum_sei*/) { decode_nal_sei_decoded_picture_hash(s); } else if (payload_type == 45) { decode_nal_sei_frame_packing_arrangement(s); } else if (payload_type == 47) { decode_nal_sei_display_orientation(s); } else if (payload_type == 1){ int ret = decode_pic_timing(s); av_log(s->avctx, AV_LOG_DEBUG, "Skipped PREFIX SEI %d\n", payload_type); skip_bits(gb, 8 * payload_size); return ret; } else if (payload_type == 129){ active_parameter_sets(s); av_log(s->avctx, AV_LOG_DEBUG, "Skipped PREFIX SEI %d\n", payload_type); } else { av_log(s->avctx, AV_LOG_DEBUG, "Skipped PREFIX SEI %d\n", payload_type); skip_bits(gb, 8*payload_size); } } else { /* nal_unit_type == NAL_SEI_SUFFIX */ if (payload_type == 132 /* && s->decode_checksum_sei */) decode_nal_sei_decoded_picture_hash(s); else { av_log(s->avctx, AV_LOG_DEBUG, "Skipped SUFFIX SEI %d\n", payload_type); skip_bits(gb, 8 * payload_size); } } return 1; }