// Copyright 2020 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef MEDIA_GPU_TEST_VIDEO_ENCODER_VIDEO_ENCODER_CLIENT_H_ #define MEDIA_GPU_TEST_VIDEO_ENCODER_VIDEO_ENCODER_CLIENT_H_ #include <stdint.h> #include <map> #include <memory> #include <vector> #include "base/memory/raw_ptr.h" #include "base/memory/unsafe_shared_memory_region.h" #include "base/memory/weak_ptr.h" #include "base/sequence_checker.h" #include "base/task/single_thread_task_runner.h" #include "base/threading/thread.h" #include "base/time/time.h" #include "media/base/bitstream_buffer.h" #include "media/base/video_bitrate_allocation.h" #include "media/gpu/test/bitstream_helpers.h" #include "media/gpu/test/video_encoder/video_encoder.h" #include "media/video/video_encode_accelerator.h" namespace media { namespace test { class AlignedDataHelper; class RawVideo; // Video encoder client configuration. // TODO(dstaessens): Add extra parameters (e.g. h264 output level) struct VideoEncoderClientConfig { … }; class VideoEncoderStats { … }; // The video encoder client is responsible for the communication between the // test video encoder and the video encoder. It also communicates with the // attached decoder buffer processors. The video encoder client can only have // one active encoder at any time. To encode a different stream the Destroy() // and Initialize() functions have to be called to destroy and re-create the // encoder. // // All communication with the encoder is done on the |encoder_client_thread_|, // so callbacks scheduled by the encoder can be executed asynchronously. This is // necessary in order not to interrupt the test flow. class VideoEncoderClient : public VideoEncodeAccelerator::Client { … }; } // namespace test } // namespace media #endif // MEDIA_GPU_TEST_VIDEO_ENCODER_VIDEO_ENCODER_CLIENT_H_