小编Chr*_*ris的帖子

使用FFmpeg录制具有未知帧率的视频

我正在使用FFmpeg录制视频,我希望它写入的帧速率至少在正确的球场.现在我采用输入声称拥有的帧速率,并使用它来设置输出视频流的帧速率(time_base).然而,这有时与我得到的实际帧速率大不相同(我看到一个流声称50 fps但以9 fps发布).

我想要做的是使用经过时间的计时器并计算我记录的帧数来计算我在完成录制时记录的实际帧速率.我似乎在我编写任何帧之前,我在AVStream中设置的帧速率在avcodec_open2中使用.如果我稍后设置它(例如在我写帧的时候),而ffplay可以播放它(抱怨时间增量位是6而不是4)其他视频播放器不能.有没有办法写入帧设置整个文件的帧速率?如果没有办法在我录制时告诉帧本身某种时间戳或帧速率会产生有效的录制文件?

ffmpeg frame-rate video-recording libavcodec libavformat

10
推荐指数
1
解决办法
798
查看次数

具有copy-on-write的多态类的QList?

我正在尝试创建仍然使用Qt的隐式共享的多态类型的QList .

我的具体用例是将QList中保存的项传递给QtConcurrent :: mapped.这些项都来自一个基类,它定义了QtConcurrent :: mapped将调用的虚函数.大多数存储的数据将是特定于子类的.线程开始后可以编辑这些项目,留下两个主要选项,锁定或复制数据.我不想坚持使用锁,因为这会消除使用额外线程的大部分目的.同样制作我的数据的完整副本似乎也是不可取的.相反,我想使用Qt的隐式共享来制作我更改的数据项的副本,但是我似乎无法制作仍然使用隐式共享的多态类型的QList.

QList默认使用隐式共享,所以乍一看似乎我们已经完成了.

QList<Base> list;
Derived derived_obj;
list.append(derived_obj); // this fails
Run Code Online (Sandbox Code Playgroud)

但是,将子类附加到父类的QList将不起作用,标准答案是使用QSharedPointers的QList到基类,它将接受附加指向子类的指针.

QList<QSharedPointer<Base> > pointer_list;
QSharedPointer<Derived> derived_pointer;
pointer_list.append(derived_pointer); // this works but there is no copy-on-write
Run Code Online (Sandbox Code Playgroud)

如果我使用QSharedPointers的QList,那么将复制QSharedPointer而不是我的多态类,这意味着我已经失去了我想要的写时复制功能.

我还研究了使用QSharedDataPointers的QList .

QList<QSharedDataPointer<Base> > data_pointer_list;
QSharedDataPointer<Derived> derived_data_pointer;
list.append(derived_data_pointer); // this fails
Run Code Online (Sandbox Code Playgroud)

但是像QList本身一样,QSharedDataPointers似乎不接受多态类型.

c++ polymorphism qt copy-on-write qlist

6
推荐指数
1
解决办法
371
查看次数