mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-19 00:01:23 +00:00
ad6ed7da2d
Original commit message from CVS: Initial revision
140 lines
5.6 KiB
C
140 lines
5.6 KiB
C
/*************************************************************************
|
|
* 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
|