【MLT】MLTマルチメディアフレームワークの生産・消費アーキテクチャの分析(3)

前提

  1. [MLT] MLT Multimedia Framework Production and Consumption Architecture の分析 (1) を読むと、次の 2 点が満たされます。
    1. MLT のコア C++ パッケージの階層関係を理解する
    2. MLT の Consumer (sdl) を使用してMasterを使用して Producer (MP4) を消費する
  2. [MLT] MLT マルチメディア フレームワークの生産と消費のアーキテクチャの分析 (2) を読むと、次の 2 点が満たされます。
    1. Service (サービス抽象基本クラス) と Filter (フィルター抽象サービス クラス) を理解する
    2. プロデューサーにフィルターを追加するマスター

この記事から何が得られますか?

この記事では、 [MLT] MLT Multimedia Framework Production and Consumption Architecture Analysis (2)に基づいて、プロデューサーにアタッチされたフィルターの幅と高さの属性を次のように変換します。
ここに画像の説明を挿入

コアクラス分析

プロパティ

ここに画像の説明を挿入

[MLT] MLT マルチメディア フレームワーク (1) の生産および消費アーキテクチャの分析は、生産者 (ビデオ リソースとして初期化) が消費者 (SDL として初期化) によって消費される単純なプロセスを示しています。[MLT] MLT マルチメディア フレームワークの生産と消費のアーキテクチャの分析 (2) (1) では、ビデオ プロデューサーを単純に処理し、ビデオ フィルターを追加します。上の図に示すように、このセクションでは、フィルター設定プロパティの新しいカプセル化を導入します:プロパティ (プロパティ クラス) 。これは、サービスと通信するための一般的なメカニズムを提供し、サービスの状態を操作およびシリアル化できますこのセクションでは、使用するメソッドを簡単に紹介するだけで、プロパティのカプセル化については後で完全に分析します。

// 属性类

// 此类重载了大量的序列化的方法,供各种各样的场景使用
/**
* @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 );

プロデューサーのフィルターを追加する

// 创建马赛克滤镜
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);

鬼の展示

フィルター (モザイク) 効果を変更する

  1. フィルターは幅のみに設定されています
    画像の説明を追加してください
  2. フィルターは高さのみに設定されています
    画像の説明を追加してください

コード

    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();

アフィリエイトコードのダウンロードリンク

ソースコードのダウンロード リンク

参考文献

[1] MLT github リンク

おすすめ

転載: blog.csdn.net/MichaelKongChina/article/details/126307431