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

使用ffmpeg将H264数据流解码为YUV420P视频

最编程 2024-08-15 15:17:11
...
  • AVPacket packet = {0};  
  • int frameFinished = dwBufsize;//这个是随便填入数字,没什么作用  
  •   
  • packet.data = pBuffer;//这里填入一个指向完整H264数据帧的指针  
  • packet.size = dwBufsize;//这个填入H264数据帧的大小  
  •   
  • //下面开始真正的解码  
  • avcodec_decode_video2(codec_, pFrame_, &frameFinished, &packet);  
  • if(frameFinished)//成功解码  
  • {  
  •     int picSize = codec_->height * codec_->width;  
  •     int newSize = picSize * 1.5;  
  •   
  •     //申请内存  
  •     unsigned char *buf = new unsigned char[newSize];  
  •   
  •     int height = p->codec->height;  
  •     int width = p->codec->width;  
  •   
  •   
  •     //写入数据  
  •     int a=0,i;   
  •     for (i=0; i<height; i++)   
  •     {   
  •         memcpy(buf+a,pFrame_->data[0] + i * pFrame_->linesize[0], width);   
  •         a+=width;   
  •     }   
  •     for (i=0; i<height/2; i++)   
  •     {   
  •         memcpy(buf+a,pFrame_->data[1] + i * pFrame_->linesize[1], width/2);   
  •         a+=width/2;   
  •     }   
  •     for (i=0; i<height/2; i++)   
  •     {   
  •         memcpy(buf+a,pFrame_->data[2] + i * pFrame_->linesize[2], width/2);   
  •         a+=width/2;   
  •     }  
  •   
  •     //===============  
  •     //到这里,buf里面已经是yuv420p的数据了,可以对它做任何的处理拉!  
  •     //===============  
  •     delete [] buf;  
  • }