資源簡介
開發環境:win7+VS2013+opencv3.0
兩個線程,X264實時編碼入隊列,另一個線程FFmpeg從隊列中取出數據實時解碼。
代碼片段和文件信息
#include?
#include?
//?Opencv??
#include???
#include???
#include???
#include???
#include?
#include?“queue.h“
extern?“C“
{
#include?“libavcodec/avcodec.h“
#include?“libswscale/swscale.h“
};
using?namespace?std;
using?namespace?cv;
//test?different?codec
#define?TEST_H264??0
#define?TEST_HEVC??1
extern?DWORD?WINAPI?x264_encode(LPVOID?pM);
bool?get_h264_data(uchar*?bufint?in_lenuchar*?out_buf?int?&out_len)
{
char?nalu[4]?=?{?0x00?0x00?0x00?0x01?};
memcpy(out_buf?nalu?4);
out_buf?+=?4;
memcpy(out_buf?buf?in_len);
out_len?=?in_len?+?4;
// cout?<“out_len?=?“?< return?true;
}
int?main(int?argc?char*?argv[])
{
HANDLE?thread1;
result_link_type?*result_link?=?new?result_link_type;
result_link->head?=?result_link->end?=?NULL;
result_link->result_num?=?0;
?? thread1?=?CreateThread(NULL?0?x264_encode?(LPVOID)result_link?0?NULL);
Sleep(1);
//system(“pause“);
#if?1
Mat?pCvMat;
AVCodec?*pCodec;
AVCodecContext?*pCodecCtx?=?NULL;
AVCodecParserContext?*pCodecParserCtx?=?NULL;
int?frame_count;
FILE?*fp_in;
FILE?*fp_out;
AVframe *pframe?*pframeYUV;
uint8_t?*out_buffer;
// const?int?in_buffer_size?=?4096;
const?int?in_buffer_size?=?800000;
//uint8_t?in_buffer[in_buffer_size?+?FF_INPUT_BUFFER_PADDING_SIZE]?=?{?0?};
uint8_t?in_buffer[in_buffer_size];
memset(in_buffer?0?sizeof(in_buffer));
uint8_t?*cur_ptr;
int?cur_size;
AVPacket?packet;
int?ret?got_picture;
int?y_size;
AVCodecID?codec_id?=?AV_CODEC_ID_H264;
// char?filepath_in[]?=?“test.h264“;
// char?filepath_out[]?=?“1.yuv“;
int?first_time?=?1;
struct?SwsContext?*img_convert_ctx;
//av_log_set_level(AV_LOG_DEBUG);
avcodec_register_all();
pCodec?=?avcodec_find_decoder(codec_id);
if?(!pCodec)?{
printf(“Codec?not?found\n“);
return?-1;
}
pCodecCtx?=?avcodec_alloc_context3(pCodec);
if?(!pCodecCtx){
printf(“Could?not?allocate?video?codec?context\n“);
return?-1;
}
pCodecParserCtx?=?av_parser_init(codec_id);
if?(!pCodecParserCtx){
printf(“Could?not?allocate?video?parser?context\n“);
return?-1;
}
if?(pCodec->capabilities&CODEC_CAP_TRUNCATED)
pCodecCtx->flags?|=?CODEC_FLAG_TRUNCATED;?/*?we?do?not?send?complete?frames?*/
if?(avcodec_open2(pCodecCtx?pCodec?NULL)?0)?{
printf(“Could?not?open?codec\n“);
return?-1;
}
#if?0
//Input?File
fp_in?=?fopen(filepath_in?“rb“);
if?(!fp_in)?{
printf(“Could?not?open?input?stream\n“);
return?-1;
}
//Output?File
fp_out?=?fopen(filepath_out?“wb“);
if?(!fp_out)?{
printf(“Could?not?open?output?YUV?file\n“);
return?-1;
}
#endif
pframe?=?av_frame_alloc();
av_init_packet(&packet);
/******************************************************************************
*?add?by?zhouyuhua@ict.ac.cn??保存BGR,opencv中是按BGR來保存的?
*****
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???18936320??2014-05-06?10:08??ffmpeg_decode\Debug\avcodec-55.dll
?????文件?????418304??2014-05-06?10:08??ffmpeg_decode\Debug\avutil-52.dll
?????文件??????86016??2018-03-07?09:04??ffmpeg_decode\Debug\ffmpeg_decode.exe
?????文件?????561768??2018-03-07?09:04??ffmpeg_decode\Debug\ffmpeg_decode.ilk
?????文件????1339392??2018-03-07?09:04??ffmpeg_decode\Debug\ffmpeg_decode.pdb
?????文件??????47776??2011-02-08?03:46??ffmpeg_decode\Debug\libgcc_s_dw2-1.dll
?????文件????1472696??2018-02-08?14:34??ffmpeg_decode\Debug\libx264-142.dll
?????文件?????434176??2014-05-06?10:08??ffmpeg_decode\Debug\swscale-2.dll
?????文件?????????25??2014-12-26?22:44??ffmpeg_decode\ffmpeg_decode\.gitignore
?????文件???18936320??2014-05-06?10:08??ffmpeg_decode\ffmpeg_decode\avcodec-55.dll
?????文件?????418304??2014-05-06?10:08??ffmpeg_decode\ffmpeg_decode\avutil-52.dll
?????文件???????1209??2018-03-07?09:04??ffmpeg_decode\ffmpeg_decode\Debug\ffmpeg_decode.Build.CppClean.log
?????文件???????4313??2018-03-07?09:04??ffmpeg_decode\ffmpeg_decode\Debug\ffmpeg_decode.log
?????文件???????2554??2018-03-07?09:04??ffmpeg_decode\ffmpeg_decode\Debug\ffmpeg_decode.tlog\cl.command.1.tlog
?????文件??????61190??2018-03-07?09:04??ffmpeg_decode\ffmpeg_decode\Debug\ffmpeg_decode.tlog\CL.read.1.tlog
?????文件???????2092??2018-03-07?09:04??ffmpeg_decode\ffmpeg_decode\Debug\ffmpeg_decode.tlog\CL.write.1.tlog
?????文件????????178??2018-03-07?09:04??ffmpeg_decode\ffmpeg_decode\Debug\ffmpeg_decode.tlog\ffmpeg_decode.lastbuildstate
?????文件???????1808??2018-03-07?09:04??ffmpeg_decode\ffmpeg_decode\Debug\ffmpeg_decode.tlog\li
?????文件???????2684??2018-03-07?09:04??ffmpeg_decode\ffmpeg_decode\Debug\ffmpeg_decode.tlog\li
?????文件????????886??2018-03-07?09:04??ffmpeg_decode\ffmpeg_decode\Debug\ffmpeg_decode.tlog\li
?????文件?????218712??2018-03-07?09:04??ffmpeg_decode\ffmpeg_decode\Debug\main.obj
?????文件?????133044??2018-03-07?09:04??ffmpeg_decode\ffmpeg_decode\Debug\queue.obj
?????文件????1248256??2018-03-07?09:04??ffmpeg_decode\ffmpeg_decode\Debug\vc120.idb
?????文件?????823296??2018-03-07?09:04??ffmpeg_decode\ffmpeg_decode\Debug\vc120.pdb
?????文件?????212340??2018-03-07?09:04??ffmpeg_decode\ffmpeg_decode\Debug\x264_encode.obj
?????文件???????4701??2018-02-08?15:38??ffmpeg_decode\ffmpeg_decode\ffmpeg_decode.vcxproj
?????文件???????1514??2018-02-08?15:38??ffmpeg_decode\ffmpeg_decode\ffmpeg_decode.vcxproj.filters
?????文件????????165??2017-12-20?16:34??ffmpeg_decode\ffmpeg_decode\ffmpeg_decode.vcxproj.user
?????文件???????5721??2012-05-23?20:03??ffmpeg_decode\ffmpeg_decode\include\inttypes.h
?????文件?????175612??2017-12-21?10:08??ffmpeg_decode\ffmpeg_decode\include\libavcodec\avcodec.h
............此處省略98個文件信息
- 上一篇:乒乓球王者
- 下一篇:ssm框架租房管理系統
評論
共有 條評論