mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-18 08:07:56 +01:00

This partially reverts these 2 CLs: 1) Reland "Copy video frames metadata between encoded and plain frames in one place" https://webrtc.googlesource.com/src/+/2ebf5239782bf6b46d4aa812f34fa9f9e5a02be9 2) Don't copy video frame metadata in each encoder/decoder https://webrtc.googlesource.com/src/+/ab62b2ee51e622be6d0aade15e87e927fa60e6f2 The problem with them were that ColorSpace was made to always be copied from the EncodedImage in the GenericDecoder, which overwrote ColorSpace information from the decoder. If decoder applied color space transition or bitstream color space information was different from the WebRTC signaled one, the incorrect color space data were passed to the renderer. This CL removes introduced change regarding color space data: GenericDecoder doesn't copy or store it and software decoders are restored to copy it. Relevant tests are also removed. Bug: chromium:982486 Change-Id: I989e01476ff7f7df376c05578ab8f540b95a1dd2 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/145323 Reviewed-by: Philip Eliasson <philipel@webrtc.org> Commit-Queue: Ilya Nikolaevskiy <ilnik@webrtc.org> Cr-Commit-Position: refs/heads/master@{#28556}
71 lines
2.2 KiB
C++
71 lines
2.2 KiB
C++
/*
|
|
* Copyright (c) 2018 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_CODECS_VP8_LIBVPX_VP8_DECODER_H_
|
|
#define MODULES_VIDEO_CODING_CODECS_VP8_LIBVPX_VP8_DECODER_H_
|
|
|
|
#include <memory>
|
|
|
|
#include "api/video/encoded_image.h"
|
|
#include "api/video_codecs/video_decoder.h"
|
|
#include "common_video/include/i420_buffer_pool.h"
|
|
#include "modules/include/module_common_types.h"
|
|
#include "modules/video_coding/codecs/vp8/include/vp8.h"
|
|
#include "modules/video_coding/include/video_codec_interface.h"
|
|
#include "vpx/vp8dx.h"
|
|
#include "vpx/vpx_decoder.h"
|
|
|
|
namespace webrtc {
|
|
|
|
class LibvpxVp8Decoder : public VideoDecoder {
|
|
public:
|
|
LibvpxVp8Decoder();
|
|
~LibvpxVp8Decoder() override;
|
|
|
|
int InitDecode(const VideoCodec* inst, int number_of_cores) override;
|
|
|
|
int Decode(const EncodedImage& input_image,
|
|
bool missing_frames,
|
|
int64_t /*render_time_ms*/) override;
|
|
|
|
int RegisterDecodeCompleteCallback(DecodedImageCallback* callback) override;
|
|
int Release() override;
|
|
|
|
const char* ImplementationName() const override;
|
|
|
|
struct DeblockParams {
|
|
int max_level = 6; // Deblocking strength: [0, 16].
|
|
int degrade_qp = 1; // If QP value is below, start lowering |max_level|.
|
|
int min_qp = 0; // If QP value is below, turn off deblocking.
|
|
};
|
|
|
|
private:
|
|
class QpSmoother;
|
|
int ReturnFrame(const vpx_image_t* img,
|
|
uint32_t timeStamp,
|
|
int qp,
|
|
const webrtc::ColorSpace* explicit_color_space);
|
|
const bool use_postproc_arm_;
|
|
|
|
I420BufferPool buffer_pool_;
|
|
DecodedImageCallback* decode_complete_callback_;
|
|
bool inited_;
|
|
vpx_codec_ctx_t* decoder_;
|
|
int propagation_cnt_;
|
|
int last_frame_width_;
|
|
int last_frame_height_;
|
|
bool key_frame_required_;
|
|
DeblockParams deblock_;
|
|
const std::unique_ptr<QpSmoother> qp_smoother_;
|
|
};
|
|
|
|
} // namespace webrtc
|
|
|
|
#endif // MODULES_VIDEO_CODING_CODECS_VP8_LIBVPX_VP8_DECODER_H_
|