Merge commit '3b18857ab301d2a0b3e86e9d85eed76f0798a29c'
authorMichael Niedermayer <michaelni@gmx.at>
Sun, 1 Jun 2014 21:56:17 +0000 (23:56 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Sun, 1 Jun 2014 21:56:22 +0000 (23:56 +0200)
* commit '3b18857ab301d2a0b3e86e9d85eed76f0798a29c':
  rtmppkt: Add method to read an AMF string that is not prefixed by its type

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

diff --combined libavformat/rtmppkt.c
@@@ -2,20 -2,20 +2,20 @@@
   * RTMP input format
   * Copyright (c) 2009 Konstantin Shishkov
   *
 - * 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
   */
  
@@@ -102,13 -102,11 +102,11 @@@ int ff_amf_read_number(GetByteContext *
      return 0;
  }
  
- int ff_amf_read_string(GetByteContext *bc, uint8_t *str,
-                        int strsize, int *length)
+ int ff_amf_get_string(GetByteContext *bc, uint8_t *str,
+                       int strsize, int *length)
  {
      int stringlen = 0;
      int readsize;
-     if (bytestream2_get_byte(bc) != AMF_DATA_TYPE_STRING)
-         return AVERROR_INVALIDDATA;
      stringlen = bytestream2_get_be16(bc);
      if (stringlen + 1 > strsize)
          return AVERROR(EINVAL);
      return 0;
  }
  
+ int ff_amf_read_string(GetByteContext *bc, uint8_t *str,
+                        int strsize, int *length)
+ {
+     if (bytestream2_get_byte(bc) != AMF_DATA_TYPE_STRING)
+         return AVERROR_INVALIDDATA;
+     return ff_amf_get_string(bc, str, strsize, length);
+ }
  int ff_amf_read_null(GetByteContext *bc)
  {
      if (bytestream2_get_byte(bc) != AMF_DATA_TYPE_NULL)
@@@ -273,7 -279,6 +279,7 @@@ static int rtmp_packet_read_one_chunk(U
         prev->data = p->data;
         prev->read = p->read;
         prev->offset = p->offset;
 +       p->data      = NULL;
         return AVERROR(EAGAIN);
      }
  
diff --combined libavformat/rtmppkt.h
@@@ -2,20 -2,20 +2,20 @@@
   * RTMP packet utilities
   * Copyright (c) 2009 Konstantin Shishkov
   *
 - * 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
   */
  
@@@ -277,6 -277,23 +277,23 @@@ int ff_amf_read_bool(GetByteContext *gb
  */
  int ff_amf_read_number(GetByteContext *gbc, double *val);
  
+ /**
+  * Get AMF string value.
+  *
+  * This function behaves the same as ff_amf_read_string except that
+  * it does not expect the AMF type prepended to the actual data.
+  * Appends a trailing null byte to output string in order to
+  * ease later parsing.
+  *
+  *@param[in,out] gbc     GetByteContext initialized with AMF-formatted data
+  *@param[out]    str     read string
+  *@param[in]     strsize buffer size available to store the read string
+  *@param[out]    length  read string length
+  *@return 0 on success or an AVERROR code on failure
+ */
+ int ff_amf_get_string(GetByteContext *bc, uint8_t *str,
+                       int strsize, int *length);
  /**
   * Read AMF string value.
   *