mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-22 08:17:01 +00:00
qtdemux: for non-raw video, move palette in caps
We only need to append the palette to raw video buffers, non-raw video has the palette in the caps still. Fixes https://bugzilla.gnome.org/show_bug.cgi?id=704292
This commit is contained in:
parent
40ab78825c
commit
61a8937ced
1 changed files with 33 additions and 13 deletions
|
@ -7204,19 +7204,6 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (palette_data) {
|
|
||||||
if (stream->rgb8_palette)
|
|
||||||
gst_memory_unref (stream->rgb8_palette);
|
|
||||||
stream->rgb8_palette = gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY,
|
|
||||||
palette_data, palette_size, 0, palette_size, palette_data, g_free);
|
|
||||||
} else if (palette_count != 0) {
|
|
||||||
GST_ELEMENT_WARNING (qtdemux, STREAM, NOT_IMPLEMENTED,
|
|
||||||
(NULL), ("Unsupported palette depth %d", depth));
|
|
||||||
}
|
|
||||||
|
|
||||||
GST_LOG_OBJECT (qtdemux, "frame count: %u",
|
|
||||||
QT_UINT16 (stsd_data + offset + 48));
|
|
||||||
|
|
||||||
stream->caps =
|
stream->caps =
|
||||||
qtdemux_video_caps (qtdemux, stream, fourcc, stsd_data, &codec);
|
qtdemux_video_caps (qtdemux, stream, fourcc, stsd_data, &codec);
|
||||||
if (codec) {
|
if (codec) {
|
||||||
|
@ -7227,6 +7214,39 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak)
|
||||||
codec = NULL;
|
codec = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (palette_data) {
|
||||||
|
GstStructure *s;
|
||||||
|
|
||||||
|
if (stream->rgb8_palette)
|
||||||
|
gst_memory_unref (stream->rgb8_palette);
|
||||||
|
stream->rgb8_palette = gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY,
|
||||||
|
palette_data, palette_size, 0, palette_size, palette_data, g_free);
|
||||||
|
|
||||||
|
s = gst_caps_get_structure (stream->caps, 0);
|
||||||
|
|
||||||
|
/* non-raw video has a palette_data property. raw video has the palette as
|
||||||
|
* an extra plane that we append to the output buffers before we push
|
||||||
|
* them*/
|
||||||
|
if (!gst_structure_has_name (s, "video/x-raw")) {
|
||||||
|
GstBuffer *palette;
|
||||||
|
|
||||||
|
palette = gst_buffer_new ();
|
||||||
|
gst_buffer_append_memory (palette, stream->rgb8_palette);
|
||||||
|
stream->rgb8_palette = NULL;
|
||||||
|
|
||||||
|
gst_caps_set_simple (stream->caps, "palette_data",
|
||||||
|
GST_TYPE_BUFFER, palette, NULL);
|
||||||
|
gst_buffer_unref (palette);
|
||||||
|
}
|
||||||
|
} else if (palette_count != 0) {
|
||||||
|
GST_ELEMENT_WARNING (qtdemux, STREAM, NOT_IMPLEMENTED,
|
||||||
|
(NULL), ("Unsupported palette depth %d", depth));
|
||||||
|
}
|
||||||
|
|
||||||
|
GST_LOG_OBJECT (qtdemux, "frame count: %u",
|
||||||
|
QT_UINT16 (stsd_data + offset + 48));
|
||||||
|
|
||||||
esds = NULL;
|
esds = NULL;
|
||||||
pasp = NULL;
|
pasp = NULL;
|
||||||
/* pick 'the' stsd child */
|
/* pick 'the' stsd child */
|
||||||
|
|
Loading…
Reference in a new issue