summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Roitzsch <mroi@users.sourceforge.net>2002-11-11 18:16:01 +0000
committerMichael Roitzsch <mroi@users.sourceforge.net>2002-11-11 18:16:01 +0000
commit9b83acfaaf30f69b1dbeafb4a59d2c78d7643035 (patch)
tree8b00617aa854d54cd6b657387d1b4c21075f7c97
parent5932f6758d7ddebaf866b83823fca419ffa7bed2 (diff)
downloadxine-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.c16
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;
}