OLD | NEW |
| (Empty) |
1 /* | |
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 "webrtc/modules/video_coding/test/test_util.h" | |
12 | |
13 #include <assert.h> | |
14 #include <math.h> | |
15 | |
16 #include <iomanip> | |
17 #include <sstream> | |
18 | |
19 #include "webrtc/common_video/libyuv/include/webrtc_libyuv.h" | |
20 #include "webrtc/modules/video_coding/internal_defines.h" | |
21 #include "webrtc/test/testsupport/fileutils.h" | |
22 | |
23 CmdArgs::CmdArgs() | |
24 : codecName("VP8"), | |
25 codecType(webrtc::kVideoCodecVP8), | |
26 width(352), | |
27 height(288), | |
28 rtt(0), | |
29 inputFile(webrtc::test::ResourcePath("foreman_cif", "yuv")), | |
30 outputFile(webrtc::test::OutputPath() + | |
31 "video_coding_test_output_352x288.yuv") {} | |
32 | |
33 namespace { | |
34 | |
35 void SplitFilename(const std::string& filename, | |
36 std::string* basename, | |
37 std::string* extension) { | |
38 assert(basename); | |
39 assert(extension); | |
40 | |
41 std::string::size_type idx; | |
42 idx = filename.rfind('.'); | |
43 | |
44 if (idx != std::string::npos) { | |
45 *basename = filename.substr(0, idx); | |
46 *extension = filename.substr(idx + 1); | |
47 } else { | |
48 *basename = filename; | |
49 *extension = ""; | |
50 } | |
51 } | |
52 | |
53 std::string AppendWidthHeightCount(const std::string& filename, | |
54 int width, | |
55 int height, | |
56 int count) { | |
57 std::string basename; | |
58 std::string extension; | |
59 SplitFilename(filename, &basename, &extension); | |
60 std::stringstream ss; | |
61 ss << basename << "_" << count << "." << width << "_" << height << "." | |
62 << extension; | |
63 return ss.str(); | |
64 } | |
65 | |
66 } // namespace | |
67 | |
68 FileOutputFrameReceiver::FileOutputFrameReceiver( | |
69 const std::string& base_out_filename, | |
70 uint32_t ssrc) | |
71 : out_filename_(), | |
72 out_file_(NULL), | |
73 timing_file_(NULL), | |
74 width_(0), | |
75 height_(0), | |
76 count_(0) { | |
77 std::string basename; | |
78 std::string extension; | |
79 if (base_out_filename.empty()) { | |
80 basename = webrtc::test::OutputPath() + "rtp_decoded"; | |
81 extension = "yuv"; | |
82 } else { | |
83 SplitFilename(base_out_filename, &basename, &extension); | |
84 } | |
85 std::stringstream ss; | |
86 ss << basename << "_" << std::hex << std::setw(8) << std::setfill('0') << ssrc | |
87 << "." << extension; | |
88 out_filename_ = ss.str(); | |
89 } | |
90 | |
91 FileOutputFrameReceiver::~FileOutputFrameReceiver() { | |
92 if (timing_file_ != NULL) { | |
93 fclose(timing_file_); | |
94 } | |
95 if (out_file_ != NULL) { | |
96 fclose(out_file_); | |
97 } | |
98 } | |
99 | |
100 int32_t FileOutputFrameReceiver::FrameToRender(webrtc::VideoFrame& video_frame, | |
101 rtc::Optional<uint8_t> qp) { | |
102 if (timing_file_ == NULL) { | |
103 std::string basename; | |
104 std::string extension; | |
105 SplitFilename(out_filename_, &basename, &extension); | |
106 timing_file_ = fopen((basename + "_renderTiming.txt").c_str(), "w"); | |
107 if (timing_file_ == NULL) { | |
108 return -1; | |
109 } | |
110 } | |
111 if (out_file_ == NULL || video_frame.width() != width_ || | |
112 video_frame.height() != height_) { | |
113 if (out_file_) { | |
114 fclose(out_file_); | |
115 } | |
116 printf("New size: %dx%d\n", video_frame.width(), video_frame.height()); | |
117 width_ = video_frame.width(); | |
118 height_ = video_frame.height(); | |
119 std::string filename_with_width_height = | |
120 AppendWidthHeightCount(out_filename_, width_, height_, count_); | |
121 ++count_; | |
122 out_file_ = fopen(filename_with_width_height.c_str(), "wb"); | |
123 if (out_file_ == NULL) { | |
124 return -1; | |
125 } | |
126 } | |
127 fprintf(timing_file_, "%u, %u\n", video_frame.timestamp(), | |
128 webrtc::MaskWord64ToUWord32(video_frame.render_time_ms())); | |
129 if (PrintVideoFrame(video_frame, out_file_) < 0) { | |
130 return -1; | |
131 } | |
132 return 0; | |
133 } | |
134 | |
135 webrtc::RtpVideoCodecTypes ConvertCodecType(const char* plname) { | |
136 if (strncmp(plname, "VP8", 3) == 0) { | |
137 return webrtc::kRtpVideoVp8; | |
138 } else { | |
139 // Default value. | |
140 return webrtc::kRtpVideoGeneric; | |
141 } | |
142 } | |
OLD | NEW |