mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-14 14:20:45 +01:00

Before this change all layers were glued together at the receive side into a single IVF frame. This confuses most bitstream parsers. Since this change all spatial layers would be written as separate frames on the receive side also (on the send side it's already done that way). Bug: none Change-Id: I68543e4d4b336f87699ec3b4a113b8c93af0b7e4 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/156082 Reviewed-by: Sergey Silkin <ssilkin@webrtc.org> Commit-Queue: Ilya Nikolaevskiy <ilnik@webrtc.org> Cr-Commit-Position: refs/heads/master@{#29401}
65 lines
2 KiB
C++
65 lines
2 KiB
C++
/*
|
|
* Copyright (c) 2016 The WebRTC 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 MODULES_VIDEO_CODING_UTILITY_IVF_FILE_WRITER_H_
|
|
#define MODULES_VIDEO_CODING_UTILITY_IVF_FILE_WRITER_H_
|
|
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
#include <memory>
|
|
|
|
#include "api/video/encoded_image.h"
|
|
#include "rtc_base/constructor_magic.h"
|
|
#include "rtc_base/system/file_wrapper.h"
|
|
#include "rtc_base/time_utils.h"
|
|
|
|
namespace webrtc {
|
|
|
|
class IvfFileWriter {
|
|
public:
|
|
// Takes ownership of the file, which will be closed either through
|
|
// Close or ~IvfFileWriter. If writing a frame would take the file above the
|
|
// |byte_limit| the file will be closed, the write (and all future writes)
|
|
// will fail. A |byte_limit| of 0 is equivalent to no limit.
|
|
static std::unique_ptr<IvfFileWriter> Wrap(FileWrapper file,
|
|
size_t byte_limit);
|
|
~IvfFileWriter();
|
|
|
|
bool WriteFrame(const EncodedImage& encoded_image, VideoCodecType codec_type);
|
|
bool Close();
|
|
|
|
private:
|
|
explicit IvfFileWriter(FileWrapper file, size_t byte_limit);
|
|
|
|
bool WriteHeader();
|
|
bool InitFromFirstFrame(const EncodedImage& encoded_image,
|
|
VideoCodecType codec_type);
|
|
bool WriteOneSpatialLayer(int64_t timestamp,
|
|
const uint8_t* data,
|
|
size_t size);
|
|
|
|
VideoCodecType codec_type_;
|
|
size_t bytes_written_;
|
|
size_t byte_limit_;
|
|
size_t num_frames_;
|
|
uint16_t width_;
|
|
uint16_t height_;
|
|
int64_t last_timestamp_;
|
|
bool using_capture_timestamps_;
|
|
rtc::TimestampWrapAroundHandler wrap_handler_;
|
|
FileWrapper file_;
|
|
|
|
RTC_DISALLOW_COPY_AND_ASSIGN(IvfFileWriter);
|
|
};
|
|
|
|
} // namespace webrtc
|
|
|
|
#endif // MODULES_VIDEO_CODING_UTILITY_IVF_FILE_WRITER_H_
|