Backport fix for mpegvideo rtp, fixes Issue119, original fix from Dario Gallucci <dariodotgallucciatpolito.it> in feng

Originally committed as revision 10257 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Luca Barbato 2007-08-28 13:43:39 +00:00
parent 55bf7fb613
commit f6df400c0c
1 changed files with 16 additions and 9 deletions

View File

@ -28,32 +28,39 @@ void ff_rtp_send_mpegvideo(AVFormatContext *s1, const uint8_t *buf1, int size)
RTPDemuxContext *s = s1->priv_data; RTPDemuxContext *s = s1->priv_data;
AVStream *st = s1->streams[0]; AVStream *st = s1->streams[0];
int len, h, max_packet_size; int len, h, max_packet_size;
int b=1, e=0;
uint8_t *q; uint8_t *q;
max_packet_size = s->max_payload_size; max_packet_size = s->max_payload_size;
while (size > 0) { while (size > 0) {
/* XXX: more correct headers */ len = max_packet_size - 4;
if (len >= size) {
len = size;
e = 1;
}
h = 0; h = 0;
if (st->codec->sub_id == 2) h |= b << 12;
h |= 1 << 26; /* mpeg 2 indicator */ h |= e << 11;
// if (st->codec->sub_id == 2)
// h |= 1 << 26; /* mpeg 2 indicator */
q = s->buf; q = s->buf;
*q++ = h >> 24; *q++ = h >> 24;
*q++ = h >> 16; *q++ = h >> 16;
*q++ = h >> 8; *q++ = h >> 8;
*q++ = h; *q++ = h;
if (st->codec->sub_id == 2) { /* if (st->codec->sub_id == 2) {
h = 0; h = 0;
*q++ = h >> 24; *q++ = h >> 24;
*q++ = h >> 16; *q++ = h >> 16;
*q++ = h >> 8; *q++ = h >> 8;
*q++ = h; *q++ = h;
} } */
len = max_packet_size - (q - s->buf);
if (len > size)
len = size;
memcpy(q, buf1, len); memcpy(q, buf1, len);
q += len; q += len;