FFMPEG-Bewegungskompensation und -Suche

FFMPEG-Bewegungskompensation und -Suche

Ich versuche, den Bewegungserkennungsteil von FFMPEG zu ändern. Ich möchte den Suchraum erweitern, sodass der Makroblock, wenn er den äußersten rechten Rand des Rahmens erreicht, immer noch nach links verschoben werden muss, als wären sie verbunden (in meinen Beispielvideos ist der rechte Rand tatsächlich eine Fortsetzung des linken Rands). Kann mir jemand sagen, wo genau ich das im FFMPEG-Quellcode oder in x265 oder x264 ändern kann?

Bildbeschreibung hier eingeben

Als Beispiel habe ich H265 genommen ausHier. Es gibt eine motion.cDatei, die die möglichen Blockgrößen wie unten gezeigt genau angibt, aber ich kann die spezifische Schleife, die den Rahmen durchläuft, nicht finden. Hilfe ist sehr willkommen.

#define SETUP_SCALE(W, H) \
    sizeScale[LUMA_ ## W ## x ## H] = (H * H) >> 4;
    SETUP_SCALE(4, 4);
    SETUP_SCALE(8, 8);
    SETUP_SCALE(8, 4);
    SETUP_SCALE(4, 8);
    SETUP_SCALE(16, 16);
    SETUP_SCALE(16, 8);
    SETUP_SCALE(8, 16);
    SETUP_SCALE(16, 12);
    SETUP_SCALE(12, 16);
    SETUP_SCALE(4, 16);
    SETUP_SCALE(16, 4);
    SETUP_SCALE(32, 32);
    SETUP_SCALE(32, 16);
    SETUP_SCALE(16, 32);
    SETUP_SCALE(32, 24);
    SETUP_SCALE(24, 32);
    SETUP_SCALE(32, 8);
    SETUP_SCALE(8, 32);
    SETUP_SCALE(64, 64);
    SETUP_SCALE(64, 32);
    SETUP_SCALE(32, 64);
    SETUP_SCALE(64, 48);
    SETUP_SCALE(48, 64);
    SETUP_SCALE(64, 16);
    SETUP_SCALE(16, 64);
#undef SETUP_SCALE

Ein einfacher Pseudocode sollte wie folgt aussehen:

block.rightX ==block.width; // a block initiates from left part of the frame
while(block.leftX <=frame.width) //until it hits the right most edge (assuming it moves from left to right for search)
for (int i=0;i<block.width();i++)
    for(int j=0;j< i<block.height();j++)
        block[i][j] = frame_pixel [(block.leftX+i) % frame.width] [block.leftY+j] //if the block's width passes frame's width, we just take the mod.

verwandte Informationen