Merge commit '5956f489d0452ff6dea6b6b81b4fa8e596fc5684'
authorMichael Niedermayer <michaelni@gmx.at>
Tue, 24 Feb 2015 21:55:51 +0000 (22:55 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Tue, 24 Feb 2015 21:55:55 +0000 (22:55 +0100)
* commit '5956f489d0452ff6dea6b6b81b4fa8e596fc5684':
  rtpdec_hevc: Add asterisks at the start of each long comment line

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavformat/rtpdec_hevc.c

@@@ -2,39 -2,36 +2,39 @@@
   * RTP parser for HEVC/H.265 payload format (draft version 6)
   * Copyright (c) 2014 Thomas Volkert <thomas@homer-conferencing.com>
   *
 - * This file is part of Libav.
 + * This file is part of FFmpeg.
   *
 - * Libav is free software; you can redistribute it and/or
 + * 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.
   *
 - * Libav is distributed in the hope that it will be useful,
 + * 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 Libav; if not, write to the Free Software
 + * License along with FFmpeg; if not, write to the Free Software
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
   *
   */
  
 +#include "libavutil/avassert.h"
  #include "libavutil/avstring.h"
  #include "libavutil/base64.h"
 +#include "libavcodec/get_bits.h"
  
  #include "avformat.h"
  #include "rtpdec.h"
  #include "rtpdec_formats.h"
  
 -#define RTP_HEVC_PAYLOAD_HEADER_SIZE  2
 -#define RTP_HEVC_FU_HEADER_SIZE       1
 -#define RTP_HEVC_DONL_FIELD_SIZE      2
 -#define RTP_HEVC_DOND_FIELD_SIZE      1
 -#define HEVC_SPECIFIED_NAL_UNIT_TYPES 48
 +#define RTP_HEVC_PAYLOAD_HEADER_SIZE       2
 +#define RTP_HEVC_FU_HEADER_SIZE            1
 +#define RTP_HEVC_DONL_FIELD_SIZE           2
 +#define RTP_HEVC_DOND_FIELD_SIZE           1
 +#define RTP_HEVC_AP_NALU_LENGTH_FIELD_SIZE 2
 +#define HEVC_SPECIFIED_NAL_UNIT_TYPES      48
  
  /* SDP out-of-band signaling data */
  struct PayloadContext {
@@@ -86,8 -83,7 +86,8 @@@ static av_cold int hevc_sdp_parse_fmtp_
          } else if (!strcmp(attr, "sprop-sei")) {
              data_ptr = &hevc_data->sei;
              size_ptr = &hevc_data->sei_size;
 -        }
 +        } else
 +            av_assert0(0);
  
          ff_h264_parse_sprop_parameter_sets(s, data_ptr,
                                             size_ptr, value);
@@@ -228,19 -224,19 +228,19 @@@ static int hevc_handle_packet(AVFormatC
      }
  
      /*
-       decode the HEVC payload header according to section 4 of draft version 6:
-          0                   1
-          0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
-         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-         |F|   Type    |  LayerId  | TID |
-         +-------------+-----------------+
-            Forbidden zero (F): 1 bit
-            NAL unit type (Type): 6 bits
-            NUH layer ID (LayerId): 6 bits
-            NUH temporal ID plus 1 (TID): 3 bits
-     */
+      * decode the HEVC payload header according to section 4 of draft version 6:
+      *
+      *    0                   1
+      *    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+      *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      *   |F|   Type    |  LayerId  | TID |
+      *   +-------------+-----------------+
+      *
+      *      Forbidden zero (F): 1 bit
+      *      NAL unit type (Type): 6 bits
+      *      NUH layer ID (LayerId): 6 bits
+      *      NUH temporal ID plus 1 (TID): 3 bits
+      */
      nal_type =  (buf[0] >> 1) & 0x3f;
      lid  = ((buf[0] << 5) & 0x20) | ((buf[1] >> 3) & 0x1f);
      tid  =   buf[1] & 0x07;
              len -= RTP_HEVC_DONL_FIELD_SIZE;
          }
  
 -        res = ff_h264_handle_aggregated_packet(ctx, pkt, buf, len,
 +        res = ff_h264_handle_aggregated_packet(ctx, rtp_hevc_ctx, pkt, buf, len,
                                                 rtp_hevc_ctx->using_donl_field ?
                                                 RTP_HEVC_DOND_FIELD_SIZE : 0,
                                                 NULL, 0);
          len -= RTP_HEVC_PAYLOAD_HEADER_SIZE;
  
          /*
-              decode the FU header
-               0 1 2 3 4 5 6 7
-              +-+-+-+-+-+-+-+-+
-              |S|E|  FuType   |
-              +---------------+
-                 Start fragment (S): 1 bit
-                 End fragment (E): 1 bit
-                 FuType: 6 bits
-         */
+          *    decode the FU header
+          *
+          *     0 1 2 3 4 5 6 7
+          *    +-+-+-+-+-+-+-+-+
+          *    |S|E|  FuType   |
+          *    +---------------+
+          *
+          *       Start fragment (S): 1 bit
+          *       End fragment (E): 1 bit
+          *       FuType: 6 bits
+          */
          first_fragment = buf[0] & 0x80;
          last_fragment  = buf[0] & 0x40;
          fu_type        = buf[0] & 0x3f;
  
          av_dlog(ctx, " FU type %d with %d bytes\n", fu_type, len);
  
 +        /* sanity check for size of input packet: 1 byte payload at least */
          if (len > 0) {
              new_nal_header[0] = (rtp_pl[0] & 0x81) | (fu_type << 1);
              new_nal_header[1] = rtp_pl[1];
                  memcpy(pkt->data, buf, len);
              }
          } else {
 -            /* sanity check for size of input packet: 1 byte payload at least */
 -            av_log(ctx, AV_LOG_ERROR,
 -                   "Too short RTP/HEVC packet, got %d bytes of NAL unit type %d\n",
 -                   len, nal_type);
 -            res = AVERROR_INVALIDDATA;
 +            if (len < 0) {
 +                av_log(ctx, AV_LOG_ERROR,
 +                       "Too short RTP/HEVC packet, got %d bytes of NAL unit type %d\n",
 +                       len, nal_type);
 +                res = AVERROR_INVALIDDATA;
 +            } else {
 +                res = AVERROR(EAGAIN);
 +            }
          }
  
          break;