Merge commit '4e17946f10d39eec6cc03fb249ae8147373141b6'
* commit '4e17946f10d39eec6cc03fb249ae8147373141b6': mpegvideo: Rework various functions not to use MpegEncContext directly Conflicts: libavcodec/mpegvideo.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
		
						commit
						f275f9eaee
					
				| @ -521,7 +521,7 @@ retry: | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (!s->current_picture_ptr || s->current_picture_ptr->f->data[0]) { |     if (!s->current_picture_ptr || s->current_picture_ptr->f->data[0]) { | ||||||
|         int i = ff_find_unused_picture(s, 0); |         int i = ff_find_unused_picture(s->avctx, s->picture, 0); | ||||||
|         if (i < 0) |         if (i < 0) | ||||||
|             return i; |             return i; | ||||||
|         s->current_picture_ptr = &s->picture[i]; |         s->current_picture_ptr = &s->picture[i]; | ||||||
|  | |||||||
| @ -1672,21 +1672,19 @@ av_cold void ff_init_vlc_rl(RLTable *rl, unsigned static_size) | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void release_unused_pictures(MpegEncContext *s) | static void release_unused_pictures(AVCodecContext *avctx, Picture *picture) | ||||||
| { | { | ||||||
|     int i; |     int i; | ||||||
| 
 | 
 | ||||||
|     /* release non reference frames */ |     /* release non reference frames */ | ||||||
|     for (i = 0; i < MAX_PICTURE_COUNT; i++) { |     for (i = 0; i < MAX_PICTURE_COUNT; i++) { | ||||||
|         if (!s->picture[i].reference) |         if (!picture[i].reference) | ||||||
|             ff_mpeg_unref_picture(s->avctx, &s->picture[i]); |             ff_mpeg_unref_picture(avctx, &picture[i]); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static inline int pic_is_unused(MpegEncContext *s, Picture *pic) | static inline int pic_is_unused(Picture *pic) | ||||||
| { | { | ||||||
|     if (pic == s->last_picture_ptr) |  | ||||||
|         return 0; |  | ||||||
|     if (!pic->f->buf[0]) |     if (!pic->f->buf[0]) | ||||||
|         return 1; |         return 1; | ||||||
|     if (pic->needs_realloc && !(pic->reference & DELAYED_PIC_REF)) |     if (pic->needs_realloc && !(pic->reference & DELAYED_PIC_REF)) | ||||||
| @ -1694,23 +1692,23 @@ static inline int pic_is_unused(MpegEncContext *s, Picture *pic) | |||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int find_unused_picture(MpegEncContext *s, int shared) | static int find_unused_picture(AVCodecContext *avctx, Picture *picture, int shared) | ||||||
| { | { | ||||||
|     int i; |     int i; | ||||||
| 
 | 
 | ||||||
|     if (shared) { |     if (shared) { | ||||||
|         for (i = 0; i < MAX_PICTURE_COUNT; i++) { |         for (i = 0; i < MAX_PICTURE_COUNT; i++) { | ||||||
|             if (!s->picture[i].f->buf[0] && &s->picture[i] != s->last_picture_ptr) |             if (!picture[i].f->buf[0]) | ||||||
|                 return i; |                 return i; | ||||||
|         } |         } | ||||||
|     } else { |     } else { | ||||||
|         for (i = 0; i < MAX_PICTURE_COUNT; i++) { |         for (i = 0; i < MAX_PICTURE_COUNT; i++) { | ||||||
|             if (pic_is_unused(s, &s->picture[i])) |             if (pic_is_unused(&picture[i])) | ||||||
|                 return i; |                 return i; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     av_log(s->avctx, AV_LOG_FATAL, |     av_log(avctx, AV_LOG_FATAL, | ||||||
|            "Internal error, picture buffer overflow\n"); |            "Internal error, picture buffer overflow\n"); | ||||||
|     /* We could return -1, but the codec would crash trying to draw into a
 |     /* We could return -1, but the codec would crash trying to draw into a
 | ||||||
|      * non-existing frame anyway. This is safer than waiting for a random crash. |      * non-existing frame anyway. This is safer than waiting for a random crash. | ||||||
| @ -1727,15 +1725,15 @@ static int find_unused_picture(MpegEncContext *s, int shared) | |||||||
|     return -1; |     return -1; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int ff_find_unused_picture(MpegEncContext *s, int shared) | int ff_find_unused_picture(AVCodecContext *avctx, Picture *picture, int shared) | ||||||
| { | { | ||||||
|     int ret = find_unused_picture(s, shared); |     int ret = find_unused_picture(avctx, picture, shared); | ||||||
| 
 | 
 | ||||||
|     if (ret >= 0 && ret < MAX_PICTURE_COUNT) { |     if (ret >= 0 && ret < MAX_PICTURE_COUNT) { | ||||||
|         if (s->picture[ret].needs_realloc) { |         if (picture[ret].needs_realloc) { | ||||||
|             s->picture[ret].needs_realloc = 0; |             picture[ret].needs_realloc = 0; | ||||||
|             ff_free_picture_tables(&s->picture[ret]); |             ff_free_picture_tables(&picture[ret]); | ||||||
|             ff_mpeg_unref_picture(s->avctx, &s->picture[ret]); |             ff_mpeg_unref_picture(avctx, &picture[ret]); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|     return ret; |     return ret; | ||||||
| @ -1794,14 +1792,14 @@ int ff_mpv_frame_start(MpegEncContext *s, AVCodecContext *avctx) | |||||||
| 
 | 
 | ||||||
|     ff_mpeg_unref_picture(s->avctx, &s->current_picture); |     ff_mpeg_unref_picture(s->avctx, &s->current_picture); | ||||||
| 
 | 
 | ||||||
|     release_unused_pictures(s); |     release_unused_pictures(s->avctx, s->picture); | ||||||
| 
 | 
 | ||||||
|     if (s->current_picture_ptr && !s->current_picture_ptr->f->buf[0]) { |     if (s->current_picture_ptr && !s->current_picture_ptr->f->buf[0]) { | ||||||
|         // we already have a unused image
 |         // we already have a unused image
 | ||||||
|         // (maybe it was set before reading the header)
 |         // (maybe it was set before reading the header)
 | ||||||
|         pic = s->current_picture_ptr; |         pic = s->current_picture_ptr; | ||||||
|     } else { |     } else { | ||||||
|         i   = ff_find_unused_picture(s, 0); |         i   = ff_find_unused_picture(s->avctx, s->picture, 0); | ||||||
|         if (i < 0) { |         if (i < 0) { | ||||||
|             av_log(s->avctx, AV_LOG_ERROR, "no frame buffer available\n"); |             av_log(s->avctx, AV_LOG_ERROR, "no frame buffer available\n"); | ||||||
|             return i; |             return i; | ||||||
| @ -1871,7 +1869,7 @@ int ff_mpv_frame_start(MpegEncContext *s, AVCodecContext *avctx) | |||||||
|                    "allocate dummy last picture for field based first keyframe\n"); |                    "allocate dummy last picture for field based first keyframe\n"); | ||||||
| 
 | 
 | ||||||
|         /* Allocate a dummy frame */ |         /* Allocate a dummy frame */ | ||||||
|         i = ff_find_unused_picture(s, 0); |         i = ff_find_unused_picture(s->avctx, s->picture, 0); | ||||||
|         if (i < 0) { |         if (i < 0) { | ||||||
|             av_log(s->avctx, AV_LOG_ERROR, "no frame buffer available\n"); |             av_log(s->avctx, AV_LOG_ERROR, "no frame buffer available\n"); | ||||||
|             return i; |             return i; | ||||||
| @ -1912,7 +1910,7 @@ int ff_mpv_frame_start(MpegEncContext *s, AVCodecContext *avctx) | |||||||
|     if ((!s->next_picture_ptr || !s->next_picture_ptr->f->buf[0]) && |     if ((!s->next_picture_ptr || !s->next_picture_ptr->f->buf[0]) && | ||||||
|         s->pict_type == AV_PICTURE_TYPE_B) { |         s->pict_type == AV_PICTURE_TYPE_B) { | ||||||
|         /* Allocate a dummy frame */ |         /* Allocate a dummy frame */ | ||||||
|         i = ff_find_unused_picture(s, 0); |         i = ff_find_unused_picture(s->avctx, s->picture, 0); | ||||||
|         if (i < 0) { |         if (i < 0) { | ||||||
|             av_log(s->avctx, AV_LOG_ERROR, "no frame buffer available\n"); |             av_log(s->avctx, AV_LOG_ERROR, "no frame buffer available\n"); | ||||||
|             return i; |             return i; | ||||||
|  | |||||||
| @ -780,7 +780,8 @@ void ff_print_debug_info2(AVCodecContext *avctx, AVFrame *pict, uint8_t *mbskip_ | |||||||
| int ff_mpv_export_qp_table(MpegEncContext *s, AVFrame *f, Picture *p, int qp_type); | int ff_mpv_export_qp_table(MpegEncContext *s, AVFrame *f, Picture *p, int qp_type); | ||||||
| 
 | 
 | ||||||
| void ff_write_quant_matrix(PutBitContext *pb, uint16_t *matrix); | void ff_write_quant_matrix(PutBitContext *pb, uint16_t *matrix); | ||||||
| int ff_find_unused_picture(MpegEncContext *s, int shared); | 
 | ||||||
|  | int ff_find_unused_picture(AVCodecContext *avctx, Picture *picture, int shared); | ||||||
| int ff_update_duplicate_context(MpegEncContext *dst, MpegEncContext *src); | int ff_update_duplicate_context(MpegEncContext *dst, MpegEncContext *src); | ||||||
| int ff_mpeg_update_thread_context(AVCodecContext *dst, const AVCodecContext *src); | int ff_mpeg_update_thread_context(AVCodecContext *dst, const AVCodecContext *src); | ||||||
| void ff_set_qscale(MpegEncContext * s, int qscale); | void ff_set_qscale(MpegEncContext * s, int qscale); | ||||||
|  | |||||||
| @ -1131,7 +1131,7 @@ static int load_input_picture(MpegEncContext *s, const AVFrame *pic_arg) | |||||||
|         ff_dlog(s->avctx, "%d %d %"PTRDIFF_SPECIFIER" %"PTRDIFF_SPECIFIER"\n", pic_arg->linesize[0], |         ff_dlog(s->avctx, "%d %d %"PTRDIFF_SPECIFIER" %"PTRDIFF_SPECIFIER"\n", pic_arg->linesize[0], | ||||||
|                 pic_arg->linesize[1], s->linesize, s->uvlinesize); |                 pic_arg->linesize[1], s->linesize, s->uvlinesize); | ||||||
| 
 | 
 | ||||||
|         i = ff_find_unused_picture(s, direct); |         i = ff_find_unused_picture(s->avctx, s->picture, direct); | ||||||
|         if (i < 0) |         if (i < 0) | ||||||
|             return i; |             return i; | ||||||
| 
 | 
 | ||||||
| @ -1528,7 +1528,7 @@ no_output_pic: | |||||||
|             // one & ensure that the shared one is reuseable
 |             // one & ensure that the shared one is reuseable
 | ||||||
| 
 | 
 | ||||||
|             Picture *pic; |             Picture *pic; | ||||||
|             int i = ff_find_unused_picture(s, 0); |             int i = ff_find_unused_picture(s->avctx, s->picture, 0); | ||||||
|             if (i < 0) |             if (i < 0) | ||||||
|                 return i; |                 return i; | ||||||
|             pic = &s->picture[i]; |             pic = &s->picture[i]; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user