aboutsummaryrefslogtreecommitdiffhomepage
path: root/libvo
diff options
context:
space:
mode:
authorGravatar nick <nick@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-02-18 18:37:39 +0000
committerGravatar nick <nick@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-02-18 18:37:39 +0000
commitf99f534bdb9dd671d06dad26c4e9ecfe79d66fc7 (patch)
tree96b7fe8943a22c740942d521e36be53a6d39e715 /libvo
parentf564da98d07d1b46f5ab4bb5c20a4c9f9a0da5a9 (diff)
Screenshot on the fly
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@4757 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libvo')
-rw-r--r--libvo/vo_fbdev.c54
1 files changed, 54 insertions, 0 deletions
diff --git a/libvo/vo_fbdev.c b/libvo/vo_fbdev.c
index 9af52d6f45..d3c5c0433a 100644
--- a/libvo/vo_fbdev.c
+++ b/libvo/vo_fbdev.c
@@ -33,6 +33,10 @@
#endif
#include "aspect.h"
+#ifdef HAVE_PNG
+extern vo_functions_t video_out_png;
+#endif
+
LIBVO_EXTERN(fbdev)
static vo_info_t vo_info = {
@@ -87,6 +91,7 @@ static FILE *fp;
static int line_num = 0;
static char *line;
static char *token[MAX_NR_TOKEN];
+static uint32_t dstFourcc;
static int get_token(int num)
{
@@ -996,15 +1001,20 @@ static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width,
switch (fb_bpp) {
case 32:
draw_alpha_p = vo_draw_alpha_rgb32;
+ dstFourcc = IMGFMT_BGR32;
break;
case 24:
draw_alpha_p = vo_draw_alpha_rgb24;
+ dstFourcc = IMGFMT_BGR24;
break;
+ default:
case 16:
draw_alpha_p = vo_draw_alpha_rgb16;
+ dstFourcc = IMGFMT_BGR16;
break;
case 15:
draw_alpha_p = vo_draw_alpha_rgb15;
+ dstFourcc = IMGFMT_BGR15;
break;
}
@@ -1339,11 +1349,55 @@ static uint32_t preinit(const char *arg)
if(!pre_init_err) return (pre_init_err=(fb_preinit()?0:-1));
}
+#ifdef HAVE_PNG
+static int fbdev_screenshot(void)
+{
+ uint32_t i;
+ uint8_t *ptrs[fb_vinfo.yres];
+ if(video_out_png.preinit(NULL))
+ {
+ printf("\nvo_fbdev: can't preinit vo_png\n");
+ return 1;
+ }
+ if(!video_out_png.control(VOCTRL_QUERY_FORMAT, &dstFourcc))
+ {
+ printf("\nvo_fbdev: vo_png doesn't support: %s fourcc\n",vo_format_name(dstFourcc));
+ return 1;
+ }
+ if(video_out_png.config(fb_vinfo.xres,
+ fb_vinfo.yres,
+ fb_vinfo.xres,
+ fb_vinfo.yres,
+ 0,NULL,dstFourcc,NULL))
+ {
+ printf("\nvo_fbdev: can't configure vo_png\n");
+ return 1;
+ }
+ ptrs[0] = L123123875;
+ for(i=1;i<fb_vinfo.yres;i++)
+ ptrs[i] = ptrs[i-1]+fb_line_len;
+ if(video_out_png.draw_frame(ptrs))
+ {
+ printf("\nvo_fbdev: vo_png: error during dumping\n");
+ return 1;
+ }
+
+ video_out_png.uninit();
+ if(verbose) printf("\nvo_fbdev: png output has been created\n");
+ return 0;
+}
+#endif
+
static uint32_t control(uint32_t request, void *data, ...)
{
switch (request) {
case VOCTRL_QUERY_FORMAT:
return query_format(*((uint32_t*)data));
+#ifdef HAVE_PNG
+ case VOCTRL_SCREENSHOT:
+ return fbdev_screenshot();
+ break;
+#endif
}
return VO_NOTIMPL;
}