X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=tools%2Fpktdumper.c;h=98b9327ef46b8861a683d2cf012a03b15b194d0e;hb=46a86c61940ec8efdfa90b23f05c38ecc1184a34;hp=80816d24b9e6a672168356b76f66160f1447de16;hpb=d39facc783c270227e5b7c75db3dec406ed19018;p=ffmpeg diff --git a/tools/pktdumper.c b/tools/pktdumper.c index 80816d24b9e..98b9327ef46 100644 --- a/tools/pktdumper.c +++ b/tools/pktdumper.c @@ -18,17 +18,26 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include "config.h" #include #include #include #include #include +#if HAVE_UNISTD_H #include -#include "libavformat/avformat.h" +#endif +#if HAVE_IO_H +#include +#endif + +#define FILENAME_BUF_SIZE 4096 -#define PKTFILESUFF "_%08"PRId64"_%02d_%010"PRId64"_%06d_%c.bin" +#include "libavutil/avstring.h" +#include "libavutil/time.h" +#include "libavformat/avformat.h" -#undef strcat +#define PKTFILESUFF "_%08" PRId64 "_%02d_%010" PRId64 "_%06d_%c.bin" static int usage(int ret) { @@ -42,14 +51,14 @@ static int usage(int ret) int main(int argc, char **argv) { - char fntemplate[PATH_MAX]; - char pktfilename[PATH_MAX]; - AVFormatContext *fctx; + char fntemplate[FILENAME_BUF_SIZE]; + char pktfilename[FILENAME_BUF_SIZE]; + AVFormatContext *fctx = NULL; AVPacket pkt; - int64_t pktnum = 0; + int64_t pktnum = 0; int64_t maxpkts = 0; - int donotquit = 0; - int nowrite = 0; + int donotquit = 0; + int nowrite = 0; int err; if ((argc > 1) && !strncmp(argv[1], "-", 1)) { @@ -64,16 +73,16 @@ int main(int argc, char **argv) return usage(1); if (argc > 2) maxpkts = atoi(argv[2]); - strncpy(fntemplate, argv[1], PATH_MAX-1); + av_strlcpy(fntemplate, argv[1], sizeof(fntemplate)); if (strrchr(argv[1], '/')) - strncpy(fntemplate, strrchr(argv[1], '/')+1, PATH_MAX-1); + av_strlcpy(fntemplate, strrchr(argv[1], '/') + 1, sizeof(fntemplate)); if (strrchr(fntemplate, '.')) *strrchr(fntemplate, '.') = '\0'; if (strchr(fntemplate, '%')) { fprintf(stderr, "can't use filenames containing '%%'\n"); return usage(1); } - if (strlen(fntemplate) + sizeof(PKTFILESUFF) >= PATH_MAX-1) { + if (strlen(fntemplate) + sizeof(PKTFILESUFF) >= sizeof(fntemplate) - 1) { fprintf(stderr, "filename too long\n"); return usage(1); } @@ -83,15 +92,15 @@ int main(int argc, char **argv) // register all file formats av_register_all(); - err = av_open_input_file(&fctx, argv[1], NULL, 0, NULL); + err = avformat_open_input(&fctx, argv[1], NULL, NULL); if (err < 0) { - fprintf(stderr, "av_open_input_file: error %d\n", err); + fprintf(stderr, "cannot open input: error %d\n", err); return 1; } - err = av_find_stream_info(fctx); + err = avformat_find_stream_info(fctx, NULL); if (err < 0) { - fprintf(stderr, "av_find_stream_info: error %d\n", err); + fprintf(stderr, "avformat_find_stream_info: error %d\n", err); return 1; } @@ -99,11 +108,13 @@ int main(int argc, char **argv) while ((err = av_read_frame(fctx, &pkt)) >= 0) { int fd; - snprintf(pktfilename, PATH_MAX-1, fntemplate, pktnum, pkt.stream_index, pkt.pts, pkt.size, (pkt.flags & AV_PKT_FLAG_KEY)?'K':'_'); - printf(PKTFILESUFF"\n", pktnum, pkt.stream_index, pkt.pts, pkt.size, (pkt.flags & AV_PKT_FLAG_KEY)?'K':'_'); - //printf("open(\"%s\")\n", pktfilename); + snprintf(pktfilename, sizeof(pktfilename), fntemplate, pktnum, + pkt.stream_index, pkt.pts, pkt.size, + (pkt.flags & AV_PKT_FLAG_KEY) ? 'K' : '_'); + printf(PKTFILESUFF "\n", pktnum, pkt.stream_index, pkt.pts, pkt.size, + (pkt.flags & AV_PKT_FLAG_KEY) ? 'K' : '_'); if (!nowrite) { - fd = open(pktfilename, O_WRONLY|O_CREAT, 0644); + fd = open(pktfilename, O_WRONLY | O_CREAT, 0644); err = write(fd, pkt.data, pkt.size); if (err < 0) { fprintf(stderr, "write: error %d\n", err); @@ -117,10 +128,10 @@ int main(int argc, char **argv) break; } - av_close_input_file(fctx); + avformat_close_input(&fctx); while (donotquit) - sleep(60); + av_usleep(60 * 1000000); return 0; }