通过阅读【MLT】MLT多媒体框架生产消费架构解析(一)满足以下两点:
本文将对【MLT】MLT多媒体框架生产消费架构解析(一)中提到的生产消费流程中的生产者加工环节如何添加视频滤镜做解析,如下图:
【MLT】MLT多媒体框架生产消费架构解析(一)中只是简单演示了生产者(初始化了一个视频资源)被消费者(初始化为SDL)消费的简单过程。如上图所示,对生产者加工的过程引入了两个新的封装:Service(服务抽象基类)+ Filter(滤镜抽象服务类)。本节只对我们即将使用的方法做简单介绍,后续会完整对这两个封装作分析。
// 服务抽象基类
/**
* @brief attach 注册滤镜服务的方法
* @param filter 要注册的滤镜服务
* @return 返回注册的错误码
*/
int attach( Filter &filter );
/**
* @brief detach 反注册滤镜服务的方法
* @param filter 要反注册的滤镜服务
* @return 返回反注册的错误码
*/
int detach( Filter &filter );
// 创建马赛克滤镜
Mlt::Filter *filter = new Mlt::Filter(profile, "frei0r.pixeliz0r");
// 使用从父类Service中继承的订阅能力添加滤镜
producer.attach(*filter);
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");
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链接