void InbandTextTrackPrivateGStreamer::notifyTrackOfSample() { Vector<GRefPtr<GstSample> > samples; { MutexLocker lock(m_sampleMutex); m_pendingSamples.swap(samples); } for (size_t i = 0; i < samples.size(); ++i) { GRefPtr<GstSample> sample = samples[i]; GstBuffer* buffer = gst_sample_get_buffer(sample.get()); if (!buffer) { WARN_MEDIA_MESSAGE("Track %d got sample with no buffer.", m_index); continue; } GstMapInfo info; gboolean ret = gst_buffer_map(buffer, &info, GST_MAP_READ); ASSERT(ret); if (!ret) { WARN_MEDIA_MESSAGE("Track %d unable to map buffer.", m_index); continue; } INFO_MEDIA_MESSAGE("Track %d parsing sample: %.*s", m_index, static_cast<int>(info.size), reinterpret_cast<char*>(info.data)); client()->parseWebVTTCueData(this, reinterpret_cast<char*>(info.data), info.size); gst_buffer_unmap(buffer, &info); } }
bool TrackPrivateBaseGStreamer::getTag(GstTagList* tags, const gchar* tagName, StringType& value) { GUniqueOutPtr<gchar> tagValue; if (gst_tag_list_get_string(tags, tagName, &tagValue.outPtr())) { INFO_MEDIA_MESSAGE("Track %d got %s %s.", m_index, tagName, tagValue.get()); value = tagValue.get(); return true; } return false; }
void InbandTextTrackPrivateGStreamer::notifyTrackOfStreamChanged() { GRefPtr<GstEvent> event = adoptGRef(gst_pad_get_sticky_event(m_pad.get(), GST_EVENT_STREAM_START, 0)); if (!event) return; const gchar* streamId; gst_event_parse_stream_start(event.get(), &streamId); INFO_MEDIA_MESSAGE("Track %d got stream start for stream %s.", m_index, streamId); m_streamId = streamId; }
bool TrackPrivateBaseGStreamer::getLanguageCode(GstTagList* tags, AtomicString& value) { String language; if (getTag(tags, GST_TAG_LANGUAGE_CODE, language)) { language = gst_tag_get_language_code_iso_639_1(language.utf8().data()); INFO_MEDIA_MESSAGE("Converted track %d's language code to %s.", m_index, language.utf8().data()); if (language != value) { value = language; return true; } } return false; }
void InbandTextTrackPrivateGStreamer::notifyTrackOfTagsChanged() { m_tagTimerHandler = 0; if (!m_pad) return; String label; String language; GRefPtr<GstEvent> event; for (guint i = 0; (event = adoptGRef(gst_pad_get_sticky_event(m_pad.get(), GST_EVENT_TAG, i))); ++i) { GstTagList* tags = 0; gst_event_parse_tag(event.get(), &tags); ASSERT(tags); gchar* tagValue; if (gst_tag_list_get_string(tags, GST_TAG_TITLE, &tagValue)) { INFO_MEDIA_MESSAGE("Text track %d got title %s.", m_index, tagValue); label = tagValue; g_free(tagValue); } if (gst_tag_list_get_string(tags, GST_TAG_LANGUAGE_CODE, &tagValue)) { INFO_MEDIA_MESSAGE("Text track %d got language %s.", m_index, tagValue); language = tagValue; g_free(tagValue); } } if (m_label != label) { m_label = label; client()->labelChanged(this, m_label); } if (m_language != language) { m_language = language; client()->languageChanged(this, m_language); } }