- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
如何调整 AVFrame
的大小?我
这是我目前正在做的事情:
AVFrame* frame = /*...*/;
int width = 600, height = 400;
AVFrame* resizedFrame = av_frame_alloc();
auto format = AVPixelFormat(frame->format);
auto buffer = av_malloc(avpicture_get_size(format, width, height) * sizeof(uint8_t));
avpicture_fill((AVPicture *)resizedFrame, (uint8_t*)buffer, format, width, height);
struct SwsContext* swsContext = sws_getContext(frame->width, frame->height, format,
width, height, format,
SWS_BILINEAR, nullptr, nullptr, nullptr);
sws_scale(swsContext, frame->data, frame->linesize, 0, frame->height, resizedFrame->data, resizedFrame->linesize);
但是在 resizedFrames->width
和 height
仍然是 0 之后,AVFrame 的内容看起来像垃圾,当我得到一个数据未对齐的警告时调用 sws_scale
。注意:我不想更改像素格式,也不想硬编码它是什么。
最佳答案
所以,有一些事情正在发生。
我认为如果您遵循这两个建议,您会发现重新缩放按预期工作,没有发出警告并且输出正确。质量可能不是很好,因为您正在尝试做 bilinear缩放。大多数人使用 bicubic缩放(SWS_BICUBIC)。
关于c++ - 你如何调整 AVFrame 的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31253485/
我的总体想法是 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
我是一名优秀的程序员,十分优秀!