+/* fill padd code from ffmpeg */
+static int padcolor[3] = { 16, 128, 128 };
+
+/* Expects img to be yuv420 */
+static void fill_pad_region( AVPicture* img, int height, int width,
+ int padtop, int padbottom, int padleft, int padright, int *color )
+{
+ int i, y, shift;
+ uint8_t *optr;
+
+ for ( i = 0; i < 3; i++ )
+ {
+ shift = ( i == 0 ) ? 0 : 1;
+
+ if ( padtop || padleft )
+ {
+ memset( img->data[i], color[i], ( ( ( img->linesize[i] * padtop ) +
+ padleft ) >> shift) );
+ }
+
+ if ( padleft || padright )
+ {
+ optr = img->data[i] + ( img->linesize[i] * ( padtop >> shift ) ) +
+ ( img->linesize[i] - ( padright >> shift ) );
+
+ for ( y = 0; y < ( ( height - ( padtop + padbottom ) ) >> shift ); y++ )
+ {
+ memset( optr, color[i], ( padleft + padright ) >> shift );
+ optr += img->linesize[i];
+ }
+ }
+
+ if (padbottom)
+ {
+ optr = img->data[i] + ( img->linesize[i] * ( ( height - padbottom ) >> shift ) );
+ memset( optr, color[i], ( ( img->linesize[i] * padbottom ) >> shift ) );
+ }
+ }
+}
+
+/* Workaround, because old libavcodec doesnt know how to padd */
+static void img_resample_padd( ImgReSampleContext *s, AVPicture *output,
+ const AVPicture *input, int padtop, int padleft )
+{
+ AVPicture nopadd_pic = *output;
+
+ /* shift out top and left padding for old ffmpeg */
+ nopadd_pic.data[0] += ( nopadd_pic.linesize[0] * padtop + padleft );
+ nopadd_pic.data[1] += ( nopadd_pic.linesize[1] * padtop + padleft ) >> 1;
+ nopadd_pic.data[2] += ( nopadd_pic.linesize[2] * padtop + padleft ) >> 1;
+ img_resample( s, &nopadd_pic, input );
+}
+
+