Fixes deadlock when reinit is triggered by the thread itself.
Unified · Split
| @@ -477,6 +477,12 @@ static bool reinit_decoder(struct priv *p) · 476 unmodified lines | ||
| 477 | 477 | return !!p->decoder; |
| 478 | 478 | } |
| 479 | 479 | |
| 480 | +static bool decoder_wrapper_reinit(struct mp_decoder_wrapper *d) | |
| 481 | +{ | |
| 482 | + struct priv *p = d->f->priv; | |
| 483 | + return reinit_decoder(p); | |
| 484 | +} | |
| 485 | + | |
| 480 | 486 | bool mp_decoder_wrapper_reinit(struct mp_decoder_wrapper *d) |
| 481 | 487 | { |
| 482 | 488 | struct priv *p = d->f->priv; |
| @@ -1059,7 +1065,7 @@ static void read_frame(struct priv *p) · 576 unmodified lines | ||
| 1059 | 1065 | if (new_segment->segmented) { |
| 1060 | 1066 | if (p->codec != new_segment->codec) { |
| 1061 | 1067 | p->codec = new_segment->codec; |
| 1062 | − if (!mp_decoder_wrapper_reinit(&p->public)) | |
| 1068 | + if (!decoder_wrapper_reinit(&p->public)) | |
| 1063 | 1069 | mp_filter_internal_mark_failed(p->decf); |
| 1064 | 1070 | } |
| 1065 | 1071 | |