Mercurial > libavformat.hg
comparison rtpenc.c @ 6349:93c7a56fa912 libavformat
Add RTP packetization of Theora and Vorbis
Patch by Josh Allmann, joshua dot allmann at gmail
author | mstorsjo |
---|---|
date | Sat, 07 Aug 2010 11:16:07 +0000 |
parents | 956f2e2cd288 |
children | 0bcd6a8bc5d5 |
comparison
equal
deleted
inserted
replaced
6348:c709176da1ad | 6349:93c7a56fa912 |
---|---|
51 case CODEC_ID_PCM_U16LE: | 51 case CODEC_ID_PCM_U16LE: |
52 case CODEC_ID_PCM_U8: | 52 case CODEC_ID_PCM_U8: |
53 case CODEC_ID_MPEG2TS: | 53 case CODEC_ID_MPEG2TS: |
54 case CODEC_ID_AMR_NB: | 54 case CODEC_ID_AMR_NB: |
55 case CODEC_ID_AMR_WB: | 55 case CODEC_ID_AMR_WB: |
56 case CODEC_ID_VORBIS: | |
57 case CODEC_ID_THEORA: | |
56 return 1; | 58 return 1; |
57 default: | 59 default: |
58 return 0; | 60 return 0; |
59 } | 61 } |
60 } | 62 } |
133 /* check for H.264 MP4 syntax */ | 135 /* check for H.264 MP4 syntax */ |
134 if (st->codec->extradata_size > 4 && st->codec->extradata[0] == 1) { | 136 if (st->codec->extradata_size > 4 && st->codec->extradata[0] == 1) { |
135 s->nal_length_size = (st->codec->extradata[4] & 0x03) + 1; | 137 s->nal_length_size = (st->codec->extradata[4] & 0x03) + 1; |
136 } | 138 } |
137 break; | 139 break; |
140 case CODEC_ID_VORBIS: | |
141 case CODEC_ID_THEORA: | |
142 if (!s->max_frames_per_packet) s->max_frames_per_packet = 15; | |
143 s->max_frames_per_packet = av_clip(s->max_frames_per_packet, 1, 15); | |
144 s->max_payload_size -= 6; // ident+frag+tdt/vdt+pkt_num+pkt_length | |
145 s->num_frames = 0; | |
146 goto defaultcase; | |
138 case CODEC_ID_AMR_NB: | 147 case CODEC_ID_AMR_NB: |
139 case CODEC_ID_AMR_WB: | 148 case CODEC_ID_AMR_WB: |
140 if (!s->max_frames_per_packet) | 149 if (!s->max_frames_per_packet) |
141 s->max_frames_per_packet = 12; | 150 s->max_frames_per_packet = 12; |
142 if (st->codec->codec_id == CODEC_ID_AMR_NB) | 151 if (st->codec->codec_id == CODEC_ID_AMR_NB) |
153 return -1; | 162 return -1; |
154 } | 163 } |
155 case CODEC_ID_AAC: | 164 case CODEC_ID_AAC: |
156 s->num_frames = 0; | 165 s->num_frames = 0; |
157 default: | 166 default: |
167 defaultcase: | |
158 if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) { | 168 if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) { |
159 av_set_pts_info(st, 32, 1, st->codec->sample_rate); | 169 av_set_pts_info(st, 32, 1, st->codec->sample_rate); |
160 } | 170 } |
161 s->buf_ptr = s->buf; | 171 s->buf_ptr = s->buf; |
162 break; | 172 break; |
391 break; | 401 break; |
392 case CODEC_ID_H263: | 402 case CODEC_ID_H263: |
393 case CODEC_ID_H263P: | 403 case CODEC_ID_H263P: |
394 ff_rtp_send_h263(s1, pkt->data, size); | 404 ff_rtp_send_h263(s1, pkt->data, size); |
395 break; | 405 break; |
406 case CODEC_ID_VORBIS: | |
407 case CODEC_ID_THEORA: | |
408 ff_rtp_send_xiph(s1, pkt->data, size); | |
409 break; | |
396 default: | 410 default: |
397 /* better than nothing : send the codec raw data */ | 411 /* better than nothing : send the codec raw data */ |
398 rtp_send_raw(s1, pkt->data, size); | 412 rtp_send_raw(s1, pkt->data, size); |
399 break; | 413 break; |
400 } | 414 } |