annotate ffmpeg/tools/aviocat.c @ 13:844d341cf643 tip

Back up before ISMIR
author Yading Song <yading.song@eecs.qmul.ac.uk>
date Thu, 31 Oct 2013 13:17:06 +0000
parents f445c3017523
children
rev   line source
yading@11 1 /*
yading@11 2 * Copyright (c) 2012 Martin Storsjo
yading@11 3 *
yading@11 4 * This file is part of Libav.
yading@11 5 *
yading@11 6 * Libav is free software; you can redistribute it and/or
yading@11 7 * modify it under the terms of the GNU Lesser General Public
yading@11 8 * License as published by the Free Software Foundation; either
yading@11 9 * version 2.1 of the License, or (at your option) any later version.
yading@11 10 *
yading@11 11 * Libav is distributed in the hope that it will be useful,
yading@11 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
yading@11 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
yading@11 14 * Lesser General Public License for more details.
yading@11 15 *
yading@11 16 * You should have received a copy of the GNU Lesser General Public
yading@11 17 * License along with Libav; if not, write to the Free Software
yading@11 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
yading@11 19 */
yading@11 20
yading@11 21 #include <stdio.h>
yading@11 22 #include <stdlib.h>
yading@11 23
yading@11 24 #include "libavutil/time.h"
yading@11 25 #include "libavformat/avformat.h"
yading@11 26
yading@11 27 static int usage(const char *argv0, int ret)
yading@11 28 {
yading@11 29 fprintf(stderr, "%s [-b bytespersec] input_url output_url\n", argv0);
yading@11 30 return ret;
yading@11 31 }
yading@11 32
yading@11 33 int main(int argc, char **argv)
yading@11 34 {
yading@11 35 int bps = 0, ret, i;
yading@11 36 const char *input_url = NULL, *output_url = NULL;
yading@11 37 int64_t stream_pos = 0;
yading@11 38 int64_t start_time;
yading@11 39 char errbuf[50];
yading@11 40 AVIOContext *input, *output;
yading@11 41
yading@11 42 av_register_all();
yading@11 43 avformat_network_init();
yading@11 44
yading@11 45 for (i = 1; i < argc; i++) {
yading@11 46 if (!strcmp(argv[i], "-b")) {
yading@11 47 bps = atoi(argv[i + 1]);
yading@11 48 i++;
yading@11 49 } else if (!input_url) {
yading@11 50 input_url = argv[i];
yading@11 51 } else if (!output_url) {
yading@11 52 output_url = argv[i];
yading@11 53 } else {
yading@11 54 return usage(argv[0], 1);
yading@11 55 }
yading@11 56 }
yading@11 57 if (!output_url)
yading@11 58 return usage(argv[0], 1);
yading@11 59
yading@11 60 ret = avio_open2(&input, input_url, AVIO_FLAG_READ, NULL, NULL);
yading@11 61 if (ret) {
yading@11 62 av_strerror(ret, errbuf, sizeof(errbuf));
yading@11 63 fprintf(stderr, "Unable to open %s: %s\n", input_url, errbuf);
yading@11 64 return 1;
yading@11 65 }
yading@11 66 ret = avio_open2(&output, output_url, AVIO_FLAG_WRITE, NULL, NULL);
yading@11 67 if (ret) {
yading@11 68 av_strerror(ret, errbuf, sizeof(errbuf));
yading@11 69 fprintf(stderr, "Unable to open %s: %s\n", output_url, errbuf);
yading@11 70 goto fail;
yading@11 71 }
yading@11 72
yading@11 73 start_time = av_gettime();
yading@11 74 while (1) {
yading@11 75 uint8_t buf[1024];
yading@11 76 int n;
yading@11 77 n = avio_read(input, buf, sizeof(buf));
yading@11 78 if (n <= 0)
yading@11 79 break;
yading@11 80 avio_write(output, buf, n);
yading@11 81 stream_pos += n;
yading@11 82 if (bps) {
yading@11 83 avio_flush(output);
yading@11 84 while ((av_gettime() - start_time) * bps / AV_TIME_BASE < stream_pos)
yading@11 85 av_usleep(50 * 1000);
yading@11 86 }
yading@11 87 }
yading@11 88
yading@11 89 avio_flush(output);
yading@11 90 avio_close(output);
yading@11 91
yading@11 92 fail:
yading@11 93 avio_close(input);
yading@11 94 avformat_network_deinit();
yading@11 95 return ret ? 1 : 0;
yading@11 96 }