⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timecode.c

📁 avi2mpg1_src 中包含了mpeg1编码的源程序
💻 C
字号:

#include "mplex.h"
/*************************************************************************

    下面的程序是用来计算时间码的。
*************************************************************************/

void empty_timecode_struc (timecode)
Timecode_struc *timecode;
{
    timecode->msb=0;
    timecode->lsb=0;
}

void offset_timecode (time1, time2, offset)
Timecode_struc *time1, *time2, *offset;
{
    offset->msb = time2->msb - time1->msb;
    offset->lsb = time2->lsb - time1->lsb;
}

void copy_timecode (time_original, time_copy)
Timecode_struc *time_original, *time_copy;
{
    time_copy->lsb=time_original->lsb;
    time_copy->msb=time_original->msb;
}

void make_timecode (timestamp, pointer)
double timestamp;
Timecode_struc *pointer;
{
    if (timestamp > MAX_FFFFFFFF)
    {
	pointer->msb=1;
	timestamp -= MAX_FFFFFFFF;
	pointer->lsb=(unsigned long)timestamp;
    } else
    {
	pointer->msb=0;
	pointer->lsb=(unsigned long)timestamp;
    }
}


void add_to_timecode (add, to)
Timecode_struc *add;
Timecode_struc *to;
{
    to->msb = (add->msb ^ to->msb);


    if (((add->lsb & 0x80000000) & (to->lsb & 0x80000000))>>31)
    {
	to->msb = to->msb ^ 1;
	to->lsb = (to->lsb & 0x7fffffff)+(add->lsb & 0x7fffffff);
    }


    else if (((add->lsb & 0x80000000) | (to->lsb & 0x80000000))>>31)
    {
	to->msb = to->msb ^ 
	  ((((add->lsb & 0x7fffffff)+(to->lsb & 0x7fffffff)) & 0x80000000)>>31);
	to->lsb = ((to->lsb & 0x7fffffff)+(add->lsb & 0x7fffffff)^0x80000000);
    }


    else
    {
	to->lsb = to->lsb + add->lsb;
    }
}


/*************************************************************************
    在缓存中复制TimeCode,并根据MPEG系统的规定将其分配到各比特域中
*************************************************************************/

void buffer_timecode (pointer, marker, buffer)

Timecode_struc *pointer;
unsigned char  marker;
unsigned char **buffer;

{
    unsigned char temp;

    temp = (unsigned char)((marker << 4) | (pointer->msb <<3) |
		((pointer->lsb >> 29) & 0x6) | 1);
    *((*buffer)++)=temp;
    temp = (unsigned char)((pointer->lsb & 0x3fc00000) >> 22);
    *((*buffer)++)=temp;
    temp = (unsigned char)(((pointer->lsb & 0x003f8000) >> 14) | 1);
    *((*buffer)++)=temp;
    temp = (unsigned char)((pointer->lsb & 0x7f80) >> 7);
    *((*buffer)++)=temp;
    temp = (unsigned char)(((pointer->lsb & 0x007f) << 1) | 1);
    *((*buffer)++)=temp;

}


int comp_timecode (TS1, TS2)
Timecode_struc *TS1;
Timecode_struc *TS2;
{
    double Time1;
    double Time2;

    Time1 = (TS1->msb * MAX_FFFFFFFF) + (TS1->lsb);
    Time2 = (TS2->msb * MAX_FFFFFFFF) + (TS2->lsb);

    return (Time1 <= Time2);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -