summaryrefslogtreecommitdiff
path: root/gst/mpeg1sys/main.h
blob: 56e90e9927fe338913ff7c558aa0817eafe8945d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/*************************************************************************
*  Generating a MPEG/SYSTEMS                                             *
*  MULTIPLEXED VIDEO/AUDIO STREAM                                        *
*  from two MPEG source streams                                          *
*  Christoph Moar                                                        *
*  SIEMENS CORPORATE RESEARCH AND DEVELOPMENT ST SN 11 / T SN 6          *
*  (C) 1994 1995                                                         *
**************************************************************************
*  Restrictions apply. Will not support the whole MPEG/SYSTEM Standard.  *
*  Basically, will generate Constrained System Parameter Files.          *
*  Mixes only one audio and/or one video stream. Might be expanded.      *
*************************************************************************/

/*************************************************************************
*  mplex - MPEG/SYSTEMS multiplexer                                      *
*  Copyright (C) 1994 1995 Christoph Moar                                *
*  Siemens ZFE ST SN 11 / T SN 6                                         *
*                                                                        *
*  moar@informatik.tu-muenchen.de                                        *
*       (Christoph Moar)                                                 *
*                                                                        *
*  This program is free software; you can redistribute it and/or modify  *
*  it under the terms of the GNU General Public License as published by  *
*  the Free Software Foundation; either version 2 of the License, or     *
*  (at your option) any later version.                                   *
*                                                                        *
*  This program is distributed in the hope that it will be useful,       *
*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
*  GNU General Public License for more details.                          *
*                                                                        *
*  You should have received a copy of the GNU General Public License     *
*  along with this program; if not, write to the Free Software           *
*  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.             *
*************************************************************************/


#ifndef __MAIN_H__
#define __MAIN_H__

#include <glib.h>

#define PACK_START              0x000001ba
#define SYS_HEADER_START        0x000001bb
#define ISO11172_END            0x000001b9
#define PACKET_START            0x000001

#define CLOCKS                  90000.0         /* System Clock Hertz   */

#define AFTER_PACKET_LENGTH     15              /* No of non-data-bytes */
                                                /* following the packet */
                                                /* length field         */
#define LAST_SCR_BYTE_IN_PACK   9               /* No of bytes in pack  */
                                                /* preceding, and       */
                                                /* including, the SCR   */

/* The following values for sys_header_length & size are only valid for */
/* System streams consisting of two basic streams. When wrapping around */
/* the system layer on a single video or a single audio stream, those   */
/* values get decreased by 3.                                           */

#define SYS_HEADER_LENGTH       12              /* length of Sys Header */
                                                /* after start code and */
                                                /* length field         */

#define SYS_HEADER_SIZE         18              /* incl. start code and */
                                                /* length field         */
#define PACK_HEADER_SIZE        12

#define PACKET_HEADER_SIZE      6

#define MAX_SECTOR_SIZE         0x20000         /* Max Sektor Groesse   */

#define STREAMS_VIDEO           1
#define STREAMS_AUDIO           2
#define STREAMS_BOTH            3

#define AUDIO_STREAMS           0xb8            /* Marker Audio Streams */
#define VIDEO_STREAMS           0xb9            /* Marker Video Streams */
#define AUDIO_STR_0             0xc0            /* Marker Audio Stream0 */
#define VIDEO_STR_0             0xe0            /* Marker Video Stream0 */
#define PADDING_STR             0xbe            /* Marker Padding Stream*/

#define ZERO_STUFFING_BYTE      0
#define STUFFING_BYTE           0xff
#define RESERVED_BYTE           0xff
#define TIMESTAMPS_NO           0               /* Flag NO timestamps   */
#define TIMESTAMPS_PTS          1               /* Flag PTS timestamp   */
#define TIMESTAMPS_PTS_DTS      2               /* Flag BOTH timestamps */

#define MARKER_SCR              2               /* Marker SCR           */
#define MARKER_JUST_PTS         2               /* Marker only PTS      */
#define MARKER_PTS              3               /* Marker PTS           */
#define MARKER_DTS              1               /* Marker DTS           */
#define MARKER_NO_TIMESTAMPS    0x0f            /* Marker NO timestamps */

#define STATUS_AUDIO_END        0               /* Statusmessage A end  */
#define STATUS_VIDEO_END        1               /* Statusmessage V end  */
#define STATUS_AUDIO_TIME_OUT   2               /* Statusmessage A out  */
#define STATUS_VIDEO_TIME_OUT   3               /* Statusmessage V out  */

/*************************************************************************
    Typ- und Strukturdefinitionen
*************************************************************************/

typedef struct sector_struc     /* A sector, can contain pack, sys header       */
                                /* and packet.          */
{   unsigned char  buf [MAX_SECTOR_SIZE] ;
    unsigned int   length_of_sector  ;
    unsigned int   length_of_packet_data ;
    guint64 TS                ;
} Sector_struc;

typedef struct pack_struc       /* Pack Info                            */
{   unsigned char  buf [PACK_HEADER_SIZE];
    guint64 SCR;
} Pack_struc;

typedef struct sys_header_struc /* System Header Info                   */
{   unsigned char  buf [SYS_HEADER_SIZE];
} Sys_header_struc;

/*************************************************************************
    Funktionsprototypen, keine Argumente, K&R Style
*************************************************************************/

/* systems.c */
void create_sector (Sector_struc     *sector, Pack_struc       *pack, Sys_header_struc *sys_header,
        unsigned int packet_size, unsigned char *inputbuffer, unsigned char type, unsigned char buffer_scale,
        unsigned int buffer_size, unsigned char buffers, guint64 PTS, guint64 DTS,
        unsigned char timestamps, unsigned int  which_streams);

void create_pack (Pack_struc *pack, guint64 SCR, unsigned int mux_rate);

void create_sys_header (Sys_header_struc *sys_header, unsigned int rate_bound, unsigned char audio_bound,
        unsigned char fixed, unsigned char CSPS, unsigned char audio_lock, unsigned char video_lock,
        unsigned char video_bound, unsigned char stream1, unsigned char buffer1_scale, unsigned int buffer1_size,
        unsigned char stream2, unsigned char buffer2_scale, unsigned int buffer2_size, unsigned int which_streams);

#endif