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/main/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/main/source/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::ProjectRootPath() + "/resources/foreman_cif.yuv"), | |
30 outputFile(webrtc::test::OutputPath() + | |
31 "video_coding_test_output_352x288.yuv") { | |
32 } | |
33 | |
34 namespace { | |
35 | |
36 void SplitFilename(const std::string& filename, 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, int width, | |
54 int height, int count) { | |
55 std::string basename; | |
56 std::string extension; | |
57 SplitFilename(filename, &basename, &extension); | |
58 std::stringstream ss; | |
59 ss << basename << "_" << count << "." << width << "_" << height << "." << | |
60 extension; | |
61 return ss.str(); | |
62 } | |
63 | |
64 } // namespace | |
65 | |
66 FileOutputFrameReceiver::FileOutputFrameReceiver( | |
67 const std::string& base_out_filename, uint32_t ssrc) | |
68 : out_filename_(), | |
69 out_file_(NULL), | |
70 timing_file_(NULL), | |
71 width_(0), | |
72 height_(0), | |
73 count_(0) { | |
74 std::string basename; | |
75 std::string extension; | |
76 if (base_out_filename.empty()) { | |
77 basename = webrtc::test::OutputPath() + "rtp_decoded"; | |
78 extension = "yuv"; | |
79 } else { | |
80 SplitFilename(base_out_filename, &basename, &extension); | |
81 } | |
82 std::stringstream ss; | |
83 ss << basename << "_" << std::hex << std::setw(8) << std::setfill('0') << | |
84 ssrc << "." << extension; | |
85 out_filename_ = ss.str(); | |
86 } | |
87 | |
88 FileOutputFrameReceiver::~FileOutputFrameReceiver() { | |
89 if (timing_file_ != NULL) { | |
90 fclose(timing_file_); | |
91 } | |
92 if (out_file_ != NULL) { | |
93 fclose(out_file_); | |
94 } | |
95 } | |
96 | |
97 int32_t FileOutputFrameReceiver::FrameToRender( | |
98 webrtc::VideoFrame& video_frame) { | |
99 if (timing_file_ == NULL) { | |
100 std::string basename; | |
101 std::string extension; | |
102 SplitFilename(out_filename_, &basename, &extension); | |
103 timing_file_ = fopen((basename + "_renderTiming.txt").c_str(), "w"); | |
104 if (timing_file_ == NULL) { | |
105 return -1; | |
106 } | |
107 } | |
108 if (out_file_ == NULL || video_frame.width() != width_ || | |
109 video_frame.height() != height_) { | |
110 if (out_file_) { | |
111 fclose(out_file_); | |
112 } | |
113 printf("New size: %dx%d\n", video_frame.width(), video_frame.height()); | |
114 width_ = video_frame.width(); | |
115 height_ = video_frame.height(); | |
116 std::string filename_with_width_height = AppendWidthHeightCount( | |
117 out_filename_, width_, height_, count_); | |
118 ++count_; | |
119 out_file_ = fopen(filename_with_width_height.c_str(), "wb"); | |
120 if (out_file_ == NULL) { | |
121 return -1; | |
122 } | |
123 } | |
124 fprintf(timing_file_, "%u, %u\n", video_frame.timestamp(), | |
125 webrtc::MaskWord64ToUWord32(video_frame.render_time_ms())); | |
126 if (PrintVideoFrame(video_frame, out_file_) < 0) { | |
127 return -1; | |
128 } | |
129 return 0; | |
130 } | |
131 | |
132 webrtc::RtpVideoCodecTypes ConvertCodecType(const char* plname) { | |
133 if (strncmp(plname,"VP8" , 3) == 0) { | |
134 return webrtc::kRtpVideoVp8; | |
135 } else { | |
136 // Default value. | |
137 return webrtc::kRtpVideoGeneric; | |
138 } | |
139 } | |
OLD | NEW |