MCPcopy Create free account
hub / github.com/FFmpeg/FFmpeg / skip_mode_params

Function skip_mode_params

libavcodec/av1dec.c:268–334  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

266}
267
268static 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 }

Callers 1

get_current_frameFunction · 0.85

Calls 1

get_relative_distFunction · 0.85

Tested by

no test coverage detected