GST_END_TEST GST_START_TEST (test_merge_modes) { GstTagMergeMode mode; for (mode = GST_TAG_MERGE_REPLACE_ALL; mode < GST_TAG_MERGE_COUNT; mode++) { gint i; for (i = 0; i < 4; i++) { GstElement *enc; GstTagSetter *setter; GstTagList *list1, *list2, *merged; enc = g_object_new (GST_TYPE_DUMMY_ENC, NULL); fail_unless (enc != NULL); setter = GST_TAG_SETTER (enc); list1 = gst_tag_list_new_empty (); list2 = gst_tag_list_new_empty (); /* i = 0: - - * i = 1: list1 - * i = 2: - list2 * i = 3: list1 list2 */ if (i % 2 == 1) { gst_tag_list_add (list1, GST_TAG_MERGE_APPEND, GST_TAG_ARTIST, "artist1", NULL); } if (i > 1) { gst_tag_list_add (list2, GST_TAG_MERGE_APPEND, GST_TAG_ARTIST, "artist2", NULL); } gst_tag_setter_merge_tags (setter, list1, GST_TAG_MERGE_APPEND); gst_tag_setter_merge_tags (setter, list2, mode); merged = gst_tag_list_merge (list1, list2, mode); fail_unless_equals_int (tag_list_length (gst_tag_setter_get_tag_list (setter)), tag_list_length (merged)); gst_tag_list_unref (list1); gst_tag_list_unref (list2); gst_tag_list_unref (merged); gst_object_unref (enc); } } }
static GstBuffer * gst_celt_enc_create_metadata_buffer (GstCeltEnc * enc) { const GstTagList *tags; GstTagList *empty_tags = NULL; GstBuffer *comments = NULL; tags = gst_tag_setter_get_tag_list (GST_TAG_SETTER (enc)); GST_DEBUG_OBJECT (enc, "tags = %" GST_PTR_FORMAT, tags); if (tags == NULL) { /* FIXME: better fix chain of callers to not write metadata at all, * if there is none */ empty_tags = gst_tag_list_new_empty (); tags = empty_tags; } comments = gst_tag_list_to_vorbiscomment_buffer (tags, NULL, 0, "Encoded with GStreamer Celtenc"); GST_BUFFER_OFFSET (comments) = 0; GST_BUFFER_OFFSET_END (comments) = 0; if (empty_tags) gst_tag_list_unref (empty_tags); return comments; }
static GstFlowReturn gst_png_parse_pre_push_frame (GstBaseParse * parse, GstBaseParseFrame * frame) { GstPngParse *pngparse = GST_PNG_PARSE (parse); if (!pngparse->sent_codec_tag) { GstTagList *taglist; GstCaps *caps; /* codec tag */ caps = gst_pad_get_current_caps (GST_BASE_PARSE_SRC_PAD (parse)); if (G_UNLIKELY (caps == NULL)) { if (GST_PAD_IS_FLUSHING (GST_BASE_PARSE_SRC_PAD (parse))) { GST_INFO_OBJECT (parse, "Src pad is flushing"); return GST_FLOW_FLUSHING; } else { GST_INFO_OBJECT (parse, "Src pad is not negotiated!"); return GST_FLOW_NOT_NEGOTIATED; } } taglist = gst_tag_list_new_empty (); gst_pb_utils_add_codec_description_to_tag_list (taglist, GST_TAG_VIDEO_CODEC, caps); gst_caps_unref (caps); gst_base_parse_merge_tags (parse, taglist, GST_TAG_MERGE_REPLACE); gst_tag_list_unref (taglist); /* also signals the end of first-frame processing */ pngparse->sent_codec_tag = TRUE; } return GST_FLOW_OK; }
static GstFlowReturn gst_png_parse_pre_push_frame (GstBaseParse * parse, GstBaseParseFrame * frame) { GstPngParse *pngparse = GST_PNG_PARSE (parse); if (!pngparse->sent_codec_tag) { GstTagList *taglist; GstCaps *caps; taglist = gst_tag_list_new_empty (); /* codec tag */ caps = gst_pad_get_current_caps (GST_BASE_PARSE_SRC_PAD (parse)); gst_pb_utils_add_codec_description_to_tag_list (taglist, GST_TAG_VIDEO_CODEC, caps); gst_caps_unref (caps); gst_pad_push_event (GST_BASE_PARSE_SRC_PAD (pngparse), gst_event_new_tag (taglist)); /* also signals the end of first-frame processing */ pngparse->sent_codec_tag = TRUE; } return GST_FLOW_OK; }
static GstFlowReturn gst_dirac_parse_pre_push_frame (GstBaseParse * parse, GstBaseParseFrame * frame) { GstDiracParse *diracparse = GST_DIRAC_PARSE (parse); if (!diracparse->sent_codec_tag) { GstTagList *taglist; GstCaps *caps; taglist = gst_tag_list_new_empty (); /* codec tag */ caps = gst_pad_get_current_caps (GST_BASE_PARSE_SRC_PAD (parse)); gst_pb_utils_add_codec_description_to_tag_list (taglist, GST_TAG_VIDEO_CODEC, caps); gst_caps_unref (caps); gst_base_parse_merge_tags (parse, taglist, GST_TAG_MERGE_REPLACE); gst_tag_list_unref (taglist); /* also signals the end of first-frame processing */ diracparse->sent_codec_tag = TRUE; } return GST_FLOW_OK; }
static GstFlowReturn daala_handle_comment_packet (GstDaalaDec * dec, ogg_packet * packet) { gchar *encoder = NULL; GstTagList *list; GST_DEBUG_OBJECT (dec, "parsing comment packet"); list = gst_tag_list_from_vorbiscomment (packet->packet, packet->bytes, (guint8 *) "\201daala", 6, &encoder); if (!list) { GST_ERROR_OBJECT (dec, "couldn't decode comments"); list = gst_tag_list_new_empty (); } if (encoder) { gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, GST_TAG_ENCODER, encoder, NULL); g_free (encoder); } gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, GST_TAG_ENCODER_VERSION, dec->info.version_major, GST_TAG_VIDEO_CODEC, "Daala", NULL); gst_video_decoder_merge_tags (GST_VIDEO_DECODER (dec), list, GST_TAG_MERGE_REPLACE); gst_tag_list_unref (list); return GST_FLOW_OK; }
GST_END_TEST GST_START_TEST (test_date_tags) { GstTagList *tag_list, *tag_list2; GDate *date, *date2; gchar *str; date = g_date_new_dmy (14, 10, 2005); tag_list = gst_tag_list_new_empty (); gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND, GST_TAG_DATE, date, NULL); str = gst_tag_list_to_string (tag_list); fail_if (str == NULL); fail_if (strstr (str, "2005-10-14") == NULL); tag_list2 = gst_tag_list_new_from_string (str); fail_if (tag_list2 == NULL); fail_if (!gst_tag_list_get_date (tag_list2, GST_TAG_DATE, &date2)); fail_unless (gst_tag_list_is_equal (tag_list2, tag_list)); gst_tag_list_unref (tag_list2); g_free (str); fail_if (g_date_compare (date, date2) != 0); fail_if (g_date_get_day (date) != 14); fail_if (g_date_get_month (date) != 10); fail_if (g_date_get_year (date) != 2005); fail_if (g_date_get_day (date2) != 14); fail_if (g_date_get_month (date2) != 10); fail_if (g_date_get_year (date2) != 2005); g_date_free (date2); gst_tag_list_unref (tag_list); g_date_free (date); }
/* FIXME 0.11: remove tag handling and let container take care of that? */ static GstFlowReturn vorbis_handle_comment_packet (GstVorbisDec * vd, ogg_packet * packet) { guint bitrate = 0; gchar *encoder = NULL; GstTagList *list; guint8 *data; gsize size; GST_DEBUG_OBJECT (vd, "parsing comment packet"); data = gst_ogg_packet_data (packet); size = gst_ogg_packet_size (packet); list = gst_tag_list_from_vorbiscomment (data, size, (guint8 *) "\003vorbis", 7, &encoder); if (!list) { GST_ERROR_OBJECT (vd, "couldn't decode comments"); list = gst_tag_list_new_empty (); } if (encoder) { if (encoder[0]) gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, GST_TAG_ENCODER, encoder, NULL); g_free (encoder); } gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, GST_TAG_ENCODER_VERSION, vd->vi.version, GST_TAG_AUDIO_CODEC, "Vorbis", NULL); if (vd->vi.bitrate_nominal > 0 && vd->vi.bitrate_nominal <= 0x7FFFFFFF) { gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, GST_TAG_NOMINAL_BITRATE, (guint) vd->vi.bitrate_nominal, NULL); bitrate = vd->vi.bitrate_nominal; } if (vd->vi.bitrate_upper > 0 && vd->vi.bitrate_upper <= 0x7FFFFFFF) { gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, GST_TAG_MAXIMUM_BITRATE, (guint) vd->vi.bitrate_upper, NULL); if (!bitrate) bitrate = vd->vi.bitrate_upper; } if (vd->vi.bitrate_lower > 0 && vd->vi.bitrate_lower <= 0x7FFFFFFF) { gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, GST_TAG_MINIMUM_BITRATE, (guint) vd->vi.bitrate_lower, NULL); if (!bitrate) bitrate = vd->vi.bitrate_lower; } if (bitrate) { gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, GST_TAG_BITRATE, (guint) bitrate, NULL); } gst_audio_decoder_merge_tags (GST_AUDIO_DECODER_CAST (vd), list, GST_TAG_MERGE_REPLACE); gst_tag_list_unref (list); return GST_FLOW_OK; }
static GstBuffer * gst_opus_enc_create_metadata_buffer (const GstTagList * tags) { GstTagList *empty_tags = NULL; GstBuffer *comments = NULL; GST_DEBUG ("tags = %" GST_PTR_FORMAT, tags); if (tags == NULL) { /* FIXME: better fix chain of callers to not write metadata at all, * if there is none */ empty_tags = gst_tag_list_new_empty (); tags = empty_tags; } comments = gst_tag_list_to_vorbiscomment_buffer (tags, (const guint8 *) "OpusTags", 8, "Encoded with GStreamer Opusenc"); GST_BUFFER_OFFSET (comments) = 0; GST_BUFFER_OFFSET_END (comments) = 0; if (empty_tags) gst_tag_list_unref (empty_tags); return comments; }
static gboolean gst_rg_analysis_track_result (GstRgAnalysis * filter, GstTagList ** tag_list) { gboolean track_success; gdouble track_gain, track_peak; track_success = rg_analysis_track_result (filter->ctx, &track_gain, &track_peak); if (track_success) { track_gain += filter->reference_level - RG_REFERENCE_LEVEL; GST_INFO_OBJECT (filter, "track gain is %+.2f dB, peak %.6f", track_gain, track_peak); } else { GST_INFO_OBJECT (filter, "track was too short to analyze"); } if (track_success) { if (*tag_list == NULL) *tag_list = gst_tag_list_new_empty (); gst_tag_list_add (*tag_list, GST_TAG_MERGE_APPEND, GST_TAG_TRACK_PEAK, track_peak, GST_TAG_TRACK_GAIN, track_gain, NULL); } return track_success; }
/* gst_x265_enc_set_src_caps * Returns: TRUE on success. */ static gboolean gst_x265_enc_set_src_caps (GstX265Enc * encoder, GstCaps * caps) { GstCaps *outcaps; GstStructure *structure; GstVideoCodecState *state; GstTagList *tags; outcaps = gst_caps_new_empty_simple ("video/x-h265"); structure = gst_caps_get_structure (outcaps, 0); gst_structure_set (structure, "stream-format", G_TYPE_STRING, "byte-stream", NULL); gst_structure_set (structure, "alignment", G_TYPE_STRING, "au", NULL); if (!gst_x265_enc_set_level_tier_and_profile (encoder, outcaps)) { gst_caps_unref (outcaps); return FALSE; } state = gst_video_encoder_set_output_state (GST_VIDEO_ENCODER (encoder), outcaps, encoder->input_state); GST_DEBUG_OBJECT (encoder, "output caps: %" GST_PTR_FORMAT, state->caps); gst_video_codec_state_unref (state); tags = gst_tag_list_new_empty (); gst_tag_list_add (tags, GST_TAG_MERGE_REPLACE, GST_TAG_ENCODER, "x265", GST_TAG_ENCODER_VERSION, x265_version_str, NULL); gst_video_encoder_merge_tags (GST_VIDEO_ENCODER (encoder), tags, GST_TAG_MERGE_REPLACE); gst_tag_list_unref (tags); return TRUE; }
static void gst_shout2send_init (GstShout2send * shout2send) { gst_base_sink_set_sync (GST_BASE_SINK (shout2send), FALSE); shout2send->timer = gst_poll_new_timer (); shout2send->ip = g_strdup (DEFAULT_IP); shout2send->port = DEFAULT_PORT; shout2send->password = g_strdup (DEFAULT_PASSWORD); shout2send->username = g_strdup (DEFAULT_USERNAME); shout2send->streamname = g_strdup (DEFAULT_STREAMNAME); shout2send->description = g_strdup (DEFAULT_DESCRIPTION); shout2send->genre = g_strdup (DEFAULT_GENRE); shout2send->mount = g_strdup (DEFAULT_MOUNT); shout2send->url = g_strdup (DEFAULT_URL); shout2send->protocol = DEFAULT_PROTOCOL; shout2send->ispublic = DEFAULT_PUBLIC; shout2send->tags = gst_tag_list_new_empty (); shout2send->conn = NULL; shout2send->audio_format = SHOUT_FORMAT_VORBIS; shout2send->connected = FALSE; shout2send->songmetadata = NULL; shout2send->songartist = NULL; shout2send->songtitle = NULL; }
static inline GstTagList * get_tag_list (GstJpegParse * parse) { if (!parse->priv->tags) parse->priv->tags = gst_tag_list_new_empty (); return parse->priv->tags; }
static gboolean gst_rg_analysis_album_result (GstRgAnalysis * filter, GstTagList ** tag_list) { gboolean album_success; gdouble album_gain, album_peak; album_success = rg_analysis_album_result (filter->ctx, &album_gain, &album_peak); if (album_success) { album_gain += filter->reference_level - RG_REFERENCE_LEVEL; GST_INFO_OBJECT (filter, "album gain is %+.2f dB, peak %.6f", album_gain, album_peak); } else { GST_INFO_OBJECT (filter, "album was too short to analyze"); } if (album_success) { if (*tag_list == NULL) *tag_list = gst_tag_list_new_empty (); gst_tag_list_add (*tag_list, GST_TAG_MERGE_APPEND, GST_TAG_ALBUM_PEAK, album_peak, GST_TAG_ALBUM_GAIN, album_gain, NULL); } return album_success; }
static GstBuffer * gst_speex_enc_create_metadata_buffer (GstSpeexEnc * enc) { const GstTagList *user_tags; GstTagList *merged_tags; GstBuffer *comments = NULL; user_tags = gst_tag_setter_get_tag_list (GST_TAG_SETTER (enc)); GST_DEBUG_OBJECT (enc, "upstream tags = %" GST_PTR_FORMAT, enc->tags); GST_DEBUG_OBJECT (enc, "user-set tags = %" GST_PTR_FORMAT, user_tags); /* gst_tag_list_merge() will handle NULL for either or both lists fine */ merged_tags = gst_tag_list_merge (user_tags, enc->tags, gst_tag_setter_get_tag_merge_mode (GST_TAG_SETTER (enc))); if (merged_tags == NULL) merged_tags = gst_tag_list_new_empty (); GST_DEBUG_OBJECT (enc, "merged tags = %" GST_PTR_FORMAT, merged_tags); comments = gst_tag_list_to_vorbiscomment_buffer (merged_tags, NULL, 0, "Encoded with GStreamer Speexenc"); gst_tag_list_unref (merged_tags); GST_BUFFER_OFFSET (comments) = 0; GST_BUFFER_OFFSET_END (comments) = 0; return comments; }
static GstTagList * test_taglib_apev2mux_create_tags (guint32 mask) { GstTagList *tags; tags = gst_tag_list_new_empty (); if (mask & (1 << 0)) { gst_tag_list_add (tags, GST_TAG_MERGE_KEEP, GST_TAG_ARTIST, TEST_ARTIST, NULL); } if (mask & (1 << 1)) { gst_tag_list_add (tags, GST_TAG_MERGE_KEEP, GST_TAG_TITLE, TEST_TITLE, NULL); } if (mask & (1 << 2)) { gst_tag_list_add (tags, GST_TAG_MERGE_KEEP, GST_TAG_ALBUM, TEST_ALBUM, NULL); } if (mask & (1 << 3)) { GDate *date; date = TEST_DATE; gst_tag_list_add (tags, GST_TAG_MERGE_KEEP, GST_TAG_DATE, date, NULL); g_date_free (date); } if (mask & (1 << 4)) { gst_tag_list_add (tags, GST_TAG_MERGE_KEEP, GST_TAG_TRACK_NUMBER, TEST_TRACK_NUMBER, NULL); } if (mask & (1 << 5)) { gst_tag_list_add (tags, GST_TAG_MERGE_KEEP, GST_TAG_TRACK_COUNT, TEST_TRACK_COUNT, NULL); } if (mask & (1 << 6)) { gst_tag_list_add (tags, GST_TAG_MERGE_KEEP, GST_TAG_TRACK_GAIN, TEST_TRACK_GAIN, NULL); } if (mask & (1 << 7)) { gst_tag_list_add (tags, GST_TAG_MERGE_KEEP, GST_TAG_ALBUM_GAIN, TEST_ALBUM_GAIN, NULL); } if (mask & (1 << 8)) { } if (mask & (1 << 9)) { } if (mask & (1 << 10)) { } if (mask & (1 << 11)) { } if (mask & (1 << 12)) { } if (mask & (1 << 13)) { } return tags; }
void add_raw_value(tag_list &p_tag_list, GValue const *p_value, std::string const &p_name, GstTagMergeMode const p_merge_mode) { g_assert(p_value != NULL); g_assert(!p_name.empty()); if (p_tag_list.is_empty()) p_tag_list = tag_list(gst_tag_list_new_empty()); gst_tag_list_add_value(p_tag_list.get_tag_list(), p_merge_mode, p_name.c_str(), p_value); }
void tag_list::insert(tag_list const &p_other, GstTagMergeMode const p_merge_mode) { // Safety check if (p_other.get_tag_list() == m_tag_list) return; if (m_tag_list == NULL) m_tag_list = gst_tag_list_new_empty(); gst_tag_list_insert(m_tag_list, p_other.get_tag_list(), p_merge_mode); }
static gboolean gst_opus_enc_start (GstAudioEncoder * benc) { GstOpusEnc *enc = GST_OPUS_ENC (benc); GST_DEBUG_OBJECT (enc, "start"); enc->tags = gst_tag_list_new_empty (); enc->header_sent = FALSE; return TRUE; }
static gboolean gst_vaapiencode_set_format (GstVideoEncoder * venc, GstVideoCodecState * state) { GstVaapiEncode *const encode = GST_VAAPIENCODE_CAST (venc); gboolean ret; g_return_val_if_fail (state->caps != NULL, FALSE); if (!set_codec_state (encode, state)) return FALSE; if (!gst_vaapi_plugin_base_set_caps (GST_VAAPI_PLUGIN_BASE (encode), state->caps, NULL)) return FALSE; if (encode->input_state) gst_video_codec_state_unref (encode->input_state); encode->input_state = gst_video_codec_state_ref (state); encode->input_state_changed = TRUE; ret = gst_pad_start_task (GST_VAAPI_PLUGIN_BASE_SRC_PAD (encode), (GstTaskFunction) gst_vaapiencode_buffer_loop, encode, NULL); if (!ret) return FALSE; /* Store some tags */ { GstTagList *tags = gst_tag_list_new_empty (); const gchar *encoder, *codec; guint bitrate = 0; g_object_get (encode, "bitrate", &bitrate, NULL); gst_tag_list_add (tags, GST_TAG_MERGE_REPLACE, GST_TAG_NOMINAL_BITRATE, bitrate, NULL); if ((encoder = gst_element_class_get_metadata (GST_ELEMENT_GET_CLASS (encode), GST_ELEMENT_METADATA_LONGNAME))) gst_tag_list_add (tags, GST_TAG_MERGE_REPLACE, GST_TAG_ENCODER, encoder, NULL); if ((codec = gst_vaapi_codec_get_name (gst_vaapi_profile_get_codec (gst_vaapi_profile_from_caps (state->caps))))) gst_tag_list_add (tags, GST_TAG_MERGE_REPLACE, GST_TAG_CODEC, codec, NULL); gst_video_encoder_merge_tags (venc, tags, GST_TAG_MERGE_REPLACE); gst_tag_list_unref (tags); } return TRUE; }
static gboolean gst_vorbis_enc_start (GstAudioEncoder * enc) { GstVorbisEnc *vorbisenc = GST_VORBISENC (enc); GST_DEBUG_OBJECT (enc, "start"); vorbisenc->tags = gst_tag_list_new_empty (); vorbisenc->header_sent = FALSE; return TRUE; }
static GstCaps * mxf_vc3_create_caps (MXFMetadataTimelineTrack * track, GstTagList ** tags, MXFEssenceElementHandleFunc * handler, gpointer * mapping_data) { MXFMetadataFileDescriptor *f = NULL; MXFMetadataGenericPictureEssenceDescriptor *p = NULL; guint i; GstCaps *caps = NULL; g_return_val_if_fail (track != NULL, NULL); if (track->parent.descriptor == NULL) { GST_ERROR ("No descriptor found for this track"); return NULL; } for (i = 0; i < track->parent.n_descriptor; i++) { if (!track->parent.descriptor[i]) continue; if (MXF_IS_METADATA_GENERIC_PICTURE_ESSENCE_DESCRIPTOR (track-> parent.descriptor[i])) { p = (MXFMetadataGenericPictureEssenceDescriptor *) track->parent. descriptor[i]; f = track->parent.descriptor[i]; break; } else if (MXF_IS_METADATA_FILE_DESCRIPTOR (track->parent.descriptor[i]) && !MXF_IS_METADATA_MULTIPLE_DESCRIPTOR (track->parent.descriptor[i])) { f = track->parent.descriptor[i]; } } if (!f) { GST_ERROR ("No descriptor found for this track"); return NULL; } *handler = mxf_vc3_handle_essence_element; caps = gst_caps_new_empty_simple ("video/x-dnxhd"); if (p) { mxf_metadata_generic_picture_essence_descriptor_set_caps (p, caps); } else { GST_WARNING ("Only a generic file descriptor found"); } if (!*tags) *tags = gst_tag_list_new_empty (); gst_tag_list_add (*tags, GST_TAG_MERGE_APPEND, GST_TAG_VIDEO_CODEC, "VC-3 Video", NULL); return caps; }
static gboolean gst_speex_enc_start (GstAudioEncoder * benc) { GstSpeexEnc *enc = GST_SPEEX_ENC (benc); GST_DEBUG_OBJECT (enc, "start"); speex_bits_init (&enc->bits); enc->tags = gst_tag_list_new_empty (); enc->header_sent = FALSE; return TRUE; }
static void gst_vp9_dec_send_tags (GstVP9Dec * dec) { GstTagList *list; list = gst_tag_list_new_empty (); gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, GST_TAG_VIDEO_CODEC, "VP9 video", NULL); gst_pad_push_event (GST_VIDEO_DECODER_SRC_PAD (dec), gst_event_new_tag (list)); }
static void gst_a52dec_update_streaminfo (GstA52Dec * a52dec) { GstTagList *taglist; taglist = gst_tag_list_new_empty (); gst_tag_list_add (taglist, GST_TAG_MERGE_APPEND, GST_TAG_BITRATE, (guint) a52dec->bit_rate, NULL); gst_audio_decoder_merge_tags (GST_AUDIO_DECODER (a52dec), taglist, GST_TAG_MERGE_REPLACE); gst_tag_list_unref (taglist); }
static void gst_dtsdec_update_streaminfo (GstDtsDec * dts) { GstTagList *taglist; if (dts->bit_rate > 3) { taglist = gst_tag_list_new_empty (); /* 1 => open bitrate, 2 => variable bitrate, 3 => lossless */ gst_tag_list_add (taglist, GST_TAG_MERGE_APPEND, GST_TAG_BITRATE, (guint) dts->bit_rate, NULL); gst_audio_decoder_merge_tags (GST_AUDIO_DECODER (dts), taglist, GST_TAG_MERGE_REPLACE); } }
static GstStateChangeReturn gst_a2dp_sink_change_state (GstElement * element, GstStateChange transition) { GstStateChangeReturn ret; GstA2dpSink *self = GST_A2DP_SINK (element); switch (transition) { case GST_STATE_CHANGE_READY_TO_PAUSED: self->taglist = gst_tag_list_new_empty (); break; case GST_STATE_CHANGE_NULL_TO_READY: if (self->device != NULL) gst_avdtp_sink_set_device (self->sink, self->device); if (self->transport != NULL) gst_avdtp_sink_set_transport (self->sink, self->transport); g_object_set (G_OBJECT (self->sink), "auto-connect", self->autoconnect, NULL); break; default: break; } ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); switch (transition) { case GST_STATE_CHANGE_PAUSED_TO_READY: if (self->taglist) { gst_tag_list_unref (self->taglist); self->taglist = NULL; } break; case GST_STATE_CHANGE_READY_TO_NULL: gst_a2dp_sink_remove_dynamic_elements (self); break; default: break; } return ret; }
static GstFlowReturn gst_speex_dec_parse_comments (GstSpeexDec * dec, GstBuffer * buf) { GstTagList *list; gchar *ver, *encoder = NULL; list = gst_tag_list_from_vorbiscomment_buffer (buf, NULL, 0, &encoder); if (!list) { GST_WARNING_OBJECT (dec, "couldn't decode comments"); list = gst_tag_list_new_empty (); } if (encoder) { gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, GST_TAG_ENCODER, encoder, NULL); } gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, GST_TAG_AUDIO_CODEC, "Speex", NULL); ver = g_strndup (dec->header->speex_version, SPEEX_HEADER_VERSION_LENGTH); g_strstrip (ver); if (ver != NULL && *ver != '\0') { gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, GST_TAG_ENCODER_VERSION, ver, NULL); } if (dec->header->bitrate > 0) { gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, GST_TAG_BITRATE, (guint) dec->header->bitrate, NULL); } GST_INFO_OBJECT (dec, "tags: %" GST_PTR_FORMAT, list); gst_audio_decoder_merge_tags (GST_AUDIO_DECODER (dec), list, GST_TAG_MERGE_REPLACE); gst_tag_list_unref (list); g_free (encoder); g_free (ver); return GST_FLOW_OK; }
static GstCaps * mxf_dv_dif_create_caps (MXFMetadataTimelineTrack * track, GstTagList ** tags, MXFEssenceElementHandleFunc * handler, gpointer * mapping_data) { GstCaps *caps = NULL; guint i; MXFMetadataGenericPictureEssenceDescriptor *d = NULL; g_return_val_if_fail (track != NULL, NULL); if (track->parent.descriptor == NULL) { GST_ERROR ("No descriptor found for this track"); return NULL; } for (i = 0; i < track->parent.n_descriptor; i++) { if (MXF_IS_METADATA_GENERIC_PICTURE_ESSENCE_DESCRIPTOR (track-> parent.descriptor[i])) { d = MXF_METADATA_GENERIC_PICTURE_ESSENCE_DESCRIPTOR (track-> parent.descriptor[i]); break; } } *handler = mxf_dv_dif_handle_essence_element; /* SMPTE 383M 8 */ /* TODO: might be video or audio only, use values of the generic sound/picture * descriptor in the caps in that case */ GST_DEBUG ("Found DV-DIF stream"); caps = gst_caps_new_simple ("video/x-dv", "systemstream", G_TYPE_BOOLEAN, TRUE, NULL); if (d) mxf_metadata_generic_picture_essence_descriptor_set_caps (d, caps); if (!*tags) *tags = gst_tag_list_new_empty (); gst_tag_list_add (*tags, GST_TAG_MERGE_APPEND, GST_TAG_CODEC, "DV-DIF", NULL); return caps; }
/** * gst_toc_new: * @scope: scope of this TOC * * Create a new #GstToc structure. * * Returns: (transfer full): newly allocated #GstToc structure, free it * with gst_toc_unref(). */ GstToc * gst_toc_new (GstTocScope scope) { GstToc *toc; g_return_val_if_fail (scope == GST_TOC_SCOPE_GLOBAL || scope == GST_TOC_SCOPE_CURRENT, NULL); toc = g_slice_new0 (GstToc); gst_mini_object_init (GST_MINI_OBJECT_CAST (toc), 0, GST_TYPE_TOC, (GstMiniObjectCopyFunction) gst_toc_copy, NULL, (GstMiniObjectFreeFunction) gst_toc_free); toc->scope = scope; toc->tags = gst_tag_list_new_empty (); return toc; }