资源简介
需要下载分,是希望大家能够更好的分享和使用本资源,毕竟上传也不容易。希望得到理解。
其中包含了VS2010解决方案,使用其他版本VS的朋友可以修改工程文件。相关说明见原文:
http://blog.csdn.net/luofl1992/article/details/8293405
代码片段和文件信息
#include “stdafx.h“
#include “NcMCodec.h“
extern double pts;
static void CodecInit(void)
{
static bool bInitialed(false);
if ( true == bInitialed )
return;
av_register_all();
}
/*
static void packet_queue_flush(PacketQueue *q)
{
AVPacketList *pkt *pkt1;
SDL_LockMutex(q->mutex);
for(pkt = q->first_pkt; pkt != NULL; pkt = pkt1)
{
pkt1 = pkt->next;
av_free_packet(&pkt->pkt);
av_freep(&pkt);
}
q->last_pkt = NULL;
q->first_pkt = NULL;
q->nb_packets = 0;
q->size = 0;
SDL_UnlockMutex(q->mutex);
}
static int packet_queue_put(PacketQueue *q AVPacket *pkt)
{
AVPacketList *pkt1;
if(pkt != &flush_pkt && av_dup_packet(pkt) < 0) {
return -1;
}
if(packet_queue_get(&is->audioq pkt 1) < 0) {
return -1;
}
if(packet->data == flush_pkt.data) {
avcodec_flush_buffers(is->audio_st->codec);
continue;
}
}
*/
CNcMCodec::CNcMCodec(void)
: frameNo(0)
{
pFormatCtx = NULL;
pCodecCtx = NULL;
CodecInit();
}
CNcMCodec::~CNcMCodec(void)
{
}
bool CNcMCodec::OpenFile(LPCTSTR lpFilePath BITMAPINFO &bmpInfo)
{
char path[MAX_PATH];
#ifdef _UNICODE
USES_CONVERSION;
strcpy_s( path T2A(lpFilePath) );
#else
strcpy_s( path lpFilePath );
#endif
if ( av_open_input_file( &pFormatCtx path NULL 0 NULL ) )
return false; // 文件打开失败
if ( av_find_stream_info(pFormatCtx) < 0 )
return 0; // 无法找到流信息
dump_format( pFormatCtx 0 path 0 );
size_t i = 0;
videoStream = -1;
for ( i = 0; i < pFormatCtx->nb_streams; i++ )
{
if ( pFormatCtx->streams[i]->codec->codec_type == CODEC_TYPE_VIDEO )
{
videoStream = i;
break;
}
}
if ( -1 == videoStream )
return false;
pCodecCtx = pFormatCtx->streams[videoStream]->codec;
pCodec = avcodec_find_decoder( pCodecCtx->codec_id );
if ( NULL == pCodec )
return false;
if ( avcodec_open(pCodecCtx pCodec) < 0 )
return false; // 无法打开解码器
pframe = avcodec_alloc_frame();
pframeRGB = avcodec_alloc_frame();
if ( NULL == pframe )
return false;
int bytes = avpicture_get_size(PIX_FMT_RGB24 pCodecCtx->width pCodecCtx->height);
void *buffer = av_malloc(bytes * sizeof(uint8_t));
avpicture_fill( (AVPicture *)pframeRGB (uint8_t *)buffer PIX_FMT_RGB24 pCodecCtx->width pCodecCtx->height );
// av_free( buffer );
// 设置位图信息头数据
BITMAPINFOHEADER &infoHeader(bmpInfo.bmiHeader);
infoHeader.biBitCount = 24;
infoHeader.biClrImportant = 0;
infoHeader.biClrUsed = 0;
infoHeader.biCompression = 0;
infoHeader.biHeight = 0 - pCodecCtx->height; // 这里要是负数,否则图像是倒着的
infoHeader.biWidth = pCodecCtx->width;
infoHeader.biPlanes = 1;
infoHeader.biSize = 40;
infoHeader.biSizeImage = 0;
infoHeader.biXPelsPerMeter = 0;
infoHeader.biYPelsPerMeter = 0;
return true;
}
AVPicture *CNcMCodec::GetNextframe(void)
{
AVPacket packet;
int frameFinished = 0;
// Convert the image from its native format to RGB
/*
AVPacket flush_pkt;
av_init_packet(&flus
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1915 2013-02-26 13:29 NcMPla
文件 7276032 2008-04-12 22:21 Bin\avcodec.dll
文件 10752 2008-04-12 22:21 Bin\avdevice.dll
文件 14336 2008-04-12 22:21 Bin\avfilter.dll
文件 666624 2008-04-12 22:21 Bin\avformat.dll
文件 57344 2008-04-12 22:21 Bin\avutil.dll
文件 54542 2008-04-12 22:21 Bin\cws2fws.exe
文件 83968 2008-04-12 22:21 Bin\ffmpeg.exe
文件 38912 2008-04-12 22:21 Bin\ffplay.exe
文件 456241 2012-12-13 09:11 Bin\libmp3lame-0.dll
文件 80471 2008-04-12 22:21 Bin\output_example.exe
文件 68936 2008-04-12 22:21 Bin\pktdumper.exe
文件 89273 2008-02-16 17:18 Bin\pthreadGC2.dll
文件 27762 2008-04-12 22:21 Bin\qt-faststart.exe
文件 1760356 2008-02-16 17:03 Bin\SDL.dll
文件 158208 2008-04-12 22:21 Bin\swscale.dll
文件 6193066 2012-12-12 11:46 Bin\test.264
文件 25267 2008-04-12 22:21 Bin\trasher.exe
文件 742220 2008-03-02 20:40 Bin\xvidcore.dll
文件 7276032 2008-04-12 22:21 FFmpeg-full-SDK-3.2\bin\avcodec.dll
文件 10752 2008-04-12 22:21 FFmpeg-full-SDK-3.2\bin\avdevice.dll
文件 14336 2008-04-12 22:21 FFmpeg-full-SDK-3.2\bin\avfilter.dll
文件 666624 2008-04-12 22:21 FFmpeg-full-SDK-3.2\bin\avformat.dll
文件 57344 2008-04-12 22:21 FFmpeg-full-SDK-3.2\bin\avutil.dll
文件 54542 2008-04-12 22:21 FFmpeg-full-SDK-3.2\bin\cws2fws.exe
文件 83968 2008-04-12 22:21 FFmpeg-full-SDK-3.2\bin\ffmpeg.exe
文件 38912 2008-04-12 22:21 FFmpeg-full-SDK-3.2\bin\ffplay.exe
文件 80471 2008-04-12 22:21 FFmpeg-full-SDK-3.2\bin\output_example.exe
文件 68936 2008-04-12 22:21 FFmpeg-full-SDK-3.2\bin\pktdumper.exe
文件 89273 2008-02-16 17:18 FFmpeg-full-SDK-3.2\bin\pthreadGC2.dll
............此处省略164个文件信息
相关资源
- FFmpeg x86 x64库
- 基于VC++利用MFC做的图书管理系统
- MFC智能停车场管理系统
- VC++用MFC做选课系统
- MFC VC++实现Sierpinski分形图像
- MFC基于对话框的气体浓度检测系统
- 功能强大的多条曲线绘制类 (MFC,
- MFC_带进度条的状态栏
- 用C++写的FTP客户端
- c++编写的十字路口交通灯程序
- 禁忌搜索算法30城市TSP问题C++源代码
- MFC多人聊天室
- MFC深入浅出带目录完整版
- C++实现AES、DES加密算法含MFC界面
- MFC写的一个汉字取模软件
- MFC Tab control 重绘便签边框和主框 背景
- High-speed Charting ControlMFC绘图控件
- VC6.0MFC界面美化
- 基于MFC的无线串口调试工具-哈工大威
- 24点应用游戏MFC版
- 页面置换算法用MFC实现了
- win7风格的mfc界面美化源代码
- MFC 绘制指针式钟表
- BCGControlBar Professional v.28 Full Source
- MFC游戏编程几款经典小游戏的详细代
- 网络调试助手C++源码(VS 2008开发)
- MFC 官方API文档 MSDN原版
- MFC多文档应用程序同时显示两个视图
- C++MFC数据库职工信息管理系统,实现
- MFC画圆自定义|位置|半径|边界和内部
评论
共有 条评论