Mercurial > mplayer.hg
changeset 5877:93de400ad48e
libfame code removed (use -vop fame/-vop lavc), init code moved to preinit, height checks added to config()
author | arpi |
---|---|
date | Sun, 28 Apr 2002 00:24:15 +0000 |
parents | 5ebafc7f5efe |
children | 4c3956729446 |
files | libvo/vo_mpegpes.c |
diffstat | 1 files changed, 18 insertions(+), 210 deletions(-) [+] |
line wrap: on
line diff
--- a/libvo/vo_mpegpes.c Sun Apr 28 00:16:22 2002 +0000 +++ b/libvo/vo_mpegpes.c Sun Apr 28 00:24:15 2002 +0000 @@ -1,12 +1,6 @@ // Don't change for DVB card, it must be 2048 #define PES_MAX_SIZE 2048 -// 100=best >=80 very good >=50 fast -#define QUALITY 90 - -// #undef if you don't want mpeg1 transcoder (you'll be limited to mpeg1/2 playback only) -//#define USE_LIBFAME // now defined by configure - /* * Based on: * @@ -30,6 +24,7 @@ #include <fcntl.h> #include "config.h" +#include "mp_msg.h" #ifdef HAVE_DVB @@ -57,25 +52,6 @@ int vo_mpegpes_fd=-1; int vo_mpegpes_fd2=-1; -#ifdef USE_LIBFAME - -#include "../libfame/fame.h" - -static unsigned char *picture_buf=NULL; -static unsigned char *outbuf=NULL; -static int outbuf_size = 1000000; - -static int s_pos_x,s_pos_y; -static int d_pos_x,d_pos_y; - -static int osd_w,osd_h; - -static fame_parameters_t params; -static fame_yuv_t yuv; -static fame_context_t *ctx=NULL; - -#endif - static vo_info_t vo_info = { #ifdef HAVE_DVB @@ -92,6 +68,22 @@ config(uint32_t s_width, uint32_t s_height, uint32_t width, uint32_t height, uint32_t fullscreen, char *title, uint32_t format,const vo_tune_info_t *info) { #ifdef HAVE_DVB + switch(s_height){ + case 288: + case 576: + case 240: + case 480: + break; + default: + mp_msg(MSGT_VO,MSGL_ERR,"DVB: height=%d not supported (try 240/480 (ntsc) or 288/576 (pal)\n",s_height); + return -1; + } +#endif + return 0; +} + +static uint32_t preinit(const char *arg){ +#ifdef HAVE_DVB //|O_NONBLOCK if((vo_mpegpes_fd = open("/dev/ost/video",O_RDWR)) < 0){ perror("DVB VIDEO DEVICE: "); @@ -144,98 +136,6 @@ return -1; } #endif - -#ifdef USE_LIBFAME - picture_buf=NULL; -if(format==IMGFMT_YV12){ - int size; - - ctx=fame_open(); - if(!ctx){ - printf("FATAL: cannot open libFAME!\n"); - return -1; - } - - params.width=720; - params.height=576; - //params.coding="IPPPPP"; // seems to be buggy and eats more cpu - params.coding="I"; - params.quality=QUALITY; // 100=best >=80 very good >=50 fast - params.bitrate=0; // 6*1000000 // bitrate (X bits/sec), 0=VBR - params.slices_per_frame=1; - params.frames_per_sequence=25; //0xffffffff; - params.frame_rate_num=25; - params.frame_rate_den=1; - params.shape_quality=100; - params.search_range=8; // for "IPPP" only - params.verbose=0; - params.profile=NULL; // TODO - -#if 0 - params.width=width; - params.height=height; -#else - if(width<=352 && height<=288){ - params.width=352; - params.height=288; - } else - if(width<=352 && height<=576){ - params.width=352; - params.height=576; - } else - if(width<=480 && height<=576){ - params.width=480; - params.height=576; - } else - if(width<=544 && height<=576){ - params.width=544; - params.height=576; - } else { - params.width=704; - params.height=576; - } -#endif - - osd_w=s_width; - d_pos_x=(params.width-(int)s_width)/2; - if(d_pos_x<0){ - s_pos_x=-d_pos_x;d_pos_x=0; - osd_w=params.width; - } else s_pos_x=0; - - d_pos_y=(params.height-(int)s_height)/2; - if(d_pos_y<0){ - s_pos_y=-d_pos_y;d_pos_y=0; - osd_h=params.height; - } else { - s_pos_y=0; - osd_h=s_height+d_pos_y; - // if(d_pos_y) osd clear: s_height+d_pos_y .. params.height - } - - printf("[vo] position mapping: %d;%d => %d;%d\n",s_pos_x,s_pos_y,d_pos_x,d_pos_y); - - /* open it */ - - outbuf_size=10000+width*height; // must be enough! - outbuf = malloc(outbuf_size); - - fame_init(ctx,¶ms,outbuf,outbuf_size); - - size = params.width*params.height; - picture_buf = malloc((size * 3) / 2); /* size for YUV 420 */ - - memset(picture_buf,0,size); // clear Y - memset(picture_buf+size,128,size/2); // clear UV - - yuv.w=params.width; - yuv.h=params.height; - yuv.y=picture_buf; - yuv.u=yuv.y+size; - yuv.v=yuv.u+size/4; - -} -#endif return 0; } @@ -245,25 +145,8 @@ return &vo_info; } -#ifdef USE_LIBFAME -static void draw_alpha(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){ - int x,y; - vo_draw_alpha_yv12(w,h,src,srca,stride, - yuv.y+(x0+d_pos_x)+(y0+d_pos_y)*yuv.w,yuv.w); -} -#endif - static void draw_osd(void) { -#ifdef USE_LIBFAME - if(picture_buf){ // YV12 only: - // if(d_pos_y) osd clear: s_height+d_pos_y .. params.height - if(d_pos_y){ - memset(yuv.y+osd_h*yuv.w,0,(params.height-osd_h)*yuv.w); - } - vo_draw_text(osd_w,osd_h,draw_alpha); - } -#endif } @@ -425,70 +308,16 @@ static uint32_t draw_frame(uint8_t * src[]) { vo_mpegpes_t *p=(vo_mpegpes_t *)src[0]; - unsigned char *data=p->data; -// int tmp=-1; - send_pes_packet(p->data,p->size,p->id,p->timestamp); // video data -// send_pes_packet(&tmp,0,0x1C0,p->timestamp+30000); // fake audio data - + send_pes_packet(p->data,p->size,p->id,(p->timestamp>0)?p->timestamp:vo_pts); // video data return 0; } static void flip_page (void) { -#ifdef USE_LIBFAME - if(picture_buf){ // YV12 only: - int out_size; -// static int fno=0; - /* encode the image */ - out_size = fame_encode_frame(ctx, &yuv, NULL); -// send_pes_packet(outbuf,out_size,0x1E0,fno*(90000/25));++fno; - send_pes_packet(outbuf,out_size,0x1E0,vo_pts); -// printf("frame size: %d \n",out_size); - } -#endif } static uint32_t draw_slice(uint8_t *srcimg[], int stride[], int w,int h,int x0,int y0) { -#ifdef USE_LIBFAME - int y; - unsigned char* s; - unsigned char* d; - - x0+=d_pos_x; - y0+=d_pos_y; - if(x0+w>yuv.w) w=yuv.w-x0; // !! - if(y0+h>params.height) h=params.height-y0; - - // Y - s=srcimg[0]+s_pos_x+s_pos_y*stride[0]; - d=yuv.y+x0+y0*yuv.w; - for(y=0;y<h;y++){ - memcpy(d,s,w); - s+=stride[0]; - d+=yuv.w; - } - - w/=2;h/=2;x0/=2;y0/=2; - - // U - s=srcimg[1]+(s_pos_x/2)+(s_pos_y/2)*stride[1]; - d=yuv.u+x0+y0*(yuv.w>>1); - for(y=0;y<h;y++){ - memcpy(d,s,w); - s+=stride[1]; - d+=(yuv.w>>1); - } - - // V - s=srcimg[2]+(s_pos_x/2)+(s_pos_y/2)*stride[2]; - d=yuv.v+x0+y0*(yuv.w>>1); - for(y=0;y<h;y++){ - memcpy(d,s,w); - s+=stride[2]; - d+=(yuv.w>>1); - } -#endif return 0; } @@ -497,23 +326,12 @@ query_format(uint32_t format) { if(format==IMGFMT_MPEGPES) return 3|VFCAP_TIMER; -#ifdef USE_LIBFAME - if(format==IMGFMT_YV12) return 1|VFCAP_TIMER|VFCAP_OSD; -#endif return 0; } static void uninit(void) { -#ifdef USE_LIBFAME - if(picture_buf){ // YV12 only: - fame_close(ctx); ctx=NULL; - free(outbuf); - free(picture_buf); - picture_buf=NULL; - } -#endif if(vo_mpegpes_fd>=0){ close(vo_mpegpes_fd);vo_mpegpes_fd=-1;} if(vo_mpegpes_fd2>=0){ close(vo_mpegpes_fd2);vo_mpegpes_fd2=-1;} } @@ -523,16 +341,6 @@ { } -static uint32_t preinit(const char *arg) -{ - if(arg) - { - printf("vo_mpegpes: Unknown subdevice: %s\n",arg); - return ENOSYS; - } - return 0; -} - static uint32_t control(uint32_t request, void *data, ...) { switch (request) {