Mercurial > libavcodec.hg
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)); |