1. You need a context

pCodex is the codec you want to scale something by(input video)

These are the dst parameteres (our resulting video)
nVidWidth, nVidHeight, PIX_FMT_RGB24

pSWSContext = sws_getContext(pCodecCtx->width, pCodecCtx->height, 
pCodecCtx->pix_fmt, nVidWidth, nVidHeight, PIX_FMT_RGB24, SWS_BILINEAR, 0, 0, 
0);

2. scale the decoded video into the rgb video buffer

//Scale the raw data/convert it to our video buffer...
 sws_scale(pSWSContext, pRAWFrame->data, pRAWFrame->linesize, 0, 
pCodecCtx->height, pRGBFrame->data, pRGBFrame->linesize);

3. free context when done or video size result changes.
av_free

4. done.

-Michael
________________________________________
From: [email protected] [[email protected]] On 
Behalf Of Mike Chen [[email protected]]
Sent: Friday, August 21, 2009 9:48 PM
To: Libav* user questions and discussions
Subject: [BULK]  [libav-user] How to use sws_scale in place of img_convert?

I'm following the tutorial on ffmpeg's documentation.
In tutorial01.c I couldn't compile because img_convert is deprecated.

Can some one show me how to rewrite the function with sws_scale?

Code were:

int frameFinished;AVPacket
<http://www.dranger.com/ffmpeg/data.html#AVPacket> packet;

i=0;
while(av_read_frame
<http://www.dranger.com/ffmpeg/functions.html#av_read_frame>(pFormatCtx,
&packet)>=0) {
  // Is this a packet from the video stream?
  if(packet.stream_index==videoStream) {
        // Decode video frame
    avcodec_decode_video
<http://www.dranger.com/ffmpeg/functions.html#avcodec_decode_video>(pCodecCtx,
pFrame, &frameFinished,
                         packet.data, packet.size);

    // Did we get a video frame?
    if(frameFinished) {
    // Convert the image from its native format to RGB
        img_convert
<http://www.dranger.com/ffmpeg/functions.html#img_convert>((AVPicture
<http://www.dranger.com/ffmpeg/data.html#AVPicture> *)pFrameRGB,
PIX_FMT_RGB24,
            (AVPicture
<http://www.dranger.com/ffmpeg/data.html#AVPicture>*)pFrame,
pCodecCtx->pix_fmt,
                        pCodecCtx->width, pCodecCtx->height);

        // Save the frame to disk
        if(++i<=5)
          SaveFrame(pFrameRGB, pCodecCtx->width,
                    pCodecCtx->height, i);
    }
  }

  // Free the packet that was allocated by av_read_frame
<http://www.dranger.com/ffmpeg/functions.html#av_read_frame>
  av_free_packet
<http://www.dranger.com/ffmpeg/functions.html#av_free_packet>(&packet);
}

//This line:

img_convert 
<http://www.dranger.com/ffmpeg/functions.html#img_convert>((AVPicture
<http://www.dranger.com/ffmpeg/data.html#AVPicture> *)pFrameRGB,
PIX_FMT_RGB24,
            (AVPicture
<http://www.dranger.com/ffmpeg/data.html#AVPicture>*)pFrame,
pCodecCtx->pix_fmt,
                        pCodecCtx->width, pCodecCtx->height);
_______________________________________________
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

Reply via email to