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
23typedef struct {23typedef struct {
24 AVFrame previous_frame;24 AVFrame previous_frame;
25 z_stream zstream;25 z_stream zstream;
26 int size;26 int size;
27} ZeroCodecContext;27} ZeroCodecContext;
28 28
29static int zerocodec_decode_frame(AVCodecContext *avctx, void *data,29static int zerocodec_decode_frame(AVCodecContext *avctx, void *data,
@@ -33,7 +33,8 @@ static int zerocodec_decode_frame(AVCodecContext *avctx, void *data, · 3 unmodified lines
33 AVFrame *pic = avctx->coded_frame;33 AVFrame *pic = avctx->coded_frame;
34 AVFrame *prev_pic = &zc->previous_frame;34 AVFrame *prev_pic = &zc->previous_frame;
35 z_stream *zstream = &zc->zstream;35 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;
37 int i, j, zret;38 int i, j, zret;
38 39
39 pic->reference = 3;40 pic->reference = 3;
@@ -43,29 +44,28 @@ static int zerocodec_decode_frame(AVCodecContext *avctx, void *data, · 3 unmodified lines
43 pic->pict_type = AV_PICTURE_TYPE_I;44 pic->pict_type = AV_PICTURE_TYPE_I;
44 } else {45 } else {
45 if (!prev) {46 if (!prev) {
46 av_log(avctx, AV_LOG_ERROR, "Missing reference frame!\n");47 av_log(avctx, AV_LOG_ERROR, "Missing reference frame.\n");
47 return AVERROR_INVALIDDATA;48 return AVERROR_INVALIDDATA;
48 }49 }
49 pic->key_frame = 0;50 pic->key_frame = 0;
50 pic->pict_type = AV_PICTURE_TYPE_P;51 pic->pict_type = AV_PICTURE_TYPE_P;
51 }52 }
52 53
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
53 if (avctx->get_buffer(avctx, pic) < 0) {60 if (avctx->get_buffer(avctx, pic) < 0) {
54 av_log(avctx, AV_LOG_ERROR, "Could not allocate buffer.\n");61 av_log(avctx, AV_LOG_ERROR, "Could not allocate buffer.\n");
55 return AVERROR(ENOMEM);62 return AVERROR(ENOMEM);
56 }63 }
57 64
58 zret = inflateReset(zstream);65 zstream->next_in = avpkt->data;
66 zstream->avail_in = avpkt->size;
59 67
60 if (zret != Z_OK) {68 dst = pic->data[0];
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];
69 69
70 /**70 /**
71 * ZeroCodec has very simple interframe compression. If a value71 * 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
75 for (i = 0; i < avctx->height; i++) {75 for (i = 0; i < avctx->height; i++) {
76 zstream->next_out = dst;76 zstream->next_out = dst;
77 zstream->avail_out = avctx->width << 1;77 zstream->avail_out = avctx->width << 1;
78
78 zret = inflate(zstream, Z_SYNC_FLUSH);79 zret = inflate(zstream, Z_SYNC_FLUSH);
79 if (zret != Z_OK && zret != Z_STREAM_END) {80 if (zret != Z_OK && zret != Z_STREAM_END) {
81 avctx->release_buffer(avctx, pic);
80 av_log(avctx, AV_LOG_ERROR,82 av_log(avctx, AV_LOG_ERROR,
81 "Inflate failed with return code: %d\n", zret);83 "Inflate failed with return code: %d.\n", zret);
82 return AVERROR(EINVAL);84 return AVERROR_INVALIDDATA;
83 }85 }
84 86
85 if (!(avpkt->flags & AV_PKT_FLAG_KEY))87 if (!(avpkt->flags & AV_PKT_FLAG_KEY))
@@ -137,14 +139,12 @@ static av_cold int zerocodec_decode_init(AVCodecContext *avctx) · 51 unmodified lines
137 zstream->opaque = Z_NULL;139 zstream->opaque = Z_NULL;
138 140
139 zret = inflateInit(zstream);141 zret = inflateInit(zstream);
140
141 if (zret != Z_OK) {142 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);
143 return AVERROR(ENOMEM);144 return AVERROR(ENOMEM);
144 }145 }
145 146
146 avctx->coded_frame = avcodec_alloc_frame();147 avctx->coded_frame = avcodec_alloc_frame();
147
148 if (!avctx->coded_frame) {148 if (!avctx->coded_frame) {
149 av_log(avctx, AV_LOG_ERROR, "Could not allocate frame buffer.\n");149 av_log(avctx, AV_LOG_ERROR, "Could not allocate frame buffer.\n");
150 zerocodec_decode_close(avctx);150 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