Ticket #10613: 0001-ffprobe-fix-side_data-int-rendering.patch

File 0001-ffprobe-fix-side_data-int-rendering.patch, 4.8 KB (added by Stefano Sabatini, 3 years ago)
  • fftools/ffprobe.c

    From da8575488a19f349f91f1ba910c9326d5bc91284 Mon Sep 17 00:00:00 2001
    From: Stefano Sabatini <stefasab@gmail.com>
    Date: Fri, 13 Oct 2023 02:06:21 +0200
    Subject: [PATCH] ffprobe: fix side_data int rendering
    
    Fix rendering of int value within for a side data element.
    
    Since commit d2d3a83ad93, a side data element is correctly marked as a
    variable fields element. Logic to render string variable was
    implemented and enabled as a consequence of that change, but it was
    not implement for the int fields.
    
    Fix trac issue:
    https://trac.ffmpeg.org/ticket/10613
    ---
     fftools/ffprobe.c | 27 +++++++++++++++++++++------
     1 file changed, 21 insertions(+), 6 deletions(-)
    
    diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c
    index 40bb3f46e1..b02406ddf1 100644
    a b static struct section sections[] = {  
    268268    [SECTION_ID_PACKETS_AND_FRAMES] = { SECTION_ID_PACKETS_AND_FRAMES, "packets_and_frames", SECTION_FLAG_IS_ARRAY, { SECTION_ID_PACKET, -1} },
    269269    [SECTION_ID_PACKET] =             { SECTION_ID_PACKET, "packet", 0, { SECTION_ID_PACKET_TAGS, SECTION_ID_PACKET_SIDE_DATA_LIST, -1 } },
    270270    [SECTION_ID_PACKET_TAGS] =        { SECTION_ID_PACKET_TAGS, "tags", SECTION_FLAG_HAS_VARIABLE_FIELDS, { -1 }, .element_name = "tag", .unique_name = "packet_tags" },
    271     [SECTION_ID_PACKET_SIDE_DATA_LIST] ={ SECTION_ID_PACKET_SIDE_DATA_LIST, "side_data_list", SECTION_FLAG_IS_ARRAY, { SECTION_ID_PACKET_SIDE_DATA, -1 }, .element_name = "side_data", .unique_name = "packet_side_data_list" },
    272     [SECTION_ID_PACKET_SIDE_DATA] =     { SECTION_ID_PACKET_SIDE_DATA, "side_data", SECTION_FLAG_HAS_VARIABLE_FIELDS|SECTION_FLAG_HAS_TYPE, { -1 }, .unique_name = "packet_side_data", .get_type = get_packet_side_data_type },
     271    [SECTION_ID_PACKET_SIDE_DATA_LIST] ={ SECTION_ID_PACKET_SIDE_DATA_LIST, "side_data_list", SECTION_FLAG_IS_ARRAY, { SECTION_ID_PACKET_SIDE_DATA, -1 }, .element_name = "side_data_list", .unique_name = "packet_side_data_list" },
     272    [SECTION_ID_PACKET_SIDE_DATA] =     { SECTION_ID_PACKET_SIDE_DATA, "side_data", SECTION_FLAG_HAS_VARIABLE_FIELDS|SECTION_FLAG_HAS_TYPE, { -1 }, .unique_name = "packet_side_data", .element_name = "datum", .get_type = get_packet_side_data_type },
    273273    [SECTION_ID_PIXEL_FORMATS] =      { SECTION_ID_PIXEL_FORMATS, "pixel_formats", SECTION_FLAG_IS_ARRAY, { SECTION_ID_PIXEL_FORMAT, -1 } },
    274274    [SECTION_ID_PIXEL_FORMAT] =       { SECTION_ID_PIXEL_FORMAT, "pixel_format", 0, { SECTION_ID_PIXEL_FORMAT_FLAGS, SECTION_ID_PIXEL_FORMAT_COMPONENTS, -1 } },
    275275    [SECTION_ID_PIXEL_FORMAT_FLAGS] = { SECTION_ID_PIXEL_FORMAT_FLAGS, "flags", 0, { -1 }, .unique_name = "pixel_format_flags" },
    static struct section sections[] = {  
    292292    [SECTION_ID_STREAM_DISPOSITION] = { SECTION_ID_STREAM_DISPOSITION, "disposition", 0, { -1 }, .unique_name = "stream_disposition" },
    293293    [SECTION_ID_STREAM_TAGS] =        { SECTION_ID_STREAM_TAGS, "tags", SECTION_FLAG_HAS_VARIABLE_FIELDS, { -1 }, .element_name = "tag", .unique_name = "stream_tags" },
    294294    [SECTION_ID_STREAM_SIDE_DATA_LIST] ={ SECTION_ID_STREAM_SIDE_DATA_LIST, "side_data_list", SECTION_FLAG_IS_ARRAY, { SECTION_ID_STREAM_SIDE_DATA, -1 }, .element_name = "side_data", .unique_name = "stream_side_data_list" },
    295     [SECTION_ID_STREAM_SIDE_DATA] =     { SECTION_ID_STREAM_SIDE_DATA, "side_data", SECTION_FLAG_HAS_TYPE|SECTION_FLAG_HAS_VARIABLE_FIELDS, { -1 }, .unique_name = "stream_side_data", .get_type = get_packet_side_data_type },
     295    [SECTION_ID_STREAM_SIDE_DATA] =     { SECTION_ID_STREAM_SIDE_DATA, "side_data", SECTION_FLAG_HAS_TYPE|SECTION_FLAG_HAS_VARIABLE_FIELDS, { -1 }, .unique_name = "stream_side_data", .element_name = "datum", .get_type = get_packet_side_data_type },
    296296    [SECTION_ID_SUBTITLE] =           { SECTION_ID_SUBTITLE, "subtitle", 0, { -1 } },
    297297};
    298298
    static void xml_print_str(WriterContext *wctx, const char *key, const char *valu  
    18871887
    18881888static void xml_print_int(WriterContext *wctx, const char *key, long long int value)
    18891889{
    1890     if (wctx->nb_item[wctx->level])
    1891         writer_w8(wctx, ' ');
    1892     writer_printf(wctx, "%s=\"%lld\"", key, value);
     1890    XMLContext *xml = wctx->priv;
     1891    const struct section *section = wctx->section[wctx->level];
     1892
     1893    if (section->flags & SECTION_FLAG_HAS_VARIABLE_FIELDS) {
     1894        AVBPrint buf;
     1895        av_bprint_init(&buf, 1, AV_BPRINT_SIZE_UNLIMITED);
     1896
     1897        XML_INDENT();
     1898        av_bprint_escape(&buf, key, NULL,
     1899                         AV_ESCAPE_MODE_XML, AV_ESCAPE_FLAG_XML_DOUBLE_QUOTES);
     1900        writer_printf(wctx, "<%s key=\"%s\"",
     1901                      section->element_name, buf.str);
     1902        writer_printf(wctx, " value=\"%lld\"/>\n", value);
     1903    } else {
     1904        if (wctx->nb_item[wctx->level])
     1905            writer_w8(wctx, ' ');
     1906        writer_printf(wctx, "%s=\"%lld\"", key, value);
     1907    }
    18931908}
    18941909
    18951910static Writer xml_writer = {