summaryrefslogtreecommitdiffstats
path: root/libvo
diff options
context:
space:
mode:
authorarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-09-08 23:27:51 +0000
committerarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-09-08 23:27:51 +0000
commit07e4b2db172162595eea6ae26725c46fddf0a2cb (patch)
tree6c04bea23458ad73519573aef92c09811cb6a6ed /libvo
parentfff46da0c3619f8e042a8b0f54c6fa73f55395e1 (diff)
downloadmpv-07e4b2db172162595eea6ae26725c46fddf0a2cb.tar.bz2
mpv-07e4b2db172162595eea6ae26725c46fddf0a2cb.tar.xz
file writer implemented
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@1873 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libvo')
-rw-r--r--libvo/vo_mpegpes.c43
1 files changed, 41 insertions, 2 deletions
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;
}