libobs: Use reference counting for encoder packets

Prevents reallocation of encoded packet data.

Deprecates:
obs_duplicate_encoder_packet
obs_free_encoder_packet

Replaces those functions with:
obs_encoder_packet_ref
obs_encoder_packet_release
This commit is contained in:
jp9000
2016-12-07 12:45:25 -08:00
parent eb6d8e10fa
commit 7d6e6eee79
7 changed files with 67 additions and 21 deletions

View File

@@ -134,7 +134,7 @@ static inline void free_packets(struct rtmp_stream *stream)
while (stream->packets.size) {
struct encoder_packet packet;
circlebuf_pop_front(&stream->packets, &packet, sizeof(packet));
obs_free_encoder_packet(&packet);
obs_encoder_packet_release(&packet);
}
pthread_mutex_unlock(&stream->packets_mutex);
}
@@ -375,7 +375,7 @@ static int send_packet(struct rtmp_stream *stream,
ret = RTMP_Write(&stream->rtmp, (char*)data, (int)size, (int)idx);
bfree(data);
obs_free_encoder_packet(packet);
obs_encoder_packet_release(packet);
stream->total_bytes_sent += size;
return ret;
@@ -414,7 +414,7 @@ static void *send_thread(void *data)
if (stopping(stream)) {
if (can_shutdown_stream(stream, &packet)) {
obs_free_encoder_packet(&packet);
obs_encoder_packet_release(&packet);
break;
}
}
@@ -844,7 +844,7 @@ static void drop_frames(struct rtmp_stream *stream, const char *name,
} else {
num_frames_dropped++;
obs_free_encoder_packet(&packet);
obs_encoder_packet_release(&packet);
}
}
@@ -929,7 +929,7 @@ static void rtmp_stream_data(void *data, struct encoder_packet *packet)
if (packet->type == OBS_ENCODER_VIDEO)
obs_parse_avc_packet(&new_packet, packet);
else
obs_duplicate_encoder_packet(&new_packet, packet);
obs_encoder_packet_ref(&new_packet, packet);
pthread_mutex_lock(&stream->packets_mutex);
@@ -944,7 +944,7 @@ static void rtmp_stream_data(void *data, struct encoder_packet *packet)
if (added_packet)
os_sem_post(stream->send_sem);
else
obs_free_encoder_packet(&new_packet);
obs_encoder_packet_release(&new_packet);
}
static void rtmp_stream_defaults(obs_data_t *defaults)