mirror of https://github.com/mpv-player/mpv
video: fix coverart decoding
Deselecting cover art and then reselecting it did not work. The second
time the cover art picture is not displayed again. (This seems to break
every other month...)
The reason is commit 6640b22a
. It mutates the input packet. And it is
correct that we don't own d_video->header->attached_picture at this
point. Fix it by creating a new packet reference.
This commit is contained in:
parent
11d0290543
commit
c53c6bbd38
|
@ -363,9 +363,10 @@ void video_work(struct dec_video *d_video)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (d_video->header->attached_picture) {
|
if (d_video->header->attached_picture) {
|
||||||
|
struct demux_packet *packet =
|
||||||
|
demux_copy_packet(d_video->header->attached_picture);
|
||||||
if (d_video->current_state == DATA_AGAIN && !d_video->cover_art_mpi) {
|
if (d_video->current_state == DATA_AGAIN && !d_video->cover_art_mpi) {
|
||||||
d_video->cover_art_mpi =
|
d_video->cover_art_mpi = decode_packet(d_video, packet, 0);
|
||||||
decode_packet(d_video, d_video->header->attached_picture, 0);
|
|
||||||
// Might need flush.
|
// Might need flush.
|
||||||
if (!d_video->cover_art_mpi)
|
if (!d_video->cover_art_mpi)
|
||||||
d_video->cover_art_mpi = decode_packet(d_video, NULL, 0);
|
d_video->cover_art_mpi = decode_packet(d_video, NULL, 0);
|
||||||
|
@ -375,6 +376,7 @@ void video_work(struct dec_video *d_video)
|
||||||
d_video->current_mpi = mp_image_new_ref(d_video->cover_art_mpi);
|
d_video->current_mpi = mp_image_new_ref(d_video->cover_art_mpi);
|
||||||
// (DATA_OK is returned the first time, when current_mpi is sill set)
|
// (DATA_OK is returned the first time, when current_mpi is sill set)
|
||||||
d_video->current_state = DATA_EOF;
|
d_video->current_state = DATA_EOF;
|
||||||
|
talloc_free(packet);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue