| 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 |