Merge commit 'c6f1dc8e4cd967ae056698eafb891a08003c211c'
authorMichael Niedermayer <michaelni@gmx.at>
Mon, 21 Jan 2013 13:00:03 +0000 (14:00 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Mon, 21 Jan 2013 13:02:01 +0000 (14:02 +0100)
* commit 'c6f1dc8e4cd967ae056698eafb891a08003c211c':
  rtpdec: Move setting the parsing flags to the actual depacketizers
  rtpdec: Split handling of mpeg12 audio/video to a separate depacketizer

Conflicts:
libavformat/rtpdec.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavformat/Makefile
libavformat/rtpdec.c
libavformat/rtpdec_formats.h
libavformat/rtpdec_h263.c
libavformat/rtpdec_h264.c
libavformat/rtpdec_mpeg12.c
libavformat/rtpdec_mpeg4.c
libavformat/rtpdec_xiph.c

Simple merge
@@@ -589,6 -579,6 +579,7 @@@ static int rtp_parse_packet_internal(RT
      AVStream *st;
      uint32_t timestamp;
      int rv = 0;
++    int h;
  
      ext          = buf[0] & 0x10;
      payload_type = buf[1] & 0x7f;
      } else if (st) {
          /* At this point, the RTP header has been stripped;
           * This is ASSUMING that there is only 1 CSRC, which isn't wise. */
-         switch (st->codec->codec_id) {
-         case AV_CODEC_ID_MP2:
-         case AV_CODEC_ID_MP3:
-             /* better than nothing: skip MPEG audio RTP header */
-             if (len <= 4)
-                 return -1;
-             h    = AV_RB32(buf);
-             len -= 4;
-             buf += 4;
-             if (av_new_packet(pkt, len) < 0)
-                 return AVERROR(ENOMEM);
-             memcpy(pkt->data, buf, len);
-             break;
-         case AV_CODEC_ID_MPEG1VIDEO:
-         case AV_CODEC_ID_MPEG2VIDEO:
-             /* better than nothing: skip MPEG video RTP header */
-             if (len <= 4)
-                 return -1;
-             h    = AV_RB32(buf);
-             buf += 4;
-             len -= 4;
-             if (h & (1 << 26)) {
-                 /* MPEG-2 */
-                 if (len <= 4)
-                     return -1;
-                 buf += 4;
-                 len -= 4;
-             }
-             if (av_new_packet(pkt, len) < 0)
-                 return AVERROR(ENOMEM);
-             memcpy(pkt->data, buf, len);
-             break;
-         default:
-             if (av_new_packet(pkt, len) < 0)
-                 return AVERROR(ENOMEM);
-             memcpy(pkt->data, buf, len);
-             break;
-         }
 -        av_new_packet(pkt, len);
++        if (av_new_packet(pkt, len) < 0)
++            return AVERROR(ENOMEM);
+         memcpy(pkt->data, buf, len);
          pkt->stream_index = st->index;
      } else {
          return AVERROR(EINVAL);
Simple merge
Simple merge
Simple merge
index 0000000,4dd98fb..82e58a0
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,72 +1,72 @@@
 - * This file is part of Libav.
+ /*
+  * Common code for the RTP depacketization of MPEG-1/2 formats.
+  * Copyright (c) 2002 Fabrice Bellard
+  *
 - * Libav is free software; you can redistribute it and/or
++ * This file is part of FFmpeg.
+  *
 - * Libav is distributed in the hope that it will be useful,
++ * FFmpeg is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU Lesser General Public
+  * License as published by the Free Software Foundation; either
+  * version 2.1 of the License, or (at your option) any later version.
+  *
 - * License along with Libav; if not, write to the Free Software
++ * FFmpeg is distributed in the hope that it will be useful,
+  * but WITHOUT ANY WARRANTY; without even the implied warranty of
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  * Lesser General Public License for more details.
+  *
+  * You should have received a copy of the GNU Lesser General Public
++ * License along with FFmpeg; if not, write to the Free Software
+  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+  */
+ #include "rtpdec_formats.h"
+ #include "libavutil/intreadwrite.h"
+ static int mpeg_init(AVFormatContext *ctx, int st_index, PayloadContext *data)
+ {
+     if (st_index < 0)
+         return 0;
+     ctx->streams[st_index]->need_parsing = AVSTREAM_PARSE_FULL;
+     return 0;
+ }
+ static int mpeg_parse_packet(AVFormatContext *ctx, PayloadContext *data,
+                              AVStream *st, AVPacket *pkt, uint32_t *timestamp,
+                              const uint8_t *buf, int len, uint16_t seq,
+                              int flags)
+ {
+     unsigned int h;
+     if (len <= 4)
+         return AVERROR_INVALIDDATA;
+     h    = AV_RB32(buf);
+     buf += 4;
+     len -= 4;
+     if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO && h & (1 << 26)) {
+         /* MPEG-2 */
+         if (len <= 4)
+             return AVERROR_INVALIDDATA;
+         buf += 4;
+         len -= 4;
+     }
+     if (av_new_packet(pkt, len) < 0)
+         return AVERROR(ENOMEM);
+     memcpy(pkt->data, buf, len);
+     pkt->stream_index = st->index;
+     return 0;
+ }
+ RTPDynamicProtocolHandler ff_mpeg_audio_dynamic_handler = {
+     .codec_type        = AVMEDIA_TYPE_AUDIO,
+     .codec_id          = AV_CODEC_ID_MP3,
+     .init              = mpeg_init,
+     .parse_packet      = mpeg_parse_packet,
+     .static_payload_id = 14,
+ };
+ RTPDynamicProtocolHandler ff_mpeg_video_dynamic_handler = {
+     .codec_type        = AVMEDIA_TYPE_VIDEO,
+     .codec_id          = AV_CODEC_ID_MPEG2VIDEO,
+     .init              = mpeg_init,
+     .parse_packet      = mpeg_parse_packet,
+     .static_payload_id = 32,
+ };
Simple merge
Simple merge