Reland of Add H264 profile to webrtc::VideoCodecH264 and webrtc::VideoPayload (patchset #1 id:1 of https://codereview.webrtc.org/2529143002/ )
Reason for revert: Include fix; set profile information in CreatePayloadType for video. Original issue's description: > Revert of Add H264 profile to webrtc::VideoCodecH264 and webrtc::VideoPayload (patchset #1 id:40001 of https://codereview.webrtc.org/2525693003/ ) > > Reason for revert: > The CL doesn't actually set profile information in VideoPayload. > > Original issue's description: > > Add H264 profile to webrtc::VideoCodecH264 and webrtc::VideoPayload > > > > It's necessary to check H264 profile information as well as payload name > > in PayloadIsCompatible in RTPPayloadRegistry. > > > > BUG=webrtc:6743 > > > > Committed: https://crrev.com/bdbc4b7ef578ba1d61ceec351bc47c33da115329 > > Cr-Commit-Position: refs/heads/master@{#15248} > > TBR=mflodman@webrtc.org > # Skipping CQ checks because original CL landed less than 1 days ago. > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > BUG=webrtc:6743 > > Committed: https://crrev.com/d7e6ccbc53fc24acdcc7507a6f3a155626473d54 > Cr-Commit-Position: refs/heads/master@{#15251} TBR=mflodman@webrtc.org # Skipping CQ checks because original CL landed less than 1 days ago. NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=webrtc:6743 Review-Url: https://codereview.webrtc.org/2529153002 Cr-Commit-Position: refs/heads/master@{#15252}
This commit is contained in:
parent
d7e6ccbc53
commit
e69a1a9342
@ -548,6 +548,19 @@ struct VideoCodecVP9 {
|
||||
bool flexibleMode;
|
||||
};
|
||||
|
||||
// TODO(magjed): Move this and other H264 related classes out to their own file.
|
||||
namespace H264 {
|
||||
|
||||
enum Profile {
|
||||
kProfileConstrainedBaseline,
|
||||
kProfileBaseline,
|
||||
kProfileMain,
|
||||
kProfileConstrainedHigh,
|
||||
kProfileHigh,
|
||||
};
|
||||
|
||||
} // namespace H264
|
||||
|
||||
// H264 specific.
|
||||
struct VideoCodecH264 {
|
||||
bool frameDroppingOn;
|
||||
@ -557,6 +570,7 @@ struct VideoCodecH264 {
|
||||
size_t spsLen;
|
||||
const uint8_t* ppsData;
|
||||
size_t ppsLen;
|
||||
H264::Profile profile;
|
||||
};
|
||||
|
||||
// Video codec types
|
||||
|
||||
@ -15,6 +15,7 @@
|
||||
#include <string>
|
||||
|
||||
#include "webrtc/base/optional.h"
|
||||
#include "webrtc/common_types.h"
|
||||
|
||||
namespace webrtc {
|
||||
namespace H264 {
|
||||
@ -22,14 +23,6 @@ namespace H264 {
|
||||
// Map containting SDP codec parameters.
|
||||
typedef std::map<std::string, std::string> CodecParameterMap;
|
||||
|
||||
enum Profile {
|
||||
kProfileConstrainedBaseline,
|
||||
kProfileBaseline,
|
||||
kProfileMain,
|
||||
kProfileConstrainedHigh,
|
||||
kProfileHigh,
|
||||
};
|
||||
|
||||
// All values are equal to ten times the level number, except level 1b which is
|
||||
// special.
|
||||
enum Level {
|
||||
|
||||
@ -15,6 +15,7 @@
|
||||
#include <list>
|
||||
#include <vector>
|
||||
|
||||
#include "webrtc/common_types.h"
|
||||
#include "webrtc/modules/include/module_common_types.h"
|
||||
#include "webrtc/system_wrappers/include/clock.h"
|
||||
#include "webrtc/typedefs.h"
|
||||
@ -44,7 +45,9 @@ struct AudioPayload {
|
||||
};
|
||||
|
||||
struct VideoPayload {
|
||||
RtpVideoCodecTypes videoCodecType;
|
||||
RtpVideoCodecTypes videoCodecType;
|
||||
// The H264 profile only matters if videoCodecType == kRtpVideoH264.
|
||||
H264::Profile h264_profile;
|
||||
};
|
||||
|
||||
union PayloadUnion {
|
||||
|
||||
@ -37,7 +37,14 @@ bool PayloadIsCompatible(const RtpUtility::Payload& payload,
|
||||
|
||||
bool PayloadIsCompatible(const RtpUtility::Payload& payload,
|
||||
const VideoCodec& video_codec) {
|
||||
return !payload.audio && _stricmp(payload.name, video_codec.plName) == 0;
|
||||
if (payload.audio || _stricmp(payload.name, video_codec.plName) != 0)
|
||||
return false;
|
||||
// For H264, profiles must match as well.
|
||||
if (video_codec.codecType == kVideoCodecH264) {
|
||||
return video_codec.H264().profile ==
|
||||
payload.typeSpecific.Video.h264_profile;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
RtpUtility::Payload CreatePayloadType(const CodecInst& audio_codec) {
|
||||
@ -74,6 +81,8 @@ RtpUtility::Payload CreatePayloadType(const VideoCodec& video_codec) {
|
||||
strncpy(payload.name, video_codec.plName, RTP_PAYLOAD_NAME_SIZE - 1);
|
||||
payload.typeSpecific.Video.videoCodecType =
|
||||
ConvertToRtpVideoCodecType(video_codec.codecType);
|
||||
if (video_codec.codecType == kVideoCodecH264)
|
||||
payload.typeSpecific.Video.h264_profile = video_codec.H264().profile;
|
||||
payload.audio = false;
|
||||
return payload;
|
||||
}
|
||||
|
||||
@ -68,6 +68,7 @@ VideoCodecH264 VideoEncoder::GetDefaultH264Settings() {
|
||||
h264_settings.spsLen = 0;
|
||||
h264_settings.ppsData = nullptr;
|
||||
h264_settings.ppsLen = 0;
|
||||
h264_settings.profile = H264::kProfileConstrainedBaseline;
|
||||
|
||||
return h264_settings;
|
||||
}
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
#include "webrtc/base/checks.h"
|
||||
#include "webrtc/base/logging.h"
|
||||
#include "webrtc/base/optional.h"
|
||||
#include "webrtc/common_video/h264/profile_level_id.h"
|
||||
#include "webrtc/common_video/libyuv/include/webrtc_libyuv.h"
|
||||
#include "webrtc/modules/congestion_controller/include/congestion_controller.h"
|
||||
#include "webrtc/modules/utility/include/process_thread.h"
|
||||
@ -169,6 +170,8 @@ VideoCodec CreateDecoderVideoCodec(const VideoReceiveStream::Decoder& decoder) {
|
||||
*(codec.VP9()) = VideoEncoder::GetDefaultVp9Settings();
|
||||
} else if (codec.codecType == kVideoCodecH264) {
|
||||
*(codec.H264()) = VideoEncoder::GetDefaultH264Settings();
|
||||
codec.H264()->profile =
|
||||
H264::ParseSdpProfileLevelId(decoder.codec_params)->profile;
|
||||
}
|
||||
|
||||
codec.width = 320;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user