1
/*****************************************************************************
3
*****************************************************************************/
5
/*****************************************************************************
6
* File name: mpeg_remux.c *
7
* Created: 2003-02-02 by Hampa Hug <hampa@hampa.ch> *
8
* Last modified: 2003-09-10 by Hampa Hug <hampa@hampa.ch> *
9
* Copyright: (C) 2003 by Hampa Hug <hampa@hampa.ch> *
10
*****************************************************************************/
12
/*****************************************************************************
13
* This program is free software. You can redistribute it and / or modify it *
14
* under the terms of the GNU General Public License version 2 as published *
15
* by the Free Software Foundation. *
17
* This program is distributed in the hope that it will be useful, but *
18
* WITHOUT ANY WARRANTY, without even the implied warranty of *
19
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General *
20
* Public License for more details. *
21
*****************************************************************************/
23
/* $Id: mpeg_remux.c 67 2004-01-02 18:20:15Z hampa $ */
25
// The code has been modified to use file descriptors instead of FILE streams.
26
// Only functionality needed in MediaTomb remains, all extra features are
31
#include "autoconfig.h"
41
#include "mpeg_parse.h"
42
#include "mpeg_remux.h"
43
#include "mpegdemux_internal.h"
46
static mpeg_buffer_t shdr = { NULL, 0, 0 };
47
static mpeg_buffer_t pack = { NULL, 0, 0 };
48
static mpeg_buffer_t packet = { NULL, 0, 0 };
51
int mpeg_remux_system_header (mpeg_demux_t *mpeg)
53
if (mpeg_buf_write_clear (&pack, mpeg->ext)) {
57
if (mpeg_buf_read (&shdr, mpeg, mpeg->shdr.size)) {
61
if (mpeg_buf_write_clear (&shdr, mpeg->ext)) {
69
int mpeg_remux_packet (mpeg_demux_t *mpeg)
74
sid = mpeg->packet.sid;
75
ssid = mpeg->packet.ssid;
77
if (mpeg_stream_excl (sid, ssid)) {
83
if (mpeg_buf_read (&packet, mpeg, mpeg->packet.size)) {
84
fprintf(stderr, "remux: incomplete packet (sid=%02x size=%u/%u)\n",
85
sid, packet.cnt, mpeg->packet.size
89
mpeg_buf_clear (&packet);
96
if (mpeg_buf_write_clear (&pack, mpeg->ext)) {
100
if (mpeg_buf_write_clear (&packet, mpeg->ext)) {
108
int mpeg_remux_pack (mpeg_demux_t *mpeg)
110
if (mpeg_buf_read (&pack, mpeg, mpeg->pack.size)) {
114
if (par_empty_pack) {
115
if (mpeg_buf_write_clear (&pack, mpeg->ext)) {
124
int mpeg_remux_end (mpeg_demux_t *mpeg)
126
if (mpeg_copy (mpeg, mpeg->ext, 4)) {
133
int mpeg_remux (int inp, int out)
138
mpeg = mpegd_open_fd (NULL, inp, 0);
144
mpeg->mpeg_system_header = &mpeg_remux_system_header;
145
mpeg->mpeg_pack = &mpeg_remux_pack;
146
mpeg->mpeg_packet = &mpeg_remux_packet;
147
mpeg->mpeg_packet_check = &mpeg_packet_check;
148
mpeg->mpeg_end = &mpeg_remux_end;
150
mpeg_buf_init (&shdr);
151
mpeg_buf_init (&pack);
152
mpeg_buf_init (&packet);
154
r = mpegd_parse (mpeg);
158
mpeg_buf_free (&shdr);
159
mpeg_buf_free (&pack);
160
mpeg_buf_free (&packet);
165
#endif//HAVE_LIBDVDNAV