avpicture_get_size
时间: 2023-11-15 11:06:00 浏览: 179
引用\[1\]中的代码片段是关于图像转换的,它使用了sws_scale函数来进行图像的缩放操作。\[1\]
引用\[2\]中的代码片段是关于关闭视频流的,它使用了close_video函数来关闭AVFormatContext和AVStream。\[2\]
引用\[3\]中的代码片段是关于视频编码的,它使用了avcodec_encode_video函数来对AVFrame进行视频编码操作。\[3\]
根据提供的引用内容,无法直接回答"avpicture_get_size"的问题。请提供更多相关的引用内容或者具体的问题,以便我能够给出更准确的回答。
#### 引用[.reference_title]
- *1* *2* *3* [FFMpeg SDK 开发手册](https://blog.csdn.net/zhanghuiliang/article/details/2962855)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
相关问题
ffmpeg 没有avpicture_get_size
是的,这是因为在 FFmpeg 4.0 版本中,avpicture_get_size 函数已经被弃用并移除了。取而代之的是 AVFrame 类型的函数 av_image_get_buffer_size,可以用它来计算一个给定帧的缓冲区大小。你可以这样使用它:
```
int width = 640;
int height = 480;
int format = AV_PIX_FMT_RGB24;
int align = 1;
int buffer_size = av_image_get_buffer_size(format, width, height, align);
```
其中 format 是像素格式,width 和 height 是图像的宽度和高度,align 是对齐方式。这个函数会返回图像的大小,单位是字节。
AVFrame 转 std::vector
你可以使用以下代码将 AVFrame 转换为 std::vector:
```cpp
std::vector<uint8_t> avframeToVector(AVFrame* frame) {
std::vector<uint8_t> data;
int size = avpicture_get_size(frame->format, frame->width, frame->height);
data.resize(size);
AVPicture picture;
avpicture_fill(&picture, data.data(), frame->format, frame->width, frame->height);
for (int i = 0; i < frame->height; i++) {
memcpy(picture.data[0] + i * picture.linesize[0], frame->data[0] + i * frame->linesize[0], frame->width);
}
return data;
}
```
这个函数会将 AVFrame 的数据复制到一个 std::vector,然后返回该向量。请确保你已经包含了必要的头文件,并且在调用此函数之前,已经正确分配了 AVFrame 的数据。
阅读全文