diff options
author | Kacper Michajłow <kasper93@gmail.com> | 2023-10-21 04:55:41 +0200 |
---|---|---|
committer | Dudemanguy <random342@airmail.cc> | 2023-11-05 17:36:17 +0000 |
commit | 174df99ffa53f1091589eaa4fa0c16cdd55a9326 (patch) | |
tree | 3a60d45615f18beed98a9b08267c28ed7e05dd5f /sub/dec_sub.c | |
parent | 3a8b107f6216b38a151d5ca1e9d4f2727e3418f5 (diff) | |
download | mpv-174df99ffa53f1091589eaa4fa0c16cdd55a9326.tar.bz2 mpv-174df99ffa53f1091589eaa4fa0c16cdd55a9326.tar.xz |
ALL: use new mp_thread abstraction
Diffstat (limited to 'sub/dec_sub.c')
-rw-r--r-- | sub/dec_sub.c | 55 |
1 files changed, 27 insertions, 28 deletions
diff --git a/sub/dec_sub.c b/sub/dec_sub.c index 4f3a917e7a..9de37d7523 100644 --- a/sub/dec_sub.c +++ b/sub/dec_sub.c @@ -20,7 +20,6 @@ #include <string.h> #include <math.h> #include <assert.h> -#include <pthread.h> #include "demux/demux.h" #include "sd.h" @@ -43,7 +42,7 @@ static const struct sd_functions *const sd_list[] = { }; struct dec_sub { - pthread_mutex_t lock; + mp_mutex lock; struct mp_log *log; struct mpv_global *global; @@ -126,7 +125,7 @@ void sub_destroy(struct dec_sub *sub) sub->sd->driver->uninit(sub->sd); } talloc_free(sub->sd); - pthread_mutex_destroy(&sub->lock); + mp_mutex_destroy(&sub->lock); talloc_free(sub); } @@ -182,7 +181,7 @@ struct dec_sub *sub_create(struct mpv_global *global, struct track *track, .end = MP_NOPTS_VALUE, }; sub->opts = sub->opts_cache->opts; - mpthread_mutex_init_recursive(&sub->lock); + mp_mutex_init_type(&sub->lock, MP_MUTEX_RECURSIVE); sub->sd = init_decoder(sub); if (sub->sd) { @@ -227,15 +226,15 @@ static void update_segment(struct dec_sub *sub) bool sub_can_preload(struct dec_sub *sub) { bool r; - pthread_mutex_lock(&sub->lock); + mp_mutex_lock(&sub->lock); r = sub->sd->driver->accept_packets_in_advance && !sub->preload_attempted; - pthread_mutex_unlock(&sub->lock); + mp_mutex_unlock(&sub->lock); return r; } void sub_preload(struct dec_sub *sub) { - pthread_mutex_lock(&sub->lock); + mp_mutex_lock(&sub->lock); struct mp_dispatch_queue *demux_waiter = mp_dispatch_create(NULL); demux_set_stream_wakeup_cb(sub->sh, wakeup_demux, demux_waiter); @@ -258,7 +257,7 @@ void sub_preload(struct dec_sub *sub) demux_set_stream_wakeup_cb(sub->sh, NULL, NULL); talloc_free(demux_waiter); - pthread_mutex_unlock(&sub->lock); + mp_mutex_unlock(&sub->lock); } static bool is_new_segment(struct dec_sub *sub, struct demux_packet *p) @@ -273,7 +272,7 @@ static bool is_new_segment(struct dec_sub *sub, struct demux_packet *p) bool sub_read_packets(struct dec_sub *sub, double video_pts, bool force) { bool r = true; - pthread_mutex_lock(&sub->lock); + mp_mutex_lock(&sub->lock); video_pts = pts_to_subtitle(sub, video_pts); while (1) { bool read_more = true; @@ -331,7 +330,7 @@ bool sub_read_packets(struct dec_sub *sub, double video_pts, bool force) if (!(sub->preload_attempted && sub->sd->preload_ok)) sub->sd->driver->decode(sub->sd, pkt); } - pthread_mutex_unlock(&sub->lock); + mp_mutex_unlock(&sub->lock); return r; } @@ -339,19 +338,19 @@ bool sub_read_packets(struct dec_sub *sub, double video_pts, bool force) // Used with UPDATE_SUB_HARD and UPDATE_SUB_FILT. void sub_redecode_cached_packets(struct dec_sub *sub) { - pthread_mutex_lock(&sub->lock); + mp_mutex_lock(&sub->lock); if (sub->cached_pkts[0]) sub->sd->driver->decode(sub->sd, sub->cached_pkts[0]); if (sub->cached_pkts[1]) sub->sd->driver->decode(sub->sd, sub->cached_pkts[1]); - pthread_mutex_unlock(&sub->lock); + mp_mutex_unlock(&sub->lock); } // Unref sub_bitmaps.rc to free the result. May return NULL. struct sub_bitmaps *sub_get_bitmaps(struct dec_sub *sub, struct mp_osd_res dim, int format, double pts) { - pthread_mutex_lock(&sub->lock); + mp_mutex_lock(&sub->lock); pts = pts_to_subtitle(sub, pts); @@ -364,14 +363,14 @@ struct sub_bitmaps *sub_get_bitmaps(struct dec_sub *sub, struct mp_osd_res dim, sub->sd->driver->get_bitmaps) res = sub->sd->driver->get_bitmaps(sub->sd, dim, format, pts); - pthread_mutex_unlock(&sub->lock); + mp_mutex_unlock(&sub->lock); return res; } // The returned string is talloc'ed. char *sub_get_text(struct dec_sub *sub, double pts, enum sd_text_type type) { - pthread_mutex_lock(&sub->lock); + mp_mutex_lock(&sub->lock); char *text = NULL; pts = pts_to_subtitle(sub, pts); @@ -381,7 +380,7 @@ char *sub_get_text(struct dec_sub *sub, double pts, enum sd_text_type type) if (sub->sd->driver->get_text) text = sub->sd->driver->get_text(sub->sd, pts, type); - pthread_mutex_unlock(&sub->lock); + mp_mutex_unlock(&sub->lock); return text; } @@ -396,7 +395,7 @@ char *sub_ass_get_extradata(struct dec_sub *sub) struct sd_times sub_get_times(struct dec_sub *sub, double pts) { - pthread_mutex_lock(&sub->lock); + mp_mutex_lock(&sub->lock); struct sd_times res = { .start = MP_NOPTS_VALUE, .end = MP_NOPTS_VALUE }; pts = pts_to_subtitle(sub, pts); @@ -407,13 +406,13 @@ struct sd_times sub_get_times(struct dec_sub *sub, double pts) if (sub->sd->driver->get_times) res = sub->sd->driver->get_times(sub->sd, pts); - pthread_mutex_unlock(&sub->lock); + mp_mutex_unlock(&sub->lock); return res; } void sub_reset(struct dec_sub *sub) { - pthread_mutex_lock(&sub->lock); + mp_mutex_lock(&sub->lock); if (sub->sd->driver->reset) sub->sd->driver->reset(sub->sd); sub->last_pkt_pts = MP_NOPTS_VALUE; @@ -421,21 +420,21 @@ void sub_reset(struct dec_sub *sub) TA_FREEP(&sub->cached_pkts[0]); TA_FREEP(&sub->cached_pkts[1]); TA_FREEP(&sub->new_segment); - pthread_mutex_unlock(&sub->lock); + mp_mutex_unlock(&sub->lock); } void sub_select(struct dec_sub *sub, bool selected) { - pthread_mutex_lock(&sub->lock); + mp_mutex_lock(&sub->lock); if (sub->sd->driver->select) sub->sd->driver->select(sub->sd, selected); - pthread_mutex_unlock(&sub->lock); + mp_mutex_unlock(&sub->lock); } int sub_control(struct dec_sub *sub, enum sd_ctrl cmd, void *arg) { int r = CONTROL_UNKNOWN; - pthread_mutex_lock(&sub->lock); + mp_mutex_lock(&sub->lock); bool propagate = false; switch (cmd) { case SD_CTRL_SET_VIDEO_DEF_FPS: @@ -470,22 +469,22 @@ int sub_control(struct dec_sub *sub, enum sd_ctrl cmd, void *arg) } if (propagate && sub->sd->driver->control) r = sub->sd->driver->control(sub->sd, cmd, arg); - pthread_mutex_unlock(&sub->lock); + mp_mutex_unlock(&sub->lock); return r; } void sub_set_recorder_sink(struct dec_sub *sub, struct mp_recorder_sink *sink) { - pthread_mutex_lock(&sub->lock); + mp_mutex_lock(&sub->lock); sub->recorder_sink = sink; - pthread_mutex_unlock(&sub->lock); + mp_mutex_unlock(&sub->lock); } void sub_set_play_dir(struct dec_sub *sub, int dir) { - pthread_mutex_lock(&sub->lock); + mp_mutex_lock(&sub->lock); sub->play_dir = dir; - pthread_mutex_unlock(&sub->lock); + mp_mutex_unlock(&sub->lock); } bool sub_is_primary_visible(struct dec_sub *sub) |