简单的GDI+ffmpeg视频播放

该博客展示了如何结合GDI+和FFmpeg库来实现一个简单的视频播放器。通过源码下载链接,读者可以获取到实现这一功能的详细代码。
摘要由CSDN通过智能技术生成
//gdiplay.cpp: 定义应用程序的入口点。
//

#include "stdafx.h"
#include "gdiplay.h"
#include <atlstr.h>

extern "C" {
#include "libavcodec\avcodec.h"  
#include "libavformat\avformat.h"  
#include "libavutil\channel_layout.h"  
#include "libavutil\common.h"  
#include "libavutil\imgutils.h"  
#include "libswscale\swscale.h" 
#include "libavutil\imgutils.h"      
#include "libavutil\opt.h"         
#include "libavutil\mathematics.h"      
#include "libavutil\samplefmt.h"
#include "libavutil\timestamp.h"
#include "libavutil\log.h"
#include "libavutil\time.h"
#include "libswresample\swresample.h" 
}

#define MAX_LOADSTRING 100

BOOL bOffThreadFlag = FALSE;		//是否关闭当前的播放视频的线程

// 全局变量: 
HINSTANCE hInst;                                // 当前实例
WCHAR szTitle[MAX_LOADSTRING];                  // 标题栏文本
WCHAR szWindowClass[MAX_LOADSTRING];            // 主窗口类名

// 此代码模块中包含的函数的前向声明: 
ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);

HWND m_hWnd;

struct 	tagMediaParam
{
	AVFormatContext *pFormatCtx;
	AVCodecContext  *pCodecCtx;
	AVCodec         *pCodec;
	int              videoindex;
	SwsContext      *img_convert_ctx;
	RECT             screenRect;
	HANDLE           thread;
};

tagMediaParam mParam;

CString GetFilePath(HWND* phWnd)
{
	OPENFILENAME ofn;      // 公共对话框结构。    
	TCHAR szFile[MAX_PATH]; // 保存获取文件名称的缓冲区。              
    
	ZeroMemory(&ofn, sizeof(ofn));
	ofn.lStructSize = sizeof(ofn);
	ofn.hwndOwner = *phWnd;
	ofn.lpstrFile = szFile;
	//    
	//    
	ofn.lpstrFile[0] = _T('\0');
	ofn.nMaxFile = sizeof(szFile);
	ofn.lpstrFilter = _T("视频(*.*)\0*.*\0\0");
	ofn.nFilterIndex = 1;
	ofn.lpstrFileTitle = NULL;
	ofn.nMaxFileTitle = 0;
	ofn.lpstrInitialDir = NULL;
	ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
	ofn.lpstrFileTitle = (LPTSTR)_T("打开");
	// 显示打开选择文件对话框。    
	BOOL bRet = GetOpenFileName(&ofn);

	if (bRet)
	{
		return szFile;
	}
	return _T("");
}

unsigned int __stdcall VideoRenderThread(LPVOID p)
{
	tagMediaParam *pmParam = (tagMediaParam*)p;
	AVPacket * packet = NULL;
	AVFrame *pFrame = NULL;
	AVFrame *pFrameRGB = NULL;
	PVOID pbit = NULL;
	BITMAP bmp = { 0 };
	HBITMAP hBitmap = NULL;
	BITMAPINFO bmpinfo = { 0 };
	HDC h
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值