資源簡介
本教程是最簡單的基于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?(ret0)?{
printf(?“Could?not?allocate?source?image\n“);
return?-1;
}
ret?=?av_image_alloc(dst_data?dst_linesizedst_w?dst_h?dst_pixfmt?1);
if?(ret0)?{
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\ba
?????文件????????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個文件信息
評論
共有 條評論