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 | return !!p->decoder; | 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 | bool mp_decoder_wrapper_reinit(struct mp_decoder_wrapper *d) | 486 | bool mp_decoder_wrapper_reinit(struct mp_decoder_wrapper *d) |
| 481 | { | 487 | { |
| 482 | struct priv *p = d->f->priv; | 488 | struct priv *p = d->f->priv; |
| @@ -1059,7 +1065,7 @@ static void read_frame(struct priv *p) · 576 unmodified lines | |||
| 1059 | if (new_segment->segmented) { | 1065 | if (new_segment->segmented) { |
| 1060 | if (p->codec != new_segment->codec) { | 1066 | if (p->codec != new_segment->codec) { |
| 1061 | p->codec = new_segment->codec; | 1067 | p->codec = new_segment->codec; |
| 1062 | if (!mp_decoder_wrapper_reinit(&p->public)) | 1068 | if (!decoder_wrapper_reinit(&p->public)) |
| 1063 | mp_filter_internal_mark_failed(p->decf); | 1069 | mp_filter_internal_mark_failed(p->decf); |
| 1064 | } | 1070 | } |
| 1065 | 1071 | ||