| 266 | } |
| 267 | |
| 268 | static void skip_mode_params(AV1DecContext *s) |
| 269 | { |
| 270 | const AV1RawFrameHeader *header = s->raw_frame_header; |
| 271 | const AV1RawSequenceHeader *seq = s->raw_seq; |
| 272 | |
| 273 | int forward_idx, backward_idx; |
| 274 | int forward_hint, backward_hint; |
| 275 | int second_forward_idx, second_forward_hint; |
| 276 | int ref_hint, dist, i; |
| 277 | |
| 278 | if (header->frame_type == AV1_FRAME_KEY || |
| 279 | header->frame_type == AV1_FRAME_INTRA_ONLY || |
| 280 | !header->reference_select || !seq->enable_order_hint) |
| 281 | return; |
| 282 | |
| 283 | forward_idx = -1; |
| 284 | backward_idx = -1; |
| 285 | for (i = 0; i < AV1_REFS_PER_FRAME; i++) { |
| 286 | if (!s->ref[header->ref_frame_idx[i]].raw_frame_header) |
| 287 | return; |
| 288 | ref_hint = s->ref[header->ref_frame_idx[i]].raw_frame_header->order_hint; |
| 289 | dist = get_relative_dist(seq, ref_hint, header->order_hint); |
| 290 | if (dist < 0) { |
| 291 | if (forward_idx < 0 || |
| 292 | get_relative_dist(seq, ref_hint, forward_hint) > 0) { |
| 293 | forward_idx = i; |
| 294 | forward_hint = ref_hint; |
| 295 | } |
| 296 | } else if (dist > 0) { |
| 297 | if (backward_idx < 0 || |
| 298 | get_relative_dist(seq, ref_hint, backward_hint) < 0) { |
| 299 | backward_idx = i; |
| 300 | backward_hint = ref_hint; |
| 301 | } |
| 302 | } |
| 303 | } |
| 304 | |
| 305 | if (forward_idx < 0) { |
| 306 | return; |
| 307 | } else if (backward_idx >= 0) { |
| 308 | s->cur_frame.skip_mode_frame_idx[0] = |
| 309 | AV1_REF_FRAME_LAST + FFMIN(forward_idx, backward_idx); |
| 310 | s->cur_frame.skip_mode_frame_idx[1] = |
| 311 | AV1_REF_FRAME_LAST + FFMAX(forward_idx, backward_idx); |
| 312 | return; |
| 313 | } |
| 314 | |
| 315 | second_forward_idx = -1; |
| 316 | for (i = 0; i < AV1_REFS_PER_FRAME; i++) { |
| 317 | ref_hint = s->ref[header->ref_frame_idx[i]].raw_frame_header->order_hint; |
| 318 | if (get_relative_dist(seq, ref_hint, forward_hint) < 0) { |
| 319 | if (second_forward_idx < 0 || |
| 320 | get_relative_dist(seq, ref_hint, second_forward_hint) > 0) { |
| 321 | second_forward_idx = i; |
| 322 | second_forward_hint = ref_hint; |
| 323 | } |
| 324 | } |
| 325 | } |
no test coverage detected