2006-02-24 Tim-Philipp Müller <tim at centricular dot net>
* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+ (gst_ffmpegcsp_caps_remove_format_info),
+ (gst_ffmpegcsp_get_unit_size):
+ The 'palette_data' field from incoming RGB caps shouldn't be
+ proxied on outgoing YUV caps; also, restrict unit size
+ adjustment in case of paletted data only to the unit that
+ actually has a palette. Fixes #330711.
+
+2006-02-24 Tim-Philipp Müller <tim at centricular dot net>
+
+ * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
(gst_ffmpegcsp_transform_caps), (gst_ffmpegcsp_set_caps),
(gst_ffmpegcsp_finalize), (gst_ffmpegcsp_class_init),
(gst_ffmpegcsp_get_unit_size):
gst_structure_remove_field (structure, "green_mask");
gst_structure_remove_field (structure, "blue_mask");
gst_structure_remove_field (structure, "alpha_mask");
+ gst_structure_remove_field (structure, "palette_data");
}
gst_caps_do_simplify (caps);
*size = avpicture_get_size (ctx->pix_fmt, width, height);
- if (space->palette)
- *size -= 4 * 256;
+ /* ffmpeg frames have the palette after the frame data, whereas
+ * GStreamer currently puts it into the caps as 'palette_data' field,
+ * so for paletted data the frame size avpicture_get_size() returns is
+ * 1024 bytes larger than what GStreamer expects. */
+ if (gst_structure_has_field (structure, "palette_data")) {
+ *size -= 4 * 256; /* = AVPALETTE_SIZE */
+ }
if (ctx->palctrl)
av_free (ctx->palctrl);