Closed lulor closed 2 years ago
Al momento occorre ancora:
AudioConverter
che inglobi il buffer FIFO ed il resamplerAVFrame
e AVPacket
per poter utilizzare il paradigma RAII ed evitare di dover fare de-allocazioni manuali. La funzione unref
di AVPacket
potrebbe essere problematica e si può valutare se includerla in fillPacket
di Demuxer
Alla fine non ho creato una classe per ogni struttura, ma ho aggiunto un paio di struct
template in deleter.h ed alcuni alias in common.h per poter gestire più comodamente gli smart pointers della libreria standard. L'idea è presa da qua.
Alcune strutture come AVDictionary
secondo me non possono essere gestire in modo furbo con degli smart pointers visto che quasi tutte le funzioni ne richiedono il puntatore a puntatore, perciò le ho lasciate così.
Ho provato a registrare qualche minuto di video e il consumo di RAM di sembra abbastanza costante, quindi non dovrebbero esserci leaks.
In generale ho cercato di seguire questo schema per i puntatori:
unique_ptr
shared_ptr
Non sono però ben sicuro di che modello di possesso dare ai pacchetti/frame restituiti dalle varie strutture dati (per ora ci sono degli shared_ptr
)
Sarebbe comodo non dover gestire esplicitamente i puntatori grezzi e il rilascio della memoria, ma non saprei quale approccio abbia più senso.
shared_ptr
di C++ passando de-allocatori customAVPacket
,AVFrame
etc. Sarebbe più complesso ma permetterebbe di spostare alcune logiche e operazioni all'interno degli oggetti e magari potrebbe fare comodo, ma non vorrei rischiare di complicare il tutto eccessivamente. L'idea sarebbe questa