[09/13] rtpdec_h264: Fix nal type counting after refactoring

Message ID 1424378051-6607-9-git-send-email-martin@martin.st
State Committed
Commit 16163e6bf2d446c06d4dd053c0852074bb50508d
Headers show

Commit Message

Martin Storsjö Feb. 19, 2015, 8:34 p.m.
This fixes builds with -DDEBUG after f0a874799.
---
 libavformat/rtpdec_h264.c | 21 +++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)

Comments

Luca Barbato Feb. 21, 2015, 12:25 a.m. | #1
On 19/02/15 21:34, Martin Storsjö wrote:
> This fixes builds with -DDEBUG after f0a874799.
> ---
>   libavformat/rtpdec_h264.c | 21 +++++++++++++++------
>   1 file changed, 15 insertions(+), 6 deletions(-)
>

Ok.

Patch

diff --git a/libavformat/rtpdec_h264.c b/libavformat/rtpdec_h264.c
index e6c8c26..f8167a9 100644
--- a/libavformat/rtpdec_h264.c
+++ b/libavformat/rtpdec_h264.c
@@ -57,9 +57,12 @@  struct PayloadContext {
 
 #ifdef DEBUG
 #define COUNT_NAL_TYPE(data, nal) data->packet_types_received[(nal) & 0x1f]++
+#define NAL_COUNTERS data->packet_types_received
 #else
 #define COUNT_NAL_TYPE(data, nal) do { } while (0)
+#define NAL_COUNTERS NULL
 #endif
+#define NAL_MASK 0x1f
 
 static const uint8_t start_sequence[] = { 0, 0, 0, 1 };
 
@@ -178,7 +181,8 @@  static int sdp_parse_fmtp_config_h264(AVFormatContext *s,
 
 static int h264_handle_packet_stap_a(AVFormatContext *ctx, AVPacket *pkt,
                                      const uint8_t *buf, int len,
-                                     int start_skip)
+                                     int start_skip, int *nal_counters,
+                                     int nal_mask)
 {
     int pass         = 0;
     int total_length = 0;
@@ -209,7 +213,8 @@  static int h264_handle_packet_stap_a(AVFormatContext *ctx, AVPacket *pkt,
                     memcpy(dst, start_sequence, sizeof(start_sequence));
                     dst += sizeof(start_sequence);
                     memcpy(dst, src, nal_size);
-                    COUNT_NAL_TYPE(data, *src);
+                    if (nal_counters)
+                        nal_counters[(*src) & nal_mask]++;
                     dst += nal_size;
                 }
             } else {
@@ -236,7 +241,8 @@  static int h264_handle_packet_stap_a(AVFormatContext *ctx, AVPacket *pkt,
 }
 
 static int h264_handle_packet_fu_a(AVFormatContext *ctx, AVPacket *pkt,
-                                   const uint8_t *buf, int len)
+                                   const uint8_t *buf, int len,
+                                   int *nal_counters, int nal_mask)
 {
     uint8_t fu_indicator, fu_header, start_bit, nal_type, nal;
     int ret;
@@ -257,7 +263,8 @@  static int h264_handle_packet_fu_a(AVFormatContext *ctx, AVPacket *pkt,
     len -= 2;
 
     if (start_bit) {
-        COUNT_NAL_TYPE(data, nal_type);
+        if (nal_counters)
+            nal_counters[nal_type & nal_mask]++;
         /* copy in the start sequence, and the reconstructed nal */
         if ((ret = av_new_packet(pkt, sizeof(start_sequence) + sizeof(nal) + len)) < 0)
             return ret;
@@ -308,7 +315,8 @@  static int h264_handle_packet(AVFormatContext *ctx, PayloadContext *data,
         // consume the STAP-A NAL
         buf++;
         len--;
-        result = h264_handle_packet_stap_a(ctx, pkt, buf, len, 0);
+        result = h264_handle_packet_stap_a(ctx, pkt, buf, len, 0,
+                                           NAL_COUNTERS, NAL_MASK);
         break;
 
     case 25:                   // STAP-B
@@ -322,7 +330,8 @@  static int h264_handle_packet(AVFormatContext *ctx, PayloadContext *data,
         break;
 
     case 28:                   // FU-A (fragmented nal)
-        result = h264_handle_packet_fu_a(ctx, pkt, buf, len);
+        result = h264_handle_packet_fu_a(ctx, pkt, buf, len,
+                                         NAL_COUNTERS, NAL_MASK);
         break;
 
     case 30:                   // undefined