Saya mencoba untuk memodifikasi bagian deteksi gerak FFMPEG. Yang ingin saya lakukan adalah memperluas ruang pencarian, sehingga setiap kali makroblok menyentuh tepi paling kanan bingkai, saya perlu tetap memindahkan blok ke arah paling kiri seolah-olah mereka terhubung (dalam contoh video saya, tepi kanan sebenarnya merupakan kelanjutan dari tepi kiri). Dapatkah seseorang membantu saya menunjukkan di mana tepatnya saya dapat memodifikasinya dalam kode sumber FFMPEG atau x265, atau x264?
Saya mengambil H265 sebagai contoh dari sini . Ini memiliki motion.c
file yang dengan baik menentukan ukuran blok yang mungkin seperti yang ditunjukkan di bawah ini, tetapi saya tidak dapat menemukan loop spesifik yang melintasi bingkai. Bantuan sangat dihargai.
#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
Kode pseudo dasar harus seperti ini:
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.