[bTSstream-devel] [Git][videolan/bitstream][master] 4 commits: rtp: add support for padding

Massiot gitlab at videolan.org
Thu Jun 1 00:01:55 CEST 2017


Massiot pushed to branch master at videolan / bitstream


Commits:
0a31c355 by Christophe Massiot at 2017-05-31T23:56:02+02:00
rtp: add support for padding

- - - - -
bbb3bb3b by Christophe Massiot at 2017-05-31T23:56:31+02:00
rtp3551: add dynamic types

- - - - -
25ed3470 by Christophe Massiot at 2017-05-31T23:57:07+02:00
rtp6184: parse special NAL types

- - - - -
fe4e1b89 by Christophe Massiot at 2017-06-01T00:00:40+02:00
h264: add write functions for NAL header

- - - - -


5 changed files:

- NEWS
- ietf/rtp.h
- ietf/rtp3551.h
- ietf/rtp6184.h
- mpeg/h264.h


Changes:

=====================================
NEWS
=====================================
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,10 @@
+1.3
+===
+ - Add support for avcC and hvcC structures
+ - Add support for LOAS AAC
+ - Improve support for RTP
+ - Use ISO 6937 as default DVB charset
+
 1.2 (31 Jan 2017)
 =================
  - Add partial support for ITU-T H.265


=====================================
ietf/rtp.h
=====================================
--- a/ietf/rtp.h
+++ b/ietf/rtp.h
@@ -71,6 +71,16 @@ static inline bool rtp_check_hdr(const uint8_t *p_rtp)
     return (p_rtp[0] & 0xc0) == 0x80;
 }
 
+static inline void rtp_set_padding(uint8_t *p_rtp)
+{
+    p_rtp[0] |= 0x20;
+}
+
+static inline bool rtp_check_padding(const uint8_t *p_rtp)
+{
+    return !!(p_rtp[0] & 0x20);
+}
+
 static inline void rtp_set_extension(uint8_t *p_rtp)
 {
     p_rtp[0] |= 0x10;
@@ -193,6 +203,16 @@ static inline uint8_t *rtp_payload(uint8_t *p_rtp)
     return p_rtp + i_size;
 }
 
+static inline size_t rtp_payload_size(uint8_t *p_rtp, size_t i_rtp_size)
+{
+    size_t i_payload_size = i_rtp_size - (rtp_payload(p_rtp) - p_rtp);
+    uint8_t i_padding_size = 0;
+    if (rtp_check_padding(p_rtp))
+        i_padding_size = p_rtp[i_rtp_size - 1];
+
+    return i_payload_size - i_padding_size;
+}
+
 #ifdef __cplusplus
 }
 #endif


=====================================
ietf/rtp3551.h
=====================================
--- a/ietf/rtp3551.h
+++ b/ietf/rtp3551.h
@@ -80,7 +80,8 @@ extern "C"
 /* Unassigned                   35-71 */
 /* Reserved                     72-76 */
 /* Unassigned                   77-95 */
-/* Dynamic                      96-127 */
+#define RTP_TYPE_DYNAMIC_FIRST  96
+#define RTP_TYPE_DYNAMIC_LAST   127
 
 static inline uint32_t rtp_3551_get_clock_rate(uint8_t i_type)
 {


=====================================
ietf/rtp6184.h
=====================================
--- a/ietf/rtp6184.h
+++ b/ietf/rtp6184.h
@@ -1,9 +1,89 @@
+/*****************************************************************************
+ * rtp6184.h: RTP Payload Format for H.264 Video
+ *****************************************************************************
+ * Copyright (c) 2015 Arnaud de Turckheim <quarium at gmail.com>
+ * Copyright (C) 2017 VideoLAN
+ *
+ * Authors: Arnaud de Turckheim
+ *          Christophe Massiot
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject
+ * to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *****************************************************************************/
+
 /*
- * RTP Payload Format for H.264 Video
+ * Normative references:
+ *  - IETF RFC 6184 RTP Payload Format for H.264 Video (May 2011)
  */
+
 #ifndef __BITSTREAM_IETF_RTP6184_H__
 # define __BITSTREAM_IETF_RTP6184_H__
 
-#define RTP_6184_CLOCKRATE       90000
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#define RTP_6184_CLOCKRATE          90000
+
+#define RTP_6184_STAP_A             24
+#define RTP_6184_STAP_B             25
+#define RTP_6184_MTAP16             26
+#define RTP_6184_MTAP24             27
+#define RTP_6184_FU_A               28
+#define RTP_6184_FU_B               29
+
+#define RTP_6184_STAP_HEADER_SIZE   2
+
+static inline void rtp_6184_stap_set_size(uint8_t *header, uint16_t size)
+{
+    header[0] = size >> 8;
+    header[1] = size & 0xff;
+}
+
+static inline uint16_t rtp_6184_stap_get_size(const uint8_t *header)
+{
+    return (header[0] << 8) | header[1];
+}
+
+static inline void rtp_6184_fu_set_start(uint8_t *header)
+{
+    header[0] |= 0x80;
+}
+
+static inline bool rtp_6184_fu_check_start(uint8_t header)
+{
+    return header & 0x80;
+}
+
+static inline void rtp_6184_fu_set_end(uint8_t *header)
+{
+    header[0] |= 0x40;
+}
+
+static inline bool rtp_6184_fu_check_end(uint8_t header)
+{
+    return header & 0x40;
+}
+
+#ifdef __cplusplus
+}
+#endif
 
 #endif /* !__BITSTREAM_IETF_RTP6184_H__ */


=====================================
mpeg/h264.h
=====================================
--- a/mpeg/h264.h
+++ b/mpeg/h264.h
@@ -92,11 +92,28 @@ static inline uint8_t h264nal_get_type(const uint8_t *p_h264nal)
     return p_h264nal[3] & 0x1f;
 }
 
+static inline void h264nalst_init(uint8_t *p_start)
+{
+    p_start[0] = 0;
+}
+
+static inline void h264nalst_set_ref(uint8_t *p_start, uint8_t ref)
+{
+    p_start[0] &= 0x1f;
+    p_start[0] |= ref << 5;
+}
+
 static inline uint8_t h264nalst_get_ref(uint8_t start)
 {
     return (start & 0x60) >> 5;
 }
 
+static inline void h264nalst_set_type(uint8_t *p_start, uint8_t type)
+{
+    p_start[0] &= 0xe0;
+    p_start[0] |= type;
+}
+
 static inline uint8_t h264nalst_get_type(uint8_t start)
 {
     return start & 0x1f;



View it on GitLab: https://code.videolan.org/videolan/bitstream/compare/ad64f58a380567f66027027bdf9a93343ec55f0a...fe4e1b8991e34a934bef9e20da2392b760b45c08

---
View it on GitLab: https://code.videolan.org/videolan/bitstream/compare/ad64f58a380567f66027027bdf9a93343ec55f0a...fe4e1b8991e34a934bef9e20da2392b760b45c08
You're receiving this email because of your account on code.videolan.org.


More information about the biTStream-devel mailing list