欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

在uyuv转换为planar yuv420的过程中所使用的方法进行记录

最编程 2024-08-15 16:25:09
...
void YUVCSCWgt::on_btn_spyuv420_clicked() { char uyuv_buf[LINENUM*2]; char y_buf[LINENUM]; char u_buf[LINENUM/2]; char v_buf[LINENUM/2]; InitFile(); for(int i=0;i<1080;i++) { rw_len=m_yvuFile->read(uyuv_buf,LINENUM*2); if(rw_len!=LINENUM*2) { printf("read line num error! %d \n",rw_len); } for(int j=0;j<LINENUM*2;j++) { if(i%2==0) { if(j%4==0) { u_buf[j/4]=uyuv_buf[j]; } else if(j%4==2) { v_buf[j/4]=uyuv_buf[j]; } } if(j%4==3 || j%4==1) { y_buf[j/2]=uyuv_buf[j]; } } m_yuvFile_y->write(y_buf,LINENUM); m_yuvFile_y->flush(); if(i%2==0) { m_yuvFile_u->write(u_buf,LINENUM/2); m_yuvFile_u->flush(); m_yuvFile_v->write(v_buf,LINENUM/2); m_yuvFile_v->flush(); } } //write to yuvfile m_yuvFile_y->seek(0); m_yuvFile_u->seek(0); m_yuvFile_v->seek(0); for(int i=0;i<1080;i++) { rw_len=m_yuvFile_y->read(uyuv_buf,LINENUM); if(rw_len!=LINENUM) { printf("read line num error! %d \n",rw_len); } rw_len=m_yuvFile->write(uyuv_buf,LINENUM); if(rw_len!=LINENUM) { printf("read line num error! %d \n",rw_len); } m_yuvFile->flush(); } //m_yuvFile_y->close(); for(int i=0;i<270;i++) { rw_len=m_yuvFile_u->read(uyuv_buf,LINENUM); if(rw_len!=LINENUM) { printf("read line num error! %d \n",rw_len); } rw_len=m_yuvFile->write(uyuv_buf,LINENUM); if(rw_len!=LINENUM) { printf("read line num error! %d \n",rw_len); } m_yuvFile->flush(); } //m_yuvFile_v->close(); for(int i=0;i<270;i++) { rw_len=m_yuvFile_v->read(uyuv_buf,LINENUM); if(rw_len!=LINENUM) { printf("read line num error! %d \n",rw_len); } rw_len=m_yuvFile->write(uyuv_buf,LINENUM); if(rw_len!=LINENUM) { printf("read line num error! %d \n",rw_len); } m_yuvFile->flush(); } m_yvuFile->close(); m_yuvFile->close(); m_yuvFile_y->close(); m_yuvFile_u->close(); m_yuvFile_v->close(); }

推荐阅读