小编pea*_*212的帖子

FFMPEG I/O输出缓冲区

我目前在尝试将原始H264 nal数据包封装到mp4容器中时遇到问题.但是,我想将结果存储在内存中,而不是将它们写入磁盘.我使用libavcodec在mpegts容器中遵循这种方法原始H264帧但到目前为止还没有成功.

首先,这是写入内存的正确方法吗?我的标题中有一个小结构

struct IOOutput {
    uint8_t* outBuffer;
    int bytesSet;
};
Run Code Online (Sandbox Code Playgroud)

我初始化缓冲区和bytesset.然后我初始化我的AVIOContext变量

AVIOContext* pIOCtx = avio_alloc_context(pBuffer, iBufSize, 1, outptr, NULL, write_packet, NULL);
Run Code Online (Sandbox Code Playgroud)

其中outptr是指向IOOutput输出的void指针,write_packet如下所示

int write_packet (void *opaque, uint8_t *buf, int buf_size) {
    IOOutput* out = reinterpret_cast<IOOutput*>(opaque);
    memcpy(out->outBuffer+out->bytesSet, buf, buf_size);
    out->bytesSet+=buf_size;
    return buf_size;
}
Run Code Online (Sandbox Code Playgroud)

我接着说

fc->pb = pIOCtx;
fc->flags = AVFMT_FLAG_CUSTOM_IO;
Run Code Online (Sandbox Code Playgroud)

在我的AVFormatContext*fc变量上.

然后,每当我从帧中编码nal数据包时,我通过av_interleaved_write_frame将它们写入AVFormatContext,然后通过以下方式获取mp4内容

void getBufferContent(char* buffer) {
    memcpy(buffer, output.outBuffer, output.bytesSet);
    output.bytesSet=0;
}
Run Code Online (Sandbox Code Playgroud)

因此重置变量bytesSet,因此在下一次写操作期间,将在缓冲区的开头插入字节.有一个更好的方法吗?这实际上是一种有效的方法吗?如果我只调用av_interleaved_write_frame和avformat_write_header来添加数据包,FFMPEG是否会执行任何读取操作?

非常感谢你提前!

编辑

这是关于多路复用过程的代码 - 在我的编码功能中我有类似的东西

int frame_size = x264_encoder_encode(obj->mEncoder, &obj->nals, &obj->i_nals, obj->pic_in, obj->pic_out);
int …
Run Code Online (Sandbox Code Playgroud)

c c++ ffmpeg

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

半边塌陷

我目前正在尝试实现半边折叠以执行增量重新网格化。我正在处理流形网格。考虑以下简单网格:

在此输入图像描述

目标是将 a 折叠成 b。

在此输入图像描述

然而,在这种情况下,这会导致非流形网格

在此输入图像描述

我想阻止这一点。我的问题是:

我怎样才能提前做到这一点,即在崩溃之前执行检查崩溃操作是否安全?

我已经尝试过 Hoppe 的标准(链接条件),但看起来两者都已满足。此外,a 和 b 的一环的唯一交点是 c,因此只有一个点,因为它是边界边缘。

另外一般来说,我还需要执行哪些其他检查以避免非法倒塌?

现在,我有以下标准:

  • 如果 a 和 b 是边界顶点,则边 ab 必须是边界边
  • a、b 和与边 ab 相邻的三角形的第三个顶点必须是有效三角形(链接条件)
  • 如果与边 ab 相邻的三角形是边界三角形,如果 a 在边界边上,则不折叠
  • 如果 a-1-ring 和 b-1-ring 的交集不等于 2(或者边界边为 1),则不折叠

criteria mesh

4
推荐指数
1
解决办法
2926
查看次数

标签 统计

c ×1

c++ ×1

criteria ×1

ffmpeg ×1

mesh ×1