#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
int main(int n, char *cl[])
{
FILE *f1, *f2;
int i, x, y, yuv, inc = 1, size = 0, N = 0, Y, F;
double yrmse, diff, mean = 0, stdv = 0, *ypsnr = 0;
unsigned char *b1, *b2;
int k=1;
clock_t t = clock();
if (n != 6 && n != 7) {
puts("psnr x y <YUV format> <src.yuv> <dst.yuv> [multiplex]");
puts(" x\t\tframe width");
puts(" y\t\tframe height");
puts(" YUV format\t420, 422, etc.");
puts(" src.yuv\tsource video");
puts(" dst.yuv\tdistorted video");
puts(" [multiplex]\toptional");
return EXIT_FAILURE;
}
if ((f1 = fopen(cl[4],"rb")) == 0) goto A;
if ((f2 = fopen(cl[5],"rb")) == 0) goto B;
if (!(x = strtoul(cl[1], 0, 10)) ||
!(y = strtoul(cl[2], 0, 10))) goto C;
if ((yuv = strtoul(cl[3], 0, 10)) > 444) goto D;
if (cl[6] && !strcmp(cl[6], "multiplex")) inc = 2;
Y = x * y;
switch (yuv) {
case 400: F = Y; break;
case 422: F = Y * 2; break;
case 444: F = Y * 3; break;
default :
case 420: F = Y * 3 / 2; break;
}
if (!(b1 = malloc(F))) goto E;
if (!(b2 = malloc(F))) goto E;
for (;;) {
if (1 != fread(b1, F, 1, f1) || 1 != fread(b2, F, 1, f2)) break;
for (yrmse=0, i=inc-1; i<(inc==1 ? Y : F); i+=inc) {
diff = b1[i] - b2[i];
yrmse += diff * diff;
}
if (++N > size) {
size += 0xffff;
if (!(ypsnr = realloc(ypsnr, size * sizeof *ypsnr))) goto E;
}
mean += ypsnr[N-1] = yrmse ? 20 * (log10(255 / sqrt(yrmse / Y))) : 0;
//printf("%d\t%.2f\n", k++, ypsnr[N-1]);
}
if (N) {
mean /= N;
for (stdv=0, i=0; i<N; i++) {
diff = ypsnr[i] - mean;
stdv += diff * diff;
}
stdv = sqrt(stdv / (N - 1));
free(ypsnr);
}
fclose(f1);
fclose(f2);
printf("avgerage psnr:%lf\n", mean);
//fprintf(stderr, "psnr:\t%d frames (CPU: %lu s) mean: %.2f stdv: %.2f\n",
// N, (unsigned long) ((clock() - t) / CLOCKS_PER_SEC), mean, stdv);
return 0;
A: fprintf(stderr, " Error opening sourcefile.\n"); goto X;
B: fprintf(stderr, " Error opening decodedfile.\n"); goto X;
C: fprintf(stderr, " Invalid width or height.\n"); goto X;
D: fprintf(stderr, " Invalid YUV format.\n"); goto X;
E: fprintf(stderr, " Not enough memory.\n");
X: return EXIT_FAILURE;
}
没有合适的资源?快使用搜索试试~ 我知道了~
NS2仿真实验——多媒体和无线网络通信[柯志亨][上机实验程序]
共67个文件
tcl:41个
exe:8个
db:6个
5星 · 超过95%的资源 需积分: 9 23 下载量 5 浏览量
2013-03-01
12:03:44
上传
评论 1
收藏 13.17MB ZIP 举报
温馨提示
NS2仿真实验——多媒体和无线网络通信[柯志亨][上机实验程序] 书上的源程序,很值的分析!
资源推荐
资源详情
资源评论
收起资源包目录
12314141.zip (67个子文件)
lab13
lab13_3.tcl 2KB
lab13_2.tcl 2KB
lab13_1.tcl 3KB
Thumbs.db 6KB
lab15
lab15_2.tcl 4KB
lab15_1.tcl 4KB
Thumbs.db 5KB
lab15_3.tcl 2KB
lab1
lab19
ffmpeg.exe 3.96MB
lab19_1.tcl 6KB
avgpsnr.c 2KB
ffmpeg_help 7KB
psnr.exe 15KB
etmp4.exe 192KB
psnr.c 2KB
mp4trace.exe 176KB
foreman_qcif.yuv 14.5MB
lab19_2.tcl 7KB
foreman_qcif.st 8KB
MP4Box.exe 1.23MB
avgpsnr.exe 15KB
lab16
lab16.tcl 3KB
throughput.pl 1KB
lab17
TSW3CM.tcl 5KB
measure-cbr1.awk 911B
SRTCM.tcl 5KB
measure-cbr0.awk 911B
TRTCM.tcl 5KB
Thumbs.db 5KB
lab12
lab12.tcl 3KB
Thumbs.db 7KB
faq
ori.c 143B
mypatch 320B
test-queuelen.tcl 3KB
ori.exe 11KB
test_dcf_edcf.tcl 3KB
tcp_throughput.pl 1KB
yuv2avi_p2.exe 108KB
new.c 185B
test_change_bw.tcl 616B
lab2
2_1_3.tcl 30B
2_6_2.tcl 185B
2_2_1.tcl 36B
2_6_3.tcl 189B
2_7_1.tcl 334B
2_3_2.tcl 107B
2_4_5.tcl 89B
2_5_2.tcl 209B
2_2_3.tcl 35B
2_2_2.tcl 36B
2_3_1.tcl 67B
2_8_1.tcl 121B
2_4_3.tcl 79B
2_1_1.tcl 40B
2_5_1.tcl 331B
2_4_4.tcl 83B
2_1_2.tcl 91B
2_6_1.tcl 128B
2_4_2.tcl 225B
2_4_1.tcl 329B
lab10
routing.tcl 2KB
lab14
lab14_2.tcl 2KB
lab14_1.tcl 2KB
Thumbs.db 6KB
lab18
lab18.tcl 4KB
lab11
Thumbs.db 6KB
lab11.tcl 2KB
共 67 条
- 1
资源评论
- yendo2014-04-24确实很清晰,很入门的一本书,谢谢楼主分享
- xiaoxiaojuzi_02012013-05-07如果有题目就好了,但是代码还不错
- cunliergouzi2013-03-26怎么没有目录和介绍?只有源码好难找到想要的部分
- lnhuaxiehuafei2013-06-01缺少目录介绍呀 看得不清晰
blue__sky2011
- 粉丝: 2
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功