webrtc_m130/api/video_codecs/sdp_video_format.h

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

96 lines
3.5 KiB
C
Raw Permalink Normal View History

Reland of Prepare for injectable SW decoders (patchset #1 id:1 of https://codereview.webrtc.org/3010953002/ ) Reason for revert: Fix bug introduced by keeping the allocated decoders in a map. Original issue's description: > Revert of Prepare for injectable SW decoders (patchset #3 id:40001 of https://codereview.webrtc.org/3009973002/ ) > > Reason for revert: > Tentative revert since it seems to cause problems in Chrome, MAC. > > https://build.chromium.org/p/chromium.webrtc.fyi/builders/Mac%20Tester/builds/42684 > > > > Original issue's description: > > Prepare for injectable SW decoders > > > > Pretty much mirrors the work done on the encoding side in CLs: > > > > "Clean up ownership of webrtc::VideoEncoder" > > https://codereview.webrtc.org/3007643002/ > > > > "Let VideoEncoderSoftwareFallbackWrapper own the wrapped encoder" > > https://codereview.webrtc.org/3007683002/ > > > > "WebRtcVideoEngine: Encapsulate logic for unifying internal and external video codecs" > > https://codereview.webrtc.org/3006713002/ > > > > BUG=webrtc:7925 > > > > Review-Url: https://codereview.webrtc.org/3009973002 > > Cr-Commit-Position: refs/heads/master@{#19641} > > Committed: https://chromium.googlesource.com/external/webrtc/+/084c55a63a2d9bdc71579458406d44f8bab9f454 > > TBR=magjed@webrtc.org,andersc@webrtc.org > # Not skipping CQ checks because original CL landed more than 1 days ago. > BUG=webrtc:7925 > > Review-Url: https://codereview.webrtc.org/3010953002 > Cr-Commit-Position: refs/heads/master@{#19647} > Committed: https://chromium.googlesource.com/external/webrtc/+/1f88531038c24c5ce3b0f4cfc682b970770a71f6 TBR=magjed@webrtc.org,perkj@webrtc.org # Not skipping CQ checks because original CL landed more than 1 days ago. BUG=webrtc:7925 Review-Url: https://codereview.webrtc.org/3005363002 Cr-Commit-Position: refs/heads/master@{#19782}
2017-09-11 11:50:51 -07:00
/*
* Copyright (c) 2017 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 API_VIDEO_CODECS_SDP_VIDEO_FORMAT_H_
#define API_VIDEO_CODECS_SDP_VIDEO_FORMAT_H_
Reland of Prepare for injectable SW decoders (patchset #1 id:1 of https://codereview.webrtc.org/3010953002/ ) Reason for revert: Fix bug introduced by keeping the allocated decoders in a map. Original issue's description: > Revert of Prepare for injectable SW decoders (patchset #3 id:40001 of https://codereview.webrtc.org/3009973002/ ) > > Reason for revert: > Tentative revert since it seems to cause problems in Chrome, MAC. > > https://build.chromium.org/p/chromium.webrtc.fyi/builders/Mac%20Tester/builds/42684 > > > > Original issue's description: > > Prepare for injectable SW decoders > > > > Pretty much mirrors the work done on the encoding side in CLs: > > > > "Clean up ownership of webrtc::VideoEncoder" > > https://codereview.webrtc.org/3007643002/ > > > > "Let VideoEncoderSoftwareFallbackWrapper own the wrapped encoder" > > https://codereview.webrtc.org/3007683002/ > > > > "WebRtcVideoEngine: Encapsulate logic for unifying internal and external video codecs" > > https://codereview.webrtc.org/3006713002/ > > > > BUG=webrtc:7925 > > > > Review-Url: https://codereview.webrtc.org/3009973002 > > Cr-Commit-Position: refs/heads/master@{#19641} > > Committed: https://chromium.googlesource.com/external/webrtc/+/084c55a63a2d9bdc71579458406d44f8bab9f454 > > TBR=magjed@webrtc.org,andersc@webrtc.org > # Not skipping CQ checks because original CL landed more than 1 days ago. > BUG=webrtc:7925 > > Review-Url: https://codereview.webrtc.org/3010953002 > Cr-Commit-Position: refs/heads/master@{#19647} > Committed: https://chromium.googlesource.com/external/webrtc/+/1f88531038c24c5ce3b0f4cfc682b970770a71f6 TBR=magjed@webrtc.org,perkj@webrtc.org # Not skipping CQ checks because original CL landed more than 1 days ago. BUG=webrtc:7925 Review-Url: https://codereview.webrtc.org/3005363002 Cr-Commit-Position: refs/heads/master@{#19782}
2017-09-11 11:50:51 -07:00
#include <map>
#include <optional>
Reland of Prepare for injectable SW decoders (patchset #1 id:1 of https://codereview.webrtc.org/3010953002/ ) Reason for revert: Fix bug introduced by keeping the allocated decoders in a map. Original issue's description: > Revert of Prepare for injectable SW decoders (patchset #3 id:40001 of https://codereview.webrtc.org/3009973002/ ) > > Reason for revert: > Tentative revert since it seems to cause problems in Chrome, MAC. > > https://build.chromium.org/p/chromium.webrtc.fyi/builders/Mac%20Tester/builds/42684 > > > > Original issue's description: > > Prepare for injectable SW decoders > > > > Pretty much mirrors the work done on the encoding side in CLs: > > > > "Clean up ownership of webrtc::VideoEncoder" > > https://codereview.webrtc.org/3007643002/ > > > > "Let VideoEncoderSoftwareFallbackWrapper own the wrapped encoder" > > https://codereview.webrtc.org/3007683002/ > > > > "WebRtcVideoEngine: Encapsulate logic for unifying internal and external video codecs" > > https://codereview.webrtc.org/3006713002/ > > > > BUG=webrtc:7925 > > > > Review-Url: https://codereview.webrtc.org/3009973002 > > Cr-Commit-Position: refs/heads/master@{#19641} > > Committed: https://chromium.googlesource.com/external/webrtc/+/084c55a63a2d9bdc71579458406d44f8bab9f454 > > TBR=magjed@webrtc.org,andersc@webrtc.org > # Not skipping CQ checks because original CL landed more than 1 days ago. > BUG=webrtc:7925 > > Review-Url: https://codereview.webrtc.org/3010953002 > Cr-Commit-Position: refs/heads/master@{#19647} > Committed: https://chromium.googlesource.com/external/webrtc/+/1f88531038c24c5ce3b0f4cfc682b970770a71f6 TBR=magjed@webrtc.org,perkj@webrtc.org # Not skipping CQ checks because original CL landed more than 1 days ago. BUG=webrtc:7925 Review-Url: https://codereview.webrtc.org/3005363002 Cr-Commit-Position: refs/heads/master@{#19782}
2017-09-11 11:50:51 -07:00
#include <string>
#include "absl/container/inlined_vector.h"
#include "api/array_view.h"
#include "api/rtp_parameters.h"
#include "api/video_codecs/scalability_mode.h"
#include "rtc_base/system/rtc_export.h"
Reland of Prepare for injectable SW decoders (patchset #1 id:1 of https://codereview.webrtc.org/3010953002/ ) Reason for revert: Fix bug introduced by keeping the allocated decoders in a map. Original issue's description: > Revert of Prepare for injectable SW decoders (patchset #3 id:40001 of https://codereview.webrtc.org/3009973002/ ) > > Reason for revert: > Tentative revert since it seems to cause problems in Chrome, MAC. > > https://build.chromium.org/p/chromium.webrtc.fyi/builders/Mac%20Tester/builds/42684 > > > > Original issue's description: > > Prepare for injectable SW decoders > > > > Pretty much mirrors the work done on the encoding side in CLs: > > > > "Clean up ownership of webrtc::VideoEncoder" > > https://codereview.webrtc.org/3007643002/ > > > > "Let VideoEncoderSoftwareFallbackWrapper own the wrapped encoder" > > https://codereview.webrtc.org/3007683002/ > > > > "WebRtcVideoEngine: Encapsulate logic for unifying internal and external video codecs" > > https://codereview.webrtc.org/3006713002/ > > > > BUG=webrtc:7925 > > > > Review-Url: https://codereview.webrtc.org/3009973002 > > Cr-Commit-Position: refs/heads/master@{#19641} > > Committed: https://chromium.googlesource.com/external/webrtc/+/084c55a63a2d9bdc71579458406d44f8bab9f454 > > TBR=magjed@webrtc.org,andersc@webrtc.org > # Not skipping CQ checks because original CL landed more than 1 days ago. > BUG=webrtc:7925 > > Review-Url: https://codereview.webrtc.org/3010953002 > Cr-Commit-Position: refs/heads/master@{#19647} > Committed: https://chromium.googlesource.com/external/webrtc/+/1f88531038c24c5ce3b0f4cfc682b970770a71f6 TBR=magjed@webrtc.org,perkj@webrtc.org # Not skipping CQ checks because original CL landed more than 1 days ago. BUG=webrtc:7925 Review-Url: https://codereview.webrtc.org/3005363002 Cr-Commit-Position: refs/heads/master@{#19782}
2017-09-11 11:50:51 -07:00
namespace webrtc {
// SDP specification for a single video codec.
// NOTE: This class is still under development and may change without notice.
struct RTC_EXPORT SdpVideoFormat {
using Parameters [[deprecated("Use webrtc::CodecParameterMap")]] =
std::map<std::string, std::string>;
explicit SdpVideoFormat(const std::string& name);
SdpVideoFormat(const std::string& name, const CodecParameterMap& parameters);
SdpVideoFormat(
const std::string& name,
const CodecParameterMap& parameters,
const absl::InlinedVector<ScalabilityMode, kScalabilityModeCount>&
scalability_modes);
// Creates a new SdpVideoFormat object identical to the supplied
// SdpVideoFormat except the scalability_modes that are set to be the same as
// the supplied scalability modes.
SdpVideoFormat(
const SdpVideoFormat& format,
const absl::InlinedVector<ScalabilityMode, kScalabilityModeCount>&
scalability_modes);
SdpVideoFormat(const SdpVideoFormat&);
SdpVideoFormat(SdpVideoFormat&&);
SdpVideoFormat& operator=(const SdpVideoFormat&);
SdpVideoFormat& operator=(SdpVideoFormat&&);
Reland of Prepare for injectable SW decoders (patchset #1 id:1 of https://codereview.webrtc.org/3010953002/ ) Reason for revert: Fix bug introduced by keeping the allocated decoders in a map. Original issue's description: > Revert of Prepare for injectable SW decoders (patchset #3 id:40001 of https://codereview.webrtc.org/3009973002/ ) > > Reason for revert: > Tentative revert since it seems to cause problems in Chrome, MAC. > > https://build.chromium.org/p/chromium.webrtc.fyi/builders/Mac%20Tester/builds/42684 > > > > Original issue's description: > > Prepare for injectable SW decoders > > > > Pretty much mirrors the work done on the encoding side in CLs: > > > > "Clean up ownership of webrtc::VideoEncoder" > > https://codereview.webrtc.org/3007643002/ > > > > "Let VideoEncoderSoftwareFallbackWrapper own the wrapped encoder" > > https://codereview.webrtc.org/3007683002/ > > > > "WebRtcVideoEngine: Encapsulate logic for unifying internal and external video codecs" > > https://codereview.webrtc.org/3006713002/ > > > > BUG=webrtc:7925 > > > > Review-Url: https://codereview.webrtc.org/3009973002 > > Cr-Commit-Position: refs/heads/master@{#19641} > > Committed: https://chromium.googlesource.com/external/webrtc/+/084c55a63a2d9bdc71579458406d44f8bab9f454 > > TBR=magjed@webrtc.org,andersc@webrtc.org > # Not skipping CQ checks because original CL landed more than 1 days ago. > BUG=webrtc:7925 > > Review-Url: https://codereview.webrtc.org/3010953002 > Cr-Commit-Position: refs/heads/master@{#19647} > Committed: https://chromium.googlesource.com/external/webrtc/+/1f88531038c24c5ce3b0f4cfc682b970770a71f6 TBR=magjed@webrtc.org,perkj@webrtc.org # Not skipping CQ checks because original CL landed more than 1 days ago. BUG=webrtc:7925 Review-Url: https://codereview.webrtc.org/3005363002 Cr-Commit-Position: refs/heads/master@{#19782}
2017-09-11 11:50:51 -07:00
~SdpVideoFormat();
Reland of Prepare for injectable SW decoders (patchset #1 id:1 of https://codereview.webrtc.org/3010953002/ ) Reason for revert: Fix bug introduced by keeping the allocated decoders in a map. Original issue's description: > Revert of Prepare for injectable SW decoders (patchset #3 id:40001 of https://codereview.webrtc.org/3009973002/ ) > > Reason for revert: > Tentative revert since it seems to cause problems in Chrome, MAC. > > https://build.chromium.org/p/chromium.webrtc.fyi/builders/Mac%20Tester/builds/42684 > > > > Original issue's description: > > Prepare for injectable SW decoders > > > > Pretty much mirrors the work done on the encoding side in CLs: > > > > "Clean up ownership of webrtc::VideoEncoder" > > https://codereview.webrtc.org/3007643002/ > > > > "Let VideoEncoderSoftwareFallbackWrapper own the wrapped encoder" > > https://codereview.webrtc.org/3007683002/ > > > > "WebRtcVideoEngine: Encapsulate logic for unifying internal and external video codecs" > > https://codereview.webrtc.org/3006713002/ > > > > BUG=webrtc:7925 > > > > Review-Url: https://codereview.webrtc.org/3009973002 > > Cr-Commit-Position: refs/heads/master@{#19641} > > Committed: https://chromium.googlesource.com/external/webrtc/+/084c55a63a2d9bdc71579458406d44f8bab9f454 > > TBR=magjed@webrtc.org,andersc@webrtc.org > # Not skipping CQ checks because original CL landed more than 1 days ago. > BUG=webrtc:7925 > > Review-Url: https://codereview.webrtc.org/3010953002 > Cr-Commit-Position: refs/heads/master@{#19647} > Committed: https://chromium.googlesource.com/external/webrtc/+/1f88531038c24c5ce3b0f4cfc682b970770a71f6 TBR=magjed@webrtc.org,perkj@webrtc.org # Not skipping CQ checks because original CL landed more than 1 days ago. BUG=webrtc:7925 Review-Url: https://codereview.webrtc.org/3005363002 Cr-Commit-Position: refs/heads/master@{#19782}
2017-09-11 11:50:51 -07:00
// Returns true if the SdpVideoFormats have the same names as well as codec
// specific parameters. Please note that two SdpVideoFormats can represent the
// same codec even though not all parameters are the same.
bool IsSameCodec(const SdpVideoFormat& other) const;
bool IsCodecInList(
rtc::ArrayView<const webrtc::SdpVideoFormat> formats) const;
std::string ToString() const;
friend RTC_EXPORT bool operator==(const SdpVideoFormat& a,
const SdpVideoFormat& b);
friend RTC_EXPORT bool operator!=(const SdpVideoFormat& a,
const SdpVideoFormat& b) {
Reland of Prepare for injectable SW decoders (patchset #1 id:1 of https://codereview.webrtc.org/3010953002/ ) Reason for revert: Fix bug introduced by keeping the allocated decoders in a map. Original issue's description: > Revert of Prepare for injectable SW decoders (patchset #3 id:40001 of https://codereview.webrtc.org/3009973002/ ) > > Reason for revert: > Tentative revert since it seems to cause problems in Chrome, MAC. > > https://build.chromium.org/p/chromium.webrtc.fyi/builders/Mac%20Tester/builds/42684 > > > > Original issue's description: > > Prepare for injectable SW decoders > > > > Pretty much mirrors the work done on the encoding side in CLs: > > > > "Clean up ownership of webrtc::VideoEncoder" > > https://codereview.webrtc.org/3007643002/ > > > > "Let VideoEncoderSoftwareFallbackWrapper own the wrapped encoder" > > https://codereview.webrtc.org/3007683002/ > > > > "WebRtcVideoEngine: Encapsulate logic for unifying internal and external video codecs" > > https://codereview.webrtc.org/3006713002/ > > > > BUG=webrtc:7925 > > > > Review-Url: https://codereview.webrtc.org/3009973002 > > Cr-Commit-Position: refs/heads/master@{#19641} > > Committed: https://chromium.googlesource.com/external/webrtc/+/084c55a63a2d9bdc71579458406d44f8bab9f454 > > TBR=magjed@webrtc.org,andersc@webrtc.org > # Not skipping CQ checks because original CL landed more than 1 days ago. > BUG=webrtc:7925 > > Review-Url: https://codereview.webrtc.org/3010953002 > Cr-Commit-Position: refs/heads/master@{#19647} > Committed: https://chromium.googlesource.com/external/webrtc/+/1f88531038c24c5ce3b0f4cfc682b970770a71f6 TBR=magjed@webrtc.org,perkj@webrtc.org # Not skipping CQ checks because original CL landed more than 1 days ago. BUG=webrtc:7925 Review-Url: https://codereview.webrtc.org/3005363002 Cr-Commit-Position: refs/heads/master@{#19782}
2017-09-11 11:50:51 -07:00
return !(a == b);
}
std::string name;
CodecParameterMap parameters;
absl::InlinedVector<ScalabilityMode, kScalabilityModeCount> scalability_modes;
// Well-known video codecs and their format parameters.
static const SdpVideoFormat VP8();
static const SdpVideoFormat H264();
static const SdpVideoFormat VP9Profile0();
static const SdpVideoFormat VP9Profile1();
static const SdpVideoFormat VP9Profile2();
static const SdpVideoFormat VP9Profile3();
static const SdpVideoFormat AV1Profile0();
static const SdpVideoFormat AV1Profile1();
Reland of Prepare for injectable SW decoders (patchset #1 id:1 of https://codereview.webrtc.org/3010953002/ ) Reason for revert: Fix bug introduced by keeping the allocated decoders in a map. Original issue's description: > Revert of Prepare for injectable SW decoders (patchset #3 id:40001 of https://codereview.webrtc.org/3009973002/ ) > > Reason for revert: > Tentative revert since it seems to cause problems in Chrome, MAC. > > https://build.chromium.org/p/chromium.webrtc.fyi/builders/Mac%20Tester/builds/42684 > > > > Original issue's description: > > Prepare for injectable SW decoders > > > > Pretty much mirrors the work done on the encoding side in CLs: > > > > "Clean up ownership of webrtc::VideoEncoder" > > https://codereview.webrtc.org/3007643002/ > > > > "Let VideoEncoderSoftwareFallbackWrapper own the wrapped encoder" > > https://codereview.webrtc.org/3007683002/ > > > > "WebRtcVideoEngine: Encapsulate logic for unifying internal and external video codecs" > > https://codereview.webrtc.org/3006713002/ > > > > BUG=webrtc:7925 > > > > Review-Url: https://codereview.webrtc.org/3009973002 > > Cr-Commit-Position: refs/heads/master@{#19641} > > Committed: https://chromium.googlesource.com/external/webrtc/+/084c55a63a2d9bdc71579458406d44f8bab9f454 > > TBR=magjed@webrtc.org,andersc@webrtc.org > # Not skipping CQ checks because original CL landed more than 1 days ago. > BUG=webrtc:7925 > > Review-Url: https://codereview.webrtc.org/3010953002 > Cr-Commit-Position: refs/heads/master@{#19647} > Committed: https://chromium.googlesource.com/external/webrtc/+/1f88531038c24c5ce3b0f4cfc682b970770a71f6 TBR=magjed@webrtc.org,perkj@webrtc.org # Not skipping CQ checks because original CL landed more than 1 days ago. BUG=webrtc:7925 Review-Url: https://codereview.webrtc.org/3005363002 Cr-Commit-Position: refs/heads/master@{#19782}
2017-09-11 11:50:51 -07:00
};
// For not so good reasons sometimes additional parameters are added to an
// SdpVideoFormat, which makes instances that should compare equal to not match
// anymore. Until we stop misusing SdpVideoFormats provide this convenience
// function to perform fuzzy matching.
std::optional<SdpVideoFormat> FuzzyMatchSdpVideoFormat(
rtc::ArrayView<const SdpVideoFormat> supported_formats,
const SdpVideoFormat& format);
Reland of Prepare for injectable SW decoders (patchset #1 id:1 of https://codereview.webrtc.org/3010953002/ ) Reason for revert: Fix bug introduced by keeping the allocated decoders in a map. Original issue's description: > Revert of Prepare for injectable SW decoders (patchset #3 id:40001 of https://codereview.webrtc.org/3009973002/ ) > > Reason for revert: > Tentative revert since it seems to cause problems in Chrome, MAC. > > https://build.chromium.org/p/chromium.webrtc.fyi/builders/Mac%20Tester/builds/42684 > > > > Original issue's description: > > Prepare for injectable SW decoders > > > > Pretty much mirrors the work done on the encoding side in CLs: > > > > "Clean up ownership of webrtc::VideoEncoder" > > https://codereview.webrtc.org/3007643002/ > > > > "Let VideoEncoderSoftwareFallbackWrapper own the wrapped encoder" > > https://codereview.webrtc.org/3007683002/ > > > > "WebRtcVideoEngine: Encapsulate logic for unifying internal and external video codecs" > > https://codereview.webrtc.org/3006713002/ > > > > BUG=webrtc:7925 > > > > Review-Url: https://codereview.webrtc.org/3009973002 > > Cr-Commit-Position: refs/heads/master@{#19641} > > Committed: https://chromium.googlesource.com/external/webrtc/+/084c55a63a2d9bdc71579458406d44f8bab9f454 > > TBR=magjed@webrtc.org,andersc@webrtc.org > # Not skipping CQ checks because original CL landed more than 1 days ago. > BUG=webrtc:7925 > > Review-Url: https://codereview.webrtc.org/3010953002 > Cr-Commit-Position: refs/heads/master@{#19647} > Committed: https://chromium.googlesource.com/external/webrtc/+/1f88531038c24c5ce3b0f4cfc682b970770a71f6 TBR=magjed@webrtc.org,perkj@webrtc.org # Not skipping CQ checks because original CL landed more than 1 days ago. BUG=webrtc:7925 Review-Url: https://codereview.webrtc.org/3005363002 Cr-Commit-Position: refs/heads/master@{#19782}
2017-09-11 11:50:51 -07:00
} // namespace webrtc
#endif // API_VIDEO_CODECS_SDP_VIDEO_FORMAT_H_