diff rtpenc.c @ 6476:f06908662125 libavformat

Handle G.722 in RTP, and all the exceptions mandated in RFC 3551
author mstorsjo
date Wed, 15 Sep 2010 17:35:39 +0000
parents 37944ce385a0
children
line wrap: on
line diff
--- a/rtpenc.c	Tue Sep 14 22:20:46 2010 +0000
+++ b/rtpenc.c	Wed Sep 15 17:35:39 2010 +0000
@@ -56,6 +56,7 @@
     case CODEC_ID_VORBIS:
     case CODEC_ID_THEORA:
     case CODEC_ID_VP8:
+    case CODEC_ID_ADPCM_G722:
         return 1;
     default:
         return 0;
@@ -148,6 +149,11 @@
     case CODEC_ID_VP8:
         av_log(s1, AV_LOG_WARNING, "RTP VP8 payload is still experimental\n");
         break;
+    case CODEC_ID_ADPCM_G722:
+        /* Due to a historical error, the clock rate for G722 in RTP is
+         * 8000, even if the sample rate is 16000. See RFC 3551. */
+        av_set_pts_info(st, 32, 1, 8000);
+        break;
     case CODEC_ID_AMR_NB:
     case CODEC_ID_AMR_WB:
         if (!s->max_frames_per_packet)
@@ -382,6 +388,12 @@
     case CODEC_ID_PCM_S16LE:
         rtp_send_samples(s1, pkt->data, size, 2 * st->codec->channels);
         break;
+    case CODEC_ID_ADPCM_G722:
+        /* The actual sample size is half a byte per sample, but since the
+         * stream clock rate is 8000 Hz while the sample rate is 16000 Hz,
+         * the correct parameter for send_samples is 1 byte per stream clock. */
+        rtp_send_samples(s1, pkt->data, size, 1 * st->codec->channels);
+        break;
     case CODEC_ID_MP2:
     case CODEC_ID_MP3:
         rtp_send_mpegaudio(s1, pkt->data, size);