mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-03-06 20:01:37 +00:00
Removed dead .cc file
Original commit message from CVS: Removed dead .cc file Added some params, act on EOS
This commit is contained in:
parent
8bca9f16bb
commit
cd3adce1fb
3 changed files with 50 additions and 201 deletions
|
@ -186,7 +186,7 @@ gst_mplex_class_init (GstMPlex *klass)
|
||||||
20, 2000, 20, (GParamFlags) G_PARAM_READWRITE));
|
20, 2000, 20, (GParamFlags) G_PARAM_READWRITE));
|
||||||
g_object_class_install_property (gobject_class, ARG_SYNC_OFFSET,
|
g_object_class_install_property (gobject_class, ARG_SYNC_OFFSET,
|
||||||
g_param_spec_int ("sync_offset", "Sync offset", "Specify offset of timestamps (video-audio) in mSec",
|
g_param_spec_int ("sync_offset", "Sync offset", "Specify offset of timestamps (video-audio) in mSec",
|
||||||
0, G_MAXINT, 0, (GParamFlags) G_PARAM_READWRITE));
|
G_MININT, G_MAXINT, 0, (GParamFlags) G_PARAM_READWRITE));
|
||||||
g_object_class_install_property (gobject_class, ARG_SECTOR_SIZE,
|
g_object_class_install_property (gobject_class, ARG_SECTOR_SIZE,
|
||||||
g_param_spec_int ("sector_size", "Sector size", "Specify sector size in bytes for generic formats",
|
g_param_spec_int ("sector_size", "Sector size", "Specify sector size in bytes for generic formats",
|
||||||
256, 16384, 2028, (GParamFlags) G_PARAM_READWRITE));
|
256, 16384, 2028, (GParamFlags) G_PARAM_READWRITE));
|
||||||
|
@ -219,7 +219,7 @@ gst_mplex_init (GstMPlex *mplex)
|
||||||
|
|
||||||
mplex->state = GST_MPLEX_OPEN_STREAMS;
|
mplex->state = GST_MPLEX_OPEN_STREAMS;
|
||||||
|
|
||||||
mplex->ostrm->opt_mux_format = MPEG_FORMAT_DVD;
|
mplex->ostrm->opt_mux_format = 0;
|
||||||
|
|
||||||
(void)mjpeg_default_handler_verbosity(mplex->ostrm->opt_verbosity);
|
(void)mjpeg_default_handler_verbosity(mplex->ostrm->opt_verbosity);
|
||||||
}
|
}
|
||||||
|
@ -252,6 +252,7 @@ gst_mplex_request_new_pad (GstElement *element,
|
||||||
stream->pad = pad;
|
stream->pad = pad;
|
||||||
stream->bitstream = new IBitStream();
|
stream->bitstream = new IBitStream();
|
||||||
stream->bytestream = gst_bytestream_new (pad);
|
stream->bytestream = gst_bytestream_new (pad);
|
||||||
|
stream->eos = FALSE;
|
||||||
|
|
||||||
mplex->streams = g_list_prepend (mplex->streams, stream);
|
mplex->streams = g_list_prepend (mplex->streams, stream);
|
||||||
|
|
||||||
|
@ -271,14 +272,29 @@ gst_mplex_read_callback (BitStream *bitstream, uint8_t *dest, size_t size, void
|
||||||
|
|
||||||
stream = (GstMPlexStream *) user_data;
|
stream = (GstMPlexStream *) user_data;
|
||||||
|
|
||||||
|
if (stream->eos)
|
||||||
|
return 0;
|
||||||
|
|
||||||
len = gst_bytestream_peek_bytes (stream->bytestream, &data, size);
|
len = gst_bytestream_peek_bytes (stream->bytestream, &data, size);
|
||||||
if (len < size) {
|
if (len < size) {
|
||||||
g_print ("got %d bytes out of %d\n", len, size);
|
guint32 avail= 0;
|
||||||
|
GstEvent *event = NULL;
|
||||||
|
|
||||||
|
gst_bytestream_get_status (stream->bytestream, &avail, &event);
|
||||||
|
if (event != NULL) {
|
||||||
|
switch (GST_EVENT_TYPE (event)) {
|
||||||
|
case GST_EVENT_EOS:
|
||||||
|
stream->eos = TRUE;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy (dest, data, len);
|
memcpy (dest, data, len);
|
||||||
|
|
||||||
gst_bytestream_flush_fast (stream->bytestream, len);
|
gst_bytestream_flush (stream->bytestream, len);
|
||||||
|
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
@ -380,20 +396,38 @@ gst_mplex_set_property (GObject *object, guint prop_id, const GValue *value, GPa
|
||||||
|
|
||||||
switch(prop_id) {
|
switch(prop_id) {
|
||||||
case ARG_MUX_FORMAT:
|
case ARG_MUX_FORMAT:
|
||||||
|
mplex->ostrm->opt_mux_format = g_value_get_enum (value);
|
||||||
break;
|
break;
|
||||||
case ARG_MUX_BITRATE:
|
case ARG_MUX_BITRATE:
|
||||||
|
mplex->data_rate = g_value_get_int (value);
|
||||||
|
mplex->ostrm->opt_data_rate = ((mplex->data_rate * 1000 / 8 + 49) / 50) * 50;
|
||||||
break;
|
break;
|
||||||
case ARG_VIDEO_BUFFER:
|
case ARG_VIDEO_BUFFER:
|
||||||
|
mplex->ostrm->opt_buffer_size = g_value_get_int (value);
|
||||||
break;
|
break;
|
||||||
case ARG_SYNC_OFFSET:
|
case ARG_SYNC_OFFSET:
|
||||||
|
{
|
||||||
|
mplex->sync_offset = g_value_get_int (value);
|
||||||
|
if (mplex->sync_offset < 0) {
|
||||||
|
mplex->ostrm->opt_audio_offset = -mplex->sync_offset;
|
||||||
|
mplex->ostrm->opt_video_offset = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
mplex->ostrm->opt_video_offset = mplex->sync_offset;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case ARG_SECTOR_SIZE:
|
case ARG_SECTOR_SIZE:
|
||||||
|
mplex->ostrm->opt_sector_size = g_value_get_int (value);
|
||||||
break;
|
break;
|
||||||
case ARG_VBR:
|
case ARG_VBR:
|
||||||
|
mplex->ostrm->opt_VBR = g_value_get_boolean (value);
|
||||||
break;
|
break;
|
||||||
case ARG_PACKETS_PER_PACK:
|
case ARG_PACKETS_PER_PACK:
|
||||||
|
mplex->ostrm->opt_packets_per_pack = g_value_get_int (value);
|
||||||
break;
|
break;
|
||||||
case ARG_SYSTEM_HEADERS:
|
case ARG_SYSTEM_HEADERS:
|
||||||
|
mplex->ostrm->opt_always_system_headers = g_value_get_boolean (value);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
//G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
//G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
|
@ -410,20 +444,28 @@ gst_mplex_get_property (GObject *object, guint prop_id, GValue *value, GParamSpe
|
||||||
|
|
||||||
switch(prop_id) {
|
switch(prop_id) {
|
||||||
case ARG_MUX_FORMAT:
|
case ARG_MUX_FORMAT:
|
||||||
|
g_value_set_enum (value, mplex->ostrm->opt_mux_format);
|
||||||
break;
|
break;
|
||||||
case ARG_MUX_BITRATE:
|
case ARG_MUX_BITRATE:
|
||||||
|
g_value_set_int (value, mplex->data_rate);
|
||||||
break;
|
break;
|
||||||
case ARG_VIDEO_BUFFER:
|
case ARG_VIDEO_BUFFER:
|
||||||
|
g_value_set_int (value, mplex->ostrm->opt_buffer_size);
|
||||||
break;
|
break;
|
||||||
case ARG_SYNC_OFFSET:
|
case ARG_SYNC_OFFSET:
|
||||||
|
g_value_set_int (value, mplex->sync_offset);
|
||||||
break;
|
break;
|
||||||
case ARG_SECTOR_SIZE:
|
case ARG_SECTOR_SIZE:
|
||||||
|
g_value_set_int (value, mplex->ostrm->opt_sector_size);
|
||||||
break;
|
break;
|
||||||
case ARG_VBR:
|
case ARG_VBR:
|
||||||
|
g_value_set_boolean (value, mplex->ostrm->opt_VBR);
|
||||||
break;
|
break;
|
||||||
case ARG_PACKETS_PER_PACK:
|
case ARG_PACKETS_PER_PACK:
|
||||||
|
g_value_set_int (value, mplex->ostrm->opt_packets_per_pack);
|
||||||
break;
|
break;
|
||||||
case ARG_SYSTEM_HEADERS:
|
case ARG_SYSTEM_HEADERS:
|
||||||
|
g_value_set_boolean (value, mplex->ostrm->opt_always_system_headers);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
//G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
//G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
|
@ -444,7 +486,7 @@ plugin_init (GModule *module, GstPlugin *plugin)
|
||||||
factory = gst_element_factory_new ("mplex",GST_TYPE_MPLEX,
|
factory = gst_element_factory_new ("mplex",GST_TYPE_MPLEX,
|
||||||
&gst_mplex_details);
|
&gst_mplex_details);
|
||||||
g_return_val_if_fail (factory != NULL, FALSE);
|
g_return_val_if_fail (factory != NULL, FALSE);
|
||||||
gst_element_factory_set_rank (factory, GST_ELEMENT_RANK_PRIMARY);
|
gst_element_factory_set_rank (factory, GST_ELEMENT_RANK_MARGINAL);
|
||||||
|
|
||||||
gst_element_factory_add_pad_template (factory, GST_PAD_TEMPLATE_GET (src_factory));
|
gst_element_factory_add_pad_template (factory, GST_PAD_TEMPLATE_GET (src_factory));
|
||||||
gst_element_factory_add_pad_template (factory, GST_PAD_TEMPLATE_GET (audio_sink_factory));
|
gst_element_factory_add_pad_template (factory, GST_PAD_TEMPLATE_GET (audio_sink_factory));
|
||||||
|
|
|
@ -71,6 +71,7 @@ struct _GstMPlexStream {
|
||||||
GstPad *pad;
|
GstPad *pad;
|
||||||
GstMPlexStreamType type;
|
GstMPlexStreamType type;
|
||||||
GstByteStream *bytestream;
|
GstByteStream *bytestream;
|
||||||
|
gboolean eos;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GstMPlex {
|
struct _GstMPlex {
|
||||||
|
@ -84,6 +85,8 @@ struct _GstMPlex {
|
||||||
vector<ElementaryStream *> *strms;
|
vector<ElementaryStream *> *strms;
|
||||||
OutputStream *ostrm;
|
OutputStream *ostrm;
|
||||||
PS_Stream *ps_stream;
|
PS_Stream *ps_stream;
|
||||||
|
gint data_rate;
|
||||||
|
gint sync_offset;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GstMPlexClass {
|
struct _GstMPlexClass {
|
||||||
|
|
|
@ -1,196 +0,0 @@
|
||||||
#include <config.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#ifdef HAVE_GETOPT_H
|
|
||||||
#include <getopt.h>
|
|
||||||
#endif
|
|
||||||
#include <sys/stat.h>
|
|
||||||
|
|
||||||
#include <mjpeg_logging.h>
|
|
||||||
#include <format_codes.h>
|
|
||||||
|
|
||||||
#include "interact.hh"
|
|
||||||
#include "videostrm.hh"
|
|
||||||
#include "audiostrm.hh"
|
|
||||||
#include "mplexconsts.hh"
|
|
||||||
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
int opt_verbosity = 1;
|
|
||||||
int opt_buffer_size = 46;
|
|
||||||
int opt_data_rate = 0; /* 3486 = 174300B/sec would be right for VCD */
|
|
||||||
int opt_video_offset = 0;
|
|
||||||
int opt_audio_offset = 0;
|
|
||||||
int opt_sector_size = 2324;
|
|
||||||
int opt_VBR = 0;
|
|
||||||
int opt_mpeg = 1;
|
|
||||||
int opt_mux_format = 0; /* Generic MPEG-1 stream as default */
|
|
||||||
int opt_multifile_segment = 0;
|
|
||||||
int opt_always_system_headers = 0;
|
|
||||||
int opt_packets_per_pack = 20;
|
|
||||||
bool opt_ignore_underrun = false;
|
|
||||||
off_t opt_max_segment_size = 0;
|
|
||||||
|
|
||||||
/*************************************************************************
|
|
||||||
Startbildschirm und Anzahl der Argumente
|
|
||||||
|
|
||||||
Intro Screen and argument check
|
|
||||||
*************************************************************************/
|
|
||||||
|
|
||||||
static void
|
|
||||||
Usage (char *str)
|
|
||||||
{
|
|
||||||
fprintf (stderr,
|
|
||||||
"mjpegtools mplex version " VERSION "\n"
|
|
||||||
"Usage: %s [params] -o <output filename pattern> <input file>... \n"
|
|
||||||
" %%d in the output file name is by segment count\n"
|
|
||||||
" where possible params are:\n"
|
|
||||||
"--verbose|-v num\n"
|
|
||||||
" Level of verbosity. 0 = quiet, 1 = normal 2 = verbose/debug\n"
|
|
||||||
"--format|-f fmt\n"
|
|
||||||
" Set defaults for particular MPEG profiles\n"
|
|
||||||
" [0 = Generic MPEG1, 1 = VCD, 2 = user-rate VCD, 3 = Generic MPEG2,\n"
|
|
||||||
" 4 = SVCD, 5 = user-rate SVCD\n"
|
|
||||||
" 6 = VCD Stills, 7 = SVCD Stills, 8 = DVD]\n"
|
|
||||||
"--mux-bitrate|-r num\n"
|
|
||||||
" Specify data rate of output stream in kbit/sec\n"
|
|
||||||
" (default 0=Compute from source streams)\n"
|
|
||||||
"--video-buffer|-b num\n"
|
|
||||||
" Specifies decoder buffers size in kB. [ 20...2000]\n"
|
|
||||||
"--mux-limit|-l num\n"
|
|
||||||
" Multiplex only num seconds of material (default 0=multiplex all)\n"
|
|
||||||
"--sync-offset|-O num\n"
|
|
||||||
" Specify offset of timestamps (video-audio) in mSec\n"
|
|
||||||
"--sector-size|-s num\n"
|
|
||||||
" Specify sector size in bytes for generic formats [256..16384]\n"
|
|
||||||
"--vbr|-V\n"
|
|
||||||
" Multiplex variable bit-rate video\n"
|
|
||||||
"--packets-per-pack|-p num\n"
|
|
||||||
" Number of packets per pack generic formats [1..100]\n"
|
|
||||||
"--system-headers|-h\n"
|
|
||||||
" Create System header in every pack in generic formats\n"
|
|
||||||
"--max-segment-size|-S size\n"
|
|
||||||
" Maximum size of output file(s) in Mbyte (default: 2000) (0 = no limit)\n"
|
|
||||||
"--split-segment|-M\n"
|
|
||||||
" Simply split a sequence across files rather than building run-out/run-in\n"
|
|
||||||
"--help|-?\n" " Print this lot out!\n", str);
|
|
||||||
exit (1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static const char short_options[] = "o:b:r:O:v:m:f:l:s:S:q:p:VXMeh";
|
|
||||||
|
|
||||||
#if defined(HAVE_GETOPT_LONG)
|
|
||||||
static struct option long_options[] = {
|
|
||||||
{"verbose", 1, 0, 'v'},
|
|
||||||
{"format", 1, 0, 'f'},
|
|
||||||
{"mux-bitrate", 1, 0, 'r'},
|
|
||||||
{"video-buffer", 1, 0, 'b'},
|
|
||||||
{"output", 1, 0, 'o'},
|
|
||||||
{"sync-offset", 1, 0, 'O'},
|
|
||||||
{"vbr", 1, 0, 'V'},
|
|
||||||
{"system-headers", 1, 0, 'h'},
|
|
||||||
{"split-segment", 0, &opt_multifile_segment, 1},
|
|
||||||
{"max-segment-size", 1, 0, 'S'},
|
|
||||||
{"mux-upto", 1, 0, 'l'},
|
|
||||||
{"packets-per-pack", 1, 0, 'p'},
|
|
||||||
{"sector-size", 1, 0, 's'},
|
|
||||||
{"help", 0, 0, '?'},
|
|
||||||
{0, 0, 0, 0}
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int
|
|
||||||
intro_and_options (int argc, char *argv[], char **multplex_outfile)
|
|
||||||
{
|
|
||||||
int n;
|
|
||||||
|
|
||||||
#if defined(HAVE_GETOPT_LONG)
|
|
||||||
while ((n = getopt_long (argc, argv, short_options, long_options, NULL)) != -1)
|
|
||||||
#else
|
|
||||||
while ((n = getopt (argc, argv, short_options)) != -1)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
switch (n) {
|
|
||||||
case 0:
|
|
||||||
break;
|
|
||||||
case 'm':
|
|
||||||
opt_mpeg = atoi (optarg);
|
|
||||||
if (opt_mpeg < 1 || opt_mpeg > 2)
|
|
||||||
Usage (argv[0]);
|
|
||||||
|
|
||||||
break;
|
|
||||||
case 'v':
|
|
||||||
opt_verbosity = atoi (optarg);
|
|
||||||
if (opt_verbosity < 0 || opt_verbosity > 2)
|
|
||||||
Usage (argv[0]);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'V':
|
|
||||||
opt_VBR = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'h':
|
|
||||||
opt_always_system_headers = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'b':
|
|
||||||
opt_buffer_size = atoi (optarg);
|
|
||||||
if (opt_buffer_size < 0 || opt_buffer_size > 1000)
|
|
||||||
Usage (argv[0]);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'r':
|
|
||||||
opt_data_rate = atoi (optarg);
|
|
||||||
if (opt_data_rate < 0)
|
|
||||||
Usage (argv[0]);
|
|
||||||
/* Convert from kbit/sec (user spec) to 50B/sec units... */
|
|
||||||
opt_data_rate = ((opt_data_rate * 1000 / 8 + 49) / 50) * 50;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'O':
|
|
||||||
opt_video_offset = atoi (optarg);
|
|
||||||
if (opt_video_offset < 0) {
|
|
||||||
opt_audio_offset = -opt_video_offset;
|
|
||||||
opt_video_offset = 0;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'p':
|
|
||||||
opt_packets_per_pack = atoi (optarg);
|
|
||||||
if (opt_packets_per_pack < 1 || opt_packets_per_pack > 100)
|
|
||||||
Usage (argv[0]);
|
|
||||||
break;
|
|
||||||
|
|
||||||
|
|
||||||
case 'f':
|
|
||||||
opt_mux_format = atoi (optarg);
|
|
||||||
if (opt_mux_format != MPEG_FORMAT_DVD &&
|
|
||||||
(opt_mux_format < MPEG_FORMAT_MPEG1 || opt_mux_format > MPEG_FORMAT_LAST)
|
|
||||||
)
|
|
||||||
Usage (argv[0]);
|
|
||||||
break;
|
|
||||||
case 's':
|
|
||||||
opt_sector_size = atoi (optarg);
|
|
||||||
if (opt_sector_size < 256 || opt_sector_size > 16384)
|
|
||||||
Usage (argv[0]);
|
|
||||||
break;
|
|
||||||
case 'S':
|
|
||||||
opt_max_segment_size = atoi (optarg);
|
|
||||||
if (opt_max_segment_size < 0)
|
|
||||||
Usage (argv[0]);
|
|
||||||
opt_max_segment_size *= 1024 * 1024;
|
|
||||||
break;
|
|
||||||
case 'M':
|
|
||||||
opt_multifile_segment = 1;
|
|
||||||
break;
|
|
||||||
case '?':
|
|
||||||
default:
|
|
||||||
Usage (argv[0]);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
(void) mjpeg_default_handler_verbosity (opt_verbosity);
|
|
||||||
mjpeg_info ("mplex version %s (%s)", MPLEX_VER, MPLEX_DATE);
|
|
||||||
return optind - 1;
|
|
||||||
}
|
|
||||||
#endif
|
|
Loading…
Reference in a new issue