mirror of
https://github.com/xenia-project/FFmpeg.git
synced 2024-11-24 12:09:55 +00: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 */
|
||||
stream_ptr = 48;
|
||||
|
||||
if(s->frame.data[0])
|
||||
avctx->release_buffer(avctx, &s->frame);
|
||||
|
||||
s->frame.reference = 0;
|
||||
if(avctx->get_buffer(avctx, &s->frame) < 0) {
|
||||
fprintf(stderr, "get_buffer() failed\n");
|
||||
@ -159,8 +162,6 @@ static int cyuv_decode_frame(AVCodecContext *avctx,
|
||||
*data_size=sizeof(AVFrame);
|
||||
*(AVFrame*)data= s->frame;
|
||||
|
||||
avctx->release_buffer(avctx, &s->frame);
|
||||
|
||||
return buf_size;
|
||||
}
|
||||
|
||||
|
@ -580,6 +580,9 @@ static int dvvideo_decode_frame(AVCodecContext *avctx,
|
||||
else
|
||||
avctx->aspect_ratio = 4.0 / 3.0;
|
||||
|
||||
if(s->picture.data[0])
|
||||
avctx->release_buffer(avctx, &s->picture);
|
||||
|
||||
s->picture.reference= 0;
|
||||
if(avctx->get_buffer(avctx, &s->picture) < 0) {
|
||||
fprintf(stderr, "get_buffer() failed\n");
|
||||
@ -617,8 +620,6 @@ static int dvvideo_decode_frame(AVCodecContext *avctx,
|
||||
*data_size = sizeof(AVFrame);
|
||||
*(AVFrame*)data= s->picture;
|
||||
|
||||
avctx->release_buffer(avctx, &s->picture);
|
||||
|
||||
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);
|
||||
|
||||
if(p->data[0])
|
||||
avctx->release_buffer(avctx, p);
|
||||
|
||||
p->reference= 0;
|
||||
if(avctx->get_buffer(avctx, p) < 0){
|
||||
fprintf(stderr, "get_buffer() failed\n");
|
||||
@ -943,9 +946,6 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, uint8
|
||||
emms_c();
|
||||
|
||||
*picture= *p;
|
||||
|
||||
avctx->release_buffer(avctx, p);
|
||||
|
||||
*data_size = sizeof(AVFrame);
|
||||
|
||||
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);
|
||||
|
||||
if(s->frame.data[0])
|
||||
avctx->release_buffer(avctx, &s->frame);
|
||||
|
||||
s->frame.reference = 0;
|
||||
if(avctx->get_buffer(avctx, &s->frame) < 0) {
|
||||
fprintf(stderr, "get_buffer() failed\n");
|
||||
@ -1089,8 +1092,6 @@ static int indeo3_decode_frame(AVCodecContext *avctx,
|
||||
*data_size=sizeof(AVFrame);
|
||||
*(AVFrame*)data= s->frame;
|
||||
|
||||
avctx->release_buffer(avctx, &s->frame);
|
||||
|
||||
return buf_size;
|
||||
}
|
||||
|
||||
|
@ -929,7 +929,7 @@ int MPV_frame_start(MpegEncContext *s, AVCodecContext *avctx)
|
||||
s->mb_skiped = 0;
|
||||
|
||||
assert(s->last_picture_ptr==NULL || s->out_format != FMT_H264);
|
||||
|
||||
|
||||
/* mark&release old frames */
|
||||
if (s->pict_type != B_TYPE && s->last_picture_ptr) {
|
||||
avctx->release_buffer(avctx, (AVFrame*)s->last_picture_ptr);
|
||||
@ -945,9 +945,15 @@ int MPV_frame_start(MpegEncContext *s, AVCodecContext *avctx)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
alloc:
|
||||
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);
|
||||
|
||||
pic= (AVFrame*)&s->picture[i];
|
||||
@ -1041,12 +1047,14 @@ void MPV_frame_end(MpegEncContext *s)
|
||||
assert(i<MAX_PICTURE_COUNT);
|
||||
#endif
|
||||
|
||||
/* 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]);
|
||||
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]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// clear copies, to avoid confusion
|
||||
#if 0
|
||||
memset(&s->last_picture, 0, sizeof(Picture));
|
||||
|
Loading…
Reference in New Issue
Block a user