home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: Multimed / Multimed.zip / divempeg.zip / DIMPSRC.ZIP / PVGVIDEO.H < prev    next >
C/C++ Source or Header  |  1995-05-14  |  11KB  |  281 lines

  1.  
  2. #ifndef PVGVIDEO_H
  3. #define PVGVIDEO_H
  4.  
  5. #include <os2.h>
  6.  
  7. /* PVG: Public interface to module video.c */
  8.  
  9. typedef unsigned int UINT32;
  10. typedef unsigned short UINT16;
  11. typedef unsigned char UINT8;
  12.  
  13. /* Define Parsing error codes. */
  14.  
  15. #define SKIP_PICTURE -10
  16. #define SKIP_TO_START_CODE -1
  17. #define PARSE_OK 1
  18.  
  19. /* Define BOOLEAN, TRUE, and FALSE. */
  20.  
  21. #define BOOLEAN int
  22. #define TRUE 1
  23. #define FALSE 0
  24.  
  25. /* Set ring buffer size. */
  26.  
  27. #define RING_BUF_SIZE 5
  28.  
  29. /* Macros for picture code type. */
  30.  
  31. #define I_TYPE 1
  32. #define P_TYPE 2
  33. #define B_TYPE 3
  34.  
  35. /* Start codes. */
  36.  
  37. #define SEQ_END_CODE 0x000001b7
  38. #define SEQ_START_CODE 0x000001b3
  39. #define GOP_START_CODE 0x000001b8
  40. #define PICTURE_START_CODE 0x00000100
  41. #define SLICE_MIN_START_CODE 0x00000101
  42. #define SLICE_MAX_START_CODE 0x000001af
  43. #define EXT_START_CODE 0x000001b5
  44. #define USER_START_CODE 0x000001b2
  45.  
  46. /* Number of macroblocks to process in one call to mpegVidRsrc. */
  47.  
  48. #define MB_QUANTUM 1000
  49.  
  50. /* Macros used with macroblock address decoding. */
  51.  
  52. #define MB_STUFFING 34
  53. #define MB_ESCAPE 35
  54.  
  55. /* Lock flags for pict images. */
  56.  
  57. #define DISPLAY_LOCK 0x01
  58. #define PAST_LOCK 0x02
  59. #define FUTURE_LOCK 0x04
  60.  
  61. /* Temporary definition of time stamp structure. */
  62.  
  63. typedef int TimeStamp;
  64.  
  65. /* Structure with reconstructed pixel values. */
  66.  
  67. typedef struct pict_image {
  68.   unsigned char *luminance;              /* Luminance plane.   */
  69.   unsigned char *Cr;                     /* Cr plane.          */
  70.   unsigned char *Cb;                     /* Cb plane.          */
  71.   unsigned char *display;                /* Display plane.     */
  72.   int locked;                            /* Lock flag.         */
  73.   TimeStamp show_time;                   /* Presentation time. */
  74.  
  75. } PictImage;
  76.  
  77. /* Group of pictures structure. */
  78.  
  79. typedef struct GoP {
  80.   BOOLEAN drop_flag;                     /* Flag indicating dropped frame. */
  81.   unsigned int tc_hours;                 /* Hour component of time code.   */
  82.   unsigned int tc_minutes;               /* Minute component of time code. */
  83.   unsigned int tc_seconds;               /* Second component of time code. */
  84.   unsigned int tc_pictures;              /* Picture counter of time code.  */
  85.   BOOLEAN closed_gop;                    /* Indicates no pred. vectors to
  86.                         previous group of pictures.    */
  87.   BOOLEAN broken_link;                   /* B frame unable to be decoded.  */
  88.   char *ext_data;                        /* Extension data.                */
  89.   char *user_data;                       /* User data.                     */
  90. } GoP;
  91.  
  92. /* Picture structure. */
  93.  
  94. typedef struct pict {
  95.   unsigned int temp_ref;                 /* Temporal reference.             */
  96.   unsigned int code_type;                /* Frame type: P, B, I             */
  97.   unsigned int vbv_delay;                /* Buffer delay.                   */
  98.   BOOLEAN full_pel_forw_vector;          /* Forw. vectors specified in full
  99.                         pixel values flag.              */
  100.   unsigned int forw_r_size;              /* Used for vector decoding.       */
  101.   unsigned int forw_f;                   /* Used for vector decoding.       */
  102.   BOOLEAN full_pel_back_vector;          /* Back vectors specified in full 
  103.                         pixel values flag.              */
  104.   unsigned int back_r_size;              /* Used in decoding.               */
  105.   unsigned int back_f;                   /* Used in decoding.               */
  106.   char *extra_info;                      /* Extra bit picture info.         */
  107.   char *ext_data;                        /* Extension data.                 */
  108.   char *user_data;                       /* User data.                      */
  109. } Pict;
  110.  
  111. /* Slice structure. */
  112.  
  113. typedef struct slice {
  114.   unsigned int vert_pos;                 /* Vertical position of slice. */
  115.   unsigned int quant_scale;              /* Quantization scale.         */
  116.   char *extra_info;                      /* Extra bit slice info.       */
  117. } Slice;
  118.  
  119. /* Macroblock structure. */
  120.  
  121. typedef struct macroblock {
  122.   int mb_address;                        /* Macroblock address.              */
  123.   int past_mb_addr;                      /* Previous mblock address.         */
  124.   int motion_h_forw_code;                /* Forw. horiz. motion vector code. */
  125.   unsigned int motion_h_forw_r;          /* Used in decoding vectors.        */
  126.   int motion_v_forw_code;                /* Forw. vert. motion vector code.  */
  127.   unsigned int motion_v_forw_r;          /* Used in decdoinge vectors.       */
  128.   int motion_h_back_code;                /* Back horiz. motion vector code.  */
  129.   unsigned int motion_h_back_r;          /* Used in decoding vectors.        */
  130.   int motion_v_back_code;                /* Back vert. motion vector code.   */
  131.   unsigned int motion_v_back_r;          /* Used in decoding vectors.        */
  132.   unsigned int cbp;                      /* Coded block pattern.             */
  133.   BOOLEAN mb_intra;                      /* Intracoded mblock flag.          */
  134.   BOOLEAN bpict_past_forw;               /* Past B frame forw. vector flag.  */
  135.   BOOLEAN bpict_past_back;               /* Past B frame back vector flag.   */
  136.   int past_intra_addr;                   /* Addr of last intracoded mblock.  */
  137.   int recon_right_for_prev;              /* Past right forw. vector.         */
  138.   int recon_down_for_prev;               /* Past down forw. vector.          */
  139.   int recon_right_back_prev;             /* Past right back vector.          */
  140.   int recon_down_back_prev;              /* Past down back vector.           */
  141. } Macroblock;
  142.  
  143. /* Block structure. */
  144.  
  145. typedef struct block {
  146.   short int dct_recon[8][8];             /* Reconstructed dct coeff matrix. */
  147.   short int dct_dc_y_past;               /* Past lum. dc dct coefficient.   */
  148.   short int dct_dc_cr_past;              /* Past cr dc dct coefficient.     */
  149.   short int dct_dc_cb_past;              /* Past cb dc dct coefficient.     */
  150. } Block;
  151.  
  152. /* Video stream structure. */
  153.  
  154. typedef struct vid_stream {
  155.   unsigned int h_size;                         /* Horiz. size in pixels.     */
  156.   unsigned int v_size;                         /* Vert. size in pixels.      */
  157.   unsigned int mb_height;                      /* Vert. size in mblocks.     */
  158.   unsigned int mb_width;                       /* Horiz. size in mblocks.    */
  159.   unsigned char aspect_ratio;                  /* Code for aspect ratio.     */
  160.   unsigned char picture_rate;                  /* Code for picture rate.     */
  161.   unsigned int bit_rate;                       /* Bit rate.                  */
  162.   unsigned int vbv_buffer_size;                /* Minimum buffer size.       */
  163.   BOOLEAN const_param_flag;                    /* Contrained parameter flag. */
  164.   unsigned char intra_quant_matrix[8][8];      /* Quantization matrix for
  165.                           intracoded frames.         */
  166.   unsigned char non_intra_quant_matrix[8][8];  /* Quanitization matrix for 
  167.                           non intracoded frames.     */
  168.   char *ext_data;                              /* Extension data.            */
  169.   char *user_data;                             /* User data.                 */
  170.   GoP group;                                   /* Current group of pict.     */
  171.   Pict picture;                                /* Current picture.           */
  172.   Slice slice;                                 /* Current slice.             */
  173.   Macroblock mblock;                           /* Current macroblock.        */
  174.   Block block;                                 /* Current block.             */
  175.   int state;                                   /* State of decoding.         */
  176.   int bit_offset;                              /* Bit offset in stream.      */
  177.   unsigned int *buffer;                        /* Pointer to next byte in
  178.                           buffer.                    */
  179.   int buf_length;                              /* Length of remaining buffer.*/
  180.   unsigned int *buf_start;                     /* Pointer to buffer start.   */
  181.   int max_buf_length;                          /* Max lenght of buffer.      */
  182.   PictImage *past;                             /* Past predictive frame.     */
  183.   PictImage *future;                           /* Future predictive frame.   */
  184.   PictImage *current;                          /* Current frame.             */
  185.   PictImage *ring[RING_BUF_SIZE];              /* Ring buffer of frames.     */
  186. } VidStream;
  187.  
  188. /* Definition of Contant integer scale factor. */
  189.  
  190. #define CONST_BITS 13
  191.  
  192. /* Misc DCT definitions */
  193. #define DCTSIZE        8    /* The basic DCT block is 8x8 samples */
  194. #define DCTSIZE2    64    /* DCTSIZE squared; # of elements in a block */
  195.  
  196. #define GLOBAL            /* a function referenced thru EXTERNs */
  197.   
  198. typedef short DCTELEM;
  199. typedef DCTELEM DCTBLOCK[DCTSIZE2];
  200.  
  201. /* PVG: return values of mpegVidRsrc:  */
  202. /* (1) When mpegVidRsrc is called the FIRST time: */
  203.  
  204. /* mpeg stream was valid + info about mpeg-video available */
  205. #define MPEG_INFO 0
  206. /* mpeg stream was not valid */
  207. #define MPEG_INVALID 1
  208. /* NewVidStream was NOT called before */
  209. #define MPEG_NULL 2
  210.  
  211. /* (2) When mpegVidRsrc is called afterwards: */
  212.  
  213. /* MB_QUANTUM of macroblocks decoded */
  214. #define MPEG_MB_QUANTUM 3
  215. /* a slice decoded */
  216. #define MPEG_SLICE 4
  217. /* a frame encountered that was labeled as to be skipped */
  218. #define MPEG_FRAME_SKIP 5
  219. /* a frame decoded that must not be displayed yet */
  220. #define MPEG_FRAME_NODISP 6
  221. /* a frame decoded that must be displayed */
  222. #define MPEG_FRAME_DISP 7
  223. /* an error was encountered, but processing can continue */
  224. #define MPEG_ERROR 8
  225. /* end of mpeg-video encountered, display last frame */
  226. #define MPEG_DONE_DISP 9
  227. /* end of mpeg-video encountered, no frame left to display */
  228. #define MPEG_DONE_NODISP 10
  229.  
  230. /* PVG: Function Prototypes */
  231.  
  232. VOID EXPENTRY ResetVidStream(VOID);
  233. VidStream * EXPENTRY NewVidStream (char * fname, int bufLength, int loop, int quiet,
  234.                          int noDisplay, int ditherType);
  235.  
  236. VOID EXPENTRY DestroyVidStream (VidStream *astream );
  237. int EXPENTRY mpegVidRsrc (TimeStamp time_stamp , VidStream *vid_stream, char **
  238.                pditherFlags);
  239. VOID EXPENTRY VidStreamFlags(int type, int loop, int noDisplay);
  240. VOID EXPENTRY TogglePFlag(VOID);
  241. VOID EXPENTRY ToggleBFlag(VOID);
  242. VOID EXPENTRY init_tables(VOID);
  243.  
  244. #ifdef ANALYSIS
  245.       
  246. typedef struct {
  247.   int frametype;
  248.   unsigned int totsize;
  249.   unsigned int number;
  250.   unsigned int i_mbsize;
  251.   unsigned int p_mbsize;
  252.   unsigned int b_mbsize;
  253.   unsigned int bi_mbsize;
  254.   unsigned int i_mbnum;
  255.   unsigned int p_mbnum;
  256.   unsigned int b_mbnum;
  257.   unsigned int bi_mbnum;
  258.   unsigned int i_mbcbp[64];
  259.   unsigned int p_mbcbp[64];
  260.   unsigned int b_mbcbp[64];
  261.   unsigned int bi_mbcbp[64];
  262.   unsigned int i_mbcoeff[64];
  263.   unsigned int p_mbcoeff[64];
  264.   unsigned int b_mbcoeff[64];
  265.   unsigned int bi_mbcoeff[64];
  266.   double tottime;
  267. } Statval;
  268.  
  269. typedef void FNSTAT ();
  270. typedef FNSTAT * PFNSTAT;
  271.  
  272. VOID EXPENTRY PassStats(int showEachFlg, PFNSTAT ShowOneStat, PFNSTAT ShowAllStats);
  273.  
  274. VOID EXPENTRY GetStats(Statval ** stat);
  275.  
  276. /* ifdef ANALYSIS */
  277. #endif
  278.  
  279. #endif
  280.  
  281.