Multithreading ile C üzerinde video framelerini almak

Katılım
26 Ocak 2020
Mesajlar
6.368
Makaleler
1
Çözümler
13
Yer
İstanbul
Bir video oynatici uzerinde çalışıyorum bir süredir. C ile yazdım ve şu an 150FPS çalışabiliyor. Fakat bu değer ffmpeg ile videoyu framelere ayirip bir klasore onceden yerlestirmissem gecerli sadece. Bunu bir terminal uygulamasi yapmak istiyorum o yüzden her video için diskte alan olusturmak hiç guzel bir yontem değil.

RAM'e aktarabilirim videoyu uygulama içerisinden fakat bu durumda da inanilmaz boyutta RAM ihtiyacı oluşacak.

Örnek: 10dk, 24FPS, 360p video.
10*60*24*3*640*360 byte=
10~gb RAM demek.

Bu durumda aklıma belli bir sayıda framei RAM'de saklayıp, işleyip sonra diğer framelere geçmek geldi. Ayni anda Max 10, 20 frame falan tutulacak RAM üzerinde. Fakat burada da şöyle bir sorun var ffmpeg 24 FPS video oynatimina yetişecek kadar hizli output veremiyor. 150FPS'den bahsetmiyorum bile.

Bu durumda aklıma gelen son seçenek multithreading oldu. Bir thread frameleri alirken digeri isleyecek. Örneğin ayni anda 5 frame isliyoruz diyelim. 5 frame almak için bir threade komut vereceğiz ve o onunla ugrasirken biz önceki 5 framei isleyeceğiz. Bu sekilde devam edecek.

Fakat daha önce ffmpegin C kullanimi ve multithreading kütüphaneleri hakkinda hiçbir şey yapmadigimdan bu kisim nasıl olacak emin değilim. Bana herhangi bir fikir/kaynak/yol verebilir misiniz acaba?
 
iki thread tanımla producer ve consumer diye ek olarak bir de queue tanımla producer frameleri ayarlayıp queue push etsin consumer thread içinde de bu queue deki ilk elemanla gerekli islemleri yapıp queue den pop etsin. C dilinde yerlesik bir thread library yok isletim sisteminin apileriyle olusturman gerek. mutex, race condition, deadlock vb. gibi kavramlari da arastir. Queue nedir bilmiyorsan veri yapıları ve algoritmalar konularına göz at. Spesifik bir kaynak öneremem.
 
iki thread tanımla producer ve consumer diye ek olarak bir de queue tanımla producer frameleri ayarlayıp queue push etsin consumer thread içinde de bu queue deki ilk elemanla gerekli islemleri yapıp queue den pop etsin. C dilinde yerlesik bir thread library yok isletim sisteminin apileriyle olusturman gerek. mutex, race condition, deadlock vb. gibi kavramlari da arastir. Queue nedir bilmiyorsan veri yapıları ve algoritmalar konularına göz at. Spesifik bir kaynak öneremem.
Teşekkürler dediginiz seyleri inceleyeceğim.
 

Technopat Haberler

Yeni konular

Geri
Yukarı