我最近遇到了一个同事的代码,看起来像这样:
typedef struct A {
int x;
}A;
typedef struct B {
A a;
int d;
}B;
void fn(){
B *b;
((A*)b)->x = 10;
}
Run Code Online (Sandbox Code Playgroud)
他的解释是,因为它struct A是第一个成员struct B,所以b->x会b->a.x提供更好的可读性.
这是有道理的,但这被认为是好的做法吗?这会跨平台工作吗?目前这在GCC上运行良好.
据我了解,gst_parse_launch()基于描述管道的命令行语法创建了一个新管道。它会自动处理请求填充(有时是填充等)的所有复杂细节并构建管道。
所以我的问题是,为什么不一直使用它?为什么要添加垫添加处理程序,请求和链接垫等?
是否有使用gst_parse_launch()不会做的情况?
我正在使用以下管道播放传输流文件 (*.ts):
gst-launch-0.10 playbin2 uri=file:///c:/bbb.ts
Run Code Online (Sandbox Code Playgroud)
但我需要自己将其转换为管道。我不确定如何实现这一目标。
到目前为止,我已经尝试过:(工作正常)
gst-launch-0.10 -v filesrc location=c:/bbb.ts ! tsdemux ! audio/x-ac3 ! fakesink
Run Code Online (Sandbox Code Playgroud)
但是,如果我用 autoaudiosink 替换 fakesink,它会因未链接错误而失败。
甚至 fakesink 也不适用于视频:
gst-launch-0.10 -v filesrc location=c:/bbb.ts ! tsdemux ! video/x-mpeg2 ! fakesink
Run Code Online (Sandbox Code Playgroud)
所以我有两个问题: