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

Function ff_me_init

libavcodec/motion_est.c:309–369  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

307}
308
309av_cold int ff_me_init(MotionEstContext *c, AVCodecContext *avctx,
310 const MECmpContext *mecc, int mpvenc)
311{
312 int cache_size = FFMIN(ME_MAP_SIZE>>ME_MAP_SHIFT, 1<<ME_MAP_SHIFT);
313 int dia_size = FFMAX(FFABS(avctx->dia_size) & 255, FFABS(avctx->pre_dia_size) & 255);
314 int ret;
315
316 if (FFMIN(avctx->dia_size, avctx->pre_dia_size) < -FFMIN(ME_MAP_SIZE, MAX_SAB_SIZE)) {
317 av_log(avctx, AV_LOG_ERROR, "ME_MAP size is too small for SAB diamond\n");
318 return AVERROR(EINVAL);
319 }
320
321 c->avctx = avctx;
322
323 if (avctx->codec_id == AV_CODEC_ID_H261)
324 avctx->me_sub_cmp = avctx->me_cmp;
325
326 if (cache_size < 2 * dia_size)
327 av_log(avctx, AV_LOG_INFO, "ME_MAP size may be a little small for the selected diamond size\n");
328
329 ret = ff_set_cmp(mecc, c->me_pre_cmp, avctx->me_pre_cmp, mpvenc);
330 ret |= ff_set_cmp(mecc, c->me_cmp, avctx->me_cmp, mpvenc);
331 ret |= ff_set_cmp(mecc, c->me_sub_cmp, avctx->me_sub_cmp, mpvenc);
332 ret |= ff_set_cmp(mecc, c->mb_cmp, avctx->mb_cmp, mpvenc);
333 if (ret < 0)
334 return ret;
335
336 c->sse = mecc->sse[0];
337 memcpy(c->pix_abs, mecc->pix_abs, sizeof(c->pix_abs));
338
339 c->flags = get_flags(c, 0, avctx->me_cmp & FF_CMP_CHROMA);
340 c->sub_flags = get_flags(c, 0, avctx->me_sub_cmp & FF_CMP_CHROMA);
341 c->mb_flags = get_flags(c, 0, avctx->mb_cmp & FF_CMP_CHROMA);
342
343 if (avctx->codec_id == AV_CODEC_ID_H261) {
344 c->sub_motion_search = no_sub_motion_search;
345 } else if (avctx->flags & AV_CODEC_FLAG_QPEL) {
346 c->sub_motion_search= qpel_motion_search;
347 }else{
348 if(c->avctx->me_sub_cmp&FF_CMP_CHROMA)
349 c->sub_motion_search= hpel_motion_search;
350 else if( c->avctx->me_sub_cmp == FF_CMP_SAD
351 && c->avctx-> me_cmp == FF_CMP_SAD
352 && c->avctx-> mb_cmp == FF_CMP_SAD)
353 c->sub_motion_search= sad_hpel_motion_search; // 2050 vs. 2450 cycles
354 else
355 c->sub_motion_search= hpel_motion_search;
356 }
357
358 /* 8x8 fullpel search would need a 4x4 chroma compare, which we do
359 * not have yet, and even if we had, the motion estimation code
360 * does not expect it. */
361 if (avctx->codec_id != AV_CODEC_ID_SNOW) {
362 if ((avctx->me_cmp & FF_CMP_CHROMA) /* && !c->me_cmp[2] */)
363 c->me_cmp[2] = zero_cmp;
364 if ((avctx->me_sub_cmp & FF_CMP_CHROMA) && !c->me_sub_cmp[2])
365 c->me_sub_cmp[2] = zero_cmp;
366 }

Callers 3

encode_initFunction · 0.85
svq1_encode_initFunction · 0.85
me_cmp_initFunction · 0.85

Calls 3

av_logFunction · 0.85
ff_set_cmpFunction · 0.85
get_flagsFunction · 0.85

Tested by

no test coverage detected