blob: 15ffdf6a511e54b8156434b27b1e05ef3584c41a [file] [log] [blame]
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +00001/*
2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11#include <algorithm>
12#include <stdio.h>
13#include <vector>
14
15#include "NETEQTEST_RTPpacket.h"
16#include "gtest/gtest.h"
17
18/*********************/
19/* Misc. definitions */
20/*********************/
21
22#define FIRSTLINELEN 40
23
24
25int main(int argc, char* argv[])
26{
27 if(argc < 4 || argc > 6)
28 {
29 printf("Usage: RTPtimeshift in.rtp out.rtp newStartTS [newStartSN [newStartArrTime]]\n");
30 exit(1);
31 }
32
33 FILE *inFile=fopen(argv[1],"rb");
34 if (!inFile)
35 {
36 printf("Cannot open input file %s\n", argv[1]);
37 return(-1);
38 }
39 printf("Input RTP file: %s\n",argv[1]);
40
41 FILE *outFile=fopen(argv[2],"wb");
42 if (!outFile)
43 {
44 printf("Cannot open output file %s\n", argv[2]);
45 return(-1);
46 }
47 printf("Output RTP file: %s\n\n",argv[2]);
48
49 // read file header and write directly to output file
50 const unsigned int kRtpDumpHeaderSize = 4 + 4 + 4 + 2 + 2;
51 char firstline[FIRSTLINELEN];
52 EXPECT_TRUE(fgets(firstline, FIRSTLINELEN, inFile) != NULL);
53 EXPECT_GT(fputs(firstline, outFile), 0);
54 EXPECT_EQ(kRtpDumpHeaderSize,
55 fread(firstline, 1, kRtpDumpHeaderSize, inFile));
56 EXPECT_EQ(kRtpDumpHeaderSize,
57 fwrite(firstline, 1, kRtpDumpHeaderSize, outFile));
58 NETEQTEST_RTPpacket packet;
59 int packLen = packet.readFromFile(inFile);
60 if (packLen < 0)
61 {
62 exit(1);
63 }
64
65 // get new start TS and start SeqNo from arguments
pbos@webrtc.org0946a562013-04-09 00:28:06 +000066 uint32_t TSdiff = atoi(argv[3]) - packet.timeStamp();
67 uint16_t SNdiff = 0;
68 uint32_t ATdiff = 0;
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000069 if (argc > 4)
70 {
fischman@webrtc.orgeb7def22013-12-09 21:34:30 +000071 int startSN = atoi(argv[4]);
72 if (startSN >= 0)
73 SNdiff = startSN - packet.sequenceNumber();
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000074 if (argc > 5)
75 {
fischman@webrtc.orgeb7def22013-12-09 21:34:30 +000076 int startTS = atoi(argv[5]);
77 if (startTS >= 0)
78 ATdiff = startTS - packet.time();
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000079 }
80 }
81
82 while (packLen >= 0)
83 {
fischman@webrtc.orgeb7def22013-12-09 21:34:30 +000084
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000085 packet.setTimeStamp(packet.timeStamp() + TSdiff);
86 packet.setSequenceNumber(packet.sequenceNumber() + SNdiff);
87 packet.setTime(packet.time() + ATdiff);
88
89 packet.writeToFile(outFile);
90
91 packLen = packet.readFromFile(inFile);
92
93 }
94
95 fclose(inFile);
96 fclose(outFile);
97
98 return 0;
99}