- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将 AVFrames 收集到数组中,然后释放它们,但这会导致内存泄漏。
extern "C" {
#include <libavutil/frame.h>
#include <libavutil/imgutils.h>
}
#include <vector>
#include <iostream>
AVFrame * createFrame() {
int width = 1280;
int height = 720;
AVPixelFormat format = AV_PIX_FMT_YUV420P;
int buffer_size = av_image_get_buffer_size(format, width, height, 1);
uint8_t * buffer = (uint8_t *)av_malloc(buffer_size * sizeof(uint8_t));
memset(buffer, 1, buffer_size);
uint8_t *src_buf[4];
int src_linesize[4];
av_image_fill_arrays(src_buf, src_linesize, buffer, format, width, height, 1);
AVFrame * frame = av_frame_alloc();
frame->width = width;
frame->height = height;
frame->format = format;
av_frame_get_buffer(frame, 0);
av_image_copy(frame->data, frame->linesize,
const_cast<const uint8_t**>(src_buf), const_cast<const int*>(src_linesize),
format, width, height);
av_free(buffer);
return frame;
}
int main(int argc, char *argv[]) {
uint32_t count = 1024;
// fill array with frames
std::vector<AVFrame*> list;
for (uint64_t i = 0; i < count; ++i) {
list.push_back(createFrame());
}
// allocated 1385 mb in heap
// clear all allocated data
for (auto i = list.begin(); i < list.end(); ++i) {
if (*i != NULL) {
av_frame_free(&(*i));
}
}
list.clear();
// memory-leak of > 360 Mb
}
最佳答案
您可以直接使用av_image_fill_arrays
关于新分配的AVFrame
像这样:
av_image_fill_arrays(frame->data, /* destination */
frame->linesize, /* destination */
buffer, /* source */
format, /* source */
width, /* source & alingment */
height, 1);
av_free(buffer);
在
createFrame
任何一个。功能
av_image_fill_arrays
不分配任何缓冲区。只使用现有的;
av_frame_free
在
main()
会照顾释放。
av_image_fill_arrays
Setup the data pointers and linesizes based on the specified image parameters and the provided array.
The fields of the given image are filled in by using the src address which points to the image data buffer. Depending on the specified pixel format, one or multiple image data pointers and line sizes will be set. If a planar format is specified, several pointers will be set pointing to the different picture planes and the line sizes of the different planes will be stored in the lines_sizes array. Call with src == NULL to get the required size for the src buffer.
To allocate the buffer and fill in the dst_data and dst_linesize in one call, use av_image_alloc().
关于ffmpeg - 将 AVFrame 收集到缓冲区中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61006755/
我的总体想法是 frame.data[]根据视频的像素格式(RGB 或 YUV)来解释。但是有什么通用的方法可以从帧中获取所有像素数据吗?我只想计算帧数据的哈希值,而不是解释它来显示图像。 根据 AV
我有一个简单的 C++ 应用程序,它使用 FFmpeg 3.2 接收 H264 RTP 流。为了节省CPU,我使用编解码器h264_cuvid进行解码部分。我的 FFmpeg 3.2 是在启用硬件加速
我正在使用 av_frame_alloc() 函数创建 AVFrame 对象并使用内部调用 av_frame_unref() 的 av_frame_free(&frame) 清除它,但它没有正确清理内
我正在编写一个使用 FFMPEG 的应用程序我需要一种方法来旋转 AVFrame s 为 90、180 和 270 度,因为相机的位置可能不同。我听说有过滤器可以做类似的事情。我读了filtering
我处理来自 AVFrame.data 的原始数据。此帧的像素格式为 AV_PIX_FMT_YUV420P。我想了解此数据位于哪个值范围内。 似乎 UV(在 YUV 方案中)必须在 [-128, 128
我使用 Win32 API 实现了一个桌面录制程序。视频捕获功能有效,但我不知道将音频放入 FFmpeg 编码器的数据结构中。 下面的代码将获取默认输出音频的数据。 // Set wave forma
我想打印出视频帧的一些属性:我研究了 AVFrame 结构,但只发现了以下令人失望的地方: attribute_deprecated short * dct_coeff attribute_de
我正在使用 libav(为 MSVC 构建的 2.7)使用 dshow 打开相机: input_format = av_find_input_format("dshow"); avformat_ope
我在将原始视频数据写入 AVFrame 时遇到段错误和/或超出范围的内存写入,因此无法使用 ffmpeg 库对视频进行编码。因此,我只想问我的一个假设是否正确。 我是否正确假设 AVFrame.dat
为了方便管理AVFrame资源,我想把AVFrame转成class,但是不知道怎么写我的复制构造函数和赋值函数用默认的AVFrame(使用av_frame_alloc()来分配)。 最佳答案 你有两个
我将 AVFrames 收集到数组中,然后释放它们,但这会导致内存泄漏。 extern "C" { #include #include } #include #include AVFrame
我想通过使用 ffmpeg 的功能而不是命令行实用程序在 AVFrame 上绘制视频叠加层,如线条、圆形、矩形和打印文本。 有没有人知道怎么做? 你有这个函数的源代码吗? 最佳答案 当我开始处理视频流
我想从一个特殊的框架(比方说pic)制作一个备份框架(AVFrame)。所以,我写了 AVFrame* bkf = avcodec_alloc_frame(); memcpy(bkf,pic,si
我尝试将原始 PCM 声音编码为 G711A 和 G711U,然后对其进行解码,使用此编解码器一切正常,因为我可以为 AVCodecContext frame_size 选择任何值进行编码,但在 Op
我试图理解 AVFrame,特别是 linesize 属性。 这是我解码的 AVFrame 属性: width = 640 height= 360 linesize[0] = 640 linesize
我试图找到 AVFrame.linesize[] 的每个单元格的含义,但我没有找到。 据我了解,linesize[0] 是宽度,linesize[1] 是高度。 如果我是对的,其他单元格是什么意思?
作为一个更大项目的一部分,我正在尝试同时解码多个高清 (1920x1080) 视频流。每个视频流都以原始 yuv420p 格式存储在 AVI 容器中。我有一个 Decoder 类,我从中创建了不同线程
我有一个来自 FormatContext 的视频的 AVStream。 [avstream] 读取数据包 解码来自视频的数据包。 现在显示以下内容。 Packet DTS -> 7200.00
我需要访问 FFMPEG 的 AVFrame 对象的每个像素信息(如果它是 RGB,那么每个像素的每个颜色、R、G 和 B) 我怎样才能做到这一点? 最佳答案 如果您已经前进到正确的帧 - 类似于:
如何调整 AVFrame 的大小?我 这是我目前正在做的事情: AVFrame* frame = /*...*/; int width = 600, height = 400; AVFrame* re
我是一名优秀的程序员,十分优秀!