--- useful for re'ing files with extradata tools/pktdumper.c | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/tools/pktdumper.c b/tools/pktdumper.c index c51f5c8922..d7d3147b22 100644 --- a/tools/pktdumper.c +++ b/tools/pktdumper.c @@ -37,6 +37,7 @@ #define FILENAME_BUF_SIZE 4096 #define PKTFILESUFF "_%08" PRId64 "_%02d_%010" PRId64 "_%06d_%c.bin" +#define EXTRADATAFILESUFF "_extradata_%02d_%06d.bin" static int usage(int ret) { @@ -52,6 +53,7 @@ static int usage(int ret) int main(int argc, char **argv) { char fntemplate[FILENAME_BUF_SIZE]; + char fntemplate2[FILENAME_BUF_SIZE]; char pktfilename[FILENAME_BUF_SIZE]; AVFormatContext *fctx = NULL; AVPacket *pkt; @@ -86,8 +88,6 @@ int main(int argc, char **argv) fprintf(stderr, "filename too long\n"); return usage(1); } - strcat(fntemplate, PKTFILESUFF); - printf("FNTEMPLATE: '%s'\n", fntemplate); err = avformat_open_input(&fctx, argv[1], NULL, NULL); if (err < 0) { @@ -107,6 +107,30 @@ int main(int argc, char **argv) return 1; } + strcpy(fntemplate2, fntemplate); + strcat(fntemplate2, EXTRADATAFILESUFF); + + for (int i = 0; i < fctx->nb_streams; i++) { + AVCodecParameters * par = fctx->streams[i]->codecpar; + int fd; + if (par->extradata_size) { + snprintf(pktfilename, sizeof(pktfilename), fntemplate2, i, par->extradata_size); + printf(EXTRADATAFILESUFF "\n", i, par->extradata_size); + if (!nowrite) { + fd = open(pktfilename, O_WRONLY | O_CREAT, 0644); + err = write(fd, par->extradata, par->extradata_size); + if (err < 0) { + fprintf(stderr, "write: error %d\n", err); + return 1; + } + close(fd); + } + } + } + + strcat(fntemplate, PKTFILESUFF); + printf("FNTEMPLATE: '%s'\n", fntemplate); + while ((err = av_read_frame(fctx, pkt)) >= 0) { int fd; snprintf(pktfilename, sizeof(pktfilename), fntemplate, pktnum, -- 2.47.2 -- Peter (A907 E02F A6E5 0CD2 34CD 20D2 6760 79C5 AC40 DD6B)