/* * video_out_pgm.c, pgm interface * * * Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. * * Hacked into mpeg2dec by * * Aaron Holtzman * * 15 & 16 bpp support added by Franck Sicard * * Xv image suuport by Gerd Knorr */ #include #include #include #include #include "config.h" #include "video_out.h" #include "video_out_internal.h" static vo_info_t info = { "MD5 sum", "md5", "walken", "" }; LIBVO_EXTERN (md5) extern vo_functions_t video_out_pgm; extern char vo_pgm_filename[24]; static FILE * md5_file = NULL; static char * md5_filename = NULL; static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t fullscreen, char *title, uint32_t format) { md5_file = fopen (md5_filename?md5_filename:"md5", "w"); if (!md5_file) return -1; return video_out_pgm.config (width, height, d_width,d_height,fullscreen, title, format); } static void draw_osd(void) { } static void flip_page (void) { char buf2[100]; FILE * f; int i; video_out_pgm.flip_page(); snprintf (buf2, 100, "md5sum %s", vo_pgm_filename); f = popen (buf2, "r"); if (!f) { snprintf (buf2, 100, "md5 %s", vo_pgm_filename); f = popen(buf2, "r"); } if (f) { i = fread (buf2, 1, sizeof(buf2), f); pclose (f); fwrite (buf2, 1, i, md5_file); } remove (vo_pgm_filename); } //static uint32_t draw_slice(uint8_t * src[], uint32_t slice_num) static uint32_t draw_slice(uint8_t *image[], int stride[], int w,int h,int x,int y) { return video_out_pgm.draw_slice(image,stride,w,h,x,y); } //extern uint32_t output_pgm_frame (char * fname, uint8_t * src[]); static uint32_t draw_frame(uint8_t * src[]) { return 0; } static uint32_t query_format(uint32_t format) { return video_out_pgm.control(VOCTRL_QUERY_FORMAT, &format); } static void uninit(void) { video_out_pgm.uninit(); if (md5_file) { fflush(md5_file); fclose(md5_file); md5_file = NULL; } if (md5_filename) { free(md5_filename); md5_filename = NULL; } } static void check_events(void) { } static uint32_t preinit(const char *arg) { if(arg) md5_filename = strdup(arg); return 0; } static uint32_t control(uint32_t request, void *data, ...) { switch (request) { case VOCTRL_QUERY_FORMAT: return query_format(*((uint32_t*)data)); } return VO_NOTIMPL; }