comparison mpegvideo.c @ 1228:d63e0185a90f libavcodec

release buffer cleanup
author michaelni
date Tue, 06 May 2003 20:43:37 +0000
parents ca979193f8e1
children fc2a7eefa9cc
comparison
equal deleted inserted replaced
1227:184c480cefc3 1228:d63e0185a90f
927 AVFrame *pic; 927 AVFrame *pic;
928 928
929 s->mb_skiped = 0; 929 s->mb_skiped = 0;
930 930
931 assert(s->last_picture_ptr==NULL || s->out_format != FMT_H264); 931 assert(s->last_picture_ptr==NULL || s->out_format != FMT_H264);
932 932
933 /* mark&release old frames */ 933 /* mark&release old frames */
934 if (s->pict_type != B_TYPE && s->last_picture_ptr) { 934 if (s->pict_type != B_TYPE && s->last_picture_ptr) {
935 avctx->release_buffer(avctx, (AVFrame*)s->last_picture_ptr); 935 avctx->release_buffer(avctx, (AVFrame*)s->last_picture_ptr);
936 936
937 /* release forgotten pictures */ 937 /* release forgotten pictures */
943 avctx->release_buffer(avctx, (AVFrame*)&s->picture[i]); 943 avctx->release_buffer(avctx, (AVFrame*)&s->picture[i]);
944 } 944 }
945 } 945 }
946 } 946 }
947 } 947 }
948
949 alloc: 948 alloc:
950 if(!s->encoding){ 949 if(!s->encoding){
950 /* release non refernce frames */
951 for(i=0; i<MAX_PICTURE_COUNT; i++){
952 if(s->picture[i].data[0] && !s->picture[i].reference /*&& s->picture[i].type!=FF_BUFFER_TYPE_SHARED*/){
953 s->avctx->release_buffer(s->avctx, (AVFrame*)&s->picture[i]);
954 }
955 }
956
951 i= find_unused_picture(s, 0); 957 i= find_unused_picture(s, 0);
952 958
953 pic= (AVFrame*)&s->picture[i]; 959 pic= (AVFrame*)&s->picture[i];
954 pic->reference= s->pict_type != B_TYPE ? 3 : 0; 960 pic->reference= s->pict_type != B_TYPE ? 3 : 0;
955 961
1039 } 1045 }
1040 } 1046 }
1041 assert(i<MAX_PICTURE_COUNT); 1047 assert(i<MAX_PICTURE_COUNT);
1042 #endif 1048 #endif
1043 1049
1044 /* release non refernce frames */ 1050 if(s->encoding){
1045 for(i=0; i<MAX_PICTURE_COUNT; i++){ 1051 /* release non refernce frames */
1046 if(s->picture[i].data[0] && !s->picture[i].reference /*&& s->picture[i].type!=FF_BUFFER_TYPE_SHARED*/) 1052 for(i=0; i<MAX_PICTURE_COUNT; i++){
1047 s->avctx->release_buffer(s->avctx, (AVFrame*)&s->picture[i]); 1053 if(s->picture[i].data[0] && !s->picture[i].reference /*&& s->picture[i].type!=FF_BUFFER_TYPE_SHARED*/){
1048 } 1054 s->avctx->release_buffer(s->avctx, (AVFrame*)&s->picture[i]);
1049 1055 }
1056 }
1057 }
1050 // clear copies, to avoid confusion 1058 // clear copies, to avoid confusion
1051 #if 0 1059 #if 0
1052 memset(&s->last_picture, 0, sizeof(Picture)); 1060 memset(&s->last_picture, 0, sizeof(Picture));
1053 memset(&s->next_picture, 0, sizeof(Picture)); 1061 memset(&s->next_picture, 0, sizeof(Picture));
1054 memset(&s->current_picture, 0, sizeof(Picture)); 1062 memset(&s->current_picture, 0, sizeof(Picture));