Pass explicit frame dependency information to RtpPayloadParams
Prior to this CL, RtpPayloadParams had code that assumed dependency patterns in VP8, in order to write that information into the [Generic Frame Descriptor] RTP extension. This CL starts moving that code out of RtpPayloadParams. Upcoming CLs will migrate additional encoder-wrappers to the new scheme, then remove the deprecated code. Bug: webrtc:10249 Change-Id: I5fc84aedf8e11f79d52b989ff8b7ce9568b6cf32 Reviewed-on: https://webrtc-review.googlesource.com/c/119958 Reviewed-by: Stefan Holmer <stefan@webrtc.org> Reviewed-by: Sergey Silkin <ssilkin@webrtc.org> Reviewed-by: Erik Språng <sprang@webrtc.org> Commit-Queue: Elad Alon <eladalon@webrtc.org> Cr-Commit-Position: refs/heads/master@{#26438}
This commit is contained in:
@ -24,15 +24,33 @@ namespace webrtc {
|
||||
|
||||
class RTPFragmentationHeader; // forward declaration
|
||||
|
||||
// Note: if any pointers are added to this struct, it must be fitted
|
||||
// Note: If any pointers are added to this struct, it must be fitted
|
||||
// with a copy-constructor. See below.
|
||||
// Hack alert - the code assumes that thisstruct is memset when constructed.
|
||||
struct CodecSpecificInfoVP8 {
|
||||
bool nonReference;
|
||||
uint8_t temporalIdx;
|
||||
bool layerSync;
|
||||
int8_t keyIdx; // Negative value to skip keyIdx.
|
||||
};
|
||||
|
||||
// Used to generate the list of dependency frames.
|
||||
// |referencedBuffers| and |updatedBuffers| contain buffer IDs.
|
||||
// Note that the buffer IDs here have a one-to-one mapping with the actual
|
||||
// codec buffers, but the exact mapping (i.e. whether 0 refers to Last,
|
||||
// to Golden or to Arf) is not pre-determined.
|
||||
// More references may be specified than are strictly necessary, but not less.
|
||||
// TODO(bugs.webrtc.org/10242): Remove |useExplicitDependencies| once all
|
||||
// encoder-wrappers are updated.
|
||||
bool useExplicitDependencies;
|
||||
static constexpr size_t kBuffersCount = 3;
|
||||
size_t referencedBuffers[kBuffersCount];
|
||||
size_t referencedBuffersCount;
|
||||
size_t updatedBuffers[kBuffersCount];
|
||||
size_t updatedBuffersCount;
|
||||
};
|
||||
static_assert(std::is_pod<CodecSpecificInfoVP8>::value, "");
|
||||
|
||||
// Hack alert - the code assumes that thisstruct is memset when constructed.
|
||||
struct CodecSpecificInfoVP9 {
|
||||
bool first_frame_in_picture; // First frame, increment picture_id.
|
||||
bool inter_pic_predicted; // This layer frame is dependent on previously
|
||||
@ -60,18 +78,22 @@ struct CodecSpecificInfoVP9 {
|
||||
|
||||
bool end_of_picture;
|
||||
};
|
||||
static_assert(std::is_pod<CodecSpecificInfoVP9>::value, "");
|
||||
|
||||
// Hack alert - the code assumes that thisstruct is memset when constructed.
|
||||
struct CodecSpecificInfoH264 {
|
||||
H264PacketizationMode packetization_mode;
|
||||
};
|
||||
static_assert(std::is_pod<CodecSpecificInfoH264>::value, "");
|
||||
|
||||
union CodecSpecificInfoUnion {
|
||||
CodecSpecificInfoVP8 VP8;
|
||||
CodecSpecificInfoVP9 VP9;
|
||||
CodecSpecificInfoH264 H264;
|
||||
};
|
||||
static_assert(std::is_pod<CodecSpecificInfoUnion>::value, "");
|
||||
|
||||
// Note: if any pointers are added to this struct or its sub-structs, it
|
||||
// Note: If any pointers are added to this struct or its sub-structs, it
|
||||
// must be fitted with a copy-constructor. This is because it is copied
|
||||
// in the copy-constructor of VCMEncodedFrame.
|
||||
struct CodecSpecificInfo {
|
||||
|
Reference in New Issue
Block a user