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
diff --git a/webrtc/modules/video_coding/main/source/packet.cc b/webrtc/modules/video_coding/main/source/packet.cc
index c1f1a04..63dcd63 100644
--- a/webrtc/modules/video_coding/main/source/packet.cc
+++ b/webrtc/modules/video_coding/main/source/packet.cc
@@ -94,33 +94,44 @@
   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