| OLD | NEW | 
|---|
|  | (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 |  | 
| OLD | NEW | 
|---|