return AVERROR_INVALIDDATA;
s->system_start_code = get_bits(gb, 8);
- if (s->system_start_code == 0x01) {
+ // T/UWA 005.1-2022, table 11
+ if (s->system_start_code >= 0x01 && s->system_start_code <= 0x07) {
s->num_windows = 1;
if (get_bits_left(gb) < 12 * 4 * s->num_windows)
tm_params->base_param_k2 = get_bits(gb, 2);
tm_params->base_param_k3 = get_bits(gb, 4);
tm_params->base_param_Delta_enable_mode = get_bits(gb, 3);
- if (tm_params->base_param_Delta_enable_mode == 2 || tm_params->base_param_Delta_enable_mode == 6)
- tm_params->base_param_Delta = (AVRational){get_bits(gb, 7) * -1, base_param_Delta_den};
- else
- tm_params->base_param_Delta = (AVRational){get_bits(gb, 7), base_param_Delta_den};
+ tm_params->base_param_Delta = (AVRational){get_bits(gb, 7), base_param_Delta_den};
+ }
+ if (get_bits_left(gb) < 1)
+ return AVERROR_INVALIDDATA;
+ tm_params->three_Spline_enable_flag = get_bits(gb, 1);
+ if (tm_params->three_Spline_enable_flag) {
+ AVHDRVivid3SplineParams *three_spline;
- if (get_bits_left(gb) < 1)
+ if (get_bits_left(gb) < 1 + tm_params->three_Spline_num * (2 + 12 + 28 + 1))
return AVERROR_INVALIDDATA;
- tm_params->three_Spline_enable_flag = get_bits(gb, 1);
- if (tm_params->three_Spline_enable_flag) {
- if (get_bits_left(gb) < 1 + tm_params->three_Spline_num * (2 + 12 + 28 + 1))
- return AVERROR_INVALIDDATA;
- tm_params->three_Spline_num = get_bits(gb, 1) + 1;
- for (int j = 0; j < tm_params->three_Spline_num; j++) {
- tm_params->three_Spline_TH_mode = get_bits(gb, 2);
- if (tm_params->three_Spline_TH_mode == 0 || tm_params->three_Spline_TH_mode == 2) {
- if (get_bits_left(gb) < 8)
- return AVERROR_INVALIDDATA;
- tm_params->three_Spline_TH_enable_MB = (AVRational){get_bits(gb, 8), 255};
- }
- tm_params->three_Spline_TH_enable = (AVRational){get_bits(gb, 12), 4095};
- tm_params->three_Spline_TH_Delta1 = (AVRational){get_bits(gb, 10), 1023};
- tm_params->three_Spline_TH_Delta2 = (AVRational){get_bits(gb, 10), 1023};
- tm_params->three_Spline_enable_Strength = (AVRational){get_bits(gb, 8), 255};
+ tm_params->three_Spline_num = get_bits(gb, 1) + 1;
+ if (tm_params->three_Spline_num > FF_ARRAY_ELEMS(tm_params->three_spline))
+ return AVERROR_INVALIDDATA;
+ for (int j = 0; j < tm_params->three_Spline_num; j++) {
+ three_spline = &tm_params->three_spline[j];
+ three_spline->th_mode = get_bits(gb, 2);
+ if (three_spline->th_mode == 0 || three_spline->th_mode == 2) {
+ if (get_bits_left(gb) < 8)
+ return AVERROR_INVALIDDATA;
+ three_spline->th_enable_mb = (AVRational){get_bits(gb, 8), 255};
}
- } else {
- tm_params->three_Spline_num = 1;
- tm_params->three_Spline_TH_mode = 0;
+ three_spline->th_enable = (AVRational){get_bits(gb, 12), 4095};
+ three_spline->th_delta1 = (AVRational){get_bits(gb, 10), 1023};
+ three_spline->th_delta2 = (AVRational){get_bits(gb, 10), 1023};
+ three_spline->enable_strength = (AVRational){get_bits(gb, 8), 255};
}
-
+#if FF_API_HDR_VIVID_THREE_SPLINE
+ three_spline = &tm_params->three_spline[0];
+FF_DISABLE_DEPRECATION_WARNINGS
+ tm_params->three_Spline_TH_mode = three_spline->th_mode;
+ tm_params->three_Spline_TH_enable_MB = three_spline->th_enable_mb;
+ tm_params->three_Spline_TH_enable = three_spline->th_enable;
+ tm_params->three_Spline_TH_Delta1 = three_spline->th_delta1;
+ tm_params->three_Spline_TH_Delta2 = three_spline->th_delta2;
+ tm_params->three_Spline_enable_Strength = three_spline->enable_strength;
+FF_ENABLE_DEPRECATION_WARNINGS
+#endif
}
}
}