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