[FFmpeg-devel] [PATCH]Fix linesize for pix_fmt pal8

Michael Niedermayer michaelni at gmx.at
Tue Jul 3 17:57:45 CEST 2012


On Sat, Jun 30, 2012 at 11:41:39PM +0200, Stefano Sabatini wrote:
> On date Wednesday 2012-06-20 07:33:04 +0000, Carl Eugen Hoyos encoded:
> > Stefano Sabatini <stefasab <at> gmail.com> writes:
> > 
> > > Check attached patch, it should fix the problem when coupled 
> > > with the new imgutils functions.
> > 
> > The patch breaks decoding some of the samples from ticket #823.
> 
> New try (I still don't like very much this approach), but at least I
> realized that changing the pal8 output alignment is just wrong. And we
> could use a better heuristic for detecting the linesize (for example
> iterating the loop:
> aligned_size(A) <= buf_size && aligned_size(A+1) >= buf_size
> => choose A
> 
> and may be also useful to be able to override the alignment in case of
> need (working on a patch for that).
> 
> But apart from this I see more failures with other formats:
> ffmpeg -i tests/lena.pnm -s 257x257 -vcodec rawvideo -pix_fmt PIX_FMT -y out.avi
> 
> in particular with formats monob, rgb565, rgb24, still investigating
> (hints are welcome).
> -- 
> FFmpeg = Frenzy & Fascinating Monstrous Prodigious Elastic Ghost

>  rawdec.c |   23 +++++++++++++++--------
>  1 file changed, 15 insertions(+), 8 deletions(-)
> c02246ed0069dbe581c989237cc382e919c87a20  0004-lavc-rawdec-fix-palette-alignment-setting.patch
> From dc6fd4caa5b7ee4925845785fab67a697f24aeb0 Mon Sep 17 00:00:00 2001
> From: Stefano Sabatini <stefasab at gmail.com>
> Date: Sat, 30 Jun 2012 19:50:48 +0200
> Subject: [PATCH] lavc/rawdec: fix palette alignment setting
> 
> ---
>  libavcodec/rawdec.c |   23 +++++++++++++++--------
>  1 files changed, 15 insertions(+), 8 deletions(-)
> 
> diff --git a/libavcodec/rawdec.c b/libavcodec/rawdec.c
> index a0211b6..91135fc 100644
> --- a/libavcodec/rawdec.c
> +++ b/libavcodec/rawdec.c
> @@ -217,15 +217,22 @@ static int raw_decode(AVCodecContext *avctx,
>              frame->palette_has_changed = 1;
>          }
>      }
> -    if((avctx->pix_fmt==PIX_FMT_BGR24    ||
> -        avctx->pix_fmt==PIX_FMT_GRAY8    ||
> -        avctx->pix_fmt==PIX_FMT_RGB555LE ||
> -        avctx->pix_fmt==PIX_FMT_RGB555BE ||
> -        avctx->pix_fmt==PIX_FMT_RGB565LE ||
> +    if (avctx->pix_fmt==PIX_FMT_BGR24     ||
> +        avctx->pix_fmt==PIX_FMT_GRAY8     ||
> +        avctx->pix_fmt==PIX_FMT_RGB555LE  ||
> +        avctx->pix_fmt==PIX_FMT_RGB555BE  ||
> +        avctx->pix_fmt==PIX_FMT_RGB565LE  ||
>          avctx->pix_fmt==PIX_FMT_MONOWHITE ||
> -        avctx->pix_fmt==PIX_FMT_PAL8) &&
> -        FFALIGN(frame->linesize[0], linesize_align)*avctx->height <= buf_size)
> -        frame->linesize[0] = FFALIGN(frame->linesize[0], linesize_align);
> +        avctx->pix_fmt==PIX_FMT_PAL8) {
> +        int aligned_plane_size = FFALIGN(frame->linesize[0], linesize_align)*avctx->height;
> +        int plane_buf_size = avctx->pix_fmt == PIX_FMT_PAL8 && !context->buffer ?
> +            buf_size - AVPALETTE_SIZE : buf_size;
> +        if (aligned_plane_size < plane_buf_size) {
                                 ^^^
> +            av_log(avctx, AV_LOG_DEBUG, "aligned plane size %d <= plane buffer size %d, assuming alignment of %d\n",
                                                                 ^^^^

mismatch

otherwise if it works it should be ok

[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Frequently ignored awnser#1 FFmpeg bugs should be sent to our bugtracker. User
questions about the command line tools should be sent to the ffmpeg-user ML.
And questions about how to use libav* should be sent to the libav-user ML.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20120703/81024566/attachment.asc>


More information about the ffmpeg-devel mailing list