diff rtpenc.c @ 4836:bf87d9ffb3ae libavformat

Add support for AMR audio in the RTP muxer patch by Martin Storsj (martin AT martin DOT st)
author lucabe
date Wed, 08 Apr 2009 07:16:14 +0000
parents 730b214077ca
children 304a0ea063f0
line wrap: on
line diff
--- a/rtpenc.c	Wed Apr 08 03:38:59 2009 +0000
+++ b/rtpenc.c	Wed Apr 08 07:16:14 2009 +0000
@@ -60,6 +60,8 @@
     case CODEC_ID_PCM_U16LE:
     case CODEC_ID_PCM_U8:
     case CODEC_ID_MPEG2TS:
+    case CODEC_ID_AMR_NB:
+    case CODEC_ID_AMR_WB:
         return 1;
     default:
         return 0;
@@ -134,6 +136,23 @@
         s->max_payload_size = n * TS_PACKET_SIZE;
         s->buf_ptr = s->buf;
         break;
+    case CODEC_ID_AMR_NB:
+    case CODEC_ID_AMR_WB:
+        if (!s->max_frames_per_packet)
+            s->max_frames_per_packet = 12;
+        if (st->codec->codec_id == CODEC_ID_AMR_NB)
+            n = 31;
+        else
+            n = 61;
+        /* max_header_toc_size + the largest AMR payload must fit */
+        if (1 + s->max_frames_per_packet + n > s->max_payload_size) {
+            av_log(s1, AV_LOG_ERROR, "RTP max payload size too small for AMR\n");
+            return -1;
+        }
+        if (st->codec->channels != 1) {
+            av_log(s1, AV_LOG_ERROR, "Only mono is supported\n");
+            return -1;
+        }
     case CODEC_ID_AAC:
         s->num_frames = 0;
     default:
@@ -366,6 +385,10 @@
     case CODEC_ID_AAC:
         ff_rtp_send_aac(s1, buf1, size);
         break;
+    case CODEC_ID_AMR_NB:
+    case CODEC_ID_AMR_WB:
+        ff_rtp_send_amr(s1, buf1, size);
+        break;
     case CODEC_ID_MPEG2TS:
         rtp_send_mpegts_raw(s1, buf1, size);
         break;