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[] = {
|
| 268 | 268 | [SECTION_ID_PACKETS_AND_FRAMES] = { SECTION_ID_PACKETS_AND_FRAMES, "packets_and_frames", SECTION_FLAG_IS_ARRAY, { SECTION_ID_PACKET, -1} }, |
| 269 | 269 | [SECTION_ID_PACKET] = { SECTION_ID_PACKET, "packet", 0, { SECTION_ID_PACKET_TAGS, SECTION_ID_PACKET_SIDE_DATA_LIST, -1 } }, |
| 270 | 270 | [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 }, |
| 273 | 273 | [SECTION_ID_PIXEL_FORMATS] = { SECTION_ID_PIXEL_FORMATS, "pixel_formats", SECTION_FLAG_IS_ARRAY, { SECTION_ID_PIXEL_FORMAT, -1 } }, |
| 274 | 274 | [SECTION_ID_PIXEL_FORMAT] = { SECTION_ID_PIXEL_FORMAT, "pixel_format", 0, { SECTION_ID_PIXEL_FORMAT_FLAGS, SECTION_ID_PIXEL_FORMAT_COMPONENTS, -1 } }, |
| 275 | 275 | [SECTION_ID_PIXEL_FORMAT_FLAGS] = { SECTION_ID_PIXEL_FORMAT_FLAGS, "flags", 0, { -1 }, .unique_name = "pixel_format_flags" }, |
| … |
… |
static struct section sections[] = {
|
| 292 | 292 | [SECTION_ID_STREAM_DISPOSITION] = { SECTION_ID_STREAM_DISPOSITION, "disposition", 0, { -1 }, .unique_name = "stream_disposition" }, |
| 293 | 293 | [SECTION_ID_STREAM_TAGS] = { SECTION_ID_STREAM_TAGS, "tags", SECTION_FLAG_HAS_VARIABLE_FIELDS, { -1 }, .element_name = "tag", .unique_name = "stream_tags" }, |
| 294 | 294 | [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 }, |
| 296 | 296 | [SECTION_ID_SUBTITLE] = { SECTION_ID_SUBTITLE, "subtitle", 0, { -1 } }, |
| 297 | 297 | }; |
| 298 | 298 | |
| … |
… |
static void xml_print_str(WriterContext *wctx, const char *key, const char *valu
|
| 1887 | 1887 | |
| 1888 | 1888 | static void xml_print_int(WriterContext *wctx, const char *key, long long int value) |
| 1889 | 1889 | { |
| 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 | } |
| 1893 | 1908 | } |
| 1894 | 1909 | |
| 1895 | 1910 | static Writer xml_writer = { |