Doxygen Source Code Documentation
        
Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals   Search   
mpeg2.h
Go to the documentation of this file.00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 #ifndef MPEG2_H
00025 #define MPEG2_H
00026 
00027 #define SEQ_FLAG_MPEG2 1
00028 #define SEQ_FLAG_CONSTRAINED_PARAMETERS 2
00029 #define SEQ_FLAG_PROGRESSIVE_SEQUENCE 4
00030 #define SEQ_FLAG_LOW_DELAY 8
00031 #define SEQ_FLAG_COLOUR_DESCRIPTION 16
00032 
00033 #define SEQ_MASK_VIDEO_FORMAT 0xe0
00034 #define SEQ_VIDEO_FORMAT_COMPONENT 0
00035 #define SEQ_VIDEO_FORMAT_PAL 0x20
00036 #define SEQ_VIDEO_FORMAT_NTSC 0x40
00037 #define SEQ_VIDEO_FORMAT_SECAM 0x60
00038 #define SEQ_VIDEO_FORMAT_MAC 0x80
00039 #define SEQ_VIDEO_FORMAT_UNSPECIFIED 0xa0
00040 
00041 typedef struct {
00042     unsigned int width, height;
00043     unsigned int chroma_width, chroma_height;
00044     unsigned int byte_rate;
00045     unsigned int vbv_buffer_size;
00046     uint32_t flags;
00047 
00048     unsigned int picture_width, picture_height;
00049     unsigned int display_width, display_height;
00050     unsigned int pixel_width, pixel_height;
00051     unsigned int frame_period;
00052 
00053     uint8_t profile_level_id;
00054     uint8_t colour_primaries;
00055     uint8_t transfer_characteristics;
00056     uint8_t matrix_coefficients;
00057 } sequence_t;
00058 
00059 #define PIC_MASK_CODING_TYPE 7
00060 #define PIC_FLAG_CODING_TYPE_I 1
00061 #define PIC_FLAG_CODING_TYPE_P 2
00062 #define PIC_FLAG_CODING_TYPE_B 3
00063 #define PIC_FLAG_CODING_TYPE_D 4
00064 
00065 #define PIC_FLAG_TOP_FIELD_FIRST 8
00066 #define PIC_FLAG_PROGRESSIVE_FRAME 16
00067 #define PIC_FLAG_COMPOSITE_DISPLAY 32
00068 #define PIC_FLAG_SKIP 64
00069 #define PIC_FLAG_PTS 128
00070 #define PIC_MASK_COMPOSITE_DISPLAY 0xfffff000
00071 
00072 typedef struct {
00073     unsigned int temporal_reference;
00074     unsigned int nb_fields;
00075     uint32_t pts;
00076     uint32_t flags;
00077     struct {
00078         int x, y;
00079     } display_offset[3];
00080 } picture_t;
00081 
00082 typedef struct {
00083     uint8_t * buf[3];
00084     void * id;
00085 } fbuf_t;
00086 
00087 typedef struct {
00088     const sequence_t * sequence;
00089     const picture_t * current_picture;
00090     const picture_t * current_picture_2nd;
00091     const fbuf_t * current_fbuf;
00092     const picture_t * display_picture;
00093     const picture_t * display_picture_2nd;
00094     const fbuf_t * display_fbuf;
00095     const fbuf_t * discard_fbuf;
00096     const uint8_t * user_data;
00097     int user_data_len;
00098 } mpeg2_info_t;
00099 
00100 typedef struct mpeg2dec_s mpeg2dec_t;
00101 typedef struct decoder_s decoder_t;
00102 
00103 #define STATE_SEQUENCE 1
00104 #define STATE_SEQUENCE_REPEATED 2
00105 #define STATE_GOP 3
00106 #define STATE_PICTURE 4
00107 #define STATE_SLICE_1ST 5
00108 #define STATE_PICTURE_2ND 6
00109 #define STATE_SLICE 7
00110 #define STATE_END 8
00111 #define STATE_INVALID 9
00112 
00113 struct convert_init_s;
00114 void mpeg2_convert (mpeg2dec_t * mpeg2dec,
00115                     void (* convert) (int, int, uint32_t, void *,
00116                                       struct convert_init_s *), void * arg);
00117 void mpeg2_set_buf (mpeg2dec_t * mpeg2dec, uint8_t * buf[3], void * id);
00118 void mpeg2_custom_fbuf (mpeg2dec_t * mpeg2dec, int custom_fbuf);
00119 void mpeg2_init_fbuf (decoder_t * decoder, uint8_t * current_fbuf[3],
00120                       uint8_t * forward_fbuf[3], uint8_t * backward_fbuf[3]);
00121 
00122 void mpeg2_slice (decoder_t * decoder, int code, const uint8_t * buffer);
00123 
00124 #define MPEG2_ACCEL_X86_MMX 1
00125 #define MPEG2_ACCEL_X86_3DNOW 2
00126 #define MPEG2_ACCEL_X86_MMXEXT 4
00127 #define MPEG2_ACCEL_PPC_ALTIVEC 1
00128 #define MPEG2_ACCEL_ALPHA 1
00129 #define MPEG2_ACCEL_ALPHA_MVI 2
00130 #define MPEG2_ACCEL_MLIB 0x40000000
00131 #define MPEG2_ACCEL_DETECT 0x80000000
00132 
00133 uint32_t mpeg2_accel (uint32_t accel);
00134 mpeg2dec_t * mpeg2_init (void);
00135 const mpeg2_info_t * mpeg2_info (mpeg2dec_t * mpeg2dec);
00136 void mpeg2_close (mpeg2dec_t * mpeg2dec);
00137 
00138 void mpeg2_buffer (mpeg2dec_t * mpeg2dec, uint8_t * start, uint8_t * end);
00139 int mpeg2_parse (mpeg2dec_t * mpeg2dec);
00140 
00141 void mpeg2_skip (mpeg2dec_t * mpeg2dec, int skip);
00142 void mpeg2_slice_region (mpeg2dec_t * mpeg2dec, int start, int end);
00143 
00144 void mpeg2_pts (mpeg2dec_t * mpeg2dec, uint32_t pts);
00145 
00146 #endif