From 3f1f8f66ed204a85eb19f767a278ead18cdb6a72 Mon Sep 17 00:00:00 2001 From: Edward Hervey Date: Mon, 14 Jun 2010 13:26:02 +0200 Subject: [PATCH] ffmpegcolorspace: Speed up _remove_format_info Instead of copying full caps, use the fact that the provided caps only have one structure and only copy around structures. --- gst/ffmpegcolorspace/gstffmpegcolorspace.c | 40 +++++++--------------- 1 file changed, 13 insertions(+), 27 deletions(-) diff --git a/gst/ffmpegcolorspace/gstffmpegcolorspace.c b/gst/ffmpegcolorspace/gstffmpegcolorspace.c index f278758ba6..58d044d535 100644 --- a/gst/ffmpegcolorspace/gstffmpegcolorspace.c +++ b/gst/ffmpegcolorspace/gstffmpegcolorspace.c @@ -58,40 +58,26 @@ static GstPadTemplate *sinktempl, *srctempl; static GstCaps * gst_ffmpegcsp_caps_remove_format_info (GstCaps * caps) { - int i; - GstStructure *structure; - GstCaps *rgbcaps; - GstCaps *graycaps; + GstStructure *yuvst, *rgbst, *grayst; + /* We know there's only one structure since we're given simple caps */ caps = gst_caps_copy (caps); - for (i = 0; i < gst_caps_get_size (caps); i++) { - structure = gst_caps_get_structure (caps, i); + yuvst = gst_caps_get_structure (caps, 0); - gst_structure_set_name (structure, "video/x-raw-yuv"); - gst_structure_remove_fields (structure, "format", "endianness", "depth", - "bpp", "red_mask", "green_mask", "blue_mask", "alpha_mask", - "palette_data", NULL); - } + gst_structure_set_name (yuvst, "video/x-raw-yuv"); + gst_structure_remove_fields (yuvst, "format", "endianness", "depth", + "bpp", "red_mask", "green_mask", "blue_mask", "alpha_mask", + "palette_data", NULL); - gst_caps_do_simplify (caps); - rgbcaps = gst_caps_copy (caps); + rgbst = gst_structure_copy (yuvst); + gst_structure_set_name (rgbst, "video/x-raw-rgb"); - for (i = 0; i < gst_caps_get_size (rgbcaps); i++) { - structure = gst_caps_get_structure (rgbcaps, i); + grayst = gst_structure_copy (rgbst); + gst_structure_set_name (grayst, "video/x-raw-gray"); - gst_structure_set_name (structure, "video/x-raw-rgb"); - } - graycaps = gst_caps_copy (caps); - - for (i = 0; i < gst_caps_get_size (graycaps); i++) { - structure = gst_caps_get_structure (graycaps, i); - - gst_structure_set_name (structure, "video/x-raw-gray"); - } - - gst_caps_append (caps, graycaps); - gst_caps_append (caps, rgbcaps); + gst_caps_append_structure (caps, rgbst); + gst_caps_append_structure (caps, grayst); return caps; }