利用 FFMPEG库将one frame YUV to one frame PPM

PPM:   header  +  RGBRGBRGB......

 

code:

 

#include<stdio.h>
#include<ffmpeg/avcodec.h>
#include<ffmpeg/avformat.h>
#include<stdlib.h>

#define WIDTH 352
#define HEIGHT 288

int main()
{
    av_register_all();
    FILE *fin=fopen("test.yuv","rb");
    FILE *fout=fopen("test.ppm","wb");
   
    uint8_t *buffer_in;
    uint8_t *buffer_out;

    AVFrame  *pFrameYUV ,*pFrameRGB;
   

    buffer_in=(uint8_t *)malloc(WIDTH*HEIGHT*1.5*sizeof(uint8_t));
    buffer_out=(uint8_t *)malloc(WIDTH*HEIGHT*3*sizeof(uint8_t) );

    fread(buffer_in,sizeof(uint8_t),WIDTH*HEIGHT*1.5,fin);
     pFrameYUV=avcodec_alloc_frame();
    avpicture_fill((AVPicture *)pFrameYUV, buffer_in, 0,WIDTH,HEIGHT);

     pFrameRGB=avcodec_alloc_frame();
    avpicture_fill((AVPicture *)pFrameRGB, buffer_out, 2,WIDTH,HEIGHT);

    img_convert( (AVPicture *)pFrameRGB,2,(AVPicture *)pFrameYUV,0,WIDTH,HEIGHT);

    fprintf(fout,"P6/n%d %d/n 255/n",WIDTH,HEIGHT);

    int i;
    for(i=0;i<HEIGHT;i++)
    {
        fwrite( pFrameRGB->data[0]+i*WIDTH*3,1,WIDTH*3,fout);
    }
   

    free(buffer_in);
    free(buffer_out);

    fclose(fin);
    fclose(fout);
   


    return 0;
}

 

gcc -o test test.c -lavutil -lavformat -lavcodec

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值