[Libav-user] Applied pad on the decoded frame

Dolevo Jay cmst at live.com
Wed Oct 16 17:03:35 CEST 2013


Hi,

If your raw file is in yuv 420 format, you can simply read from the file as if you are reading from a text file and push it into the encoder. The important thing here is going to be how many bytes to read but you can calculate it by looking at the resolution information. If your raw file contains RGB frames, you need to convert them first to yuv420 before pushing into encoder. If you need further help, you may send a private email.

Date: Wed, 16 Oct 2013 16:28:29 +0200
From: francesco.damato7 at gmail.com
To: libav-user at ffmpeg.org
Subject: Re: [Libav-user] Applied pad on the decoded frame

Hi Dolevo Jay,
i have a avi and mp4 file. The avcodec_encode_video2 function takes input raw video data from frame, so i demux my file and i obtain a raw video file; now i want encode it, so how i can open the raw file, read the raw frames and encode them into h264??

Thanks for your help!! 
Regards

2013/10/15 Dolevo Jay <cmst at live.com>






> From: bruce at spearmorgan.com
> Date: Mon, 14 Oct 2013 15:47:05 -0700
> To: libav-user at ffmpeg.org

> Subject: Re: [Libav-user] Applied pad on the decoded frame
> 
> On Oct 14, 2013, at 4:46 AM, Dolevo Jay <cmst at live.com> wrote:

> 
> > I have encoder and decoder application in separate projects. I use x264 to encode the incoming frames and use libav to decode them. If the frame has a specific resolution like 1366 x 768, the decode frame contains extra black border at the right side of the frame. I have debugged it and realized that the av_pic.linesize[0] is 50 more than the linesize during the encoding. 

> > Here is the code:
> > 
> >            lengthDec = avcodec_decode_video2(c1, av_pic, &pic, &pkt);
> >     if (pic)
> >        {
> >        avpicture_fill((AVPicture *)rgbFrame, RGBimg, PIX_FMT_RGB32, w, h);

> >        sws_scale(ctx, av_pic->data, av_pic->linesize, 0, h, rgbFrame->data, rgbFrame->linesize);
> >        }
> > 
> > So, in this code, I decode the packet and convert the decoded data into the rgb. 

> > Why does the avcodec_decode_video2 returns a padded linesize?
> > Could anyone tell me how I can eliminate the black border?
> 
> The actual encoded data has padding, added to make encoding and decoding more efficient. The returned frame has the padding still, since it's more efficient again - just decoding into a buffer without having to copy all the lines.

> 
> That's very standard. Expect to see that in almost all codecs and frame sizes.
> 
> You need to use the viewable width, not the linesize when scaling.
> 
> Bruce
> _______________________________________________

> Libav-user mailing list
> Libav-user at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/libav-user



Thanks for your reply. I have described the problem in detail with some pictures here: http://forum.doom9.org/showthread.php?t=169036

It is really strange that it produces no black part (bar) when I set the width = width+1 when calling sws_getContext. Could it be a bug in swscale since I do no scaling?

Thanks a lot.
 		 	   		  


_______________________________________________

Libav-user mailing list

Libav-user at ffmpeg.org

http://ffmpeg.org/mailman/listinfo/libav-user




-- 
Francesco Damato


_______________________________________________
Libav-user mailing list
Libav-user at ffmpeg.org
http://ffmpeg.org/mailman/listinfo/libav-user 		 	   		  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://ffmpeg.org/pipermail/libav-user/attachments/20131016/c4aba728/attachment.html>


More information about the Libav-user mailing list