1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "media/video/video_encode_accelerator.h"
6
7 #include "base/callback.h"
8 #include "base/strings/stringprintf.h"
9
10 namespace media {
11
Vp8Metadata()12 Vp8Metadata::Vp8Metadata()
13 : non_reference(false), temporal_idx(0), layer_sync(false) {}
14
BitstreamBufferMetadata()15 BitstreamBufferMetadata::BitstreamBufferMetadata()
16 : payload_size_bytes(0), key_frame(false) {}
17 BitstreamBufferMetadata::BitstreamBufferMetadata(
18 BitstreamBufferMetadata&& other) = default;
BitstreamBufferMetadata(size_t payload_size_bytes,bool key_frame,base::TimeDelta timestamp)19 BitstreamBufferMetadata::BitstreamBufferMetadata(size_t payload_size_bytes,
20 bool key_frame,
21 base::TimeDelta timestamp)
22 : payload_size_bytes(payload_size_bytes),
23 key_frame(key_frame),
24 timestamp(timestamp) {}
25 BitstreamBufferMetadata::~BitstreamBufferMetadata() = default;
26
Config()27 VideoEncodeAccelerator::Config::Config()
28 : input_format(PIXEL_FORMAT_UNKNOWN),
29 output_profile(VIDEO_CODEC_PROFILE_UNKNOWN),
30 initial_bitrate(0),
31 content_type(ContentType::kCamera) {}
32
33 VideoEncodeAccelerator::Config::Config(const Config& config) = default;
34
Config(VideoPixelFormat input_format,const gfx::Size & input_visible_size,VideoCodecProfile output_profile,uint32_t initial_bitrate,base::Optional<uint32_t> initial_framerate,base::Optional<uint32_t> gop_length,base::Optional<uint8_t> h264_output_level,base::Optional<StorageType> storage_type,ContentType content_type)35 VideoEncodeAccelerator::Config::Config(
36 VideoPixelFormat input_format,
37 const gfx::Size& input_visible_size,
38 VideoCodecProfile output_profile,
39 uint32_t initial_bitrate,
40 base::Optional<uint32_t> initial_framerate,
41 base::Optional<uint32_t> gop_length,
42 base::Optional<uint8_t> h264_output_level,
43 base::Optional<StorageType> storage_type,
44 ContentType content_type)
45 : input_format(input_format),
46 input_visible_size(input_visible_size),
47 output_profile(output_profile),
48 initial_bitrate(initial_bitrate),
49 initial_framerate(initial_framerate.value_or(
50 VideoEncodeAccelerator::kDefaultFramerate)),
51 gop_length(gop_length),
52 h264_output_level(h264_output_level),
53 storage_type(storage_type),
54 content_type(content_type) {}
55
56 VideoEncodeAccelerator::Config::~Config() = default;
57
AsHumanReadableString() const58 std::string VideoEncodeAccelerator::Config::AsHumanReadableString() const {
59 std::string str = base::StringPrintf(
60 "input_format: %s, input_visible_size: %s, output_profile: %s, "
61 "initial_bitrate: %u",
62 VideoPixelFormatToString(input_format).c_str(),
63 input_visible_size.ToString().c_str(),
64 GetProfileName(output_profile).c_str(), initial_bitrate);
65 if (initial_framerate) {
66 str += base::StringPrintf(", initial_framerate: %u",
67 initial_framerate.value());
68 }
69 if (gop_length)
70 str += base::StringPrintf(", gop_length: %u", gop_length.value());
71
72 if (h264_output_level &&
73 VideoCodecProfileToVideoCodec(output_profile) == kCodecH264) {
74 str += base::StringPrintf(", h264_output_level: %u",
75 h264_output_level.value());
76 }
77 return str;
78 }
79
NotifyEncoderInfoChange(const VideoEncoderInfo & info)80 void VideoEncodeAccelerator::Client::NotifyEncoderInfoChange(
81 const VideoEncoderInfo& info) {
82 // Do nothing if a client doesn't use the info.
83 }
84
85 VideoEncodeAccelerator::~VideoEncodeAccelerator() = default;
86
SupportedProfile()87 VideoEncodeAccelerator::SupportedProfile::SupportedProfile()
88 : profile(media::VIDEO_CODEC_PROFILE_UNKNOWN),
89 max_framerate_numerator(0),
90 max_framerate_denominator(0) {
91 }
92
SupportedProfile(VideoCodecProfile profile,const gfx::Size & max_resolution,uint32_t max_framerate_numerator,uint32_t max_framerate_denominator)93 VideoEncodeAccelerator::SupportedProfile::SupportedProfile(
94 VideoCodecProfile profile,
95 const gfx::Size& max_resolution,
96 uint32_t max_framerate_numerator,
97 uint32_t max_framerate_denominator)
98 : profile(profile),
99 max_resolution(max_resolution),
100 max_framerate_numerator(max_framerate_numerator),
101 max_framerate_denominator(max_framerate_denominator) {}
102
103 VideoEncodeAccelerator::SupportedProfile::~SupportedProfile() = default;
104
Flush(FlushCallback flush_callback)105 void VideoEncodeAccelerator::Flush(FlushCallback flush_callback) {
106 // TODO(owenlin): implements this https://crbug.com/755889.
107 NOTIMPLEMENTED();
108 std::move(flush_callback).Run(false);
109 }
110
IsFlushSupported()111 bool VideoEncodeAccelerator::IsFlushSupported() {
112 return false;
113 }
114
RequestEncodingParametersChange(const VideoBitrateAllocation & bitrate_allocation,uint32_t framerate)115 void VideoEncodeAccelerator::RequestEncodingParametersChange(
116 const VideoBitrateAllocation& bitrate_allocation,
117 uint32_t framerate) {
118 RequestEncodingParametersChange(bitrate_allocation.GetSumBps(), framerate);
119 }
120
121 } // namespace media
122
123 namespace std {
124
operator ()(media::VideoEncodeAccelerator * vea) const125 void default_delete<media::VideoEncodeAccelerator>::operator()(
126 media::VideoEncodeAccelerator* vea) const {
127 vea->Destroy();
128 }
129
130 } // namespace std
131