ffmpeg 类型介绍

类型avframe 类型中

uint8_t *data[AV_NUM_DATA_POINTERS]; 解码后的原始数据,视频数据是YUV 和RGB,音频数据是PCM)
int linesize[AV_NUM_DATA_POINTERS];data中“一行“数据的大小,一般大于图像的宽
int width, height; 对视频而言指视频的宽和高
int nb_samples; 音频中一个AVFrame包含多个音频帧,表示音频帧的数量
int format; 帧的格式,原始数据的类型
int key_frame; 是否为关键帧
enum AVPictureType pict_type; 帧的类型
AVRational sample_aspect_ratio; 宽高比
int64_t pts; 显示时间戳
int64_t pkt_dts;每一帧的时间
int coded_picture_number;编码帧的序号
int display_picture_number;显示帧的序号
int sample_rate; 采样率(音频)
uint64_t channel_layout; 声道格式(音频)
int channels; 声道数量(编码未使用),解码只读
int interlaced_frame;是否隔行扫描
int8_t *qscale_table;QP表
int quality; 帧的质量,1表示好 FF_LAMBDA_MAX表示bad
enum AVColorRange color_range; MPEG,JPEG,YUV的色彩范围
enum AVColorSpace colorspace; YUV的色彩空间
int64_t pkt_duration; 相关包的流逝时间
AVDictionary *metadata;元数据

其中data中分为不同类型

AVPacket::stream_index 可以区分码流类型

解码器类型AVCodecContext::pix_fmt 可以区分流格式AV_PIX_FMT_YUVJ420P AV_PIX_FMT_YUV420P

这两个类型色彩空间不一样yuv420p是[16,235] yuvj420p是针对显示器 0~255 data的数据排布是一样的

avframe::data是一个char*数组 data【0】是y数据 data【1】是u data[2]是v 针对视频 

如果需要转换yuv数据直接拷贝data中数据就好 但是有时候linesize是0 可以剔除 linesize可能根yuv数据的实际宽度不同 可能会大因为内存对其的规则

     char* cbuff = m_yuvTemp;
                      for(i = 0;i<videoFrame->height;i++){
                          memcpy(cbuff+videoFrame->linesize[0]*i,videoFrame->data[0]+videoFrame->linesize[0]*i,videoFrame->width);
                       }
                       cbuff+=videoFrame->width*videoFrame->height;
                       for(i = 0;i<videoFrame->height/2;i++){
                              memcpy(cbuff+videoFrame->linesize[2]*i,videoFrame->data[2]+videoFrame->linesize[2]*i,videoFrame->width/2);
                       }
                        cbuff+=videoFrame->width*videoFrame->height/4;
                       for(i = 0;i<videoFrame->height/2;i++){
                            memcpy(cbuff+videoFrame->linesize[1]*i,videoFrame->data[1]+videoFrame->linesize[1]*i,videoFrame->width/2);
                       }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值