[Ffmpeg-devel] swscale and palette ... what am I missing?

Michael Niedermayer michaelni
Wed Feb 28 00:04:41 CET 2007


Hi

On Tue, Feb 27, 2007 at 11:33:02PM +0100, Karl H. Beckers wrote:
> Hi all,
> 
> I'm trying to convert a pal8 frame to yuv420p using libswscale rather
> than converting it to rbg myself. From what I'm reading in the archives
> I kinda think this should be possible, but I'm not getting past a
> segfault in swScale_MMX with input_pixfmt = PIX_FMT_PAL8 where RGBx work
> nicely.
> 
> I'm setting up my frame like the following, contiguous char data in
> data[0], linesize in bytes in linesize[0] and pointer to palette as arbg
> (with alpha always 0) in data[1]:
>             avpicture_fill ((AVPicture *) p_inpic, scratchbuf8bit,
>                             input_pixfmt, image->width, image->height);
>             p_inpic->data[0] = scratchbuf8bit;
>             p_inpic->linesize[0] = image->width;
>             p_inpic->data[1] = job->color_table;
> 
> then I construct my SwsContext:
>             img_resample_ctx = sws_getContext (image->width,
>                                                image->height,
>                                                input_pixfmt,
>                                                out_st->codec->width,
>                                                out_st->codec->height,
>                                                out_st->codec->pix_fmt,1,
>                                                NULL, NULL, NULL);
> 
> and later call the sws_scale function:
>     if (sws_scale (img_resample_ctx, p_inpic->data, p_inpic->linesize,
>                    0, image->height, p_outpic->data, p_outpic->linesize)
>  		< 0) {
>         fprintf (stderr, .......
> 
> 
> this always yields a segfault immediately:
> 
> Program terminated with signal 11, Segmentation fault.
> #0  0x0836dd0f in swScale_MMX (c=0x87f2ca0, src=0x87c5490,
> srcStride=0xb639228c, srcSliceY=0, srcSliceH=144, dst=0x87c5570,
> dstStride=0xb6392298)
>     at swscale_template.c:2288
> 2288                    int b= pal[d]     &0xFF;
> 
> 
> Trying to debug this:
> 
> Starting program: /home/kb87850/xvidcap/bin/xvidcap 
> [Thread debugging using libthread_db enabled]
> [New Thread -1221232448 (LWP 7570)]
> [New Thread -1238369376 (LWP 7571)]
> [mpeg4 @ 0x8444f60]removing common factors from framerate
> [New Thread -1248855136 (LWP 7572)]
> [Switching to Thread -1238369376 (LWP 7571)]
> 
> Breakpoint 1, swScale_MMX (c=0xb5950fc0, src=0xb5935910,
> srcStride=0xb62ff28c, srcSliceY=0, srcSliceH=144, dst=0xb593c9e0,
> dstStride=0xb62ff298)
>     at swscale_template.c:2285
> 2285            for(i=0; i<width; i++)
> (gdb) print i
> $7 = <value optimized out>
> (gdb) print width
> No symbol "width" in current context.
> (gdb) step
> 2288                    int b= pal[d]     &0xFF;
> (gdb) print d
> No symbol "d" in current context.
> (gdb) print src[0]
> $8 = (uint8_t *) 0xb59359d8 ""
> (gdb) print /d src[0]
> $9 = 3046332888
> (gdb) print pal
> $10 = (uint8_t *) 0x0
> (gdb) print *pal
> Cannot access memory at address 0x0
> (gdb) print pal[3046332888]
> $11 = 0 '\0'
> 
> 
> comparing with the relevant code in swscale_template.c:
> 
> static inline void RENAME(palToY)(uint8_t *dst, uint8_t *src, int width,
> uint32_t *pal)
> {
>         int i;
>         for(i=0; i<width; i++) 
>         {    
>                 int d= src[i];
>                 int b= pal[d]     &0xFF;
>                 int g=(pal[d]>>8 )&0xFF;
>                 int r= pal[d]>>16;
> av_log(NULL, AV_LOG_DEBUG, "i: %i\n", i);
> 
>                 dst[i]= ((RY*r + GY*g + BY*b)>>RGB2YUV_SHIFT) + 16;
>         }    
> }
> 
> in gdb I see neither width nor stepping through the program see the line
> "int d= src[i];" at all. pal seems to be a NULL pointer, but I don't
> know why ... the palette needs to go in AVFrame.data[1] after all,
> doesn't it?
> 
> Am I missing anything obvious?

hmm dunno, very quickly looking at your mail it looks all ok, i suggest you
place a few random av_log() in the code to see where the non zero pal becomes
NULL

and of course a patch to fix this is very welcome if its a bug :)

[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Why not whip the teacher when the pupil misbehaves? -- Diogenes of Sinope
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20070228/5293bcc2/attachment.pgp>



More information about the ffmpeg-devel mailing list