diff sv/videoio/SDL_ffmpeg.cpp @ 150:c946c19e6329

(none)
author ivand_qmul
date Wed, 14 Nov 2007 15:11:46 +0000
parents 3b2b790e47e5
children 2ac52ea3c1c4
line wrap: on
line diff
--- a/sv/videoio/SDL_ffmpeg.cpp	Wed Nov 14 10:41:46 2007 +0000
+++ b/sv/videoio/SDL_ffmpeg.cpp	Wed Nov 14 15:11:46 2007 +0000
@@ -46,7 +46,7 @@
 
 //const int SDL_FFMPEG_MAX_BUFFERED_FRAMES = 25;
 //const int SDL_FFMPEG_MAX_BUFFERED_SAMPLES = 512 * 512;
-
+extern float zoomFivan;
 int FFMPEG_init_was_called = 0;
 FILE *pFile, *tFile;
 int64_t Time,Time1;
@@ -609,10 +609,16 @@
                 // if new timestamp is from future, we proceed
 			//	if(buf->timestamp >= SDL_ffmpegGetPosition(file)) 
 			//	{
-					if (img_convert_ctx == NULL) {
+				int w=320*zoomFivan;
+				int h=240*zoomFivan;
+				if ((w>file->vs[file->videoStream]->width)||(h>file->vs[file->videoStream]->height)){
+					w=file->vs[file->videoStream]->width;
+					h=file->vs[file->videoStream]->height;
+				}
+				if (img_convert_ctx == NULL) {
 							img_convert_ctx = sws_getContext(file->vs[file->videoStream]->width, file->vs[file->videoStream]->height,
                                                  ((AVCodecContext*)file->vs[file->videoStream]->_ffmpeg)->pix_fmt,
-                                                 file->vs[file->videoStream]->width, file->vs[file->videoStream]->height,
+                                                 w,h,
                                                  file->vs[file->videoStream]->pixFmt,
                                                  sws_flags, NULL, NULL, NULL);
 							if (img_convert_ctx == NULL) {
@@ -621,9 +627,11 @@
 							}
 					}
 				
+					((AVPicture*)inFrameRGB)->linesize[0]=(int)w*3;
 				sws_scale(img_convert_ctx, ((AVPicture*)inFrame)->data, ((AVPicture*)inFrame)->linesize,
                       0, file->vs[file->videoStream]->height, ((AVPicture*)inFrameRGB)->data, ((AVPicture*)inFrameRGB)->linesize);
-				
+				 sws_freeContext(img_convert_ctx);
+				 img_convert_ctx=NULL;
                     // we convert whatever type of data we got to RGB24
                   /* img_convert((AVPicture*)inFrameRGB,
                         file->vs[file->videoStream]->pixFmt,
@@ -634,13 +642,13 @@
 */
                     // allocate image room
                     buf->img = SDL_CreateRGBSurface(SDL_SWSURFACE,
-                        file->vs[file->videoStream]->width,
-                        file->vs[file->videoStream]->height,
+                        w,
+                        h,
                         24, 0x0000FF, 0x00FF00, 0xFF0000, 0);
 
                     // copy image data to image room
                     memcpy(buf->img->pixels, inFrameRGB->data[0],
-                        file->vs[file->videoStream]->width * file->vs[file->videoStream]->height * 3);
+                        w*h* 3);
 					file->timebase=buf->timestamp-file->vs[file->videoStream]->lastTimeStamp;
                     // we write the lastTimestamp we got
                     file->vs[file->videoStream]->lastTimeStamp = buf->timestamp;