Just like my reply for another thread, the keys are the input and output for sws_scale().
1, nFrame = avcodec_alloc_frame(); avcodec_alloc_frame(), it can NOT know what exactly you want to do. It don'know you want RGB24 frame, so how it can alloc RGB24 frame? 2 and in sws_scale : the nFrame->data, and nFrame->linesize here, you can print or dump them to see what are they, 1 & 2 are not enough to let sws_scale know what you want. For output frame, you need to allocate memory for nFrame->data according to your image, width*height*(24/8) and you need to give the values of nFrame->linesize[4]. On Sun, Nov 14, 2010 at 8:49 AM, George Smart <[email protected]>wrote: > Hi All, > > I am trying to convert from YUV420P to RGB24 with /sws_scale/. The source > video is from an AVI file, via /avcodec_decode_video2()/. I get a > segmentation fault every time, and am at a complete loss. If anyone can > suggest anything I would be greatly appreciative. I have followed various > tutorials and looked at many different examples. I am sure it's a simple > mistake I'm making. My /sws_getContext()/ Call is as follows: > > swsC = sws_getContext( pCodecCtx->width, // Source width > pCodecCtx->height, // > Source height > //pFrame->pict_type, // > Source format (maybe PIX_FMT_YUV420P) > pCodecCtx->pix_fmt, // Source > format (maybe PIX_FMT_YUV420P) > pCodecCtx->width, // Dest > width > pCodecCtx->height, // Dest > height > PIX_FMT_RGB24, // Dest > format > > SWS_FAST_BILINEAR+SWS_PRINT_INFO, // Transform Type (choose from SWS > FLAGS) > NULL, NULL, NULL); // > Filters & Pointer Setup (NULL chooses defaults for last 3 options) > > After checking /swsC/ this is used directly in the /sws_scale()/ call, as > follows: > > sws_scale( swsC, // SwsContext - > Setup for scaling > (const uint8_t* const*) pFrame->data, // > Source frame data (cast to required type) > pFrame->linesize, // > Source frame stride > 0, // > Source frame slice width (raster, so no width slicing) > pCodecCtx->height, // > Source frame slice height > nFrame->data, // > Dest frame data > nFrame->linesize); // > Dest frame stride > > In the above line(s), I get the SEG fault - every time. > > Any pointers (no pun intended) would be greatly received. Full Program > Listing, here: http://www.ee.ucl.ac.uk/~zceed42/gs.html < > http://www.ee.ucl.ac.uk/%7Ezceed42/gs.html> > > Thanks, Regards, > George Smart. > _______________________________________________ > libav-user mailing list > [email protected] > https://lists.mplayerhq.hu/mailman/listinfo/libav-user > _______________________________________________ libav-user mailing list [email protected] https://lists.mplayerhq.hu/mailman/listinfo/libav-user
