[MLT] Analyse der Produktions- und Verbrauchsarchitektur des MLT Multimedia Framework (3)

Prämisse

  1. Durch das Lesen von [MLT] Analysis of MLT Multimedia Framework Production and Consumption Architecture (1) werden die folgenden zwei Punkte erfüllt:
    1. Verstehen Sie die hierarchische Beziehung des C++-Kernpakets von MLT
    2. Master , der MLTs Consumer (sdl) verwendet, um Producer (MP4) zu konsumieren
  2. Durch das Lesen von [MLT] Analysis of MLT Multimedia Framework Production and Consumption Architecture (2) werden die folgenden zwei Punkte erfüllt:
    1. Service (Basisklasse der abstrakten Dienste) und Filter (abstrakte Dienstklasse des Filters) verstehen
    2. 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:
Bildbeschreibung hier einfügen

Kernklassenanalyse

Eigenschaften

Bildbeschreibung hier einfügen

[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).

  1. Der Filter ist nur auf Breite gesetzt
    Bitte Bildbeschreibung hinzufügen
  2. Der Filter ist nur auf die Höhe eingestellt
    Bitte Bildbeschreibung hinzufügen

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

Je suppose que tu aimes

Origine blog.csdn.net/MichaelKongChina/article/details/126307431
conseillé
Classement