On 16/11/2010 13:01, Tomas Härdin wrote:
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


_______________________________________________
libav-user mailing list
[email protected]
https://lists.mplayerhq.hu/mailman/listinfo/libav-user
Hi Guys

Thanks for your help - that worked perfectly!

Mark.

_______________________________________________
libav-user mailing list
[email protected]
https://lists.mplayerhq.hu/mailman/listinfo/libav-user

Reply via email to