首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ffmpeg的swscale将NV12转换为RGB32?

如何使用ffmpeg的swscale将NV12转换为RGB32?
EN

Stack Overflow用户
提问于 2013-04-19 19:22:23
回答 1查看 4.5K关注 0票数 1

假设我的内存中有一个NV12帧作为字节数组。我知道:

  • 它的宽度和高度
  • 它的跨距(包括衬垫在内的线条的总宽度),对于Y和UV组件,这与NV12规范相同。
  • 我知道Y从哪里开始,U从Y+(大步*高度)开始,V从U+1开始(与U交织)。

到目前为止,这就是我所拥有的:

代码语言:javascript
复制
SwsContext* context = sws_getContext(frameWidth, frameHeight, AV_PIX_FMT_NV12, frameWidth, frameHeight, AV_PIX_FMT_RGB32, 0, nullptr, nullptr, nullptr);
sws_scale(context, 

所以我不知道规模的参数应该是什么:

  • srcSlice :指向字节数组的指针?很明显,它应该是指向指针的指针,但我所拥有的只是一个字节的一维数组。
  • srcStride :很明显,我期待着一系列的跨越式发展,但对于整个文件,我只有一步之遥。我应该传递一个只包含一个元素的数组吗?
  • srcSliceY :我猜是第一个字节的偏移量?那应该是0。
  • srcSliceH :我猜框架的高度
  • dst :同样,指向指针的指针,但我的目标输出实际上只是另一个字节数组.
  • dstStride :我猜宽度*4?

任何帮助都很感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-22 09:46:20

代码语言:javascript
复制
/// uint8_t * Y;
/// uint8_t * out;

// 2 planes for NV12: Y and interleaved UV
uint8_t * data[2] = {Y, Y + Stride * Height}; 

// Strides for Y and UV
// U and V have Stride/2 bytes per line; 
// Thus, we have 2 * Stride/2 bytes per line in UV plane
int linesize[2] = {Stride, Stride}; 

uint8_t * outData[1] = {out}; // RGB have one plane 
int outLinesize[1] = {frameWidth*4}; // RGB32 Stride

sws_scale(context, data, linesize, 0, Height, outData, outLinesize);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16112063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档