summaryrefslogtreecommitdiffstats
path: root/gst
diff options
context:
space:
mode:
authorRonald S. Bultje <rbultje@ronald.bitfreak.net>2003-12-21 18:44:34 +0000
committerRonald S. Bultje <rbultje@ronald.bitfreak.net>2003-12-21 18:44:34 +0000
commitae91d7c7171c56667ec1b36ea2ecc17a76c4cff4 (patch)
tree99f667d57eca98ba1ed53bf4a724ef5423bfc0f3 /gst
parent4dbdabd716ae144f1c2adf72c6c57e5f9e064c99 (diff)
configure.ac: Improve mpeg2enc detection. This is for distributions that do ship mjpegtools, but without mpeg2enc. Al...
Original commit message from CVS: 2003-12-21 Ronald Bultje <rbultje@ronald.bitfreak.net> * configure.ac: Improve mpeg2enc detection. This is for distributions that do ship mjpegtools, but without mpeg2enc. Also does object check for might there ever be ABI incompatibility. * ext/mpeg2enc/gstmpeg2enc.cc: Add Andrew as second maintainer (he's helping me), and also add an error if no caps was set. This happens if I pull before capsnego and that's something I should solve sometime else. * gst/matroska/matroska-demux.c: (gst_matroska_demux_parse_blockgroup): Fix time parsing. * gst/matroska/matroska-mux.c: (gst_matroska_mux_audio_pad_link), (gst_matroska_mux_track_header): Add caps to templates. * gst/mpegaudioparse/gstmpegaudioparse.c: (mp3_sink_factory): Add mpegversion=1 to prevent confusion with MPEG/AAC. * gst/mpegstream/gstmpegdemux.c: Remove layer since it causes warnings about unfixed caps. * gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get): Fix obvious typo (we error out if caps were set, we should of course error out if *no* caps were set). * sys/oss/gstosselement.c: (gst_osselement_convert): Fix format conversion, we confused bits/bytes. * sys/oss/gstosselement.h: Improve documentation for 'bps'. * sys/v4l/TODO: Remove stuff about plugins that need removing - this was done ages ago. * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_init), (gst_v4lmjpegsrc_src_convert), (gst_v4lmjpegsrc_src_query): * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_init), (gst_v4lsrc_src_convert), (gst_v4lsrc_src_query): * sys/v4l2/gstv4l2src.c: (gst_v4l2src_init), (gst_v4l2src_src_convert), (gst_v4l2src_src_query): Add get_query_types(), get_formats() and query() functions.
Diffstat (limited to 'gst')
-rw-r--r--gst/matroska/matroska-demux.c7
-rw-r--r--gst/matroska/matroska-mux.c91
2 files changed, 86 insertions, 12 deletions
diff --git a/gst/matroska/matroska-demux.c b/gst/matroska/matroska-demux.c
index dafb72aa..a495de65 100644
--- a/gst/matroska/matroska-demux.c
+++ b/gst/matroska/matroska-demux.c
@@ -1617,7 +1617,7 @@ gst_matroska_demux_parse_blockgroup (GstMatroskaDemux *demux,
case GST_MATROSKA_ID_BLOCK: {
GstBuffer *buf;
guint8 *data;
- gint16 time;
+ gint64 time;
guint size, *lace_size = NULL;
gint n, stream, flags, laces = 0;
guint64 num;
@@ -1651,10 +1651,7 @@ gst_matroska_demux_parse_blockgroup (GstMatroskaDemux *demux,
}
/* time (relative to cluster time) */
- time = (* (gint16 *) data) * demux->time_scale;
- /* I think this is mis-documented in the matroska sources, we should
- * probably shift values (EBML-style) on this value... */
- time = GINT16_FROM_BE (time);
+ time = (GINT16_FROM_BE (* (gint16 *) data)) * demux->time_scale;
data += 2; size -= 2;
flags = * (guint8 *) data;
data += 1; size -= 1;
diff --git a/gst/matroska/matroska-mux.c b/gst/matroska/matroska-mux.c
index df63f2a5..0522d875 100644
--- a/gst/matroska/matroska-mux.c
+++ b/gst/matroska/matroska-mux.c
@@ -51,20 +51,95 @@ GST_PAD_TEMPLATE_FACTORY (src_templ,
)
)
-/* FIXME: caps */
+#define COMMON_VIDEO_PROPERTIES \
+ "width", GST_PROPS_INT_RANGE (16, 4096), \
+ "height", GST_PROPS_INT_RANGE (16, 4096), \
+ "framerate", GST_PROPS_FLOAT_RANGE (0, G_MAXFLOAT)
GST_PAD_TEMPLATE_FACTORY (videosink_templ,
"video_%d",
GST_PAD_SINK,
GST_PAD_REQUEST,
- NULL
+ GST_CAPS_NEW ("matroska_video_sink_mpeg",
+ "video/mpeg",
+ "mpegversion", GST_PROPS_LIST (
+ GST_PROPS_INT (1),
+ GST_PROPS_INT (2),
+ GST_PROPS_INT (4)
+ ),
+ "systemstream", GST_PROPS_BOOLEAN (FALSE),
+ COMMON_VIDEO_PROPERTIES),
+ GST_CAPS_NEW ("matroska_video_sink_divx",
+ "video/x-divx",
+ "divxversion", GST_PROPS_INT_RANGE (3, 5),
+ COMMON_VIDEO_PROPERTIES),
+ GST_CAPS_NEW ("matroska_video_sink_xvid",
+ "video/x-xvid",
+ COMMON_VIDEO_PROPERTIES),
+ GST_CAPS_NEW ("matroska_video_sink_msmpeg4v3",
+ "video/x-msmpeg",
+ "msmpegversion", GST_PROPS_INT (43),
+ COMMON_VIDEO_PROPERTIES),
+ GST_CAPS_NEW ("matroska_video_sink_jpeg",
+ "video/x-jpeg",
+ COMMON_VIDEO_PROPERTIES),
+ GST_CAPS_NEW ("matroska_video_sink_rawyuv",
+ "video/x-raw-yuv",
+ "format", GST_PROPS_LIST (
+ GST_PROPS_FOURCC (GST_MAKE_FOURCC ('Y','U','Y','2')),
+ GST_PROPS_FOURCC (GST_MAKE_FOURCC ('I','4','2','0'))
+ ),
+ COMMON_VIDEO_PROPERTIES)
)
+#define COMMON_AUDIO_PROPERTIES \
+ "channels", GST_PROPS_INT_RANGE (1, 8), \
+ "rate", GST_PROPS_INT_RANGE (8000, 96000)
+
+/* FIXME:
+ * * audio/x-raw-float: endianness needs defining.
+ * * audio/x-vorbis: private data setup needs work.
+ */
GST_PAD_TEMPLATE_FACTORY (audiosink_templ,
"audio_%d",
GST_PAD_SINK,
GST_PAD_REQUEST,
- NULL
+ GST_CAPS_NEW ("matroska_audio_sink_mpeg1",
+ "audio/mpeg",
+ "mpegversion", GST_PROPS_INT (1),
+ "layer", GST_PROPS_INT_RANGE (1, 3),
+ COMMON_AUDIO_PROPERTIES),
+ GST_CAPS_NEW ("matroska_audio_sink_mpeg24",
+ "audio/mpeg",
+ "mpegversion", GST_PROPS_LIST (
+ GST_PROPS_INT (2),
+ GST_PROPS_INT (4)
+ ),
+ COMMON_AUDIO_PROPERTIES),
+ GST_CAPS_NEW ("matroska_audio_sink_ac3",
+ "audio/x-ac3",
+ COMMON_AUDIO_PROPERTIES),
+ GST_CAPS_NEW ("matroska_audio_sink_raw_int",
+ "audio/x-raw-int",
+ "width", GST_PROPS_LIST (
+ GST_PROPS_INT (8),
+ GST_PROPS_INT (16),
+ GST_PROPS_INT (24)
+ ),
+ "depth", GST_PROPS_LIST (
+ GST_PROPS_INT (8),
+ GST_PROPS_INT (16),
+ GST_PROPS_INT (24)
+ ),
+ "endianness", GST_PROPS_LIST (
+ GST_PROPS_INT (G_BIG_ENDIAN),
+ GST_PROPS_INT (G_LITTLE_ENDIAN)
+ ),
+ "signed", GST_PROPS_LIST (
+ GST_PROPS_BOOLEAN (TRUE),
+ GST_PROPS_BOOLEAN (FALSE)
+ ),
+ COMMON_AUDIO_PROPERTIES)
)
GST_PAD_TEMPLATE_FACTORY (subtitlesink_templ,
@@ -413,7 +488,7 @@ gst_matroska_mux_audio_pad_link (GstPad *pad,
NULL);
audiocontext->samplerate = samplerate;
audiocontext->channels = channels;
- audiocontext->bitdepth = 16;
+ audiocontext->bitdepth = 0;
if (!strcmp (mimetype, "audio/mpeg")) {
gint mpegversion = 0;
@@ -459,7 +534,7 @@ gst_matroska_mux_audio_pad_link (GstPad *pad,
"signed", &signedness,
NULL);
if (width != depth ||
- (width == 8 && signedness) || (width == 16 && !signedness))
+ (width == 8 && signedness) || (width != 8 && !signedness))
continue;
audiocontext->bitdepth = depth;
@@ -602,8 +677,10 @@ gst_matroska_mux_track_header (GstMatroskaMux *mux,
if (audiocontext->channels != 1)
gst_ebml_write_uint (ebml, GST_MATROSKA_ID_AUDIOCHANNELS,
audiocontext->channels);
- gst_ebml_write_uint (ebml, GST_MATROSKA_ID_AUDIOBITDEPTH,
- audiocontext->bitdepth);
+ if (audiocontext->bitdepth) {
+ gst_ebml_write_uint (ebml, GST_MATROSKA_ID_AUDIOBITDEPTH,
+ audiocontext->bitdepth);
+ }
gst_ebml_write_master_finish (ebml, master);
break;