mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-04-14 00:58:38 +02:00
release buffer cleanup
Originally committed as revision 1839 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
61873c4a44
commit
e20c40697c
@ -98,6 +98,9 @@ static int cyuv_decode_frame(AVCodecContext *avctx,
|
|||||||
/* pixel data starts 48 bytes in, after 3x16-byte tables */
|
/* pixel data starts 48 bytes in, after 3x16-byte tables */
|
||||||
stream_ptr = 48;
|
stream_ptr = 48;
|
||||||
|
|
||||||
|
if(s->frame.data[0])
|
||||||
|
avctx->release_buffer(avctx, &s->frame);
|
||||||
|
|
||||||
s->frame.reference = 0;
|
s->frame.reference = 0;
|
||||||
if(avctx->get_buffer(avctx, &s->frame) < 0) {
|
if(avctx->get_buffer(avctx, &s->frame) < 0) {
|
||||||
fprintf(stderr, "get_buffer() failed\n");
|
fprintf(stderr, "get_buffer() failed\n");
|
||||||
@ -159,8 +162,6 @@ static int cyuv_decode_frame(AVCodecContext *avctx,
|
|||||||
*data_size=sizeof(AVFrame);
|
*data_size=sizeof(AVFrame);
|
||||||
*(AVFrame*)data= s->frame;
|
*(AVFrame*)data= s->frame;
|
||||||
|
|
||||||
avctx->release_buffer(avctx, &s->frame);
|
|
||||||
|
|
||||||
return buf_size;
|
return buf_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -580,6 +580,9 @@ static int dvvideo_decode_frame(AVCodecContext *avctx,
|
|||||||
else
|
else
|
||||||
avctx->aspect_ratio = 4.0 / 3.0;
|
avctx->aspect_ratio = 4.0 / 3.0;
|
||||||
|
|
||||||
|
if(s->picture.data[0])
|
||||||
|
avctx->release_buffer(avctx, &s->picture);
|
||||||
|
|
||||||
s->picture.reference= 0;
|
s->picture.reference= 0;
|
||||||
if(avctx->get_buffer(avctx, &s->picture) < 0) {
|
if(avctx->get_buffer(avctx, &s->picture) < 0) {
|
||||||
fprintf(stderr, "get_buffer() failed\n");
|
fprintf(stderr, "get_buffer() failed\n");
|
||||||
@ -617,8 +620,6 @@ static int dvvideo_decode_frame(AVCodecContext *avctx,
|
|||||||
*data_size = sizeof(AVFrame);
|
*data_size = sizeof(AVFrame);
|
||||||
*(AVFrame*)data= s->picture;
|
*(AVFrame*)data= s->picture;
|
||||||
|
|
||||||
avctx->release_buffer(avctx, &s->picture);
|
|
||||||
|
|
||||||
return packet_size;
|
return packet_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -737,6 +737,9 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, uint8
|
|||||||
|
|
||||||
init_get_bits(&s->gb, s->bitstream_buffer, buf_size*8);
|
init_get_bits(&s->gb, s->bitstream_buffer, buf_size*8);
|
||||||
|
|
||||||
|
if(p->data[0])
|
||||||
|
avctx->release_buffer(avctx, p);
|
||||||
|
|
||||||
p->reference= 0;
|
p->reference= 0;
|
||||||
if(avctx->get_buffer(avctx, p) < 0){
|
if(avctx->get_buffer(avctx, p) < 0){
|
||||||
fprintf(stderr, "get_buffer() failed\n");
|
fprintf(stderr, "get_buffer() failed\n");
|
||||||
@ -943,9 +946,6 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, uint8
|
|||||||
emms_c();
|
emms_c();
|
||||||
|
|
||||||
*picture= *p;
|
*picture= *p;
|
||||||
|
|
||||||
avctx->release_buffer(avctx, p);
|
|
||||||
|
|
||||||
*data_size = sizeof(AVFrame);
|
*data_size = sizeof(AVFrame);
|
||||||
|
|
||||||
return (get_bits_count(&s->gb)+31)/32*4;
|
return (get_bits_count(&s->gb)+31)/32*4;
|
||||||
|
@ -1056,6 +1056,9 @@ static int indeo3_decode_frame(AVCodecContext *avctx,
|
|||||||
|
|
||||||
iv_decode_frame(s, buf, buf_size);
|
iv_decode_frame(s, buf, buf_size);
|
||||||
|
|
||||||
|
if(s->frame.data[0])
|
||||||
|
avctx->release_buffer(avctx, &s->frame);
|
||||||
|
|
||||||
s->frame.reference = 0;
|
s->frame.reference = 0;
|
||||||
if(avctx->get_buffer(avctx, &s->frame) < 0) {
|
if(avctx->get_buffer(avctx, &s->frame) < 0) {
|
||||||
fprintf(stderr, "get_buffer() failed\n");
|
fprintf(stderr, "get_buffer() failed\n");
|
||||||
@ -1089,8 +1092,6 @@ static int indeo3_decode_frame(AVCodecContext *avctx,
|
|||||||
*data_size=sizeof(AVFrame);
|
*data_size=sizeof(AVFrame);
|
||||||
*(AVFrame*)data= s->frame;
|
*(AVFrame*)data= s->frame;
|
||||||
|
|
||||||
avctx->release_buffer(avctx, &s->frame);
|
|
||||||
|
|
||||||
return buf_size;
|
return buf_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -945,9 +945,15 @@ int MPV_frame_start(MpegEncContext *s, AVCodecContext *avctx)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
alloc:
|
alloc:
|
||||||
if(!s->encoding){
|
if(!s->encoding){
|
||||||
|
/* release non refernce frames */
|
||||||
|
for(i=0; i<MAX_PICTURE_COUNT; i++){
|
||||||
|
if(s->picture[i].data[0] && !s->picture[i].reference /*&& s->picture[i].type!=FF_BUFFER_TYPE_SHARED*/){
|
||||||
|
s->avctx->release_buffer(s->avctx, (AVFrame*)&s->picture[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
i= find_unused_picture(s, 0);
|
i= find_unused_picture(s, 0);
|
||||||
|
|
||||||
pic= (AVFrame*)&s->picture[i];
|
pic= (AVFrame*)&s->picture[i];
|
||||||
@ -1041,12 +1047,14 @@ void MPV_frame_end(MpegEncContext *s)
|
|||||||
assert(i<MAX_PICTURE_COUNT);
|
assert(i<MAX_PICTURE_COUNT);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if(s->encoding){
|
||||||
/* release non refernce frames */
|
/* release non refernce frames */
|
||||||
for(i=0; i<MAX_PICTURE_COUNT; i++){
|
for(i=0; i<MAX_PICTURE_COUNT; i++){
|
||||||
if(s->picture[i].data[0] && !s->picture[i].reference /*&& s->picture[i].type!=FF_BUFFER_TYPE_SHARED*/)
|
if(s->picture[i].data[0] && !s->picture[i].reference /*&& s->picture[i].type!=FF_BUFFER_TYPE_SHARED*/){
|
||||||
s->avctx->release_buffer(s->avctx, (AVFrame*)&s->picture[i]);
|
s->avctx->release_buffer(s->avctx, (AVFrame*)&s->picture[i]);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
// clear copies, to avoid confusion
|
// clear copies, to avoid confusion
|
||||||
#if 0
|
#if 0
|
||||||
memset(&s->last_picture, 0, sizeof(Picture));
|
memset(&s->last_picture, 0, sizeof(Picture));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user