On 2012-03-23 15:03:03 -0700, Ronald S. Bultje wrote: > From: "Ronald S. Bultje" <[email protected]> > > --- > avconv.c | 10 ++++++---- > libavcodec/pthread.c | 4 ++++ > libavcodec/utils.c | 8 +++----- > 3 files changed, 13 insertions(+), 9 deletions(-) > > diff --git a/avconv.c b/avconv.c > index b83662c..9e4e19f 100644 > --- a/avconv.c > +++ b/avconv.c > @@ -424,9 +424,8 @@ static void reset_options(OptionsContext *o) > init_opts(); > } > > -static int alloc_buffer(InputStream *ist, FrameBuffer **pbuf) > +static int alloc_buffer(InputStream *ist, AVCodecContext *s, FrameBuffer > **pbuf) > { > - AVCodecContext *s = ist->st->codec; > FrameBuffer *buf = av_mallocz(sizeof(*buf)); > int i, ret; > const int pixel_size = > av_pix_fmt_descriptors[s->pix_fmt].comp[0].step_minus1+1; > @@ -502,7 +501,7 @@ static int codec_get_buffer(AVCodecContext *s, AVFrame > *frame) > FrameBuffer *buf; > int ret, i; > > - if (!ist->buffer_pool && (ret = alloc_buffer(ist, &ist->buffer_pool)) < > 0) > + if (!ist->buffer_pool && (ret = alloc_buffer(ist, s, &ist->buffer_pool)) > < 0) > return ret; > > buf = ist->buffer_pool; > @@ -511,7 +510,7 @@ static int codec_get_buffer(AVCodecContext *s, AVFrame > *frame) > if (buf->w != s->width || buf->h != s->height || buf->pix_fmt != > s->pix_fmt) { > av_freep(&buf->base[0]); > av_free(buf); > - if ((ret = alloc_buffer(ist, &buf)) < 0) > + if ((ret = alloc_buffer(ist, s, &buf)) < 0) > return ret; > } > buf->refcount++; > @@ -520,6 +519,9 @@ static int codec_get_buffer(AVCodecContext *s, AVFrame > *frame) > frame->type = FF_BUFFER_TYPE_USER; > frame->extended_data = frame->data; > frame->pkt_pts = s->pkt ? s->pkt->pts : AV_NOPTS_VALUE; > + frame->width = buf->w; > + frame->height = buf->h; > + frame->format = buf->pix_fmt; > > for (i = 0; i < FF_ARRAY_ELEMS(buf->data); i++) { > frame->base[i] = buf->base[i]; // XXX h264.c uses base though > it shouldn't > diff --git a/libavcodec/pthread.c b/libavcodec/pthread.c > index 2e4c6a8..19effa9 100644 > --- a/libavcodec/pthread.c > +++ b/libavcodec/pthread.c > @@ -955,6 +955,10 @@ int ff_thread_get_buffer(AVCodecContext *avctx, AVFrame > *f) > ff_thread_finish_setup(avctx); > } > > + if (err) { > + free_progress(f); > + f->thread_opaque = NULL; > + } > pthread_mutex_unlock(&p->parent->buffer_mutex); > > return err; > diff --git a/libavcodec/utils.c b/libavcodec/utils.c > index a638bbf..d598748 100644 > --- a/libavcodec/utils.c > +++ b/libavcodec/utils.c > @@ -392,11 +392,6 @@ static int video_get_buffer(AVCodecContext *s, AVFrame > *pic) > buf = &avci->buffer[avci->buffer_count]; > > if(buf->base[0] && (buf->width != w || buf->height != h || buf->pix_fmt > != s->pix_fmt)){ > - if(s->active_thread_type&FF_THREAD_FRAME) { > - av_log_missing_feature(s, "Width/height changing with frame > threads is", 0); > - return -1; > - } > - > for (i = 0; i < AV_NUM_DATA_POINTERS; i++) { > av_freep(&buf->base[i]); > buf->data[i]= NULL; > @@ -480,6 +475,9 @@ static int video_get_buffer(AVCodecContext *s, AVFrame > *pic) > } > pic->extended_data = pic->data; > avci->buffer_count++; > + pic->width = buf->width; > + pic->height = buf->height; > + pic->format = buf->pix_fmt; > > if(s->pkt) pic->pkt_pts= s->pkt->pts; > else pic->pkt_pts= AV_NOPTS_VALUE;
ok Janne _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
