Avidemux/Kaynak dosya notları

Kitabın bu sayfasının amacı dışarıdaki ve içerideki programcılara herhangi bir yama veya özelliğin nereye yazılması gerektiğini anlatmak ve genel anlamda kaynak kod dosyaları ve amaçları konusunda bilgi vermektir. Avidemux'taki dosyalar birden fazla iş yapma eğilimindedir, bu yüzden buradaki bilgiler her zaman dosyanın fonksiyonlarının tamamını anlatmayabilir.

Genel notlar

değiştir

Avidemux C++ dili ile yazılmış ancak STL kullanılmamıştır, ancak bu genel anlamda çok önemli bir şey değildir. Avidemux, GTK+ grafik kütüphaneleriyle inşa edilmiştir. Avidemux'un son sürümünde proje yönetimi için SpiderMonkey ECMAScript betik motoru Avidemux'a eklenmiştir. Şimdilik bu Avidemux tarafından direkt olarak çağrılamıyor. Avidemux'a kod eklemek veya mevcut kodunu değiştirmek için bu dilleri ve kütüphaneleri anlamak zorundasınız. ECMAScript, birkaç spesifik fonksiyon dışında nadiren kullanıldı, yani amacınız kodu değiştirmekse (yeni şeyler yazmak değilse) ECMAScript'i bilmek zorunda değilsiniz. Ancak C/C++ ve GTK+'ı ise bilmeniz gerekiyor.

Avidemux'u yazarken çok biçimlilik (polymorphism) ve sınıf türetme sıkça kullanılmıştır.

Genel mimari

değiştir

Herhangi bir işlem 3 parçadan oluşur:

  • Demuxer: Bütün demuxer'lar vidHeader sınıfından türetilmiştir ve bilgi ve erişim imkanları sağlarlar. Bu imkanlar arasında ardışık taramaya gerek kalmadan herhangi bir frame'e ve ilgili bayraklara erişmek de vardır.
  • Editör: Editörün görevi kodekleri demuxer'ın çıktısında sunulan akımlara eşlemektir. Editörün başka bir görevi de düzenlemeyi (ekleme, kesme, vb...) ve B-frame sıralama mantığını yönetmektir. GUI editörden bir frame ister, ve editör bütün mantığı tek başına yönetir. Genelde, yeni bir dosya formatı eklemek editörde değişiklik yapmaz.
  • Çıktı muxer'i: Bütün çıktı muxer'leri oplug_ ile başlayan klasörlerdedir ve her biri yalnızca bir dosya çıktı formatıyla ilgilenir.

Klasör: /avidemux/

değiştir
  • ADM_pp.cpp: Filtreyi postprocess etme kodu.
  • ADM_pp.h: Filtreyi postprocess etme kodu başlıkları.
  • gtk_gui.cpp: GUI'nin tamamını kontrol eder. Diğer çeşitli GUI diyalog ve girdilerine çağrılar yapar.

QuickTime, MP4, 3GPP girdi yönetimini içerir

  • ADM_3gp.cpp: Diğerleri arasında, QuickTime, MP4, 3GPP girdi formatlarını yönetir (demuxing, değişkenler).
  • ADM_3gp.h: Diğerleri arasında, QuickTime, MP4, 3GPP girdi formatlarını yönetir (demuxing, değişkenler).

ADM_audiofilter

değiştir

Mixer'le birlikte Ses filtre dosyalarını içerir (genelde ses kodeklerinin kendisinin kaynak kodunu içermez). Enkode (kodlama) işlemi bir filtre olarak gözükür,ses enkoderlerine (kodlayıcılarına) arayüzler de bu klasördedir.

  • audioencoder.cpp: Avidemux'taki genel ses işleme kodları
  • audioencoder.h: audioencoder.cpp dosyasının başlık kodları
  • audioencoder_faac.cpp: FAAC ses enkoderi kaynak kodu
  • audioencoder_faac.h: FAAC enkoderinin başlık kodu
  • audioencoder_lame.cpp: LAME ses enkoderi kaynak kodu
  • audioencoder_lame_param.h: LAME ses enkoderi için parametre başlık dosyası, ADM_dialog/DIA_lame.cpp'de kullanılmış ve #included edilmiştir
  • audioencoder_lavcodec.cpp:
  • audioencoder_lavcodec.h:
  • audioencoder_pcm.cpp: PCM ses enkoderi kaynak kodu
  • audioencoder_pcm.cpp: PCM ses enkoderi kaynak kodu için başlık kodu
  • audioencoder_twolame.cpp: TwoLAME ses enkoderi kaynak kodu
  • audioencoder_twolame.h: TwoLAME enkoderi için başlık
  • audioencoder_vorbis.cpp: Vorbis ses enkoderi kaynak kodu
  • audioencoder_vorbis.h: Vorbis ses enkoderi kaynak kodu için başlık kodu
  • audioencoder_vorbis_param.h: Vorbis ses enkoderi için parametre başlık dosyası, büyük ihtimalle ADM_dialog/DIA_vorbis.cpp'de kullanılmış ve #included edilmiştir.
  • audiofilter_mixer.cpp: Ses filtre mixer'i

ADM_audiocodec

değiştir

Çeşitli ses kodeklerine kodlama için dosyalar (sadece çözücü, kodlayıcılar için bu sayfanın bağlantı listesine bakın)

  • ADM_codecac3.cpp: AC3 ses yönetimi, Dolby'yi içeriyor
  • ADM_codecwma.cpp: WMA ses yönetimi

ADM_codecs

değiştir

Çeşitli video kodekleriyle kodlama için dosyalar

  • ADM_codecs.cpp: libavcodec ile video kodlarken/çözerken kullanım için bazı FourCC kodlarını saklar
  • ADM_ffmpeg.cpp: FFmpeg kodeklerinin kaynak kodları
  • ADM_x264.cpp: x264 kodlayıcısı
  • ADM_x264.h: x264 kodlayıcısı için bir başlık dosyası
  • ADM_xvid4.cpp: Xvid kodlayıcısı
  • ADM_xvid4.h: Xvid kodlayıcısı için bir başlık dosyası
  • ADM_ffmp43.cpp : FFmpeg libavcodec kütüphanesiyle ilgili çözücüler

ADM_dialog

değiştir

GUI diyalogları ve filtreler, kodek yapılandırmaları, tercihler, vb. için pencereler. GUI'yle ilgili şeylerin çoğu bu klasörde bulunur.

  • DIA_calculator.cpp: Bit oranı hesaplayıcı diyaloğu
  • DIA_crop.cpp: Kırpma video filtresi diyaloğu
  • DIA_defaultAudio.cpp: Ses kodekleri için varsayılan kullanıcı arayüzü diyaloğu
  • DIA_DVDff.cpp: FFmpeg MPEG-2 DVD diyaloğu
  • DIA_encoding.cpp: Kodlama bilgisi diyaloğu/penceresi
  • DIA_jobs_save.cpp: "Save to Joblist" diyaloğu
  • DIA_jobs.cpp: "Joblist" diyaloğu
  • DIA_lame.cpp: LAME ses kodlayıcısı diyaloğu
  • DIA_mcdeint.cpp: mcDeinterlace video filtresi diyaloğu
  • DIA_ocr.cpp: "OCR (VobSub -> srt)" alt yazıları diyalog penceresi
  • DIA_prefs.cpp: Tercihler diyaloğu
  • DIA_preview.cpp: Video ön izleme diyaloğu
  • DIA_properties.cpp: Video özellikleri diyaloğu
  • DIA_srt.cpp: Alt yazı filtresi diyaloğu
  • DIA_vcodec.cpp: Eski kodlama kodeki listesi açılır menüsü gibi gözükmektedir. Süresi geçmiş olabilir.
  • DIA_vobsub.cpp: VobSub alt yazı diyaloğu
  • DIA_vorbis.cpp: Vorbis ses kodeki açılır menüsü
  • DIA_working.cpp: Video kodlama durum penceresi
  • DIA_x264.cpp: x264 yapılandırma diyaloğu
  • DIA_xvid4.cpp: Xvid yapılandırma diyaloğu

ADM_encoder

değiştir

Yüksek seviye video kodlayıcılarını yöneten kaynak dosyaları içerir. Yüksek seviye kodlayıcılar, kullanılan kodek ne olursa olsun çekirdeğe aynı arayüzü sunarlar, 2-pass kodlaması için olan ayarları içsel yönetirler, bir soyutlama tabakası olarak görülebilirler.

  • ADM_encCodecDesc.h: Başlangıçta çalıştırılan varsayılan kodek değer ayarlarını içerir (GUI diyalogları için).
  • ADM_vidEncode.hxx: Kodek diyaloğu seçenekleri (2-pass dosya boyutu, 2-pass bit oranı, quantizer gibi). Başka fonksiyonlara parametre olarak geçerken kullanılacak kodek adlarını içerir.
  • adm_encffmpeg1.cpp: FFmpeg MPEG-1 kodlayıcısı
  • adm_encx264.cpp: x264 kodlayıcısının C++ implemantasyonu; kodlama, loglama ve bit oranı hesaplama gibi diğer fonksiyonlara yapılan bütün dahili Avidemux fonksiyon çağrılarını içerir.

ADM_filter

değiştir

Video filtreleri için yönetim kodunu (yükleme ve GUI'ler) içerir. Asıl video filtre dosyaları için bakınız: ADM_video.

  • filter_declaration.cpp: Dosyaların yükleme/bildirim işlemlerinin bazılarını yönetir.
  • video_filter.h: Video filtre adlarının, tanımlarının, yapılandırmalarının yükleme ve bildirim işlemlerinin bazılarını yönetir.

ADM_lavcodec

değiştir

libavcodec ve ilgili kodekler tarafından yönetilen birçok çeşitli kodek içerir.

ADM_lavformat

değiştir

FFmpeg'den dosya format kütüphanesidir. Tam olarak yalnızca MP4 olarak kaydederken kullanılır. MPEG(nbsp)TS çıktısı verirken kullanılan bazı ölü kodlar da vardır.

  • mov.c: QuickTime/MP4/3GP/... için okuma kısmı. Avidemux'la kullanılmamaktadır ancak bazı kodlar movenc.c ile paylaşılmaktadır. (movenc.c Avidemux'ta kullanılmaktadır.)
  • movenc.c: MP4 yazma kodunun birçoğu buradadır, MP3'ün saklandığından birazcık farklı saklanır.

ADM_library

değiştir

Frame'ler, resimler, dosya I/O, FourCC bilgisi ve RIFF ayrıştırıcı gibi çeşitli küçük ve büyük görevler için dosya koleksiyonu içerir

  • default.h: AMD64 fallback typedef ayarları hakkında bilgi içerir.

ADM_mplex

değiştir

Ses muxlama ve demuxlama ve ses akım bilgisi ve yönetimi için dosyalar ve genel ses yönetimiyle ilgili çeşitli kod parçaları içerir.

  • ADM_mthread.cpp: Bazı multithreaded multiplexing işlemleri
  • ADM_mthread.h: Yukarıdaki dosya için başlık
  • interact.cpp:

ADM_script

değiştir

ECMAScript/JavaScript scripting dosyaları ve kaynak kodu içerir.

  • ADM_JSAvidemuxAudio.cpp: yöneten kod

ADM_toolkit

değiştir

Çoğunlukla GTK+'la ilgili olan faydalı fonksiyonları içerir. UNIX fonksiyonlarını win32'de emüle etmek için bazı kodlar da vardır.

  • ADM_threads.cpp: Güvenilmez multithreading kodu
  • ADM_threads.h: Güvenilmez multithreading kodu
  • eggtray_win32.c: Win32 için animasyonlu simge
  • TLK_filesel.cpp: Dosya seçim fonksiyonları (okuma/yazma)

ADM_script

değiştir

Betikleri kontrol eder (çoğunlukla ECMAScript .js betiklerini).

ADM_video

değiştir

Video filtreleri için asıl kaynak dosyalarının çoğunu içerir.

Her filtre bir C++ sınıfı olarak belirtilmiştir. Bunların hepsi aynı sınıftan türetilmiştir. Hepsi bir girdi ve bir çıktı kullanırlar ve birlikte zincirlenmişlerdir.

Bir parametrenin ismi ve değeri arasında dönüşüm yapan Couples sınıfı aracılığıyla dış dünyayla yapılandırmalarını paylaşırlar. Filtrelerin çoğu MPlayer veya Avisynth'ten port edilmiştir. Avidemux'un internal'leri bu ikisine yakındır. Ayrıca Avisynth'e bir C emülasyon katmanı sağlayan kodlar da vardır, bu sayede port etme kolaylaşır.

  • ADM_vidMcDeint.cpp : mcDeinterlace filtresi için asıl kaynak kod