Zebediah Figura (@zfigura) commented about dlls/winegstreamer/wg_parser.c:
struct_name = gst_structure_get_name(gst_sample_get_info(sample));
if (!struct_name || strcmp(struct_name, "application/x-gst-qt-name-tag"))
continue;
if (!(buf = gst_sample_get_buffer(sample)))
continue;
if ((size = gst_buffer_get_size(buf)) < 8)
continue;
if (!gst_buffer_map(buf, &map_info, GST_MAP_READ))
continue;
size -= 8;
if ((stream->tags[WG_PARSER_TAG_NAME] = g_malloc(size + 1)))
{
memcpy(stream->tags[WG_PARSER_TAG_NAME], map_info.data + 8, size);
stream->tags[WG_PARSER_TAG_NAME][size] = 0;
}
gst_buffer_unmap(buf, &map_info);
FWIW, there's gst_buffer_extract_dup() for this.