瀏覽代碼

obs-outputs: Extract previous tag size writing logic

It's not repeated that often, but only two instances had
the explanatory comment.
Ruwen Hahn 2 年之前
父節點
當前提交
7373f326f3
共有 1 個文件被更改,包括 20 次插入9 次删除
  1. 20 9
      plugins/obs-outputs/flv-mux.c

+ 20 - 9
plugins/obs-outputs/flv-mux.c

@@ -208,6 +208,19 @@ static void build_flv_meta_data(obs_output_t *context, uint8_t **output,
 	*output = bmemdup(buf, *size);
 }
 
+static inline void write_previous_tag_size_without_header(struct serializer *s,
+							  uint32_t header_size)
+{
+	assert(serializer_get_pos(s) >= header_size);
+	/* write tag size (starting byte doesn't count) */
+	s_wb32(s, (uint32_t)serializer_get_pos(s) - header_size - 1);
+}
+
+static inline void write_previous_tag_size(struct serializer *s)
+{
+	write_previous_tag_size_without_header(s, 0);
+}
+
 void flv_meta_data(obs_output_t *context, uint8_t **output, size_t *size,
 		   bool write_header)
 {
@@ -238,7 +251,7 @@ void flv_meta_data(obs_output_t *context, uint8_t **output, size_t *size,
 
 	s_write(&s, meta_data, meta_data_size);
 
-	s_wb32(&s, (uint32_t)serializer_get_pos(&s) - start_pos - 1);
+	write_previous_tag_size_without_header(&s, start_pos);
 
 	*output = data.bytes.array;
 	*size = data.bytes.num;
@@ -281,8 +294,7 @@ static void flv_video(struct serializer *s, int32_t dts_offset,
 	s_wb24(s, get_ms_time(packet, offset));
 	s_write(s, packet->data, packet->size);
 
-	/* write tag size (starting byte doesn't count) */
-	s_wb32(s, (uint32_t)serializer_get_pos(s) - 1);
+	write_previous_tag_size(s);
 }
 
 static void flv_audio(struct serializer *s, int32_t dts_offset,
@@ -314,8 +326,7 @@ static void flv_audio(struct serializer *s, int32_t dts_offset,
 	s_w8(s, is_header ? 0 : 1);
 	s_write(s, packet->data, packet->size);
 
-	/* write tag size (starting byte doesn't count) */
-	s_wb32(s, (uint32_t)serializer_get_pos(s) - 1);
+	write_previous_tag_size(s);
 }
 
 void flv_packet_mux(struct encoder_packet *packet, int32_t dts_offset,
@@ -376,7 +387,7 @@ void flv_packet_ex(struct encoder_packet *packet, enum video_id_t codec_id,
 	s_write(&s, packet->data, packet->size);
 
 	// packet tail
-	s_wb32(&s, (uint32_t)serializer_get_pos(&s) - 1);
+	write_previous_tag_size(&s);
 
 	*output = data.bytes.array;
 	*size = data.bytes.num;
@@ -489,7 +500,7 @@ void flv_packet_metadata(enum video_id_t codec_id, uint8_t **output,
 	array_output_serializer_free(&metadata); // must be freed
 
 	// packet tail
-	s_wb32(&s, (uint32_t)serializer_get_pos(&s) - 1);
+	write_previous_tag_size(&s);
 
 	*output = data.bytes.array;
 	*size = data.bytes.num;
@@ -621,7 +632,7 @@ void flv_additional_meta_data(obs_output_t *context, uint8_t **data,
 	s_write(&s, meta_data, meta_data_size);
 	bfree(meta_data);
 
-	s_wb32(&s, (uint32_t)serializer_get_pos(&s) - 1);
+	write_previous_tag_size(&s);
 
 	*data = out.bytes.array;
 	*size = out.bytes.num;
@@ -720,7 +731,7 @@ static void flv_additional_audio(struct serializer *s, int32_t dts_offset,
 	serialize(s, data, size);
 	bfree(data);
 
-	s_wb32(s, (uint32_t)serializer_get_pos(s) - 1);
+	write_previous_tag_size(s);
 }
 
 void flv_additional_packet_mux(struct encoder_packet *packet,