diff options
author | stefan@webrtc.org <stefan@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2014-07-31 14:59:24 +0000 |
---|---|---|
committer | stefan@webrtc.org <stefan@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2014-07-31 14:59:24 +0000 |
commit | 2ec560606be6519dc4e32a1e6855b0f362ca498d (patch) | |
tree | 1514bac7209592adb9d466a81135cc964aed3b3f /webrtc/modules/video_coding/main/source/packet.cc | |
parent | bfe6e081952540bd74b62627a3b910208e33c490 (diff) | |
download | webrtc-2ec560606be6519dc4e32a1e6855b0f362ca498d.tar.gz |
Add H.264 packetization.
This also includes:
- Creating new packetizer and depacketizer interfaces.
- Moved VP8 packetization was H264 packetization and depacketization to these interfaces. This is a work in progress and should be continued to get this 100% generic. This also required changing the return type for RtpFormatVp8::NextPacket(), which now returns bool instead of the index of the first partition.
- Created a Create() factory method for packetizers and depacketizers.
R=niklas.enbom@webrtc.org, pbos@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/21009004
git-svn-id: http://webrtc.googlecode.com/svn/trunk@6804 4adac7df-926f-26a2-2b94-8c16560cd09d
Diffstat (limited to 'webrtc/modules/video_coding/main/source/packet.cc')
-rw-r--r-- | webrtc/modules/video_coding/main/source/packet.cc | 65 |
1 files changed, 38 insertions, 27 deletions
diff --git a/webrtc/modules/video_coding/main/source/packet.cc b/webrtc/modules/video_coding/main/source/packet.cc index c1f1a048e8..63dcd636dd 100644 --- a/webrtc/modules/video_coding/main/source/packet.cc +++ b/webrtc/modules/video_coding/main/source/packet.cc @@ -94,33 +94,44 @@ void VCMPacket::Reset() { memset(&codecSpecificHeader, 0, sizeof(RTPVideoHeader)); } -void VCMPacket::CopyCodecSpecifics(const RTPVideoHeader& videoHeader) -{ - switch(videoHeader.codec) - { - case kRtpVideoVp8: - { - // Handle all packets within a frame as depending on the previous packet - // TODO(holmer): This should be changed to make fragments independent - // when the VP8 RTP receiver supports fragments. - if (isFirstPacket && markerBit) - completeNALU = kNaluComplete; - else if (isFirstPacket) - completeNALU = kNaluStart; - else if (markerBit) - completeNALU = kNaluEnd; - else - completeNALU = kNaluIncomplete; +void VCMPacket::CopyCodecSpecifics(const RTPVideoHeader& videoHeader) { + switch (videoHeader.codec) { + case kRtpVideoVp8: + // Handle all packets within a frame as depending on the previous packet + // TODO(holmer): This should be changed to make fragments independent + // when the VP8 RTP receiver supports fragments. + if (isFirstPacket && markerBit) + completeNALU = kNaluComplete; + else if (isFirstPacket) + completeNALU = kNaluStart; + else if (markerBit) + completeNALU = kNaluEnd; + else + completeNALU = kNaluIncomplete; - codec = kVideoCodecVP8; - break; - } - default: - { - codec = kVideoCodecUnknown; - break; - } - } -} + codec = kVideoCodecVP8; + return; + case kRtpVideoH264: + isFirstPacket = videoHeader.isFirstPacket; + if (isFirstPacket) + insertStartCode = true; + if (videoHeader.codecHeader.H264.single_nalu) { + completeNALU = kNaluComplete; + } else if (isFirstPacket) { + completeNALU = kNaluStart; + } else if (markerBit) { + completeNALU = kNaluEnd; + } else { + completeNALU = kNaluIncomplete; + } + codec = kVideoCodecH264; + return; + case kRtpVideoGeneric: + case kRtpVideoNone: + codec = kVideoCodecUnknown; + return; + } } + +} // namespace webrtc |