diff --git a/ffprobe.c b/ffprobe.c index 9ee2850785..3d15d66f05 100644 --- a/ffprobe.c +++ b/ffprobe.c @@ -37,6 +37,7 @@ #include "libavutil/opt.h" #include "libavutil/pixdesc.h" #include "libavutil/dict.h" +#include "libavutil/intreadwrite.h" #include "libavutil/libm.h" #include "libavutil/parseutils.h" #include "libavutil/timecode.h" @@ -718,6 +719,32 @@ static void writer_print_data_hash(WriterContext *wctx, const char *name, writer_print_string(wctx, name, buf, 0); } +static void writer_print_integers(WriterContext *wctx, const char *name, + uint8_t *data, int size, const char *format, + int columns, int bytes, int offset_add) +{ + AVBPrint bp; + int offset = 0, l, i; + + av_bprint_init(&bp, 0, AV_BPRINT_SIZE_UNLIMITED); + av_bprintf(&bp, "\n"); + while (size) { + av_bprintf(&bp, "%08x: ", offset); + l = FFMIN(size, columns); + for (i = 0; i < l; i++) { + if (bytes == 1) av_bprintf(&bp, format, *data); + else if (bytes == 2) av_bprintf(&bp, format, AV_RN16(data)); + else if (bytes == 4) av_bprintf(&bp, format, AV_RN32(data)); + data += bytes; + size --; + } + av_bprintf(&bp, "\n"); + offset += offset_add; + } + writer_print_string(wctx, name, bp.str, 0); + av_bprint_finalize(&bp, NULL); +} + #define MAX_REGISTERED_WRITERS_NB 64 static const Writer *registered_writers[MAX_REGISTERED_WRITERS_NB + 1];