/**
* TIandSIpro
* (TIandSI Professional)
*
* 雷霄骅 Lei Xiaohua
* leixiaohua1020@126.com
* 中国传媒大学/数字电视技术
* Communication University of China / Digital TV Technology
* http://blog.csdn.net/leixiaohua1020
*
* 本工程可以计算一个压缩视频的时间信息TI(Temporal perceptual Information,
* 也可以称时间复杂度)和空间信息SI(Spatial perceptual Information,也可以
* 称空间复杂度)。计算方法出自标准:ITU-R BT.1788
*
* Professional: 支持压缩码流(而不是像素数据比如YUV,RGB)作为输入
*
* This software can calculate a video bitstream's TI(Temporal perceptual Information)
* and SI(Spatial perceptual Information) according to ITU-R BT.1788.
*
* Professional: Support bitstreams (not raw data such as YUV, RGB, etc.) as Input.
*
*/
#include "stdafx.h"
#include "TIandSI.h"
#include "TIandSIDlg.h"
#include "afxdialogex.h"
#include <atlconv.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 用于应用程序“关于”菜单项的 CAboutDlg 对话框
class CAboutDlg : public CDialogEx
{
public:
CAboutDlg();
// 对话框数据
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
DECLARE_MESSAGE_MAP()
public:
// afx_msg void OnDropFiles(HDROP hDropInfo);
};
CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
// ON_WM_DROPFILES()
END_MESSAGE_MAP()
// CTIandSIDlg 对话框
CTIandSIDlg::CTIandSIDlg(CWnd* pParent /*=NULL*/)
: CDialogEx(CTIandSIDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CTIandSIDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_URLLIST, m_urllist);
DDX_Control(pDX, IDC_INPUTURL, m_inputurl);
DDX_Control(pDX, IDC_PROGRESS_ALL, m_progressall);
DDX_Control(pDX, IDC_PROGRESS_ALL_TEXT, m_progressalltext);
DDX_Control(pDX, IDC_PROGRESS_CUR, m_progresscur);
DDX_Control(pDX, IDC_PROGRESS_CUR_TEXT, m_progresscurtext);
DDX_Control(pDX, IDC_OUTPUT, m_output);
DDX_Control(pDX, IDC_DRAW, m_draw);
DDX_Control(pDX, IDC_CURVAL, m_curval);
}
BEGIN_MESSAGE_MAP(CTIandSIDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDOK, &CTIandSIDlg::OnBnClickedOk)
ON_BN_CLICKED(IDC_URLLIST_ADD, &CTIandSIDlg::OnBnClickedUrllistAdd)
ON_BN_CLICKED(IDC_URLLIST_DELETE, &CTIandSIDlg::OnBnClickedUrllistDelete)
ON_BN_CLICKED(IDC_URLLIST_DELETEALL, &CTIandSIDlg::OnBnClickedUrllistDeleteall)
ON_BN_CLICKED(IDABOUT, &CTIandSIDlg::OnBnClickedAbout)
// ON_BN_CLICKED(IDC_CHART_EDITOR, &CTIandSIDlg::OnBnClickedChartEditor)
//ON_BN_CLICKED(IDC_RADIO_DRAW, &CTIandSIDlg::OnClickedRadioDraw)
ON_BN_CLICKED(IDRESULT, &CTIandSIDlg::OnBnClickedResult)
ON_WM_DROPFILES()
ON_BN_CLICKED(IDPAUSE, &CTIandSIDlg::OnBnClickedPause)
ON_BN_CLICKED(IDSTOP, &CTIandSIDlg::OnBnClickedStop)
ON_COMMAND(IDWEBSITE, &CTIandSIDlg::OnWebsite)
ON_COMMAND(ID_URLLIST_QUICKADD, &CTIandSIDlg::OnUrllistQuickadd)
END_MESSAGE_MAP()
// CTIandSIDlg 消息处理程序
BOOL CTIandSIDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 将“关于...”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
//---------------
m_output.SetCheck(TRUE);
UpdateData(FALSE);
//初始化
m_progressalltext.SetWindowText(L"0%");
m_progresscurtext.SetWindowText(L"0%");
m_progressall.SetRange(0,100);
m_progresscur.SetRange(0,100);
//SDL==========================
sdlparam.graphically==true;
//SDL_putenv()放在前面
char variable[256];
CWnd* pWnd = GetDlgItem(IDC_SCREEN); //获取图片控件的窗口指针
sprintf(variable,"SDL_WINDOWID=0x%1x",pWnd->GetSafeHwnd()); // 格式化字符串
SDL_putenv(variable);
if(SDL_Init(SDL_INIT_VIDEO)) {
AfxMessageBox(L"Could not initialize SDL");
return 0;
}
CRect screenrect;
GetDlgItem(IDC_SCREEN)->GetWindowRect(screenrect);
sdlparam.screen = SDL_SetVideoMode(screenrect.Width(), screenrect.Height(), 0, 0);
if(!sdlparam.screen) {
AfxMessageBox(L"SDL: could not set video mode");
return 0;
}
sdlparam.rect.x=0;
sdlparam.rect.y=0;
sdlparam.rect.w=screenrect.Width();
sdlparam.rect.h=screenrect.Height();
//-------------
resultdlg=new ResultDlg;
resultdlg->Create(IDD_RESULT_DIALOG);
m_draw.InsertString(0,L"SI");
m_draw.InsertString(1,L"TI");
m_draw.InsertString(2,L"不显示");
m_draw.SetCurSel(0);
SetState(SYSTEM_PREPARE);
//=============================
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
void CTIandSIDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialogEx::OnSysCommand(nID, lParam);
}
}
// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。
void CTIandSIDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
}
//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CTIandSIDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
//解码视频并且计算
int CTIandSIDlg::TIandSI(CString url,LPVOID lparam)
{
CTIandSIDlg *dlg=(CTIandSIDlg *)lparam;;
//----------------
AVFormatContext *pFormatCtx;
int i, video_stream,audio_stream;
AVCodecContext *pCodecCtx,*pCodecCtx_au;
AVCodec *pCodec,*pCodec_au;
char in_url[500]={0};
char out_url[500]={0};
USES_CONVERSION;
sprintf(in_url,"%s",W2A(url));
char *suffix=(char *)strrchr(in_url, '.');//
*suffix='\0';
strcpy(out_url,in_url);
*suffix='.';
sprintf(out_url,"%s_tisi.csv",out_url);
av_register_all();
pFormatCtx = avformat_alloc_context();
if(avformat_open_input(&pFormatCtx,in_url,NULL,NULL)!=0){
AfxMessageBox(L"Couldn't open file.\n");
return FALSE;
}
if(av_find_stream_info(pFormatCtx)<0)
{
AfxMessageBox(L"Couldn't find stream information.\n");
return FALSE;
}
video_stream=-1;
audio_stream=-1;
for(i=0; i<pFormatCtx->nb_streams; i++) {
if(pFormatCtx->streams[i]->codec->codec_type==AVMEDIA_TYPE_VIDEO){
video_stream=i;
}if(pFormatCtx->streams[i]->codec->codec_type==AVMEDIA_TYPE_AUDIO){
audio_stream=i;
}
}
if(video_stream==-1)
{
AfxMessageBox(L"Didn't find a video stream.\n");
return FALSE;
}
if(video_stream!=-1){
pCodecCtx=pFormatCtx->streams[video_stream]->codec;
pCodec=avcodec_find_decoder(pCodecCtx->codec_id);
if(pCodec==NULL)
{
AfxMessageBox(L"Codec not found.\n");
return FALSE;
}
if(avcodec_open2(pCodecCtx, pCodec,NULL)<0)
{
AfxMessageBox(L"Could not open codec.\n");
return FALSE;
}
//vtype=VE_TIL_SIL;
std::vector<float> silist;
std::vector<float> tilist;
AVFrame *pFrame,*pFrameYUV;
pFrame=avcodec_alloc_frame();
pFrameYUV=avcodec_alloc_frame();
uint8_t *out_buffer;
out_buffer=(uint8_t *)av_malloc(avpicture_get_size(PIX_FMT_YUV420P, pCodecCtx->width, pCodecCtx->height));
avpicture_fill((AVPicture *)pFrameYUV, out_buffer, PIX_FMT_YUV420P, pCodecCtx->width, pCodecCtx->h
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
本工具用于计算视频的时间信息(TI,也称为时间复杂度),以及空间 信息(SI,也称为空间复杂度),以上两个指标取自于ITU-R BT.1788标准。 该项目包含了4个工程: TIandSI : 计算YUV数据的TI和SI-图形界面版。 TIandSIcmd : 计算YUV数据的TI和SI-命令行版。 TIandSIpro : 计算压缩码流数据的TI和SI-图形界面版。 TIandSIprocmd : 计算压缩码流数据的TI和SI-命令行版。
资源推荐
资源详情
资源评论
收起资源包目录
TIandSI 3.0 (415个子文件)
TIandSIpro.aps 261KB
TIandSI.aps 259KB
TIandSI.aps 245KB
TIandSIDlg.cpp 22KB
TIandSIDlg.cpp 22KB
TIandSIprocmd.cpp 16KB
TIandSIcmd.cpp 10KB
XGetopt.cpp 7KB
AddDlg.cpp 3KB
TIandSI.cpp 3KB
TIandSI.cpp 2KB
ResultDlg.cpp 2KB
ResultDlg.cpp 1KB
Getopt.cpp 1KB
stdafx.cpp 201B
stdafx.cpp 132B
stdafx.cpp 132B
ourtime.csv 8KB
cuc_ieschool_tisi.csv 0B
avcodec-55.dll 18.37MB
avcodec-55.dll 18.37MB
avformat-55.dll 5.44MB
avformat-55.dll 5.44MB
avfilter-4.dll 2.06MB
avfilter-4.dll 2.06MB
avdevice-55.dll 1.28MB
avdevice-55.dll 1.28MB
swscale-2.dll 426KB
swscale-2.dll 426KB
avutil-52.dll 411KB
avutil-52.dll 411KB
SDL.dll 297KB
SDL.dll 297KB
SDL.dll 297KB
swresample-0.dll 261KB
swresample-0.dll 261KB
postproc-52.dll 119KB
postproc-52.dll 119KB
TIandSI.vcxproj.filters 2KB
TIandSIpro.vcxproj.filters 2KB
TIandSIcmd.vcxproj.filters 2KB
TIandSIprocmd.vcxproj.filters 1KB
cuc_ieschool.flv 1.3MB
.gitignore 39B
.gitignore 33B
.gitignore 33B
.gitignore 33B
.gitignore 33B
SDL_opengl.h 329KB
SDL_opengl.h 329KB
SDL_opengl.h 329KB
avcodec.h 172KB
avcodec.h 172KB
avformat.h 99KB
avformat.h 99KB
avfilter.h 56KB
avfilter.h 56KB
SDL_video.h 37KB
SDL_video.h 37KB
SDL_video.h 37KB
opt.h 34KB
opt.h 34KB
pixfmt.h 31KB
pixfmt.h 31KB
frame.h 22KB
frame.h 22KB
intreadwrite.h 18KB
intreadwrite.h 18KB
avio.h 18KB
avio.h 18KB
swresample.h 17KB
swresample.h 17KB
avdevice.h 16KB
avdevice.h 16KB
SDL_stdinc.h 16KB
SDL_stdinc.h 16KB
SDL_stdinc.h 16KB
old_pix_fmts.h 14KB
old_pix_fmts.h 14KB
mem.h 14KB
mem.h 14KB
common.h 14KB
common.h 14KB
pixdesc.h 13KB
pixdesc.h 13KB
SDL_events.h 13KB
SDL_events.h 13KB
SDL_events.h 13KB
avstring.h 12KB
avstring.h 12KB
swscale.h 12KB
swscale.h 12KB
SDL_audio.h 11KB
SDL_audio.h 11KB
SDL_audio.h 11KB
old_codec_ids.h 10KB
old_codec_ids.h 10KB
samplefmt.h 10KB
samplefmt.h 10KB
log.h 10KB
共 415 条
- 1
- 2
- 3
- 4
- 5
资源评论
- u0111832342017-03-09大神依旧,永存。
雷霄骅
- 粉丝: 4w+
- 资源: 141
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- LCD1602电子时钟程序
- 西北太平洋热带气旋【灾害风险统计】及【登陆我国次数评估】数据集-1980-2023
- 全球干旱数据集【自校准帕尔默干旱程度指数scPDSI】-190101-202312-0.5x0.5
- 基于Python实现的VAE(变分自编码器)训练算法源代码+使用说明
- 全球干旱数据集【标准化降水蒸发指数SPEI-12】-190101-202312-0.5x0.5
- C语言小游戏-五子棋-详细代码可运行
- 全球干旱数据集【标准化降水蒸发指数SPEI-03】-190101-202312-0.5x0.5
- spring boot aop记录修改前后的值demo
- 全球干旱数据集【标准化降水蒸发指数SPEI-01】-190101-202312-0.5x0.5
- ActiveReports
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功