我们看一下jpegenc的Capabilities
Pad Templates:
SINK template: 'sink'
Availability: Always
Capabilities:
video/x-raw
format: { (string)I420, (string)YV12, (string)YUY2, (string)UYVY, (string)Y41B, (string)Y42B, (string)YVYU, (string)Y444, (string)NV21, (string)NV12, (string)RGB, (string)BGR, (string)RGBx, (string)xRGB, (string)BGRx, (string)xBGR, (string)GRAY8 }
上篇文章里,我们提到的一个pipe:
appsrc - avdec_h264 - videoconvert - jpegenc - multifilesink
实际上这个pipe里面,如果把videoconvert去掉,也是可以正常工作的。
我们打印一下jpegenc的实际的sinkpad,发现format是I420.
Caps for the sink pad:
video/x-raw
format: I420
如果我想让jpegenc的sinkpad的format是RGB,应该怎么来实现?你会发现jpegenc是没有caps属性设置的,为什么appsrc有caps属性呢?其实这个想一下也能明白,如果有jpegenc有caps属性,那到底是设置src还是sink的caps呢?
我们可以在中间拼接一个capsfilter,设置capsfilter的caps属性:
appsrc - avdec_h264 - videoconvert - capsfilter - jpegenc - multifilesink
g_object_set(G_OBJECT(filter), "caps",
gst_caps_new_simple("video/x-raw", "format", G_TYPE_STRING,
"RGB", NULL),
NULL);
在运行一下程序,打印一下jpegenc的sinkpad:
Caps for the sink pad:
video/x-raw
format: RGB
使用probe获取一下sink流过的数据大小,发现的确是width * height * 3.
Enjoy!