History

Merge remote-tracking branch 'dwbuiten/master'

* dwbuiten/master: zerocodec: Fix memleak in decode_frame zerocodec: Cosmetics

Michael Niedermayer committed 14 years ago

Commit f8574652 parents 82de3e1 fcf550c1 file · +18 −18Browse files

Unified · Split

libavcodec/zerocodec.c+18−18
@@ -23,7 +23,7 @@ · 22 unmodified lines
2323 typedef struct {
2424 AVFrame previous_frame;
2525 z_stream zstream;
26− int size;
26+ int size;
2727 } ZeroCodecContext;
2828
2929 static int zerocodec_decode_frame(AVCodecContext *avctx, void *data,
@@ -33,7 +33,8 @@ static int zerocodec_decode_frame(AVCodecContext *avctx, void *data, · 3 unmodified lines
3333 AVFrame *pic = avctx->coded_frame;
3434 AVFrame *prev_pic = &zc->previous_frame;
3535 z_stream *zstream = &zc->zstream;
36− uint8_t *prev = prev_pic->data[0], *dst;
36+ uint8_t *prev = prev_pic->data[0];
37+ uint8_t *dst;
3738 int i, j, zret;
3839
3940 pic->reference = 3;
@@ -43,29 +44,28 @@ static int zerocodec_decode_frame(AVCodecContext *avctx, void *data, · 3 unmodified lines
4344 pic->pict_type = AV_PICTURE_TYPE_I;
4445 } else {
4546 if (!prev) {
46− av_log(avctx, AV_LOG_ERROR, "Missing reference frame!\n");
47+ av_log(avctx, AV_LOG_ERROR, "Missing reference frame.\n");
4748 return AVERROR_INVALIDDATA;
4849 }
4950 pic->key_frame = 0;
5051 pic->pict_type = AV_PICTURE_TYPE_P;
5152 }
5253
54+ zret = inflateReset(zstream);
55+ if (zret != Z_OK) {
56+ av_log(avctx, AV_LOG_ERROR, "Could not reset inflate: %d.\n", zret);
57+ return AVERROR_INVALIDDATA;
58+ }
59+
5360 if (avctx->get_buffer(avctx, pic) < 0) {
5461 av_log(avctx, AV_LOG_ERROR, "Could not allocate buffer.\n");
5562 return AVERROR(ENOMEM);
5663 }
5764
58− zret = inflateReset(zstream);
65+ zstream->next_in = avpkt->data;
66+ zstream->avail_in = avpkt->size;
5967
60− if (zret != Z_OK) {
61− av_log(avctx, AV_LOG_ERROR, "Could not reset inflate: %d\n", zret);
62− return AVERROR(EINVAL);
63− }
64−
65− zstream->next_in = avpkt->data;
66− zstream->avail_in = avpkt->size;
67−
68− dst = pic->data[0];
68+ dst = pic->data[0];
6969
7070 /**
7171 * ZeroCodec has very simple interframe compression. If a value
@@ -75,11 +75,13 @@ static int zerocodec_decode_frame(AVCodecContext *avctx, void *data, · 3 unmodified lines
7575 for (i = 0; i < avctx->height; i++) {
7676 zstream->next_out = dst;
7777 zstream->avail_out = avctx->width << 1;
78+
7879 zret = inflate(zstream, Z_SYNC_FLUSH);
7980 if (zret != Z_OK && zret != Z_STREAM_END) {
81+ avctx->release_buffer(avctx, pic);
8082 av_log(avctx, AV_LOG_ERROR,
81− "Inflate failed with return code: %d\n", zret);
82− return AVERROR(EINVAL);
83+ "Inflate failed with return code: %d.\n", zret);
84+ return AVERROR_INVALIDDATA;
8385 }
8486
8587 if (!(avpkt->flags & AV_PKT_FLAG_KEY))
@@ -137,14 +139,12 @@ static av_cold int zerocodec_decode_init(AVCodecContext *avctx) · 51 unmodified lines
137139 zstream->opaque = Z_NULL;
138140
139141 zret = inflateInit(zstream);
140−
141142 if (zret != Z_OK) {
142− av_log(avctx, AV_LOG_ERROR, "Could not initialize inflate: %d\n", zret);
143+ av_log(avctx, AV_LOG_ERROR, "Could not initialize inflate: %d.\n", zret);
143144 return AVERROR(ENOMEM);
144145 }
145146
146147 avctx->coded_frame = avcodec_alloc_frame();
147−
148148 if (!avctx->coded_frame) {
149149 av_log(avctx, AV_LOG_ERROR, "Could not allocate frame buffer.\n");
150150 zerocodec_decode_close(avctx);

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t