diff options
author | Thomas Vander Stichele <thomas (at) apestaart (dot) org> | 2009-03-02 09:43:30 +0100 |
---|---|---|
committer | Thomas Vander Stichele <thomas (at) apestaart (dot) org> | 2009-03-02 09:43:30 +0100 |
commit | 9f25f96155b246663a1f900624ccda4b9eafcded (patch) | |
tree | 029a4a4e8e96dc27e5f3ba38615bcfe9bee64455 /ext | |
parent | 13221762d09f8faacfbd682e68500ff22e6eb8ab (diff) | |
parent | 0083b9e40569db889500a3c1abd7ec3ac8876fee (diff) |
Merge branch 'master' of ssh://thomasvs@git.freedesktop.org/git/gstreamer/gst-plugins-good
Diffstat (limited to 'ext')
-rw-r--r-- | ext/dv/gstdvdec.c | 10 | ||||
-rw-r--r-- | ext/dv/gstdvdec.h | 1 | ||||
-rw-r--r-- | ext/gconf/Makefile.am | 4 | ||||
-rw-r--r-- | ext/gconf/gstgconf.c (renamed from ext/gconf/gconf.c) | 2 | ||||
-rw-r--r-- | ext/gconf/gstgconf.h (renamed from ext/gconf/gconf.h) | 0 | ||||
-rw-r--r-- | ext/gconf/gstgconfelements.h | 2 | ||||
-rw-r--r-- | ext/gconf/gstgconfvideosink.c | 5 | ||||
-rw-r--r-- | ext/gconf/gstgconfvideosink.h | 3 | ||||
-rw-r--r-- | ext/gconf/gstgconfvideosrc.c | 5 | ||||
-rw-r--r-- | ext/gconf/gstgconfvideosrc.h | 3 | ||||
-rw-r--r-- | ext/jpeg/gstjpegenc.c | 18 | ||||
-rw-r--r-- | ext/jpeg/gstjpegenc.h | 1 | ||||
-rw-r--r-- | ext/pulse/pulsemixerctrl.c | 21 | ||||
-rw-r--r-- | ext/raw1394/gsthdv1394src.c | 2 |
14 files changed, 55 insertions, 22 deletions
diff --git a/ext/dv/gstdvdec.c b/ext/dv/gstdvdec.c index ade97966..550b99d1 100644 --- a/ext/dv/gstdvdec.c +++ b/ext/dv/gstdvdec.c @@ -43,6 +43,7 @@ #endif #include <string.h> #include <math.h> +#include <gst/video/video.h> #include "gstdvdec.h" @@ -328,7 +329,7 @@ gst_dvdec_src_negotiate (GstDVDec * dvdec) "framerate", GST_TYPE_FRACTION, dvdec->framerate_numerator, dvdec->framerate_denominator, "pixel-aspect-ratio", GST_TYPE_FRACTION, dvdec->par_x, - dvdec->par_y, NULL); + dvdec->par_y, "interlaced", G_TYPE_BOOLEAN, dvdec->interlaced, NULL); gst_pad_set_caps (dvdec->srcpad, othercaps); gst_caps_unref (othercaps); @@ -434,6 +435,7 @@ gst_dvdec_chain (GstPad * pad, GstBuffer * buf) dvdec->height = (dvdec->PAL ? PAL_HEIGHT : NTSC_HEIGHT); + dvdec->interlaced = !dv_is_progressive (dvdec->decoder); /* negotiate if not done yet */ if (!dvdec->src_negotiated) { @@ -466,6 +468,12 @@ gst_dvdec_chain (GstPad * pad, GstBuffer * buf) dv_decode_full_frame (dvdec->decoder, inframe, e_dv_color_yuv, outframe_ptrs, outframe_pitches); + if (dvdec->PAL) { + GST_BUFFER_FLAG_SET (outbuf, GST_VIDEO_BUFFER_TFF); + } else { + GST_BUFFER_FLAG_UNSET (outbuf, GST_VIDEO_BUFFER_TFF); + } + GST_BUFFER_OFFSET (outbuf) = GST_BUFFER_OFFSET (buf); GST_BUFFER_OFFSET_END (outbuf) = GST_BUFFER_OFFSET_END (buf); GST_BUFFER_TIMESTAMP (outbuf) = cstart; diff --git a/ext/dv/gstdvdec.h b/ext/dv/gstdvdec.h index 5f166a14..de8481d9 100644 --- a/ext/dv/gstdvdec.h +++ b/ext/dv/gstdvdec.h @@ -57,6 +57,7 @@ struct _GstDVDec { gint quality; gboolean PAL; + gboolean interlaced; gboolean wide; gint frame_len; diff --git a/ext/gconf/Makefile.am b/ext/gconf/Makefile.am index 4f6f63ad..330cf29f 100644 --- a/ext/gconf/Makefile.am +++ b/ext/gconf/Makefile.am @@ -7,7 +7,7 @@ libgstgconfelements_la_SOURCES = \ gstgconfvideosink.c \ gstgconfvideosrc.c \ gstswitchsink.c \ - gconf.c + gstgconf.c DIR_CFLAGS = -DGST_GCONF_DIR=\"/system/gstreamer/@GST_MAJORMINOR@\" libgstgconfelements_la_CFLAGS = $(GST_CFLAGS) $(GCONF_CFLAGS) $(DIR_CFLAGS) @@ -22,4 +22,4 @@ noinst_HEADERS = \ gstgconfvideosink.h \ gstgconfvideosrc.h \ gstswitchsink.h \ - gconf.h + gstgconf.h diff --git a/ext/gconf/gconf.c b/ext/gconf/gstgconf.c index e7214e2d..eee80c9d 100644 --- a/ext/gconf/gconf.c +++ b/ext/gconf/gstgconf.c @@ -29,7 +29,7 @@ #include <gst/gst.h> -#include "gconf.h" +#include "gstgconf.h" #include "gstgconfelements.h" /* for debug category */ #ifndef GST_GCONF_DIR diff --git a/ext/gconf/gconf.h b/ext/gconf/gstgconf.h index b1153e93..b1153e93 100644 --- a/ext/gconf/gconf.h +++ b/ext/gconf/gstgconf.h diff --git a/ext/gconf/gstgconfelements.h b/ext/gconf/gstgconfelements.h index 1b3efe3c..872b2f2d 100644 --- a/ext/gconf/gstgconfelements.h +++ b/ext/gconf/gstgconfelements.h @@ -20,7 +20,7 @@ #ifndef __GST_GCONF_ELEMENTS_H__ #define __GST_GCONF_ELEMENTS_H__ -#include <gconf.h> +#include "gstgconf.h" GST_DEBUG_CATEGORY_EXTERN (gconf_debug); #define GST_CAT_DEFAULT gconf_debug diff --git a/ext/gconf/gstgconfvideosink.c b/ext/gconf/gstgconfvideosink.c index 4090cc91..1b05fd37 100644 --- a/ext/gconf/gstgconfvideosink.c +++ b/ext/gconf/gstgconfvideosink.c @@ -122,7 +122,7 @@ gst_gconf_video_sink_init (GstGConfVideoSink * sink, sink->client = gconf_client_get_default (); gconf_client_add_dir (sink->client, GST_GCONF_DIR, GCONF_CLIENT_PRELOAD_RECURSIVE, NULL); - gconf_client_notify_add (sink->client, + sink->notify_id = gconf_client_notify_add (sink->client, GST_GCONF_DIR "/" GST_GCONF_VIDEOSINK_KEY, cb_toggle_element, sink, NULL, NULL); } @@ -133,6 +133,9 @@ gst_gconf_video_sink_dispose (GObject * object) GstGConfVideoSink *sink = GST_GCONF_VIDEO_SINK (object); if (sink->client) { + if (sink->notify_id != 0) + gconf_client_notify_remove (sink->client, sink->notify_id); + g_object_unref (G_OBJECT (sink->client)); sink->client = NULL; } diff --git a/ext/gconf/gstgconfvideosink.h b/ext/gconf/gstgconfvideosink.h index 8f69c81a..2461e652 100644 --- a/ext/gconf/gstgconfvideosink.h +++ b/ext/gconf/gstgconfvideosink.h @@ -46,6 +46,9 @@ typedef struct _GstGConfVideoSink { GstElement *kid; GstPad *pad; + /* gconf notify id */ + guint notify_id; + /* Current gconf string */ gchar *gconf_str; } GstGConfVideoSink; diff --git a/ext/gconf/gstgconfvideosrc.c b/ext/gconf/gstgconfvideosrc.c index fe177d86..6192d73d 100644 --- a/ext/gconf/gstgconfvideosrc.c +++ b/ext/gconf/gstgconfvideosrc.c @@ -124,7 +124,7 @@ gst_gconf_video_src_init (GstGConfVideoSrc * src, src->client = gconf_client_get_default (); gconf_client_add_dir (src->client, GST_GCONF_DIR, GCONF_CLIENT_PRELOAD_RECURSIVE, NULL); - gconf_client_notify_add (src->client, + src->notify_id = gconf_client_notify_add (src->client, GST_GCONF_DIR "/" GST_GCONF_VIDEOSRC_KEY, cb_toggle_element, src, NULL, NULL); } @@ -135,6 +135,9 @@ gst_gconf_video_src_dispose (GObject * object) GstGConfVideoSrc *src = GST_GCONF_VIDEO_SRC (object); if (src->client) { + if (src->notify_id != 0) + gconf_client_notify_remove (src->client, src->notify_id); + g_object_unref (G_OBJECT (src->client)); src->client = NULL; } diff --git a/ext/gconf/gstgconfvideosrc.h b/ext/gconf/gstgconfvideosrc.h index 6f64e6d1..4a2c8cdd 100644 --- a/ext/gconf/gstgconfvideosrc.h +++ b/ext/gconf/gstgconfvideosrc.h @@ -40,6 +40,9 @@ typedef struct _GstGConfVideoSrc { GstElement *kid; GstPad *pad; + /* gconf key notification id */ + guint notify_id; + /* Current gconf string */ gchar *gconf_str; } GstGConfVideoSrc; diff --git a/ext/jpeg/gstjpegenc.c b/ext/jpeg/gstjpegenc.c index 908c7e00..5edb11f1 100644 --- a/ext/jpeg/gstjpegenc.c +++ b/ext/jpeg/gstjpegenc.c @@ -339,9 +339,8 @@ gst_jpegenc_setcaps (GstPad * pad, GstCaps * caps) ret = gst_pad_set_caps (jpegenc->srcpad, othercaps); gst_caps_unref (othercaps); - if (GST_PAD_LINK_SUCCESSFUL (ret)) { + if (ret) gst_jpegenc_resync (jpegenc); - } gst_object_unref (jpegenc); @@ -411,7 +410,6 @@ gst_jpegenc_resync (GstJpegEnc * jpegenc) jpeg_suppress_tables (&jpegenc->cinfo, TRUE); //jpeg_suppress_tables(&jpegenc->cinfo, FALSE); - jpegenc->buffer = NULL; GST_DEBUG_OBJECT (jpegenc, "resync done"); } @@ -429,6 +427,9 @@ gst_jpegenc_chain (GstPad * pad, GstBuffer * buf) jpegenc = GST_JPEGENC (GST_OBJECT_PARENT (pad)); + if (G_UNLIKELY (jpegenc->width <= 0 || jpegenc->height <= 0)) + goto not_negotiated; + data = GST_BUFFER_DATA (buf); size = GST_BUFFER_SIZE (buf); @@ -497,6 +498,14 @@ done: gst_buffer_unref (buf); return ret; + +/* ERRORS */ +not_negotiated: + { + GST_WARNING_OBJECT (jpegenc, "no input format set (no caps on buffer)"); + ret = GST_FLOW_NOT_NEGOTIATED; + goto done; + } } static void @@ -557,7 +566,6 @@ gst_jpegenc_change_state (GstElement * element, GstStateChange transition) filter->line[0] = NULL; filter->line[1] = NULL; filter->line[2] = NULL; - gst_jpegenc_resync (filter); break; default: break; @@ -575,6 +583,8 @@ gst_jpegenc_change_state (GstElement * element, GstStateChange transition) filter->line[0] = NULL; filter->line[1] = NULL; filter->line[2] = NULL; + filter->width = -1; + filter->height = -1; break; default: break; diff --git a/ext/jpeg/gstjpegenc.h b/ext/jpeg/gstjpegenc.h index 719b88b0..99341569 100644 --- a/ext/jpeg/gstjpegenc.h +++ b/ext/jpeg/gstjpegenc.h @@ -57,7 +57,6 @@ struct _GstJpegEnc { gint height; /* the video buffer */ gint bufsize; - GstBuffer *buffer; guint row_stride; /* the jpeg line buffer */ guchar **line[3]; diff --git a/ext/pulse/pulsemixerctrl.c b/ext/pulse/pulsemixerctrl.c index 41b68cfc..ae807c66 100644 --- a/ext/pulse/pulsemixerctrl.c +++ b/ext/pulse/pulsemixerctrl.c @@ -93,10 +93,11 @@ gst_pulsemixer_ctrl_sink_info_cb (pa_context * context, const pa_sink_info * i, c->type = GST_PULSEMIXER_SINK; if (c->track) { - int i = g_atomic_int_get ((gint *) & c->track->flags); + GstMixerTrackFlags flags = c->track->flags; - i = (i & ~GST_MIXER_TRACK_MUTE) | (c->muted ? GST_MIXER_TRACK_MUTE : 0); - g_atomic_int_set ((gint *) & c->track->flags, i); + flags = + (flags & ~GST_MIXER_TRACK_MUTE) | (c->muted ? GST_MIXER_TRACK_MUTE : 0); + c->track->flags = flags; } c->operation_success = 1; @@ -142,10 +143,11 @@ gst_pulsemixer_ctrl_source_info_cb (pa_context * context, c->type = GST_PULSEMIXER_SOURCE; if (c->track) { - int i = g_atomic_int_get ((gint *) & c->track->flags); + GstMixerTrackFlags flags = c->track->flags; - i = (i & ~GST_MIXER_TRACK_MUTE) | (c->muted ? GST_MIXER_TRACK_MUTE : 0); - g_atomic_int_set ((gint *) & c->track->flags, i); + flags = + (flags & ~GST_MIXER_TRACK_MUTE) | (c->muted ? GST_MIXER_TRACK_MUTE : 0); + c->track->flags = flags; } c->operation_success = 1; @@ -572,10 +574,11 @@ gst_pulsemixer_ctrl_set_mute (GstPulseMixerCtrl * c, GstMixerTrack * track, c->update_mute = TRUE; if (c->track) { - int i = g_atomic_int_get ((gint *) & c->track->flags); + GstMixerTrackFlags flags = c->track->flags; - i = (i & ~GST_MIXER_TRACK_MUTE) | (c->muted ? GST_MIXER_TRACK_MUTE : 0); - g_atomic_int_set ((gint *) & c->track->flags, i); + flags = + (flags & ~GST_MIXER_TRACK_MUTE) | (c->muted ? GST_MIXER_TRACK_MUTE : 0); + c->track->flags = flags; } restart_time_event (c); diff --git a/ext/raw1394/gsthdv1394src.c b/ext/raw1394/gsthdv1394src.c index cbb02136..30f59d59 100644 --- a/ext/raw1394/gsthdv1394src.c +++ b/ext/raw1394/gsthdv1394src.c @@ -317,7 +317,7 @@ gst_hdv1394src_iec61883_receive (unsigned char *data, int len, return -1; if (len == IEC61883_MPEG2_TSP_SIZE) { - memcpy (dv1394src->outdata + dv1394src->outoffset, data, len); + memcpy ((guint8 *) dv1394src->outdata + dv1394src->outoffset, data, len); dv1394src->outoffset += len; } dv1394src->frame_sequence++; |