📄 video.h
字号:
/* * Copyright (c) 1992 The Regents of the University of California. * All rights reserved. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose, without fee, and without written agreement is * hereby granted, provided that the above copyright notice and the following * two paragraphs appear in all copies of this software. * * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. */#include <stdio.h>#ifdef SH_MEM#include <sys/ipc.h>#include <sys/shm.h>#endif/* X11/xmd.h correctly defines INT32, etc */#ifndef XMD_Htypedef int INT32;typedef short INT16;typedef char INT8;#endiftypedef unsigned int UINT32;typedef unsigned short UINT16;typedef unsigned char UINT8; /* Define Parsing error codes. */#define SKIP_PICTURE -10#define SKIP_TO_START_CODE -1#define PARSE_OK 1/* Define BOOLEAN, TRUE, and FALSE. */#define BOOLEAN int#define TRUE 1#define FALSE 0/* Set ring buffer size. */#define RING_BUF_SIZE 5/* Macros for picture code type. */#define I_TYPE 1#define P_TYPE 2#define B_TYPE 3/* Start codes. */#define SEQ_END_CODE 0x000001b7#define SEQ_START_CODE 0x000001b3#define GOP_START_CODE 0x000001b8#define PICTURE_START_CODE 0x00000100#define SLICE_MIN_START_CODE 0x00000101#define SLICE_MAX_START_CODE 0x000001af#define EXT_START_CODE 0x000001b5#define USER_START_CODE 0x000001b2/* Number of macroblocks to process in one call to mpegVidRsrc. */#define MB_QUANTUM 100/* Macros used with macroblock address decoding. */#define MB_STUFFING 34#define MB_ESCAPE 35/* Lock flags for pict images. */#define DISPLAY_LOCK 0x01#define PAST_LOCK 0x02#define FUTURE_LOCK 0x04#define HYBRID_DITHER 0#define HYBRID2_DITHER 1#define FS4_DITHER 2#define FS2_DITHER 3#define FS2FAST_DITHER 4#define Twox2_DITHER 5#define GRAY_DITHER 6#define FULL_COLOR_DITHER 7#define NO_DITHER 8#define ORDERED_DITHER 9#define MONO_DITHER 10#define MONO_THRESHOLD 11#define ORDERED2_DITHER 12#define MBORDERED_DITHER 13/* External declaration of row,col to zig zag conversion matrix. */extern int scan[][8];/* Temporary definition of time stamp structure. */typedef int TimeStamp;/* Structure with reconstructed pixel values. */typedef struct pict_image { unsigned char *luminance; /* Luminance plane. */ unsigned char *Cr; /* Cr plane. */ unsigned char *Cb; /* Cb plane. */ unsigned char *display; /* Display plane. */ int locked; /* Lock flag. */ TimeStamp show_time; /* Presentation time. */#ifdef SH_MEM XShmSegmentInfo shminfo; /* Segment info. */ XImage *ximage; /* Ximage struct. */#endif} PictImage;/* Group of pictures structure. */typedef struct GoP { BOOLEAN drop_flag; /* Flag indicating dropped frame. */ unsigned int tc_hours; /* Hour component of time code. */ unsigned int tc_minutes; /* Minute component of time code. */ unsigned int tc_seconds; /* Second component of time code. */ unsigned int tc_pictures; /* Picture counter of time code. */ BOOLEAN closed_gop; /* Indicates no pred. vectors to previous group of pictures. */ BOOLEAN broken_link; /* B frame unable to be decoded. */ char *ext_data; /* Extension data. */ char *user_data; /* User data. */} GoP;/* Picture structure. */typedef struct pict { unsigned int temp_ref; /* Temporal reference. */ unsigned int code_type; /* Frame type: P, B, I */ unsigned int vbv_delay; /* Buffer delay. */ BOOLEAN full_pel_forw_vector; /* Forw. vectors specified in full pixel values flag. */ unsigned int forw_r_size; /* Used for vector decoding. */ unsigned int forw_f; /* Used for vector decoding. */ BOOLEAN full_pel_back_vector; /* Back vectors specified in full pixel values flag. */ unsigned int back_r_size; /* Used in decoding. */ unsigned int back_f; /* Used in decoding. */ char *extra_info; /* Extra bit picture info. */ char *ext_data; /* Extension data. */ char *user_data; /* User data. */} Pict;/* Slice structure. */typedef struct slice { unsigned int vert_pos; /* Vertical position of slice. */ unsigned int quant_scale; /* Quantization scale. */ char *extra_info; /* Extra bit slice info. */} Slice;/* Macroblock structure. */typedef struct macroblock { int mb_address; /* Macroblock address. */ int past_mb_addr; /* Previous mblock address. */ int motion_h_forw_code; /* Forw. horiz. motion vector code. */ unsigned int motion_h_forw_r; /* Used in decoding vectors. */ int motion_v_forw_code; /* Forw. vert. motion vector code. */ unsigned int motion_v_forw_r; /* Used in decdoinge vectors. */ int motion_h_back_code; /* Back horiz. motion vector code. */ unsigned int motion_h_back_r; /* Used in decoding vectors. */ int motion_v_back_code; /* Back vert. motion vector code. */ unsigned int motion_v_back_r; /* Used in decoding vectors. */ unsigned int cbp; /* Coded block pattern. */ BOOLEAN mb_intra; /* Intracoded mblock flag. */ BOOLEAN bpict_past_forw; /* Past B frame forw. vector flag. */ BOOLEAN bpict_past_back; /* Past B frame back vector flag. */ int past_intra_addr; /* Addr of last intracoded mblock. */ int recon_right_for_prev; /* Past right forw. vector. */ int recon_down_for_prev; /* Past down forw. vector. */ int recon_right_back_prev; /* Past right back vector. */ int recon_down_back_prev; /* Past down back vector. */} Macroblock;/* Block structure. */typedef struct block { short int dct_recon[8][8]; /* Reconstructed dct coeff matrix. */ short int dct_dc_y_past; /* Past lum. dc dct coefficient. */ short int dct_dc_cr_past; /* Past cr dc dct coefficient. */ short int dct_dc_cb_past; /* Past cb dc dct coefficient. */} Block;/* Video stream structure. */typedef struct vid_stream { unsigned int h_size; /* Horiz. size in pixels. */ unsigned int v_size; /* Vert. size in pixels. */ unsigned int mb_height; /* Vert. size in mblocks. */ unsigned int mb_width; /* Horiz. size in mblocks. */ unsigned char aspect_ratio; /* Code for aspect ratio. */ unsigned char picture_rate; /* Code for picture rate. */ unsigned int bit_rate; /* Bit rate. */ unsigned int vbv_buffer_size; /* Minimum buffer size. */ BOOLEAN const_param_flag; /* Contrained parameter flag. */ unsigned char intra_quant_matrix[8][8]; /* Quantization matrix for intracoded frames. */ unsigned char non_intra_quant_matrix[8][8]; /* Quanitization matrix for non intracoded frames. */ char *ext_data; /* Extension data. */ char *user_data; /* User data. */ GoP group; /* Current group of pict. */ Pict picture; /* Current picture. */ Slice slice; /* Current slice. */ Macroblock mblock; /* Current macroblock. */ Block block; /* Current block. */ int state; /* State of decoding. */ int bit_offset; /* Bit offset in stream. */ unsigned int *buffer; /* Pointer to next byte in buffer. */ int buf_length; /* Length of remaining buffer.*/ unsigned int *buf_start; /* Pointer to buffer start. */ int max_buf_length; /* Max lenght of buffer. */ PictImage *past; /* Past predictive frame. */ PictImage *future; /* Future predictive frame. */ PictImage *current; /* Current frame. */ PictImage *ring[RING_BUF_SIZE]; /* Ring buffer of frames. */} VidStream; /* Declaration of global pointer to current video stream. */extern VidStream *curVidStream;/* Declarataion of global display pointer. *//* extern Display *display;*//* Shared memory flag. */extern int shmemFlag;/* Quiet mode flag. */extern int quietFlag;/* Dither flags external declaration. */extern char *ditherFlags;/* Definition of Contant integer scale factor. */#define CONST_BITS 13/* Misc DCT definitions */#define DCTSIZE 8 /* The basic DCT block is 8x8 samples */#define DCTSIZE2 64 /* DCTSIZE squared; # of elements in a block */#define GLOBAL /* a function referenced thru EXTERNs */ typedef short DCTELEM;typedef DCTELEM DCTBLOCK[DCTSIZE2]; #ifdef SH_MEMextern int gXErrorFlag;#endifextern double realTimeStart;extern int totNumFrames;extern int loopFlag;extern int noDisplayFlag;/* extern jmp_buf env;*/#ifdef ANALYSISextern unsigned int bitCount;extern int showEachFlag;extern unsigned int cacheHit[8][8];extern unsigned int cacheMiss[8][8];#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -