From 07e4b2db172162595eea6ae26725c46fddf0a2cb Mon Sep 17 00:00:00 2001 From: arpi Date: Sat, 8 Sep 2001 23:27:51 +0000 Subject: [PATCH] file writer implemented git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@1873 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libvo/vo_mpegpes.c | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/libvo/vo_mpegpes.c b/libvo/vo_mpegpes.c index fd08823549..d47778978f 100644 --- a/libvo/vo_mpegpes.c +++ b/libvo/vo_mpegpes.c @@ -9,6 +9,8 @@ LIBVO_EXTERN (mpegpes) +int vo_mpegpes_fd=-1; + static vo_info_t vo_info = { "Mpeg-PES file", @@ -20,7 +22,11 @@ static vo_info_t vo_info = static uint32_t init(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t fullscreen, char *title, uint32_t format) { - + vo_mpegpes_fd=open("grab.mpg","ab"); + if(vo_mpegpes_fd<0){ + perror("vo_mpegpes"); + return -1; + } return 0; } @@ -43,10 +49,41 @@ static uint32_t draw_slice(uint8_t *srcimg[], int stride[], int w,int h,int x,in return 0; } +static void my_write(unsigned char* data,int len){ + while(len>0){ + int ret=write(vo_mpegpes_fd,data,len); + if(ret<=0) break; // error + len-=ret; data+=ret; + } +} static uint32_t draw_frame(uint8_t * src[]) { + vo_mpegpes_t *p=(vo_mpegpes_t *)src[0]; + int payload_size=p->size+5; + int x; + unsigned char pes_header[4+2+5]; + // construct PES header: + // startcode: + pes_header[0]=pes_header[1]=0; + pes_header[2]=p->id>>8; pes_header[3]=p->id&255; + // packetsize: + pes_header[4]=payload_size>>8; + pes_header[5]=payload_size&255; + // stuffing: + // presentation time stamp: + x=(0x02 << 4) | (((p->timestamp >> 30) & 0x07) << 1) | 1; + pes_header[6]=x; + x=((((p->timestamp >> 15) & 0x7fff) << 1) | 1); + pes_header[7]=x>>8; pes_header[8]=x&255; + x=((((p->timestamp) & 0x7fff) << 1) | 1); + pes_header[9]=x>>8; pes_header[10]=x&255; + my_write(pes_header,4+2+5); + // data: + my_write(p->data,p->size); + +// printf("PES: draw frame! pts=%d size=%d \n",p->timestamp,p->size); return 0; } @@ -61,6 +98,8 @@ query_format(uint32_t format) static void uninit(void) { + close(vo_mpegpes_fd); + vo_mpegpes_fd=-1; }