ref: f563d975c6d0b1b48f8dc1497cfc895ab523c312
dir: /vp9/simple_encode.h/
/* * Copyright (c) 2019 The WebM project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #ifndef VPX_VP9_SIMPLE_ENCODE_H_ #define VPX_VP9_SIMPLE_ENCODE_H_ #include <memory> #include <vector> namespace vp9 { enum FrameType { kKeyFrame = 0, kInterFrame, kAlternateReference, }; struct EncodeFrameResult { int show_idx; FrameType frame_type; size_t coding_data_bit_size; size_t coding_data_byte_size; // The EncodeFrame will allocate a buffer, write the coding data into the // buffer and give the ownership of the buffer to coding_data std::unique_ptr<unsigned char[]> coding_data; double psnr; uint64_t sse; int quantize_index; }; class SimpleEncode { public: SimpleEncode(int frame_width, int frame_height, int frame_rate_num, int frame_rate_den, int target_bitrate, int num_frames, const char *infile_path); ~SimpleEncode(); SimpleEncode(SimpleEncode &&) = delete; SimpleEncode &operator=(SimpleEncode &&) = delete; // Makes encoder compute the first pass stats and store it internally for // future encode void ComputeFirstPassStats(); // Outputs the first pass stats std::vector<std::vector<double>> ObserveFirstPassStats(); // Initializes the encoder for actual encoding // This funtion should be called after ComputeFirstPassStats() void StartEncode(); // Frees the encoder // This funtion should be called after StartEncode() or EncodeFrame() void EndEncode(); // Encodes a frame // This funtion should be called after StartEncode() before EndEncode() void EncodeFrame(EncodeFrameResult *encode_frame_result); // Encodes a frame with a specific quantize index // This funtion should be called after StartEncode() before EndEncode() void EncodeFrameWithQuantizeIndex(EncodeFrameResult *encode_frame_result, int quantize_index); // Gets the number of coding frames for the video. The coding frames include // show frame and no show frame. // This funtion should be called after ComputeFirstPassStats() int GetCodingFrameNum(); private: class impl; int frame_width; int frame_height; int frame_rate_num; int frame_rate_den; int target_bitrate; int num_frames; FILE *file; std::unique_ptr<impl> impl_ptr; }; } // namespace vp9 #endif // VPX_VP9_SIMPLE_ENCODE