资源简介

本教程是最简单的基于FFmpeg的libswscale进行像素处理的教程。它包含了两个工程: simplest_ffmpeg_swscale: 最简单的libswscale的教程(YUV420P转RGB24)。 simplest_pic_gen: 生成各种测试图片的工具。 1.1版本增加了多平台下编译的支持:Windows,MacOS,以及Linux。

资源截图

代码片段和文件信息

/**
 * 最简单的基于FFmpeg的Swscale示例
 * Simplest FFmpeg Swscale
 *
 * 雷霄骅 Lei Xiaohua
 * leixiaohua1020@126.com
 * 中国传媒大学/数字电视技术
 * Communication University of China / Digital TV Technology
 * http://blog.csdn.net/leixiaohua1020
 *
 * 本程序使用libswscale对像素数据进行缩放转换等处理。
 * 它中实现了YUV420P格式转换为RGB24格式,
 * 同时将分辨率从480x272拉伸为1280x720
 * 它是最简单的libswscale的教程。
 *
 * This software uses libswscale to scale / convert pixels.
 * It convert YUV420P format to RGB24 format
 * and changes resolution from 480x272 to 1280x720.
 * It‘s the simplest tutorial about libswscale.
 */

#include 

#define __STDC_CONSTANT_MACROS

#ifdef _WIN32
//Windows
extern “C“
{
#include “libswscale/swscale.h“
#include “libavutil/opt.h“
#include “libavutil/imgutils.h“
};
#else
//Linux...
#ifdef __cplusplus
extern “C“
{
#endif
#include 
#include 
#include 
#ifdef __cplusplus
};
#endif
#endif


int main(int argc char* argv[])
{
//Parameters
FILE *src_file =fopen(“sintel_480x272_yuv420p.yuv“ “rb“);
const int src_w=480src_h=272;
AVPixelFormat src_pixfmt=AV_PIX_FMT_YUV420P;

int src_bpp=av_get_bits_per_pixel(av_pix_fmt_desc_get(src_pixfmt));

FILE *dst_file = fopen(“sintel_1280x720_rgb24.rgb“ “wb“);
const int dst_w=1280dst_h=720;
AVPixelFormat dst_pixfmt=AV_PIX_FMT_RGB24;
int dst_bpp=av_get_bits_per_pixel(av_pix_fmt_desc_get(dst_pixfmt));

//Structures
uint8_t *src_data[4];
int src_linesize[4];

uint8_t *dst_data[4];
int dst_linesize[4];

int rescale_method=SWS_BICUBIC;
struct SwsContext *img_convert_ctx;
uint8_t *temp_buffer=(uint8_t *)malloc(src_w*src_h*src_bpp/8);

int frame_idx=0;
int ret=0;
ret= av_image_alloc(src_data src_linesizesrc_w src_h src_pixfmt 1);
if (ret< 0) {
printf( “Could not allocate source image\n“);
return -1;
}
ret = av_image_alloc(dst_data dst_linesizedst_w dst_h dst_pixfmt 1);
if (ret< 0) {
printf( “Could not allocate destination image\n“);
return -1;
}
//-----------------------------
//Init Method 1
img_convert_ctx =sws_alloc_context();
//Show AVOption
av_opt_show2(img_convert_ctxstdoutAV_OPT_FLAG_VIDEO_PARAM0);
//Set Value
av_opt_set_int(img_convert_ctx“sws_flags“SWS_BICUBIC|SWS_PRINT_INFO0);
av_opt_set_int(img_convert_ctx“srcw“src_w0);
av_opt_set_int(img_convert_ctx“srch“src_h0);
av_opt_set_int(img_convert_ctx“src_format“src_pixfmt0);
//‘0‘ for MPEG (Y:0-235);‘1‘ for JPEG (Y:0-255)
av_opt_set_int(img_convert_ctx“src_range“10);
av_opt_set_int(img_convert_ctx“dstw“dst_w0);
av_opt_set_int(img_convert_ctx“dsth“dst_h0);
av_opt_set_int(img_convert_ctx“dst_format“dst_pixfmt0);
av_opt_set_int(img_convert_ctx“dst_range“10);
sws_init_context(img_convert_ctxNULLNULL);

//Init Method 2
//img_convert_ctx = sws_getContext(src_w src_hsrc_pixfmt dst_w dst_h dst_pixfmt 
// rescale_method NULL NULL NULL); 
//-

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件          29  2015-02-12 17:39  .gitignore
     文件         718  2015-02-12 17:39  ReadMe.txt
     文件        1397  2015-02-12 17:39  simplest_ffmpeg_swscale.sln
     文件       28672  2015-02-12 17:39  simplest_ffmpeg_swscale.suo
     目录           0  2015-02-12 17:39  simplest_ffmpeg_swscale\
     文件          88  2015-02-12 17:39  simplest_ffmpeg_swscale\.gitignore
     文件         456  2015-02-12 17:39  simplest_ffmpeg_swscale\ReadMe.txt
     文件      418304  2015-02-12 17:39  simplest_ffmpeg_swscale\avutil-52.dll
     文件      230400  2015-02-12 17:39  simplest_ffmpeg_swscale\colorbar_320x240_rgb24.rgb
     文件         539  2015-02-12 17:39  simplest_ffmpeg_swscale\compile_cl.bat
     文件         412  2015-02-12 17:39  simplest_ffmpeg_swscale\compile_gcc.sh
     文件         431  2015-02-12 17:39  simplest_ffmpeg_swscale\compile_mingw.sh
     文件      115200  2015-02-12 17:39  simplest_ffmpeg_swscale\graybar_320x240_0_255_yuv420p.yuv
     文件      115200  2015-02-12 17:39  simplest_ffmpeg_swscale\graybar_320x240_16_235_yuv420p.yuv
     目录           0  2015-02-12 17:39  simplest_ffmpeg_swscale\include\
     文件        7976  2015-02-12 17:39  simplest_ffmpeg_swscale\include\_mingw.h
     文件        5721  2015-02-12 17:39  simplest_ffmpeg_swscale\include\inttypes.h
     目录           0  2015-02-12 17:39  simplest_ffmpeg_swscale\include\libavutil\
     文件        1584  2015-02-12 17:39  simplest_ffmpeg_swscale\include\libavutil\adler32.h
     文件        1834  2015-02-12 17:39  simplest_ffmpeg_swscale\include\libavutil\aes.h
     文件        4230  2015-02-12 17:39  simplest_ffmpeg_swscale\include\libavutil\attributes.h
     文件        4414  2015-02-12 17:39  simplest_ffmpeg_swscale\include\libavutil\audio_fifo.h
     文件          82  2015-02-12 17:39  simplest_ffmpeg_swscale\include\libavutil\audioconvert.h
     文件        2113  2015-02-12 17:39  simplest_ffmpeg_swscale\include\libavutil\avassert.h
     文件         211  2015-02-12 17:39  simplest_ffmpeg_swscale\include\libavutil\avconfig.h
     文件       12473  2015-02-12 17:39  simplest_ffmpeg_swscale\include\libavutil\avstring.h
     文件        8561  2015-02-12 17:39  simplest_ffmpeg_swscale\include\libavutil\avutil.h
     文件        2079  2015-02-12 17:39  simplest_ffmpeg_swscale\include\libavutil\base64.h
     文件        2313  2015-02-12 17:39  simplest_ffmpeg_swscale\include\libavutil\blowfish.h
     文件        7733  2015-02-12 17:39  simplest_ffmpeg_swscale\include\libavutil\bprint.h
     文件        2901  2015-02-12 17:39  simplest_ffmpeg_swscale\include\libavutil\bswap.h
............此处省略76个文件信息

评论

共有 条评论