On Tue, 2010-11-16 at 12:52 +0000, Mark Kenna wrote: > > On 16/11/2010 12:48, Tomas Härdin wrote: > > On Tue, 2010-11-16 at 12:41 +0000, Mark Kenna wrote: > >> On 16/11/2010 12:34, Tomas Härdin wrote: > >>> On Tue, 2010-11-16 at 12:28 +0000, Mark Kenna wrote: > >>>> On 16/11/2010 12:24, sq.cheng wrote: > >>>>> use the video decode to do it > >>>>> just like decoding mpeg4 or h.264, with the JPEG codec id(I don't > >>>>> remember > >>>>> what's name, something like MJPEG) > >>>>> then decode one frame, it will output one yuv frame, > >>>>> and it seems I once met the output is yuyv, according to the input > >>>>> image. > >>>>> > >>>>> > >>>>> On Tue, Nov 16, 2010 at 8:11 PM, Mark Kenna< > >>>>> [email protected]> wrote: > >>>>> > >>>>>> Hi Guys > >>>>>> > >>>>>> Does anyone know if it's possible to convert a JPEG to YUV frame simply > >>>>>> using LibAv*? Currently I am converting to a Bitmap and converting the > >>>>>> RGB > >>>>>> data to a YUV frame using sws. If there is a simpler (and more > >>>>>> efficient) > >>>>>> method I would love to know about it. > >>>>>> > >>>>>> Thanks, > >>>>>> Mark. > >>>>>> > >>>>>> _______________________________________________ > >>>>>> 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-useriewsystems.com/support > >>>> Interesting - I will give it a try. If someone could specify the exact > >>>> codec to use I would appreciate it. > >>>> > >>>> Thanks, > >>>> Mark. > >>> Use the mjpeg decoder (CODEC_ID_MJPEG). It should work fine. > >>> > >>> Also, since jpeg supports a number of YUV formats you might want to make > >>> sure your input is in the format you want. Otherwise you will have to > >>> use libswscale anyway. It's probably quite a bit faster converting YUV > >>> -> YUV than RGB -> YUV though. > >>> > >>> /Tomas > >>> > >>> > >>> _______________________________________________ > >>> libav-user mailing list > >>> [email protected] > >>> https://lists.mplayerhq.hu/mailman/listinfo/libav-user > >> How exactly would one check the input format first? I would write it > >> like so: > >> > >> 1. Check input format, if YUV then just decode > >> 2. If input format != YUV, decode and then scale it to YUV > >> 3. Handle YUV > >> > >> Does that sound about right? > >> > >> Thanks, > >> Mark. > > Sort of. I assume you want normal YUV 4:2:0, aka PIX_FMT_YUV420P. > > Inspect AVCodecContext::pix_fmt to figure out whether you need to use > > libswscale or not. So: > > > > if(avctx->pix_fmt != PIX_FMT_YUV420P) { > > //setup libswscale to convert avctx->pix_fmt to PIX_FMT_YUV420P > > } > > > > Then later you just convert the output from the decoder if you need to, > > like for instance ffplay and libavformat/output-example.c do. > > > > /Tomas > > > > > > _______________________________________________ > > libav-user mailing list > > [email protected] > > https://lists.mplayerhq.hu/mailman/listinfo/libav-user > Understood. One thing that may cause an issue is that I will not be > using open_input_file on the JPEG, I will just have a byte buffer > containing the image. So, I would have to decode the image and then > check the pix format - shouldn't be a problem so long as I allocate a > buffer large enough to hold any decoded frame right? > > Cheers, > Mark.
lavc should allocate the decoded frame for you, at which point pix_fmt, width and height should be set. You can use the width and height to allocate the converted image using avpicture_alloc() if the pix_fmt isn't right. /Tomas
signature.asc
Description: This is a digitally signed message part
_______________________________________________ libav-user mailing list [email protected] https://lists.mplayerhq.hu/mailman/listinfo/libav-user
