]> rtime.felk.cvut.cz Git - frescor/ffmpeg.git/blobdiff - libavformat/sdp.c
frsh: Export information about the last RTP contract and VRES
[frescor/ffmpeg.git] / libavformat / sdp.c
index 29090b19e56ccddecba5b0369c052fd5fa739ec1..67b10a21fec57ba64c017da06f05981dec51e53d 100644 (file)
@@ -116,9 +116,15 @@ static char *extradata2psets(AVCodecContext *c)
     r = ff_avc_find_startcode(c->extradata, c->extradata + c->extradata_size);
     while (r < c->extradata + c->extradata_size) {
         const uint8_t *r1;
+        uint8_t nal_type;
 
         while (!*(r++));
+        nal_type = *r & 0x1f;
         r1 = ff_avc_find_startcode(r, c->extradata + c->extradata_size);
+        if (nal_type != 7 && nal_type != 8) { /* Only output SPS and PPS */
+            r = r1;
+            continue;
+        }
         if (p != (psets + strlen(pset_string))) {
             *p = ',';
             p++;
@@ -171,6 +177,10 @@ static char *sdp_write_media_attributes(char *buff, int size, AVCodecContext *c,
                                      payload_type,
                                      payload_type, config ? config : "");
             break;
+        case CODEC_ID_H263:
+        case CODEC_ID_H263P:
+            av_strlcatf(buff, size, "a=rtpmap:%d H263-2000/90000\r\n", payload_type);
+            break;
         case CODEC_ID_MPEG4:
             if (c->extradata_size) {
                 config = extradata2config(c);
@@ -218,6 +228,18 @@ static char *sdp_write_media_attributes(char *buff, int size, AVCodecContext *c,
                                          payload_type,
                                          c->sample_rate, c->channels);
             break;
+        case CODEC_ID_AMR_NB:
+            av_strlcatf(buff, size, "a=rtpmap:%d AMR/%d/%d\r\n"
+                                    "a=fmtp:%d octet-align=1\r\n",
+                                     payload_type, c->sample_rate, c->channels,
+                                     payload_type);
+            break;
+        case CODEC_ID_AMR_WB:
+            av_strlcatf(buff, size, "a=rtpmap:%d AMR-WB/%d/%d\r\n"
+                                    "a=fmtp:%d octet-align=1\r\n",
+                                     payload_type, c->sample_rate, c->channels,
+                                     payload_type);
+            break;
         default:
             /* Nothing special to do here... */
             break;
@@ -233,7 +255,7 @@ static void sdp_write_media(char *buff, int size, AVCodecContext *c, const char
     const char *type;
     int payload_type;
 
-    payload_type = rtp_get_payload_type(c);
+    payload_type = ff_rtp_get_payload_type(c);
     if (payload_type < 0) {
         payload_type = 96;  /* FIXME: how to assign a private pt? rtp.c is broken too */
     }