timestatus.c
资源名称:NETVIDEO.rar [点击查看]
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:4k
源码类别:
流媒体/Mpeg4/MP4
开发平台:
Visual C++
- #include "timestatus.h"
- #include "util.h"
- #include <time.h>
- #if defined(CLOCKS_PER_SEC)
- /* ANSI/ISO systems */
- # define TS_CLOCKS_PER_SEC CLOCKS_PER_SEC
- #elif defined(CLK_TCK)
- /* Non-standard systems */
- # define TS_CLOCKS_PER_SEC CLK_TCK
- #elif defined(HZ)
- /* Older BSD systems */
- # define TS_CLOCKS_PER_SEC HZ
- #else
- # error no suitable value for TS_CLOCKS_PER_SEC
- #endif
- /*********************************************************/
- /* ts_real_time: real time elapsed in seconds */
- /*********************************************************/
- FLOAT ts_real_time(long frame) {
- static time_t initial_time;
- time_t current_time;
- time(¤t_time);
- if (frame==0) {
- initial_time = current_time;
- }
- return (FLOAT) difftime(current_time, initial_time);
- }
- /*********************************************************/
- /* ts_process_time: process time elapsed in seconds */
- /*********************************************************/
- FLOAT ts_process_time(long frame) {
- static clock_t initial_time;
- clock_t current_time;
- #if ( defined(_MSC_VER) || defined(__BORLANDC__) )
- { static HANDLE hProcess;
- FILETIME Ignored1, Ignored2, KernelTime, UserTime;
- if ( frame==0 ) {
- hProcess = GetCurrentProcess();
- }
- /* GetProcessTimes() always fails under Win9x */
- if (GetProcessTimes(hProcess, &Ignored1, &Ignored2, &KernelTime, &UserTime)) {
- LARGE_INTEGER Kernel = { KernelTime.dwLowDateTime, KernelTime.dwHighDateTime };
- LARGE_INTEGER User = { UserTime.dwLowDateTime, UserTime.dwHighDateTime };
- current_time = (clock_t)((FLOAT)(Kernel.QuadPart + User.QuadPart) * TS_CLOCKS_PER_SEC / 10000000);
- } else {
- current_time = clock();
- }
- }
- #else
- current_time = clock();
- #endif
- if (frame==0) {
- initial_time = current_time;
- }
- return (FLOAT)(current_time - initial_time) / TS_CLOCKS_PER_SEC;
- }
- #undef TS_CLOCKS_PER_SEC
- typedef struct ts_times {
- FLOAT so_far;
- FLOAT estimated;
- FLOAT speed;
- FLOAT eta;
- } ts_times;
- /*********************************************************/
- /* ts_calc_times: calculate time info (eta, speed, etc.) */
- /*********************************************************/
- void ts_calc_times(ts_times *time, int samp_rate, long frame, long frames,int framesize)
- {
- if (frame > 0) {
- time->estimated = time->so_far * frames / frame;
- if (samp_rate * time->estimated > 0) {
- time->speed = frames * framesize / (samp_rate * time->estimated);
- } else {
- time->speed = 0;
- }
- time->eta = time->estimated - time->so_far;
- } else {
- time->estimated = 0;
- time->speed = 0;
- time->eta = 0;
- }
- }
- /*********************************************************/
- /* timestatus: display encoding process time information */
- /*********************************************************/
- void timestatus(int samp_rate,long frameNum,long totalframes,int framesize)
- {
- ts_times real_time, process_time;
- int percent;
- real_time.so_far = ts_real_time(frameNum);
- process_time.so_far = ts_process_time(frameNum);
- if (frameNum == 0) {
- fprintf(stderr, " Frame | CPU/estimated | time/estimated | play/CPU | ETAn");
- return;
- }
- ts_calc_times(&real_time, samp_rate, frameNum, totalframes, framesize);
- ts_calc_times(&process_time, samp_rate, frameNum, totalframes, framesize);
- if (totalframes > 1) {
- percent = (int)(100.0 * frameNum / (totalframes - 1));
- } else {
- percent = 100;
- }
- # define TS_TIME_DECOMPOSE(time)
- (int)((long)(time+.5) / 3600),
- (int)((long)((time+.5) / 60) % 60),
- (int)((long)(time+.5) % 60)
- fprintf(stderr,
- "r%6ld/%6ld(%3d%%)|%2d:%02d:%02d/%2d:%02d:%02d|%2d:%02d:%02d/%2d:%02d:%02d|%10.4f|%2d:%02d:%02d ",
- frameNum,
- totalframes - 1,
- percent,
- TS_TIME_DECOMPOSE(process_time.so_far),
- TS_TIME_DECOMPOSE(process_time.estimated),
- TS_TIME_DECOMPOSE(real_time.so_far),
- TS_TIME_DECOMPOSE(real_time.estimated),
- process_time.speed,
- TS_TIME_DECOMPOSE(real_time.eta)
- );
- fflush(stderr);
- }