diff --git a/ext/libvisual/visual.c b/ext/libvisual/visual.c index fd04d01a2c..45a09fbdc5 100644 --- a/ext/libvisual/visual.c +++ b/ext/libvisual/visual.c @@ -629,20 +629,17 @@ get_buffer (GstVisual * visual, GstBuffer ** outbuf) GstFlowReturn ret; /* we don't know an output format yet, pick one */ - if (GST_PAD_CAPS (visual->srcpad) == NULL) { + if (!gst_pad_has_current_caps (visual->srcpad)) { if (!gst_vis_src_negotiate (visual)) return GST_FLOW_NOT_NEGOTIATED; } - GST_DEBUG_OBJECT (visual, "allocating output buffer with caps %" - GST_PTR_FORMAT, GST_PAD_CAPS (visual->srcpad)); + GST_DEBUG_OBJECT (visual, "allocating output buffer"); ret = gst_buffer_pool_acquire_buffer (visual->pool, outbuf, NULL); if (ret != GST_FLOW_OK) return ret; - gst_buffer_set_caps (*outbuf, GST_PAD_CAPS (visual->srcpad)); - return GST_FLOW_OK; } @@ -659,7 +656,7 @@ gst_visual_chain (GstPad * pad, GstBuffer * buffer) /* If we don't have an output format yet, preallocate a buffer to try and * set one */ - if (GST_PAD_CAPS (visual->srcpad) == NULL) { + if (!gst_pad_has_current_caps (visual->srcpad)) { ret = get_buffer (visual, &outbuf); if (ret != GST_FLOW_OK) { gst_buffer_unref (buffer); diff --git a/ext/ogg/gstoggaviparse.c b/ext/ogg/gstoggaviparse.c index 1ebd09f06f..d79a2dd359 100644 --- a/ext/ogg/gstoggaviparse.c +++ b/ext/ogg/gstoggaviparse.c @@ -261,7 +261,6 @@ gst_ogg_avi_parse_setcaps (GstPad * pad, GstCaps * caps) /* now output the raw vorbis header packets */ out = gst_buffer_copy_region (buffer, GST_BUFFER_COPY_ALL, offs, sizes[i]); - gst_buffer_set_caps (out, outcaps); gst_pad_push (ogg->srcpad, out); offs += sizes[i]; diff --git a/ext/ogg/gstoggdemux.c b/ext/ogg/gstoggdemux.c index 5050ce1307..a66341b5cf 100644 --- a/ext/ogg/gstoggdemux.c +++ b/ext/ogg/gstoggdemux.c @@ -229,7 +229,7 @@ gst_ogg_pad_query_types (GstPad * pad) static GstCaps * gst_ogg_pad_getcaps (GstPad * pad) { - return gst_caps_ref (GST_PAD_CAPS (pad)); + return gst_pad_get_current_caps (pad); } static gboolean @@ -574,7 +574,6 @@ gst_ogg_demux_chain_peer (GstOggPad * pad, ogg_packet * packet, goto not_added; buf = gst_buffer_new_and_alloc (packet->bytes - offset - trim); - gst_buffer_set_caps (buf, GST_PAD_CAPS (pad)); /* set delta flag for OGM content */ if (delta_unit) @@ -1772,7 +1771,8 @@ gst_ogg_demux_activate_chain (GstOggDemux * ogg, GstOggChain * chain, gst_ogg_pad_mark_discont (pad); pad->last_ret = GST_FLOW_OK; - if (pad->map.is_skeleton || pad->added || GST_PAD_CAPS (pad) == NULL) + if (pad->map.is_skeleton || pad->added + || !gst_pad_has_current_caps (GST_PAD_CAST (pad))) continue; GST_DEBUG_OBJECT (ogg, "adding pad %" GST_PTR_FORMAT, pad); diff --git a/ext/ogg/gstoggmux.c b/ext/ogg/gstoggmux.c index 1a16e4a7a9..deb329f6dd 100644 --- a/ext/ogg/gstoggmux.c +++ b/ext/ogg/gstoggmux.c @@ -499,8 +499,6 @@ static GstFlowReturn gst_ogg_mux_push_buffer (GstOggMux * mux, GstBuffer * buffer, GstOggPadData * oggpad) { - GstCaps *caps; - /* fix up OFFSET and OFFSET_END again */ GST_BUFFER_OFFSET (buffer) = mux->offset; mux->offset += gst_buffer_get_size (buffer); @@ -515,11 +513,6 @@ gst_ogg_mux_push_buffer (GstOggMux * mux, GstBuffer * buffer, mux->last_ts = run_time; } - caps = gst_pad_get_negotiated_caps (mux->srcpad); - gst_buffer_set_caps (buffer, caps); - if (caps) - gst_caps_unref (caps); - return gst_pad_push (mux->srcpad, buffer); } @@ -806,13 +799,15 @@ gst_ogg_mux_queue_pads (GstOggMux * ogg_mux) /* if we're not yet in data mode, ensure we're setup on the first packet */ if (!pad->have_type) { + GstCaps *caps; + /* Use headers in caps, if any; this will allow us to be resilient * to starting streams on the fly, and some streams (like VP8 * at least) do not send headers packets, as other muxers don't * expect/need them. */ + caps = gst_pad_get_current_caps (GST_PAD_CAST (pad)); pad->have_type = - gst_ogg_stream_setup_map_from_caps_headers (&pad->map, - GST_BUFFER_CAPS (buf)); + gst_ogg_stream_setup_map_from_caps_headers (&pad->map, caps); if (!pad->have_type) { /* fallback on the packet */ @@ -820,11 +815,13 @@ gst_ogg_mux_queue_pads (GstOggMux * ogg_mux) } if (!pad->have_type) { GST_ERROR_OBJECT (pad, "mapper didn't recognise input stream " - "(pad caps: %" GST_PTR_FORMAT ")", GST_PAD_CAPS (pad)); + "(pad caps: %" GST_PTR_FORMAT ")", caps); } else { GST_DEBUG_OBJECT (pad, "caps detected: %" GST_PTR_FORMAT, pad->map.caps); } + if (caps) + gst_caps_unref (caps); } if (pad->have_type) diff --git a/ext/ogg/gstoggparse.c b/ext/ogg/gstoggparse.c index 54e19777f7..42949c185c 100644 --- a/ext/ogg/gstoggparse.c +++ b/ext/ogg/gstoggparse.c @@ -604,9 +604,6 @@ gst_ogg_parse_chain (GstPad * pad, GstBuffer * buffer) GstOggStream *stream = (GstOggStream *) l->data; GstBuffer *buf = GST_BUFFER (stream->headers->data); - buf = gst_buffer_make_writable (buf); - gst_buffer_set_caps (buf, caps); - result = gst_pad_push (ogg->srcpad, buf); if (result != GST_FLOW_OK) return result; @@ -619,9 +616,6 @@ gst_ogg_parse_chain (GstPad * pad, GstBuffer * buffer) for (j = stream->headers->next; j != NULL; j = j->next) { GstBuffer *buf = GST_BUFFER (j->data); - buf = gst_buffer_make_writable (buf); - gst_buffer_set_caps (buf, caps); - result = gst_pad_push (ogg->srcpad, buf); if (result != GST_FLOW_OK) return result; @@ -648,10 +642,8 @@ gst_ogg_parse_chain (GstPad * pad, GstBuffer * buffer) g_list_length (stream->unknown_pages) + 1); for (k = stream->unknown_pages; k != NULL; k = k->next) { - GstBuffer *buf; + GstBuffer *buf = GST_BUFFER (k->data); - buf = gst_buffer_make_writable (GST_BUFFER (k->data)); - gst_buffer_set_caps (buf, caps); result = gst_pad_push (ogg->srcpad, buf); if (result != GST_FLOW_OK) return result; @@ -671,7 +663,7 @@ gst_ogg_parse_chain (GstPad * pad, GstBuffer * buffer) GstBuffer *buf = stream->stored_buffers->data; buf = gst_buffer_make_writable (buf); - gst_buffer_set_caps (buf, ogg->caps); + GST_BUFFER_TIMESTAMP (buf) = buffertimestamp; if (!keyframe) { GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DELTA_UNIT); @@ -689,7 +681,6 @@ gst_ogg_parse_chain (GstPad * pad, GstBuffer * buffer) } pagebuffer = gst_buffer_make_writable (pagebuffer); - gst_buffer_set_caps (pagebuffer, ogg->caps); if (!keyframe) { GST_BUFFER_FLAG_SET (pagebuffer, GST_BUFFER_FLAG_DELTA_UNIT); } else { diff --git a/ext/ogg/gstogmparse.c b/ext/ogg/gstogmparse.c index c046cfbc86..d8238cccab 100644 --- a/ext/ogg/gstogmparse.c +++ b/ext/ogg/gstogmparse.c @@ -622,16 +622,19 @@ gst_ogm_parse_stream_header (GstOgmParse * ogm, const guint8 * data, guint size) goto cannot_decode; if (ogm->srcpad) { - GstCaps *current_caps = GST_PAD_CAPS (ogm->srcpad); + GstCaps *current_caps = gst_pad_get_current_caps (ogm->srcpad); - if (current_caps && caps && !gst_caps_is_equal (current_caps, caps)) { - GST_WARNING_OBJECT (ogm, "Already an existing pad %s:%s", - GST_DEBUG_PAD_NAME (ogm->srcpad)); - gst_pad_set_active (ogm->srcpad, FALSE); - gst_element_remove_pad (GST_ELEMENT (ogm), ogm->srcpad); - ogm->srcpad = NULL; - } else { - GST_DEBUG_OBJECT (ogm, "Existing pad has the same caps, do nothing"); + if (current_caps) { + if (caps && !gst_caps_is_equal (current_caps, caps)) { + GST_WARNING_OBJECT (ogm, "Already an existing pad %s:%s", + GST_DEBUG_PAD_NAME (ogm->srcpad)); + gst_pad_set_active (ogm->srcpad, FALSE); + gst_element_remove_pad (GST_ELEMENT (ogm), ogm->srcpad); + ogm->srcpad = NULL; + } else { + GST_DEBUG_OBJECT (ogm, "Existing pad has the same caps, do nothing"); + } + gst_caps_unref (current_caps); } } @@ -640,8 +643,8 @@ gst_ogm_parse_stream_header (GstOgmParse * ogm, const guint8 * data, guint size) ogm->srcpad = gst_pad_new_from_template (ogm->srcpadtempl, "src"); gst_pad_use_fixed_caps (ogm->srcpad); - gst_pad_set_caps (ogm->srcpad, caps); gst_pad_set_active (ogm->srcpad, TRUE); + gst_pad_set_caps (ogm->srcpad, caps); gst_element_add_pad (GST_ELEMENT (ogm), ogm->srcpad); GST_INFO_OBJECT (ogm, "Added pad %s:%s with caps %" GST_PTR_FORMAT, GST_DEBUG_PAD_NAME (ogm->srcpad), caps); @@ -714,8 +717,6 @@ gst_ogm_parse_comment_packet (GstOgmParse * ogm, GstBuffer * buf) /* do not push packet downstream, just let parent unref it */ ret = GST_FLOW_OK; } else { - buf = gst_buffer_copy (buf); - gst_buffer_set_caps (buf, GST_PAD_CAPS (ogm->srcpad)); ret = gst_pad_push (ogm->srcpad, buf); } @@ -820,7 +821,6 @@ gst_ogm_parse_data_packet (GstOgmParse * ogm, GstBuffer * buf, } if (ogm->srcpad) { - gst_buffer_set_caps (sbuf, GST_PAD_CAPS (ogm->srcpad)); GST_LOG_OBJECT (ogm, "Pushing buffer with ts=%" GST_TIME_FORMAT, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (sbuf))); ret = gst_pad_push (ogm->srcpad, sbuf); diff --git a/ext/pango/gstbasetextoverlay.c b/ext/pango/gstbasetextoverlay.c index 37b6c03722..e02b3b0cba 100644 --- a/ext/pango/gstbasetextoverlay.c +++ b/ext/pango/gstbasetextoverlay.c @@ -2423,10 +2423,13 @@ gst_base_text_overlay_video_chain (GstPad * pad, GstBuffer * buffer) * duration (we only use those estimated values internally though, we * don't want to set bogus values on the buffer itself) */ if (stop == -1) { + GstCaps *caps; GstStructure *s; gint fps_num, fps_denom; - s = gst_caps_get_structure (GST_PAD_CAPS (pad), 0); + /* FIXME, store this in setcaps */ + caps = gst_pad_get_current_caps (pad); + s = gst_caps_get_structure (caps, 0); if (gst_structure_get_fraction (s, "framerate", &fps_num, &fps_denom) && fps_num && fps_denom) { GST_DEBUG_OBJECT (overlay, "estimating duration based on framerate"); @@ -2435,6 +2438,7 @@ gst_base_text_overlay_video_chain (GstPad * pad, GstBuffer * buffer) GST_WARNING_OBJECT (overlay, "no duration, assuming minimal duration"); stop = start + 1; /* we need to assume some interval */ } + gst_caps_unref (caps); } gst_object_sync_values (G_OBJECT (overlay), GST_BUFFER_TIMESTAMP (buffer)); diff --git a/ext/pango/gsttextrender.c b/ext/pango/gsttextrender.c index 8e17bee12f..31f671c288 100644 --- a/ext/pango/gsttextrender.c +++ b/ext/pango/gsttextrender.c @@ -506,7 +506,6 @@ gst_text_render_chain (GstPad * pad, GstBuffer * inbuf) GST_DEBUG ("Allocating buffer WxH = %dx%d", render->width, render->height); outbuf = gst_buffer_new_and_alloc (render->width * render->height * 4); - gst_buffer_set_caps (outbuf, caps); gst_buffer_copy_into (outbuf, inbuf, GST_BUFFER_COPY_TIMESTAMPS, 0, -1); data = gst_buffer_map (outbuf, &size, NULL, GST_MAP_WRITE); diff --git a/ext/theora/gsttheoradec.c b/ext/theora/gsttheoradec.c index 5e01734412..7265d6bc61 100644 --- a/ext/theora/gsttheoradec.c +++ b/ext/theora/gsttheoradec.c @@ -1122,8 +1122,6 @@ theora_handle_image (GstTheoraDec * dec, th_ycbcr_buffer buf, GstBuffer ** out) if (G_UNLIKELY (result != GST_FLOW_OK)) goto no_buffer; - gst_buffer_set_caps (*out, GST_PAD_CAPS (dec->srcpad)); - data = gst_buffer_map (*out, &size, NULL, GST_MAP_WRITE); /* FIXME, we can do things slightly more efficient when we know that diff --git a/ext/theora/gsttheoraenc.c b/ext/theora/gsttheoraenc.c index 9558b2b90a..aaa6510071 100644 --- a/ext/theora/gsttheoraenc.c +++ b/ext/theora/gsttheoraenc.c @@ -696,7 +696,6 @@ theora_buffer_from_packet (GstTheoraEnc * enc, ogg_packet * packet, } gst_buffer_fill (buf, 0, packet->packet, packet->bytes); - gst_buffer_set_caps (buf, GST_PAD_CAPS (enc->srcpad)); /* see ext/ogg/README; OFFSET_END takes "our" granulepos, OFFSET its * time representation */ GST_BUFFER_OFFSET_END (buf) = @@ -1208,9 +1207,6 @@ theora_enc_chain (GstPad * pad, GstBuffer * buffer) caps = theora_set_header_on_caps (caps, buffers); GST_DEBUG ("here are the caps: %" GST_PTR_FORMAT, caps); gst_pad_set_caps (enc->srcpad, caps); - - g_slist_foreach (buffers, (GFunc) gst_buffer_set_caps, caps); - gst_caps_unref (caps); /* push out the header buffers */ diff --git a/ext/theora/gsttheoraparse.c b/ext/theora/gsttheoraparse.c index df9aecaef2..41c76b1797 100644 --- a/ext/theora/gsttheoraparse.c +++ b/ext/theora/gsttheoraparse.c @@ -364,8 +364,6 @@ theora_parse_push_headers (GstTheoraParse * parse) GstBuffer *buf; if ((buf = parse->streamheader[i])) { - buf = gst_buffer_make_writable (buf); - gst_buffer_set_caps (buf, GST_PAD_CAPS (parse->srcpad)); gst_pad_push (parse->srcpad, buf); parse->streamheader[i] = NULL; } @@ -498,8 +496,6 @@ theora_parse_push_buffer (GstTheoraParse * parse, GstBuffer * buf, GST_BUFFER_TIMESTAMP (buf) = this_time; GST_BUFFER_DURATION (buf) = next_time - this_time; - gst_buffer_set_caps (buf, GST_PAD_CAPS (parse->srcpad)); - if (parse->times) theora_parse_munge_granulepos (parse, buf, keyframe, frame); diff --git a/ext/vorbis/gstvorbisdec.c b/ext/vorbis/gstvorbisdec.c index d52c505074..45374eb559 100644 --- a/ext/vorbis/gstvorbisdec.c +++ b/ext/vorbis/gstvorbisdec.c @@ -914,7 +914,6 @@ vorbis_handle_data_packet (GstVorbisDec * vd, ogg_packet * packet, /* alloc buffer for it */ out = gst_buffer_new_and_alloc (size); - gst_buffer_set_caps (out, GST_PAD_CAPS (vd->srcpad)); /* get samples ready for reading now, should be sample_count */ #ifdef USE_TREMOLO diff --git a/ext/vorbis/gstvorbisenc.c b/ext/vorbis/gstvorbisenc.c index 1670cf42c5..8b4b5ef056 100644 --- a/ext/vorbis/gstvorbisenc.c +++ b/ext/vorbis/gstvorbisenc.c @@ -840,8 +840,6 @@ gst_vorbis_enc_buffer_from_packet (GstVorbisEnc * vorbisenc, vorbisenc->next_discont = FALSE; } - gst_buffer_set_caps (outbuf, vorbisenc->srccaps); - GST_LOG_OBJECT (vorbisenc, "encoded buffer of %d bytes", gst_buffer_get_size (outbuf)); return outbuf; @@ -862,8 +860,6 @@ gst_vorbis_enc_buffer_from_header_packet (GstVorbisEnc * vorbisenc, GST_BUFFER_TIMESTAMP (outbuf) = GST_CLOCK_TIME_NONE; GST_BUFFER_DURATION (outbuf) = GST_CLOCK_TIME_NONE; - gst_buffer_set_caps (outbuf, vorbisenc->srccaps); - GST_DEBUG ("created header packet buffer, %d bytes", gst_buffer_get_size (outbuf)); return outbuf; @@ -1099,10 +1095,6 @@ gst_vorbis_enc_chain (GstPad * pad, GstBuffer * buffer) GST_DEBUG ("here are the caps: %" GST_PTR_FORMAT, caps); gst_pad_set_caps (vorbisenc->srcpad, caps); - gst_buffer_set_caps (buf1, caps); - gst_buffer_set_caps (buf2, caps); - gst_buffer_set_caps (buf3, caps); - /* push out buffers */ /* push_buffer takes the reference even for failure */ if ((ret = gst_vorbis_enc_push_buffer (vorbisenc, buf1)) != GST_FLOW_OK) diff --git a/ext/vorbis/gstvorbisparse.c b/ext/vorbis/gstvorbisparse.c index 5a7a576327..7155fec541 100644 --- a/ext/vorbis/gstvorbisparse.c +++ b/ext/vorbis/gstvorbisparse.c @@ -232,14 +232,8 @@ vorbis_parse_push_headers (GstVorbisParse * parse) vorbis_parse_drain_event_queue (parse); /* push out buffers, ignoring return value... */ - outbuf1 = gst_buffer_make_writable (outbuf1); - gst_buffer_set_caps (outbuf1, GST_PAD_CAPS (parse->srcpad)); gst_pad_push (parse->srcpad, outbuf1); - outbuf2 = gst_buffer_make_writable (outbuf2); - gst_buffer_set_caps (outbuf2, GST_PAD_CAPS (parse->srcpad)); gst_pad_push (parse->srcpad, outbuf2); - outbuf3 = gst_buffer_make_writable (outbuf3); - gst_buffer_set_caps (outbuf3, GST_PAD_CAPS (parse->srcpad)); gst_pad_push (parse->srcpad, outbuf3); g_list_free (parse->streamheader); @@ -278,8 +272,6 @@ vorbis_parse_push_buffer (GstVorbisParse * parse, GstBuffer * buf, GST_BUFFER_TIMESTAMP (buf) = GST_BUFFER_OFFSET (buf) - GST_BUFFER_DURATION (buf); - gst_buffer_set_caps (buf, GST_PAD_CAPS (parse->srcpad)); - return gst_pad_push (parse->srcpad, buf); } diff --git a/gst-libs/gst/app/gstappsrc.c b/gst-libs/gst/app/gstappsrc.c index 6f2be8074b..893f15e8b9 100644 --- a/gst-libs/gst/app/gstappsrc.c +++ b/gst-libs/gst/app/gstappsrc.c @@ -981,10 +981,6 @@ gst_app_src_create (GstBaseSrc * bsrc, guint64 offset, guint size, /* only update the offset when in random_access mode */ if (priv->stream_type == GST_APP_STREAM_TYPE_RANDOM_ACCESS) priv->offset += buf_size; - if (caps) { - *buf = gst_buffer_make_writable (*buf); - gst_buffer_set_caps (*buf, caps); - } /* signal that we removed an item */ g_cond_broadcast (priv->cond); diff --git a/gst-libs/gst/audio/audio.c b/gst-libs/gst/audio/audio.c index ee15e62e07..ce832c8225 100644 --- a/gst-libs/gst/audio/audio.c +++ b/gst-libs/gst/audio/audio.c @@ -49,24 +49,31 @@ gst_audio_frame_byte_size (GstPad * pad) int width = 0; int channels = 0; - const GstCaps *caps = NULL; + GstCaps *caps; GstStructure *structure; /* get caps of pad */ - caps = GST_PAD_CAPS (pad); + caps = gst_pad_get_current_caps (pad); - if (caps == NULL) { - /* ERROR: could not get caps of pad */ - g_warning ("gstaudio: could not get caps of pad %s:%s\n", - GST_DEBUG_PAD_NAME (pad)); - return 0; - } + if (caps == NULL) + goto no_caps; structure = gst_caps_get_structure (caps, 0); gst_structure_get_int (structure, "width", &width); gst_structure_get_int (structure, "channels", &channels); + gst_caps_unref (caps); + return (width / 8) * channels; + + /* ERRORS */ +no_caps: + { + /* ERROR: could not get caps of pad */ + g_warning ("gstaudio: could not get caps of pad %s:%s\n", + GST_DEBUG_PAD_NAME (pad)); + return 0; + } } /** @@ -113,34 +120,38 @@ gst_audio_duration_from_pad_buffer (GstPad * pad, GstBuffer * buf) int width = 0; int channels = 0; int rate = 0; - - GstClockTime length; - - const GstCaps *caps = NULL; + GstCaps *caps; GstStructure *structure; g_assert (GST_IS_BUFFER (buf)); + /* get caps of pad */ - caps = GST_PAD_CAPS (pad); - if (caps == NULL) { + caps = gst_pad_get_current_caps (pad); + if (caps == NULL) + goto no_caps; + + structure = gst_caps_get_structure (caps, 0); + bytes = gst_buffer_get_size (buf); + gst_structure_get_int (structure, "width", &width); + gst_structure_get_int (structure, "channels", &channels); + gst_structure_get_int (structure, "rate", &rate); + gst_caps_unref (caps); + + g_assert (bytes != 0); + g_assert (width != 0); + g_assert (channels != 0); + g_assert (rate != 0); + + return (bytes * 8 * GST_SECOND) / (rate * channels * width); + + /* ERRORS */ +no_caps: + { /* ERROR: could not get caps of pad */ g_warning ("gstaudio: could not get caps of pad %s:%s\n", GST_DEBUG_PAD_NAME (pad)); - length = GST_CLOCK_TIME_NONE; - } else { - structure = gst_caps_get_structure (caps, 0); - bytes = gst_buffer_get_size (buf); - gst_structure_get_int (structure, "width", &width); - gst_structure_get_int (structure, "channels", &channels); - gst_structure_get_int (structure, "rate", &rate); - - g_assert (bytes != 0); - g_assert (width != 0); - g_assert (channels != 0); - g_assert (rate != 0); - length = (bytes * 8 * GST_SECOND) / (rate * channels * width); + return GST_CLOCK_TIME_NONE; } - return length; } /** diff --git a/gst-libs/gst/cdda/gstcddabasesrc.c b/gst-libs/gst/cdda/gstcddabasesrc.c index bac2112a8a..48d1860c95 100644 --- a/gst-libs/gst/cdda/gstcddabasesrc.c +++ b/gst-libs/gst/cdda/gstcddabasesrc.c @@ -1613,10 +1613,6 @@ gst_cdda_base_src_create (GstPushSrc * pushsrc, GstBuffer ** buffer) return GST_FLOW_ERROR; } - if (GST_BUFFER_CAPS (buf) == NULL) { - gst_buffer_set_caps (buf, GST_PAD_CAPS (GST_BASE_SRC_PAD (src))); - } - format = GST_FORMAT_TIME; if (gst_pad_query_position (GST_BASE_SRC_PAD (src), &format, &qry_position)) { gint64 next_ts = 0; diff --git a/gst-libs/gst/rtp/gstbasertpdepayload.c b/gst-libs/gst/rtp/gstbasertpdepayload.c index ad1de2503f..91a0199e84 100644 --- a/gst-libs/gst/rtp/gstbasertpdepayload.c +++ b/gst-libs/gst/rtp/gstbasertpdepayload.c @@ -392,22 +392,14 @@ gst_base_rtp_depayload_chain (GstPad * pad, GstBuffer * in) not_negotiated: { /* this is not fatal but should be filtered earlier */ - if (GST_BUFFER_CAPS (in) == NULL) { - GST_ELEMENT_ERROR (filter, CORE, NEGOTIATION, - ("No RTP format was negotiated."), - ("Input buffers need to have RTP caps set on them. This is usually " - "achieved by setting the 'caps' property of the upstream source " - "element (often udpsrc or appsrc), or by putting a capsfilter " - "element before the depayloader and setting the 'caps' property " - "on that. Also see http://cgit.freedesktop.org/gstreamer/" - "gst-plugins-good/tree/gst/rtp/README")); - } else { - GST_ELEMENT_ERROR (filter, CORE, NEGOTIATION, - ("No RTP format was negotiated."), - ("RTP caps on input buffer were rejected, most likely because they " - "were incomplete or contained wrong values. Check the debug log " - "for more information.")); - } + GST_ELEMENT_ERROR (filter, CORE, NEGOTIATION, + ("No RTP format was negotiated."), + ("Input buffers need to have RTP caps set on them. This is usually " + "achieved by setting the 'caps' property of the upstream source " + "element (often udpsrc or appsrc), or by putting a capsfilter " + "element before the depayloader and setting the 'caps' property " + "on that. Also see http://cgit.freedesktop.org/gstreamer/" + "gst-plugins-good/tree/gst/rtp/README")); gst_buffer_unref (in); return GST_FLOW_NOT_NEGOTIATED; } @@ -550,7 +542,6 @@ typedef struct { GstBaseRTPDepayload *depayload; GstBaseRTPDepayloadClass *bclass; - GstCaps *caps; gboolean do_ts; gboolean rtptime; } HeaderData; @@ -561,7 +552,6 @@ set_headers (GstBuffer ** buffer, guint idx, HeaderData * data) GstBaseRTPDepayload *depayload = data->depayload; *buffer = gst_buffer_make_writable (*buffer); - gst_buffer_set_caps (*buffer, data->caps); /* set the timestamp if we must and can */ if (data->bclass->set_gst_timestamp && data->do_ts) @@ -583,7 +573,6 @@ gst_base_rtp_depayload_prepare_push (GstBaseRTPDepayload * filter, HeaderData data; data.depayload = filter; - data.caps = GST_PAD_CAPS (filter->srcpad); data.rtptime = rtptime; data.do_ts = do_ts; data.bclass = GST_BASE_RTP_DEPAYLOAD_GET_CLASS (filter); diff --git a/gst-libs/gst/rtp/gstbasertppayload.c b/gst-libs/gst/rtp/gstbasertppayload.c index 81c630aac5..d8432b0380 100644 --- a/gst-libs/gst/rtp/gstbasertppayload.c +++ b/gst-libs/gst/rtp/gstbasertppayload.c @@ -708,7 +708,6 @@ typedef struct guint32 ssrc; guint16 seqnum; guint8 pt; - GstCaps *caps; GstClockTime timestamp; guint64 offset; guint32 rtptime; @@ -740,7 +739,6 @@ set_headers (GstBuffer ** buffer, guint group, guint idx, HeaderData * data) gst_rtp_buffer_set_timestamp (&rtp, data->rtptime); gst_rtp_buffer_unmap (&rtp); - gst_buffer_set_caps (*buffer, data->caps); /* increment the seqnum for each buffer */ data->seqnum++; @@ -770,7 +768,6 @@ gst_basertppayload_prepare_push (GstBaseRTPPayload * payload, data.seqnum = payload->seqnum; data.ssrc = payload->current_ssrc; data.pt = payload->pt; - data.caps = GST_PAD_CAPS (payload->srcpad); /* find the first buffer with a timestamp */ if (is_list) { diff --git a/gst-libs/gst/tag/gsttagdemux.c b/gst-libs/gst/tag/gsttagdemux.c index 935aea7544..c6287342b8 100644 --- a/gst-libs/gst/tag/gsttagdemux.c +++ b/gst-libs/gst/tag/gsttagdemux.c @@ -468,7 +468,6 @@ gst_tag_demux_trim_buffer (GstTagDemux * tagdemux, GstBuffer ** buf_ref, GST_BUFFER_OFFSET (buf) = out_offset; GST_BUFFER_OFFSET_END (buf) = out_offset + out_size; - gst_buffer_set_caps (buf, tagdemux->priv->src_caps); } return TRUE; @@ -709,10 +708,6 @@ gst_tag_demux_chain (GstPad * pad, GstBuffer * buf) demux->priv->send_tag_event = FALSE; } - /* Ensure the caps are set correctly */ - outbuf = gst_buffer_make_writable (outbuf); - gst_buffer_set_caps (outbuf, GST_PAD_CAPS (demux->priv->srcpad)); - GST_LOG_OBJECT (demux, "Pushing buffer %p", outbuf); return gst_pad_push (demux->priv->srcpad, outbuf); @@ -1327,8 +1322,6 @@ gst_tag_demux_read_range (GstTagDemux * demux, /* this should only happen in streaming mode */ g_assert (*buffer != NULL); - - gst_buffer_set_caps (*buffer, demux->priv->src_caps); } return ret; diff --git a/gst-libs/gst/tag/gstvorbistag.c b/gst-libs/gst/tag/gstvorbistag.c index 036550991a..603ffe9e25 100644 --- a/gst-libs/gst/tag/gstvorbistag.c +++ b/gst-libs/gst/tag/gstvorbistag.c @@ -551,12 +551,15 @@ static GList * gst_tag_to_metadata_block_picture (const gchar * tag, const GValue * image_value) { +#if 0 gchar *comment_data, *data_result; const gchar *mime_type; guint mime_type_len; GstStructure *mime_struct; GstBuffer *buffer; +#endif GList *l = NULL; +#if 0 guint8 *data; gsize size; GstByteWriter writer; @@ -564,9 +567,14 @@ gst_tag_to_metadata_block_picture (const gchar * tag, gint width = 0, height = 0; guint8 *metadata_block; guint metadata_block_len; +#endif g_return_val_if_fail (image_value != NULL, NULL); + /* FIXME, no more buffer caps */ + g_assert_not_reached (); + +#if 0 buffer = gst_value_get_buffer (image_value); g_return_val_if_fail (gst_caps_is_fixed (buffer->caps), NULL); mime_struct = gst_caps_get_structure (buffer->caps, 0); @@ -621,6 +629,7 @@ gst_tag_to_metadata_block_picture (const gchar * tag, g_free (comment_data); l = g_list_append (l, data_result); +#endif return l; } diff --git a/gst-libs/gst/tag/tags.c b/gst-libs/gst/tag/tags.c index 37ddd08e59..b536239bba 100644 --- a/gst-libs/gst/tag/tags.c +++ b/gst-libs/gst/tag/tags.c @@ -612,8 +612,9 @@ gst_tag_image_data_to_image_buffer (const guint8 * image_data, image_type, NULL); } - gst_buffer_set_caps (image, caps); + g_warning ("extra image data can't be set"); gst_caps_unref (caps); + return image; /* ERRORS */ diff --git a/gst-libs/gst/video/convertframe.c b/gst-libs/gst/video/convertframe.c index 6ba3e308e6..5220eb9023 100644 --- a/gst-libs/gst/video/convertframe.c +++ b/gst-libs/gst/video/convertframe.c @@ -233,6 +233,7 @@ link_failed: /** * gst_video_convert_frame: * @buf: a #GstBuffer + * @from_caps: the #GstCaps to convert from * @to_caps: the #GstCaps to convert to * @timeout: the maximum amount of time allowed for the processing. * @err: pointer to a #GError. Can be %NULL. @@ -250,23 +251,21 @@ link_failed: * */ GstBuffer * -gst_video_convert_frame (GstBuffer * buf, const GstCaps * to_caps, - GstClockTime timeout, GError ** err) +gst_video_convert_frame (GstBuffer * buf, GstCaps * from_caps, + const GstCaps * to_caps, GstClockTime timeout, GError ** err) { GstMessage *msg; GstBuffer *result = NULL; GError *error = NULL; GstBus *bus; - GstCaps *from_caps, *to_caps_copy = NULL; + GstCaps *to_caps_copy = NULL; GstFlowReturn ret; GstElement *pipeline, *src, *sink; guint i, n; g_return_val_if_fail (buf != NULL, NULL); g_return_val_if_fail (to_caps != NULL, NULL); - g_return_val_if_fail (GST_BUFFER_CAPS (buf) != NULL, NULL); - - from_caps = GST_BUFFER_CAPS (buf); + g_return_val_if_fail (from_caps != NULL, NULL); to_caps_copy = gst_caps_new_empty (); n = gst_caps_get_size (to_caps); @@ -597,14 +596,15 @@ done: * */ void -gst_video_convert_frame_async (GstBuffer * buf, const GstCaps * to_caps, - GstClockTime timeout, GstVideoConvertFrameCallback callback, - gpointer user_data, GDestroyNotify destroy_notify) +gst_video_convert_frame_async (GstBuffer * buf, GstCaps * from_caps, + const GstCaps * to_caps, GstClockTime timeout, + GstVideoConvertFrameCallback callback, gpointer user_data, + GDestroyNotify destroy_notify) { GMainContext *context = NULL; GError *error = NULL; GstBus *bus; - GstCaps *from_caps, *to_caps_copy = NULL; + GstCaps *to_caps_copy = NULL; GstElement *pipeline, *src, *sink; guint i, n; GSource *source; @@ -612,7 +612,7 @@ gst_video_convert_frame_async (GstBuffer * buf, const GstCaps * to_caps, g_return_if_fail (buf != NULL); g_return_if_fail (to_caps != NULL); - g_return_if_fail (GST_BUFFER_CAPS (buf) != NULL); + g_return_if_fail (from_caps != NULL); g_return_if_fail (callback != NULL); context = g_main_context_get_thread_default (); @@ -620,8 +620,6 @@ gst_video_convert_frame_async (GstBuffer * buf, const GstCaps * to_caps, if (!context) context = g_main_context_default (); - from_caps = GST_BUFFER_CAPS (buf); - to_caps_copy = gst_caps_new_empty (); n = gst_caps_get_size (to_caps); for (i = 0; i < n; i++) { diff --git a/gst-libs/gst/video/video.c b/gst-libs/gst/video/video.c index a369387802..b7479eb2bf 100644 --- a/gst-libs/gst/video/video.c +++ b/gst-libs/gst/video/video.c @@ -65,37 +65,52 @@ gst_video_frame_rate (GstPad * pad) { const GValue *fps; gchar *fps_string; - - const GstCaps *caps = NULL; + GstCaps *caps = NULL; GstStructure *structure; /* get pad caps */ - caps = GST_PAD_CAPS (pad); - if (caps == NULL) { - g_warning ("gstvideo: failed to get caps of pad %s:%s", - GST_DEBUG_PAD_NAME (pad)); - return NULL; - } + caps = gst_pad_get_current_caps (pad); + if (caps == NULL) + goto no_caps; structure = gst_caps_get_structure (caps, 0); - if ((fps = gst_structure_get_value (structure, "framerate")) == NULL) { - g_warning ("gstvideo: failed to get framerate property of pad %s:%s", - GST_DEBUG_PAD_NAME (pad)); - return NULL; - } - if (!GST_VALUE_HOLDS_FRACTION (fps)) { - g_warning - ("gstvideo: framerate property of pad %s:%s is not of type Fraction", - GST_DEBUG_PAD_NAME (pad)); - return NULL; - } + if ((fps = gst_structure_get_value (structure, "framerate")) == NULL) + goto no_framerate; + + if (!GST_VALUE_HOLDS_FRACTION (fps)) + goto no_fraction; fps_string = gst_value_serialize (fps); GST_DEBUG ("Framerate request on pad %s:%s: %s", GST_DEBUG_PAD_NAME (pad), fps_string); g_free (fps_string); + gst_caps_unref (caps); + return fps; + + /* ERRORS */ +no_caps: + { + g_warning ("gstvideo: failed to get caps of pad %s:%s", + GST_DEBUG_PAD_NAME (pad)); + return NULL; + } +no_framerate: + { + g_warning ("gstvideo: failed to get framerate property of pad %s:%s", + GST_DEBUG_PAD_NAME (pad)); + gst_caps_unref (caps); + return NULL; + } +no_fraction: + { + g_warning + ("gstvideo: framerate property of pad %s:%s is not of type Fraction", + GST_DEBUG_PAD_NAME (pad)); + gst_caps_unref (caps); + return NULL; + } } /** @@ -115,7 +130,7 @@ gst_video_frame_rate (GstPad * pad) gboolean gst_video_get_size (GstPad * pad, gint * width, gint * height) { - const GstCaps *caps = NULL; + GstCaps *caps = NULL; GstStructure *structure; gboolean ret; @@ -123,28 +138,36 @@ gst_video_get_size (GstPad * pad, gint * width, gint * height) g_return_val_if_fail (width != NULL, FALSE); g_return_val_if_fail (height != NULL, FALSE); - caps = GST_PAD_CAPS (pad); - - if (caps == NULL) { - g_warning ("gstvideo: failed to get caps of pad %s:%s", - GST_DEBUG_PAD_NAME (pad)); - return FALSE; - } + caps = gst_pad_get_current_caps (pad); + if (caps == NULL) + goto no_caps; structure = gst_caps_get_structure (caps, 0); ret = gst_structure_get_int (structure, "width", width); ret &= gst_structure_get_int (structure, "height", height); + gst_caps_unref (caps); - if (!ret) { - g_warning ("gstvideo: failed to get size properties on pad %s:%s", - GST_DEBUG_PAD_NAME (pad)); - return FALSE; - } + if (!ret) + goto no_size; GST_DEBUG ("size request on pad %s:%s: %dx%d", GST_DEBUG_PAD_NAME (pad), width ? *width : -1, height ? *height : -1); return TRUE; + + /* ERROR */ +no_caps: + { + g_warning ("gstvideo: failed to get caps of pad %s:%s", + GST_DEBUG_PAD_NAME (pad)); + return FALSE; + } +no_size: + { + g_warning ("gstvideo: failed to get size properties on pad %s:%s", + GST_DEBUG_PAD_NAME (pad)); + return FALSE; + } } /** diff --git a/gst-libs/gst/video/video.h b/gst-libs/gst/video/video.h index fdd6b43a7f..e0dce1791c 100644 --- a/gst-libs/gst/video/video.h +++ b/gst-libs/gst/video/video.h @@ -488,11 +488,11 @@ gboolean gst_video_format_convert (GstVideoFormat format, int width, int height, GstEvent *gst_video_event_new_still_frame (gboolean in_still); gboolean gst_video_event_parse_still_frame (GstEvent *event, gboolean *in_still); -GstBuffer *gst_video_convert_frame(GstBuffer *buf, const GstCaps *to_caps, +GstBuffer *gst_video_convert_frame(GstBuffer *buf, GstCaps *from_caps, const GstCaps *to_caps, GstClockTime timeout, GError **error); typedef void (*GstVideoConvertFrameCallback) (GstBuffer *buf, GError *error, gpointer user_data); -void gst_video_convert_frame_async(GstBuffer *buf, const GstCaps *to_caps, +void gst_video_convert_frame_async(GstBuffer *buf, GstCaps *from_caps, const GstCaps *to_caps, GstClockTime timeout, GstVideoConvertFrameCallback callback, gpointer user_data, GDestroyNotify destroy_notify); diff --git a/gst/adder/gstadder.c b/gst/adder/gstadder.c index 5aced2c95c..60d11c22d9 100644 --- a/gst/adder/gstadder.c +++ b/gst/adder/gstadder.c @@ -220,6 +220,21 @@ gst_adder_sink_getcaps (GstPad * pad) return result; } +typedef struct +{ + GstPad *pad; + GstCaps *caps; +} IterData; + +static void +setcapsfunc (const GValue * item, IterData * data) +{ + GstPad *otherpad = g_value_get_object (item); + + if (otherpad != data->pad) + gst_pad_set_caps (data->pad, data->caps); +} + /* the first caps we receive on any of the sinkpads will define the caps for all * the other sinkpads because we can only mix streams with the same caps. */ @@ -227,28 +242,39 @@ static gboolean gst_adder_setcaps (GstPad * pad, GstCaps * caps) { GstAdder *adder; - GList *pads; GstStructure *structure; const char *media_type; + GstIterator *it; + GstIteratorResult ires; + IterData idata; + gboolean done; adder = GST_ADDER (GST_PAD_PARENT (pad)); GST_LOG_OBJECT (adder, "setting caps on pad %p,%s to %" GST_PTR_FORMAT, pad, GST_PAD_NAME (pad), caps); + it = gst_element_iterate_pads (GST_ELEMENT_CAST (adder)); + /* FIXME, see if the other pads can accept the format. Also lock the * format on the other pads to this new format. */ - GST_OBJECT_LOCK (adder); - pads = GST_ELEMENT (adder)->pads; - while (pads) { - GstPad *otherpad = GST_PAD (pads->data); + idata.caps = caps; + idata.pad = pad; - if (otherpad != pad) { - gst_caps_replace (&GST_PAD_CAPS (otherpad), caps); + done = FALSE; + while (!done) { + ires = gst_iterator_foreach (it, (GstIteratorForeachFunction) setcapsfunc, + &idata); + + switch (ires) { + case GST_ITERATOR_RESYNC: + gst_iterator_resync (it); + break; + default: + done = TRUE; + break; } - pads = g_list_next (pads); } - GST_OBJECT_UNLOCK (adder); /* parse caps now */ structure = gst_caps_get_structure (caps, 0); @@ -1100,11 +1126,6 @@ gst_adder_collected (GstCollectPads * pads, gpointer user_data) GST_LOG_OBJECT (adder, "channel %p: preparing output buffer of %d bytes", collect_data, outsize); - /* make data and metadata writable, can simply return the inbuf when we - * are the only one referencing this buffer. If this is the last (and - * only) GAP buffer, it will automatically copy the GAP flag. */ - outbuf = gst_buffer_make_writable (inbuf); - gst_buffer_set_caps (outbuf, GST_PAD_CAPS (adder->srcpad)); outdata = gst_buffer_map (outbuf, NULL, NULL, GST_MAP_WRITE); } else { diff --git a/gst/audioconvert/gstaudioconvert.c b/gst/audioconvert/gstaudioconvert.c index c1f3fe91ae..90bcc4342e 100644 --- a/gst/audioconvert/gstaudioconvert.c +++ b/gst/audioconvert/gstaudioconvert.c @@ -1070,10 +1070,6 @@ gst_audio_convert_transform (GstBaseTransform * base, GstBuffer * inbuf, gint samples; gpointer src, dst; - GST_CAT_LOG_OBJECT (GST_CAT_PERFORMANCE, base, "converting audio from %" - GST_PTR_FORMAT " to %" GST_PTR_FORMAT, GST_BUFFER_CAPS (inbuf), - GST_BUFFER_CAPS (outbuf)); - /* get amount of samples to convert. */ samples = gst_buffer_get_size (inbuf) / this->ctx.in.unit_size; diff --git a/gst/audiorate/gstaudiorate.c b/gst/audiorate/gstaudiorate.c index 4a31e9d07d..c90dcff676 100644 --- a/gst/audiorate/gstaudiorate.c +++ b/gst/audiorate/gstaudiorate.c @@ -634,7 +634,6 @@ gst_audio_rate_chain (GstPad * pad, GstBuffer * buf) GST_BUFFER_FLAG_SET (fill, GST_BUFFER_FLAG_DISCONT); audiorate->discont = FALSE; } - gst_buffer_set_caps (fill, GST_PAD_CAPS (audiorate->srcpad)); ret = gst_pad_push (audiorate->srcpad, fill); if (ret != GST_FLOW_OK) @@ -681,8 +680,6 @@ gst_audio_rate_chain (GstPad * pad, GstBuffer * buf) gst_buffer_unref (buf); buf = trunc; - gst_buffer_set_caps (buf, GST_PAD_CAPS (audiorate->srcpad)); - audiorate->drop += truncsamples; GST_DEBUG_OBJECT (audiorate, "truncating %" G_GUINT64_FORMAT " samples", truncsamples); diff --git a/gst/audioresample/gstaudioresample.c b/gst/audioresample/gstaudioresample.c index 44a22ddbeb..c4d3c0dcd3 100644 --- a/gst/audioresample/gstaudioresample.c +++ b/gst/audioresample/gstaudioresample.c @@ -821,8 +821,6 @@ gst_audio_resample_push_drain (GstAudioResample * resample, guint history_len) return; outbuf = gst_buffer_new_and_alloc (outsize); - gst_buffer_set_caps (outbuf, - GST_PAD_CAPS (GST_BASE_TRANSFORM_SRC_PAD (resample))); data = gst_buffer_map (outbuf, NULL, NULL, GST_MAP_WRITE); diff --git a/gst/audiotestsrc/gstaudiotestsrc.c b/gst/audiotestsrc/gstaudiotestsrc.c index 144a2307ae..f0ff75095b 100644 --- a/gst/audiotestsrc/gstaudiotestsrc.c +++ b/gst/audiotestsrc/gstaudiotestsrc.c @@ -1092,7 +1092,6 @@ gst_audio_test_src_create (GstBaseSrc * basesrc, guint64 offset, bytes = src->generate_samples_per_buffer * src->sample_size * src->channels; buf = gst_buffer_new_and_alloc (bytes); - gst_buffer_set_caps (buf, GST_PAD_CAPS (basesrc->srcpad)); next_byte = src->next_byte + (src->reverse ? (-bytes) : bytes); next_time = gst_util_uint64_scale_int (next_sample, GST_SECOND, diff --git a/gst/encoding/gstsmartencoder.c b/gst/encoding/gstsmartencoder.c index ed0e42bd5c..9daa6cc67f 100644 --- a/gst/encoding/gstsmartencoder.c +++ b/gst/encoding/gstsmartencoder.c @@ -510,6 +510,7 @@ static gboolean setup_recoder_pipeline (GstSmartEncoder * smart_encoder) { GstPad *tmppad; + GstCaps *caps; /* Fast path */ if (G_UNLIKELY (smart_encoder->encoder)) @@ -518,14 +519,18 @@ setup_recoder_pipeline (GstSmartEncoder * smart_encoder) GST_DEBUG ("Creating internal decoder and encoder"); /* Create decoder/encoder */ - smart_encoder->decoder = get_decoder (GST_PAD_CAPS (smart_encoder->sinkpad)); + caps = gst_pad_get_current_caps (smart_encoder->sinkpad); + smart_encoder->decoder = get_decoder (caps); if (G_UNLIKELY (smart_encoder->decoder == NULL)) goto no_decoder; + gst_caps_unref (caps); gst_element_set_bus (smart_encoder->decoder, GST_ELEMENT_BUS (smart_encoder)); - smart_encoder->encoder = get_encoder (GST_PAD_CAPS (smart_encoder->sinkpad)); + caps = gst_pad_get_current_caps (smart_encoder->sinkpad); + smart_encoder->encoder = get_encoder (caps); if (G_UNLIKELY (smart_encoder->encoder == NULL)) goto no_encoder; + gst_caps_unref (caps); gst_element_set_bus (smart_encoder->encoder, GST_ELEMENT_BUS (smart_encoder)); GST_DEBUG ("Creating internal pads"); @@ -536,8 +541,6 @@ setup_recoder_pipeline (GstSmartEncoder * smart_encoder) smart_encoder->internal_srcpad = gst_pad_new ("internal_src", GST_PAD_SRC); g_object_set_qdata ((GObject *) smart_encoder->internal_srcpad, INTERNAL_ELEMENT, smart_encoder); - gst_pad_set_caps (smart_encoder->internal_srcpad, - GST_PAD_CAPS (smart_encoder->sinkpad)); gst_pad_set_active (smart_encoder->internal_srcpad, TRUE); /* Sink pad which will get the buffers from the encoder. @@ -546,8 +549,6 @@ setup_recoder_pipeline (GstSmartEncoder * smart_encoder) smart_encoder->internal_sinkpad = gst_pad_new ("internal_sink", GST_PAD_SINK); g_object_set_qdata ((GObject *) smart_encoder->internal_sinkpad, INTERNAL_ELEMENT, smart_encoder); - gst_pad_set_caps (smart_encoder->internal_sinkpad, - GST_PAD_CAPS (smart_encoder->sinkpad)); gst_pad_set_chain_function (smart_encoder->internal_sinkpad, internal_chain); gst_pad_set_active (smart_encoder->internal_sinkpad, TRUE); @@ -575,15 +576,15 @@ setup_recoder_pipeline (GstSmartEncoder * smart_encoder) no_decoder: { - GST_WARNING ("Couldn't find a decoder for %" GST_PTR_FORMAT, - GST_PAD_CAPS (smart_encoder->sinkpad)); + GST_WARNING ("Couldn't find a decoder for %" GST_PTR_FORMAT, caps); + gst_caps_unref (caps); return FALSE; } no_encoder: { - GST_WARNING ("Couldn't find an encoder for %" GST_PTR_FORMAT, - GST_PAD_CAPS (smart_encoder->sinkpad)); + GST_WARNING ("Couldn't find an encoder for %" GST_PTR_FORMAT, caps); + gst_caps_unref (caps); return FALSE; } diff --git a/gst/gdp/gstgdpdepay.c b/gst/gdp/gstgdpdepay.c index fd16a38463..10b099f3ac 100644 --- a/gst/gdp/gstgdpdepay.c +++ b/gst/gdp/gstgdpdepay.c @@ -317,7 +317,6 @@ gst_gdp_depay_chain (GstPad * pad, GstBuffer * buffer) } /* set caps and push */ - gst_buffer_set_caps (buf, this->caps); GST_LOG_OBJECT (this, "deserialized buffer %p, pushing, timestamp %" GST_TIME_FORMAT ", duration %" GST_TIME_FORMAT ", offset %" G_GINT64_FORMAT ", offset_end %" G_GINT64_FORMAT diff --git a/gst/gdp/gstgdppay.c b/gst/gdp/gstgdppay.c index 27743490a4..e9485cf1cd 100644 --- a/gst/gdp/gstgdppay.c +++ b/gst/gdp/gstgdppay.c @@ -210,6 +210,7 @@ gst_gdp_stamp_buffer (GstGDPPay * this, GstBuffer * buffer) this->offset = GST_BUFFER_OFFSET_END (buffer); } +#if 0 static GstBuffer * gst_gdp_buffer_from_caps (GstGDPPay * this, GstCaps * caps) { @@ -241,6 +242,7 @@ packet_failed: return NULL; } } +#endif static GstBuffer * gst_gdp_pay_buffer_from_buffer (GstGDPPay * this, GstBuffer * buffer) @@ -352,7 +354,6 @@ gst_gdp_pay_reset_streamheader (GstGDPPay * this) GST_DEBUG_OBJECT (this, "1.0, appending copy of new segment buffer %p", this->new_segment_buf); new_segment_buf = gst_buffer_copy (this->new_segment_buf); - gst_buffer_set_caps (new_segment_buf, NULL); g_value_init (&value, GST_TYPE_BUFFER); gst_value_set_buffer (&value, new_segment_buf); gst_value_array_append_value (&array, &value); @@ -366,7 +367,6 @@ gst_gdp_pay_reset_streamheader (GstGDPPay * this) tag_buf = this->tag_buf; this->tag_buf = NULL; - gst_buffer_set_caps (tag_buf, NULL); g_value_init (&value, GST_TYPE_BUFFER); gst_value_set_buffer (&value, tag_buf); gst_value_array_append_value (&array, &value); @@ -378,7 +378,6 @@ gst_gdp_pay_reset_streamheader (GstGDPPay * this) gst_gdp_stamp_buffer (this, this->caps_buf); GST_DEBUG_OBJECT (this, "appending copy of caps buffer %p", this->caps_buf); caps_buf = gst_buffer_copy (this->caps_buf); - gst_buffer_set_caps (caps_buf, NULL); g_value_init (&value, GST_TYPE_BUFFER); gst_value_set_buffer (&value, caps_buf); gst_value_array_append_value (&array, &value); @@ -453,10 +452,6 @@ gst_gdp_pay_reset_streamheader (GstGDPPay * this) GST_DEBUG_OBJECT (this, "Setting caps on src pad %" GST_PTR_FORMAT, caps); gst_pad_set_caps (this->srcpad, caps); - this->caps_buf = gst_buffer_make_writable (this->caps_buf); - gst_buffer_set_caps (this->caps_buf, caps); - this->new_segment_buf = gst_buffer_make_writable (this->new_segment_buf); - gst_buffer_set_caps (this->new_segment_buf, caps); /* if these are our first ever buffers, send out new_segment first */ if (!this->sent_streamheader) { @@ -482,7 +477,6 @@ gst_gdp_pay_reset_streamheader (GstGDPPay * this) goto done; } if (this->tag_buf) { - gst_buffer_set_caps (this->tag_buf, caps); GST_DEBUG_OBJECT (this, "Pushing GDP tag buffer %p", this->tag_buf); /* we stored these bufs with refcount 1, so make sure we keep a ref */ r = gst_pad_push (this->srcpad, gst_buffer_ref (this->tag_buf)); @@ -510,7 +504,6 @@ gst_gdp_pay_reset_streamheader (GstGDPPay * this) this->queue = g_list_delete_link (this->queue, this->queue); /* set caps and push */ - gst_buffer_set_caps (buffer, caps); r = gst_pad_push (this->srcpad, buffer); if (r != GST_FLOW_OK) { GST_WARNING_OBJECT (this, "pushing queued GDP buffer returned %d", r); @@ -540,7 +533,6 @@ gst_gdp_queue_buffer (GstGDPPay * this, GstBuffer * buffer) if (this->sent_streamheader) { GST_LOG_OBJECT (this, "Pushing GDP buffer %p, caps %" GST_PTR_FORMAT, buffer, this->caps); - gst_buffer_set_caps (buffer, GST_PAD_CAPS (this->srcpad)); return gst_pad_push (this->srcpad, buffer); } @@ -557,7 +549,9 @@ static GstFlowReturn gst_gdp_pay_chain (GstPad * pad, GstBuffer * buffer) { GstGDPPay *this; +#if 0 GstCaps *caps; +#endif GstBuffer *outbuffer; GstFlowReturn ret; @@ -587,7 +581,7 @@ gst_gdp_pay_chain (GstPad * pad, GstBuffer * buffer) this->new_segment_buf = outbuffer; } } - +#if 0 /* make sure we've received caps before */ caps = gst_buffer_get_caps (buffer); if (!this->caps && !caps) @@ -613,6 +607,7 @@ gst_gdp_pay_chain (GstPad * pad, GstBuffer * buffer) if (caps) gst_caps_unref (caps); +#endif /* create a GDP header packet, * then create a GST buffer of the header packet and the buffer contents */ @@ -641,6 +636,7 @@ done: return ret; /* ERRORS */ +#if 0 no_caps: { /* when returning a fatal error as a GstFlowReturn we must post an error @@ -660,6 +656,7 @@ no_caps_buffer: ret = GST_FLOW_ERROR; goto done; } +#endif no_buffer: { GST_ELEMENT_ERROR (this, STREAM, ENCODE, (NULL), diff --git a/gst/playback/gstdecodebin2.c b/gst/playback/gstdecodebin2.c index 2921f6cce0..65c793ca1e 100644 --- a/gst/playback/gstdecodebin2.c +++ b/gst/playback/gstdecodebin2.c @@ -1885,10 +1885,7 @@ get_pad_caps (GstPad * pad) /* first check the pad caps, if this is set, we are positively sure it is * fixed and exactly what the element will produce. */ - GST_OBJECT_LOCK (pad); - if ((caps = GST_PAD_CAPS (pad))) - gst_caps_ref (caps); - GST_OBJECT_UNLOCK (pad); + caps = gst_pad_get_current_caps (pad); /* then use the getcaps function if we don't have caps. These caps might not * be fixed in some cases, in which case analyze_new_pad will set up a diff --git a/gst/playback/gstplaybin.c b/gst/playback/gstplaybin.c index ac260130c5..f2c267e95e 100644 --- a/gst/playback/gstplaybin.c +++ b/gst/playback/gstplaybin.c @@ -784,6 +784,7 @@ handoff (GstElement * identity, GstBuffer * frame, gpointer data) { GstPlayBin *play_bin = GST_PLAY_BIN (data); +#if 0 /* applications need to know the buffer caps, * make sure they are always set on the frame */ if (GST_BUFFER_CAPS (frame) == NULL) { @@ -794,6 +795,7 @@ handoff (GstElement * identity, GstBuffer * frame, gpointer data) gst_object_unref (pad); } } +#endif gst_buffer_replace (&play_bin->frame, frame); } diff --git a/gst/playback/gstplaysink.c b/gst/playback/gstplaysink.c index fe067b6dec..98facaf84a 100644 --- a/gst/playback/gstplaysink.c +++ b/gst/playback/gstplaysink.c @@ -2850,7 +2850,8 @@ gst_play_sink_convert_frame (GstPlaySink * playsink, GstCaps * caps) GstBuffer *temp; GError *err = NULL; - temp = gst_video_convert_frame (result, caps, 25 * GST_SECOND, &err); + /* FIXME, need to get the input buffer caps */ + temp = gst_video_convert_frame (result, NULL, caps, 25 * GST_SECOND, &err); gst_buffer_unref (result); if (temp == NULL && err) { /* I'm really uncertain whether we should make playsink post an error diff --git a/gst/subparse/gstssaparse.c b/gst/subparse/gstssaparse.c index e59946635f..48dca7818f 100644 --- a/gst/subparse/gstssaparse.c +++ b/gst/subparse/gstssaparse.c @@ -275,8 +275,6 @@ gst_ssa_parse_push_line (GstSsaParse * parse, gchar * txt, GST_BUFFER_TIMESTAMP (buf) = start; GST_BUFFER_DURATION (buf) = duration; - gst_buffer_set_caps (buf, GST_PAD_CAPS (parse->srcpad)); - GST_LOG_OBJECT (parse, "Pushing buffer with timestamp %" GST_TIME_FORMAT " and duration %" GST_TIME_FORMAT, GST_TIME_ARGS (start), GST_TIME_ARGS (duration)); diff --git a/gst/subparse/gstsubparse.c b/gst/subparse/gstsubparse.c index b7b68155e3..88c124edbc 100644 --- a/gst/subparse/gstsubparse.c +++ b/gst/subparse/gstsubparse.c @@ -1484,7 +1484,6 @@ handle_buffer (GstSubParse * self, GstBuffer * buf) /* +1 for terminating NUL character */ buf = gst_buffer_new_and_alloc (subtitle_len + 1); - gst_buffer_set_caps (buf, GST_PAD_CAPS (self->srcpad)); /* copy terminating NUL character as well */ gst_buffer_fill (buf, 0, subtitle, subtitle_len + 1); diff --git a/gst/tcp/gstmultifdsink.c b/gst/tcp/gstmultifdsink.c index 24d2190a5b..7f40e351fd 100644 --- a/gst/tcp/gstmultifdsink.c +++ b/gst/tcp/gstmultifdsink.c @@ -1303,9 +1303,13 @@ gst_multi_fd_sink_client_queue_buffer (GstMultiFdSink * sink, gboolean send_streamheader = FALSE; GstStructure *s; +#if 0 /* before we queue the buffer, we check if we need to queue streamheader * buffers (because it's a new client, or because they changed) */ caps = gst_buffer_get_caps (buffer); /* cleaned up after streamheader */ +#else + caps = NULL; +#endif if (!client->caps) { GST_DEBUG_OBJECT (sink, "[fd %5d] no previous caps for this client, send streamheader", @@ -2476,13 +2480,16 @@ gst_multi_fd_sink_render (GstBaseSink * bsink, GstBuffer * buf) { GstMultiFdSink *sink; gboolean in_caps; +#if 0 GstCaps *bufcaps, *padcaps; +#endif sink = GST_MULTI_FD_SINK (bsink); g_return_val_if_fail (GST_OBJECT_FLAG_IS_SET (sink, GST_MULTI_FD_SINK_OPEN), GST_FLOW_WRONG_STATE); +#if 0 /* since we check every buffer for streamheader caps, we need to make * sure every buffer has caps set */ bufcaps = gst_buffer_get_caps (buf); @@ -2491,10 +2498,12 @@ gst_multi_fd_sink_render (GstBaseSink * bsink, GstBuffer * buf) /* make sure we have caps on the pad */ if (!padcaps && !bufcaps) goto no_caps; +#endif /* get IN_CAPS first, code below might mess with the flags */ in_caps = GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_IN_CAPS); +#if 0 /* stamp the buffer with previous caps if no caps set */ if (!bufcaps) { if (!gst_buffer_is_writable (buf)) { @@ -2518,6 +2527,7 @@ gst_multi_fd_sink_render (GstBaseSink * bsink, GstBuffer * buf) /* since we keep this buffer out of the scope of this method */ gst_buffer_ref (buf); } +#endif GST_LOG_OBJECT (sink, "received buffer %p, in_caps: %s, offset %" G_GINT64_FORMAT ", offset_end %" G_GINT64_FORMAT @@ -2563,12 +2573,14 @@ gst_multi_fd_sink_render (GstBaseSink * bsink, GstBuffer * buf) return GST_FLOW_OK; /* ERRORS */ +#if 0 no_caps: { GST_ELEMENT_ERROR (sink, CORE, NEGOTIATION, (NULL), ("Received first buffer without caps set")); return GST_FLOW_NOT_NEGOTIATED; } +#endif } static void diff --git a/gst/tcp/gsttcpclientsrc.c b/gst/tcp/gsttcpclientsrc.c index 2de0bcec3d..3429b9a79f 100644 --- a/gst/tcp/gsttcpclientsrc.c +++ b/gst/tcp/gsttcpclientsrc.c @@ -197,8 +197,6 @@ gst_tcp_client_src_create (GstPushSrc * psrc, GstBuffer ** outbuf) GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (*outbuf)), GST_TIME_ARGS (GST_BUFFER_DURATION (*outbuf)), GST_BUFFER_OFFSET (*outbuf), GST_BUFFER_OFFSET_END (*outbuf)); - - gst_buffer_set_caps (*outbuf, src->caps); } return ret; diff --git a/gst/videorate/gstvideorate.c b/gst/videorate/gstvideorate.c index fe3232995d..ec58476bde 100644 --- a/gst/videorate/gstvideorate.c +++ b/gst/videorate/gstvideorate.c @@ -498,8 +498,6 @@ gst_video_rate_flush_prev (GstVideoRate * videorate, gboolean duplicate) /* adapt for looping, bring back to time in current segment. */ GST_BUFFER_TIMESTAMP (outbuf) = push_ts - videorate->segment.accum; - gst_buffer_set_caps (outbuf, GST_PAD_CAPS (videorate->srcpad)); - GST_LOG_OBJECT (videorate, "old is best, dup, pushing buffer outgoing ts %" GST_TIME_FORMAT, GST_TIME_ARGS (push_ts)); diff --git a/tests/examples/app/appsink-src.c b/tests/examples/app/appsink-src.c index 0dd6d3e32b..9772e8adb4 100644 --- a/tests/examples/app/appsink-src.c +++ b/tests/examples/app/appsink-src.c @@ -36,10 +36,6 @@ on_new_buffer_from_source (GstElement * elt, ProgramData * data) gst_buffer_copy_into (app_buffer, buffer, GST_BUFFER_COPY_MEMORY, 0, size); - /* newer basesrc will set caps for use automatically but it does not really - * hurt to set it on the buffer again */ - gst_buffer_set_caps (app_buffer, GST_BUFFER_CAPS (buffer)); - /* we don't need the appsink buffer anymore */ gst_buffer_unref (buffer); diff --git a/tests/examples/seek/jsseek.c b/tests/examples/seek/jsseek.c index b7283e8516..614ccf4131 100644 --- a/tests/examples/seek/jsseek.c +++ b/tests/examples/seek/jsseek.c @@ -2051,7 +2051,11 @@ shot_cb (GtkButton * button, gpointer data) * that it can only be an rgb buffer. The only thing we have not specified * on the caps is the height, which is dependant on the pixel-aspect-ratio * of the source material */ +#if 0 caps = GST_BUFFER_CAPS (buffer); +#endif + /* FIXME, get the caps on the buffer somehow */ + caps = NULL; if (!caps) { g_warning ("could not get snapshot format\n"); goto done; diff --git a/tests/examples/seek/seek.c b/tests/examples/seek/seek.c index b20574e344..9a37413192 100644 --- a/tests/examples/seek/seek.c +++ b/tests/examples/seek/seek.c @@ -2041,7 +2041,11 @@ shot_cb (GtkButton * button, gpointer data) * that it can only be an rgb buffer. The only thing we have not specified * on the caps is the height, which is dependant on the pixel-aspect-ratio * of the source material */ +#if 0 caps = GST_BUFFER_CAPS (buffer); +#endif + /* FIXME, need to get the caps of the buffer somehow */ + caps = NULL; if (!caps) { g_warning ("could not get snapshot format\n"); goto done; diff --git a/tests/examples/snapshot/snapshot.c b/tests/examples/snapshot/snapshot.c index 252f82f26b..b1ec777fa5 100644 --- a/tests/examples/snapshot/snapshot.c +++ b/tests/examples/snapshot/snapshot.c @@ -118,7 +118,11 @@ main (int argc, char *argv[]) * that it can only be an rgb buffer. The only thing we have not specified * on the caps is the height, which is dependant on the pixel-aspect-ratio * of the source material */ +#if 0 caps = GST_BUFFER_CAPS (buffer); +#endif + /* FIXME, get buffer caps somehow */ + caps = NULL; if (!caps) { g_print ("could not get snapshot format\n"); exit (-1);