Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(126)

Side by Side Diff: webrtc/tools/frame_editing/frame_editing_lib.cc

Issue 2965593002: Move webrtc/{tools => rtc_tools} (Closed)
Patch Set: Adding back root changes Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 /*
2 * Copyright (c) 2012 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 <stdio.h>
12 #include <stdlib.h>
13
14 #include <memory>
15 #include <string>
16
17 #include "webrtc/common_video/libyuv/include/webrtc_libyuv.h"
18 #include "webrtc/tools/frame_editing/frame_editing_lib.h"
19 #include "webrtc/typedefs.h"
20
21 namespace webrtc {
22
23 int EditFrames(const std::string& in_path, int width, int height,
24 int first_frame_to_process, int interval,
25 int last_frame_to_process, const std::string& out_path) {
26 if (last_frame_to_process < first_frame_to_process) {
27 fprintf(stderr, "The set of frames to cut is empty! (l < f)\n");
28 return -10;
29 }
30
31 FILE* in_fid = fopen(in_path.c_str() , "rb");
32 if (!in_fid) {
33 fprintf(stderr, "Could not read input file: %s.\n", in_path.c_str());
34 return -11;
35 }
36
37 // Frame size of I420.
38 size_t frame_length = CalcBufferSize(VideoType::kI420, width, height);
39
40 std::unique_ptr<uint8_t[]> temp_buffer(new uint8_t[frame_length]);
41
42 FILE* out_fid = fopen(out_path.c_str(), "wb");
43
44 if (!out_fid) {
45 fprintf(stderr, "Could not open output file: %s.\n", out_path.c_str());
46 fclose(in_fid);
47 return -12;
48 }
49
50 int num_frames_read = 0;
51 int num_frames_read_between = 0;
52 size_t num_bytes_read;
53
54 while ((num_bytes_read = fread(temp_buffer.get(), 1, frame_length, in_fid))
55 == frame_length) {
56 num_frames_read++;
57 if ((num_frames_read < first_frame_to_process) ||
58 (last_frame_to_process < num_frames_read)) {
59 fwrite(temp_buffer.get(), 1, frame_length, out_fid);
60 } else {
61 num_frames_read_between++;
62 if (interval <= 0) {
63 if (interval == -1) {
64 // Remove all frames.
65 } else {
66 if (((num_frames_read_between - 1) % interval) == 0) {
67 // Keep only every |interval| frame.
68 fwrite(temp_buffer.get(), 1, frame_length, out_fid);
69 }
70 }
71 } else if (interval > 0) {
72 for (int i = 1; i <= interval; ++i) {
73 fwrite(temp_buffer.get(), 1, frame_length, out_fid);
74 }
75 }
76 }
77 }
78 if (num_bytes_read > 0 && num_bytes_read < frame_length) {
79 printf("Frame to small! Last frame truncated.\n");
80 }
81 fclose(in_fid);
82 fclose(out_fid);
83
84 printf("Done editing!\n");
85 return 0;
86 }
87 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/tools/frame_editing/frame_editing_lib.h ('k') | webrtc/tools/frame_editing/frame_editing_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698