mpegvideo: Rework various functions not to use MpegEncContext directly

This commit is contained in:
Vittorio Giovara 2015-04-27 22:09:21 +01:00
parent a3f4c930ac
commit 4e17946f10
4 changed files with 22 additions and 21 deletions

View File

@ -463,7 +463,7 @@ int ff_h263_decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
} }
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];

View File

@ -1612,18 +1612,18 @@ av_cold void ff_init_vlc_rl(RLTable *rl)
} }
} }
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->f->buf[0]) if (!pic->f->buf[0])
return 1; return 1;
@ -1632,18 +1632,18 @@ 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(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]) 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;
} }
} }
@ -1651,15 +1651,15 @@ static int find_unused_picture(MpegEncContext *s, int shared)
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
} }
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(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;
@ -1697,14 +1697,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;
@ -1771,7 +1771,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;
@ -1801,7 +1801,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;

View File

@ -742,7 +742,8 @@ void ff_mpeg_draw_horiz_band(MpegEncContext *s, int y, int h);
void ff_mpeg_flush(AVCodecContext *avctx); void ff_mpeg_flush(AVCodecContext *avctx);
void ff_print_debug_info(MpegEncContext *s, Picture *p); void ff_print_debug_info(MpegEncContext *s, Picture *p);
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);

View File

@ -994,7 +994,7 @@ static int load_input_picture(MpegEncContext *s, const AVFrame *pic_arg)
ff_dlog(s->avctx, "%d %d %td %td\n", pic_arg->linesize[0], ff_dlog(s->avctx, "%d %d %td %td\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;
@ -1379,7 +1379,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];