On 2014-01-03 15:07:44 +0100, Anton Khirnov wrote:
> Allocating edges will be removed from generic code, so the encoder must
> handle this explicitly.
> ---
>  libavcodec/mpegvideo.c |   22 ++++++++++++++++++++--
>  1 file changed, 20 insertions(+), 2 deletions(-)
> 
> diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c
> index caf8ca2..484dba4 100644
> --- a/libavcodec/mpegvideo.c
> +++ b/libavcodec/mpegvideo.c
> @@ -422,15 +422,21 @@ fail:
>   */
>  static int alloc_frame_buffer(MpegEncContext *s, Picture *pic)
>  {
> +    int edges_needed = av_codec_is_encoder(s->avctx->codec);
>      int r, ret;
>  
>      pic->tf.f = &pic->f;
>      if (s->codec_id != AV_CODEC_ID_WMV3IMAGE &&
>          s->codec_id != AV_CODEC_ID_VC1IMAGE  &&
> -        s->codec_id != AV_CODEC_ID_MSS2)
> +        s->codec_id != AV_CODEC_ID_MSS2) {
> +        if (edges_needed) {
> +            pic->f.width  = s->avctx->width  + 2 * EDGE_WIDTH;
> +            pic->f.height = s->avctx->height + 2 * EDGE_WIDTH;

is s->avctx->width/height guaranteed to be multiple of the macroblock
size? iirc get_buffer aligned the dimension in addition to adding edges.

Janne
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to