|
|
|
@ -32,6 +32,11 @@ static struct timerthread media_player_thread; |
|
|
|
static __thread MYSQL *mysql_conn; |
|
|
|
|
|
|
|
|
|
|
|
struct media_player_cache_packet; |
|
|
|
static void cache_packet_free(struct media_player_cache_packet *p); |
|
|
|
TYPED_GPTRARRAY_FULL(cache_packet_arr, struct media_player_cache_packet, cache_packet_free) |
|
|
|
|
|
|
|
|
|
|
|
struct media_player_cache_index { |
|
|
|
struct media_player_content_index index; |
|
|
|
struct rtp_payload_type dst_pt; |
|
|
|
@ -42,7 +47,7 @@ struct media_player_cache_entry { |
|
|
|
mutex_t lock; |
|
|
|
cond_t cond; // to wait for more data to be decoded |
|
|
|
|
|
|
|
GPtrArray *packets; // read-only except for decoder thread, which uses finished flags and locks |
|
|
|
cache_packet_arr *packets; // read-only except for decoder thread, which uses finished flags and locks |
|
|
|
|
|
|
|
struct codec_scheduler csch; |
|
|
|
struct media_player_coder coder; // de/encoder data |
|
|
|
@ -492,8 +497,7 @@ static void media_player_cached_reader_start(struct media_player *mp, const stru |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static void cache_packet_free(void *ptr) { |
|
|
|
struct media_player_cache_packet *p = ptr; |
|
|
|
static void cache_packet_free(struct media_player_cache_packet *p) { |
|
|
|
g_free(p->buf); |
|
|
|
g_slice_free1(sizeof(*p), p); |
|
|
|
} |
|
|
|
@ -534,7 +538,7 @@ static bool media_player_cache_get_entry(struct media_player *mp, |
|
|
|
entry = mp->cache_entry = g_slice_alloc0(sizeof(*entry)); |
|
|
|
mutex_init(&entry->lock); |
|
|
|
cond_init(&entry->cond); |
|
|
|
entry->packets = g_ptr_array_new_full(64, cache_packet_free); |
|
|
|
entry->packets = cache_packet_arr_new_sized(64); |
|
|
|
|
|
|
|
switch (lookup.index.type) { |
|
|
|
case MP_DB: |
|
|
|
@ -624,7 +628,7 @@ static void packet_encoded_cache(AVPacket *pkt, struct codec_ssrc_handler *ch, s |
|
|
|
}; |
|
|
|
|
|
|
|
mutex_lock(&entry->lock); |
|
|
|
g_ptr_array_add(entry->packets, ep); |
|
|
|
t_ptr_array_add(entry->packets, ep); |
|
|
|
|
|
|
|
cond_broadcast(&entry->cond); |
|
|
|
mutex_unlock(&entry->lock); |
|
|
|
@ -1279,7 +1283,7 @@ static void media_player_cache_index_free(void *p) { |
|
|
|
} |
|
|
|
static void media_player_cache_entry_free(void *p) { |
|
|
|
struct media_player_cache_entry *e = p; |
|
|
|
g_ptr_array_free(e->packets, TRUE); |
|
|
|
t_ptr_array_free(e->packets, true); |
|
|
|
mutex_destroy(&e->lock); |
|
|
|
g_free(e->info_str); |
|
|
|
media_player_coder_shutdown(&e->coder); |
|
|
|
|