diff options
author | Michael Roitzsch <mroi@users.sourceforge.net> | 2002-11-11 18:16:01 +0000 |
---|---|---|
committer | Michael Roitzsch <mroi@users.sourceforge.net> | 2002-11-11 18:16:01 +0000 |
commit | 9b83acfaaf30f69b1dbeafb4a59d2c78d7643035 (patch) | |
tree | 8b00617aa854d54cd6b657387d1b4c21075f7c97 | |
parent | 5932f6758d7ddebaf866b83823fca419ffa7bed2 (diff) | |
download | xine-lib-9b83acfaaf30f69b1dbeafb4a59d2c78d7643035.tar.gz xine-lib-9b83acfaaf30f69b1dbeafb4a59d2c78d7643035.tar.bz2 |
prevent libmpeg2 from freeing the same frame twice
CVS patchset: 3237
CVS date: 2002/11/11 18:16:01
-rw-r--r-- | src/libmpeg2/decode.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/libmpeg2/decode.c b/src/libmpeg2/decode.c index 223971157..6fc38d98a 100644 --- a/src/libmpeg2/decode.c +++ b/src/libmpeg2/decode.c @@ -381,10 +381,13 @@ static inline int parse_chunk (mpeg2dec_t * mpeg2dec, int code, data.aspect = picture->aspect_ratio_information; xine_event_send(mpeg2dec->stream, &event); - if (picture->forward_reference_frame) + if (picture->forward_reference_frame && + picture->forward_reference_frame != picture->current_frame && + picture->forward_reference_frame != picture->backward_reference_frame) picture->forward_reference_frame->free (picture->forward_reference_frame); - if (picture->backward_reference_frame) + if (picture->backward_reference_frame && + picture->backward_reference_frame != picture->current_frame) picture->backward_reference_frame->free (picture->backward_reference_frame); mpeg2dec->is_sequence_needed = 0; @@ -451,7 +454,8 @@ static inline int parse_chunk (mpeg2dec_t * mpeg2dec, int code, picture->aspect_ratio_information, XINE_IMGFMT_YV12, (VO_PREDICTION_FLAG | picture->picture_structure)); - if (picture->forward_reference_frame) + if (picture->forward_reference_frame && + picture->forward_reference_frame != picture->backward_reference_frame) picture->forward_reference_frame->free (picture->forward_reference_frame); picture->forward_reference_frame = @@ -577,7 +581,8 @@ void mpeg2_reset (mpeg2dec_t * mpeg2dec) { picture->current_frame->free (picture->current_frame); picture->current_frame = NULL; - if (picture->forward_reference_frame) + if (picture->forward_reference_frame && + picture->forward_reference_frame != picture->backward_reference_frame) picture->forward_reference_frame->free (picture->forward_reference_frame); picture->forward_reference_frame = NULL; @@ -648,7 +653,8 @@ void mpeg2_close (mpeg2dec_t * mpeg2dec) picture->current_frame = NULL; } - if (picture->forward_reference_frame) { + if (picture->forward_reference_frame && + picture->forward_reference_frame != picture->backward_reference_frame) { picture->forward_reference_frame->free (picture->forward_reference_frame); picture->forward_reference_frame = NULL; } |