Analyse der Produktions- und Verbrauchsarchitektur des MLT Multimedia Framework
Prämisse
- Durch das Lesen von [MLT] Analysis of MLT Multimedia Framework Production and Consumption Architecture (1) werden die folgenden zwei Punkte erfüllt:
- Verstehen Sie die hierarchische Beziehung des C++-Kernpakets von MLT
- Master , der MLTs Consumer (sdl) verwendet, um Producer (MP4) zu konsumieren
- Durch das Lesen von [MLT] Analysis of MLT Multimedia Framework Production and Consumption Architecture (2) werden die folgenden zwei Punkte erfüllt:
- Service (Basisklasse der abstrakten Dienste) und Filter (abstrakte Dienstklasse des Filters) verstehen
- Meister , der Filter zum Produzenten hinzufügt
Was kann ich diesem Artikel entnehmen?
In diesem Artikel werden die Breiten- und Höhenattribute des Filters, der an den Produzenten angehängt ist, auf der Grundlage von [MLT] MLT Multimedia Framework Production and Consumption Architecture Analysis (2) transformiert, wie unten gezeigt:
Kernklassenanalyse
Eigenschaften
[MLT] Die Analyse der Produktions- und Verbrauchsarchitektur des MLT-Multimedia-Frameworks (1) zeigt einfach den einfachen Prozess, bei dem der Produzent (als Videoressource initialisiert) vom Verbraucher (als SDL initialisiert) konsumiert wird. [MLT] Analyse der Produktions- und Verbrauchsarchitektur des MLT-Multimedia-Rahmenwerks (2) In (1) wird der Videoproduzent einfach verarbeitet und ein Videofilter hinzugefügt. Wie in der obigen Abbildung gezeigt, führt dieser Abschnitt eine neue Kapselung für die Filtereinstellungseigenschaften ein: Properties (Eigenschaftsklasse) , die einen allgemeinen Mechanismus für die Kommunikation mit dem Service bereitstellt, und wir können den Service state manipulieren und serialisieren . Dieser Abschnitt stellt nur kurz die Methoden vor, die wir verwenden werden, und wir werden die Eigenschaftskapselung später vollständig analysieren.
// 属性类
// 此类重载了大量的序列化的方法,供各种各样的场景使用
/**
* @brief set 序列化方法
* @param name 要设置的属性key
* @param value 属性值(char*)
* @return 是否设置成功的错误码
*/
int set( const char *name, const char *value );
/**
* @brief set_string 序列化方法
* @param name 要设置的属性key
* @param value 属性值(char*)
* @return 是否设置成功的错误码
*/
int set_string( const char *name, const char *value );
/**
* @brief set 序列化方法
* @param name 要设置的属性key
* @param value 属性值(int)
* @return 是否设置成功的错误码
*/
int set( const char *name, int value );
/**
* @brief set 序列化方法
* @param name 要设置的属性key
* @param value 属性值(int64_t)
* @return 是否设置成功的错误码
*/
int set( const char *name, int64_t value );
/**
* @brief set 序列化方法
* @param name 要设置的属性key
* @param value 属性值(double)
* @return 是否设置成功的错误码
*/
int set( const char *name, double value );
/**
* @brief set 序列化方法
* @param name 要设置的属性key
* @param value 属性值(double)
* @param size 默认传0
* @param destroy 析构方法
* @param serial 序列化方法
* @return 是否设置成功的错误码
*/
int set( const char *name, void *value, int size, mlt_destructor destroy = NULL, mlt_serialiser serial = NULL );
/**
* @brief set 序列化方法
* @param name 要设置的属性key
* @param value 属性值(mlt_color)
* @return 是否设置成功的错误码
*/
int set( const char *name , mlt_color value );
/**
* @brief set 序列化方法
* @param name 要设置的属性key
* @param value 属性值(mlt_rect)
* @return 是否设置成功的错误码
*/
int set( const char *name, mlt_rect value );
/**
* @brief set 序列化方法
* @param name 要设置的属性key
* @param x x值
* @param y y值
* @param w width值
* @param h height值
* @param opacity opacity值
* @return 是否设置成功的错误码
*/
int set( const char *name, double x, double y, double w, double h, double opacity = 1.0 );
/**
* @brief set 序列化方法
* @param name 要设置的属性key
* @param properties 属性值(Properties)
* @return
*/
int set( const char *name, Properties& properties );
Filter für Produzenten hinzufügen
// 创建马赛克滤镜
Mlt::Filter *filter = new Mlt::Filter(profile, "frei0r.pixeliz0r");
// 使用从属性类继承的序列化能力对马赛克滤镜的宽高属性进行设置
filter->set(qUtf8Printable("0"), 0.000); // width不做变化
filter->set(qUtf8Printable("1"), 0.300); // height做变化
// 使用从父类Service中继承的订阅能力添加滤镜
producer.attach(*filter);
Dämonenanzeige
Ändern Sie den Effekt Filter (Mosaik).
- Der Filter ist nur auf Breite gesetzt
- Der Filter ist nur auf die Höhe eingestellt
Code
Profile profile; // defaults to dv_pal
Producer producer(profile, filename);
Consumer consumer(profile); // defaults to sdl
Mlt::Filter *filter = new Mlt::Filter(profile, "frei0r.pixeliz0r");
filter->set(qUtf8Printable("0"), 0.300);
filter->set(qUtf8Printable("1"), 0.300);
producer.attach(*filter);
// Prevent scaling to the profile size.
// Let the sdl consumer do all scaling.
consumer.set("rescale", "none");
// Automatically exit at end of file.
consumer.set("terminate_on_pause", 1);
consumer.connect(producer);
consumer.run();
consumer.stop();
Partnercode-Download-Link
Link zum Herunterladen des Quellcodes
Verweise
[1] MLT-Github-Link