解码端的buffer
来源:互联网 发布:tomcat 域名 生效 编辑:程序博客网 时间:2024/06/06 17:54
1.m_cListPic和m_ivPicLists
- m_apiPicBufY和 m_apiPicBufY;
class TComPicYuv{ Pel* m_apiPicBufY; ///< Buffer (including margin) Pel* m_piPicOrgY; ///< m_apiPicBufY + m_iMarginLuma*getStride() + m_iMarginLuma};
在Void TAppDecTop::decode()中的m_tDecTop[decIdx]->decode()后加入以下代码
if( pocCurrPic==8&&!newSliceDiffLayer&&nalu.m_layerId==0) { ofstream out("E:\\0.txt"); Pel depth; int h= m_tDecTop[decIdx]->getPic(poc)->getSlice(0)->getSPS()->getPicHeightInLumaSamples(); int w= m_tDecTop[decIdx]->getPic(poc)->getSlice(0)->getSPS()->getPicWidthInLumaSamples(); Pel* addr=m_tDecTop[decIdx]->getPic(poc)->getPicYuvRec()->getLumaAddr(); for (int y = 0; y <h; y++) for (int x = 0; x < w; x++) { depth=*addr; addr++; if (x==w-1) { addr=addr+160; } out<<"x="<<x<<" "<<"y="<<y<<" "<<depth<<endl; } ofstream out1("E:\\1.txt"); Pel depth1; Pel* addr1=m_tDecTop[decIdx]->getPic(poc)->getPicYuvRec()->getBufY(); for (int y = -80; y <h+80; y++) for (int x =-80; x < w+80; x++) { depth1=*addr1; addr1++; out1<<"x="<<x<<" "<<"y="<<y<<" "<<depth1<<endl; } }
以上代码的功能是:将没有扩展的值输出到0.txt;将扩展的值输出到1.txt
根据值的对比可以发现:
3.m_apiPicBufY是16-bit,而图像中每个像素点是8-bit
int h= apcPicYuvBaseVideo[iLeftBaseViewIdx ]->getHeight();int w= apcPicYuvBaseVideo[iLeftBaseViewIdx ]->getWidth();int s=apcPicYuvBaseVideo[iLeftBaseViewIdx ]->getStride(); FILE *fp3 = fopen("E:\\new.yuv","wb");for (int j = 0 ; j<h; j++){ fwrite(pcPicYuvSynthOut->getLumaAddr()+j*s,1,w,fp3);}for (int j = 0 ; j<h/2; j++){ fwrite(pcPicYuvSynthOut->getCbAddr()+j*s/2,1,w/2,fp3);}for (int j = 0 ; j<h/2; j++){ fwrite(pcPicYuvSynthOut->getCrAddr()+j*s/2,1,w/2,fp3);}fclose(fp3);
以上错误,将代码修改如下:
int h= apcPicYuvBaseVideo[iLeftBaseViewIdx ]->getHeight();int w= apcPicYuvBaseVideo[iLeftBaseViewIdx ]->getWidth();int s=apcPicYuvBaseVideo[iLeftBaseViewIdx ]->getStride(); FILE *fp3 = fopen("E:\\new.yuv","wb");unsigned char *tmpY = new unsigned char[w*h];unsigned char *tmpCb = new unsigned char[w*h/4];unsigned char *tmpCr = new unsigned char[w*h/4];for (int j = 0 ; j<h; j++) for(int i=0;i<w;i++) { tmpY[i+j*w]=*(pcPicYuvSynthOut->getLumaAddr()+i+j*s); tmpCb[i/2+j*w/4]=*(pcPicYuvSynthOut->getCbAddr()+i/2+j*s/4); tmpCr[i/2+j*w/4]=*(pcPicYuvSynthOut->getCrAddr()+i/2+j*s/4); }fwrite(tmpY,1,w*h,fp3);fwrite(tmpCb,1,w*h/4,fp3);fwrite(tmpCr,1,w*h/4,fp3); delete []tmpY;delete []tmpCb;delete []tmpCr;fclose(fp3);
因为getLumaAddr()返回的是Pel*型,且typedef Short Pel; ///< 16-bit pixel type
而图像中每个像素点是8-bit的,所以要先将getLumaAddr()中的值存入到unsigned char *tmpY中去,最后再将unsigned char *tmpY中的值赋值到fp3中。
0 0
- 解码端的buffer
- Google Protocol Buffer的编解码原理
- protocol buffer 编解码
- 用openAL播放ffmpeg解码的buffer突然加速问题
- 264编码解码过程中,VBV (video buffer virifier)的作用
- 使用双循环Buffer实现解码播放流媒体
- protocal buffer中编码和解码过程
- FFmpeg 音频解码:应用buffer缓冲机制
- 单buffer,双buffer和三buffer的区别
- buffer cache内buffer的各种状态
- Charset.encode(buffer)之后,buffer的变化
- Buffer对象,常用的Buffer方法;
- Response.Buffer的妙用
- 环形buffer的管理
- HardwareBuffer 的 shadow buffer
- Buffer的用法
- buffer 的解释
- Write buffer的作用
- [剑指offer]从尾到头打印链表
- Golang中的闭包
- HighChart学习——动态加载数据
- 子树
- MySQL存储过程 与 自定义函数
- 解码端的buffer
- JavaScript格式化时间
- 即时通讯(环信) bug
- 0039C++标准库中的vector的常用操作函数
- visual studio中读取图像像素
- No Default Proposals
- lucene查询方式介绍
- 如何获取本机电脑的AD域名称
- 安卓canvas