FFMPEG運動補償和搜索

FFMPEG運動補償和搜索

我正在嘗試修改 FFMPEG 的運動偵測部分。我想要做的是擴展搜尋空間,以便每當宏塊到達幀的最右邊緣時,我仍然需要它將該塊移向最左邊,就好像它們已連接一樣(在我的示例視頻中,右邊緣實際上是左邊緣的延續)。有人可以幫我指出我可以在 FFMPEG 原始碼或 x265 或 x264 中修改它的確切位置嗎?

在此輸入影像描述

我以H265為例這裡。它有一個motion.c檔案很好地指定了可能的區塊大小,如下所示,但我找不到遍歷幀的特定循環。非常感謝您的幫忙。

#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

基本的偽代碼應該是這樣的:

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.

相關內容