annotate stream.c @ 1346:d6e6132bff35

AUDIO_ENCODING_LINEAR8 format is not available on sunos 5.5. Format is unsupported in mplayer for now, to get the code compiled on that old version of the OS.
author jkeil
date Thu, 19 Jul 2001 20:04:54 +0000
parents f2516027a346
children a90d889eb649
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents: 537
diff changeset
1
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents: 537
diff changeset
2 #include <stdio.h>
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents: 537
diff changeset
3 #include <stdlib.h>
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents: 537
diff changeset
4
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents: 537
diff changeset
5 #include <sys/ioctl.h>
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents: 537
diff changeset
6 #include <unistd.h>
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents: 537
diff changeset
7
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents: 537
diff changeset
8 #include "stream.h"
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents: 537
diff changeset
9
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents: 537
diff changeset
10 extern int verbose; // defined in mplayer.c
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
11
958
162a78d3cc08 FreeBSD support by Vladimir Kushnir vkushnir@Alfacom.net
arpi_esp
parents: 692
diff changeset
12 #ifdef __FreeBSD__
162a78d3cc08 FreeBSD support by Vladimir Kushnir vkushnir@Alfacom.net
arpi_esp
parents: 692
diff changeset
13 #include "vcd_read_fbsd.c"
162a78d3cc08 FreeBSD support by Vladimir Kushnir vkushnir@Alfacom.net
arpi_esp
parents: 692
diff changeset
14 #else
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
15 #include "vcd_read.c"
958
162a78d3cc08 FreeBSD support by Vladimir Kushnir vkushnir@Alfacom.net
arpi_esp
parents: 692
diff changeset
16 #endif
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
17
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
18 //=================== STREAMER =========================
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
19
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
20 int stream_fill_buffer(stream_t *s){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
21 int len;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
22 if(s->eof){ s->buf_pos=s->buf_len=0; return 0; }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
23 switch(s->type){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
24 case STREAMTYPE_FILE:
692
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 598
diff changeset
25 case STREAMTYPE_STREAM:
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
26 len=read(s->fd,s->buffer,STREAM_BUFFER_SIZE);break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
27 case STREAMTYPE_VCD:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
28 #ifdef VCD_CACHE
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
29 len=vcd_cache_read(s->fd,s->buffer);break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
30 #else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
31 len=vcd_read(s->fd,s->buffer);break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
32 #endif
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
33 default: len=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
34 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
35 if(len<=0){ s->eof=1; s->buf_pos=s->buf_len=0; return 0; }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
36 s->buf_pos=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
37 s->buf_len=len;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
38 s->pos+=len;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
39 // printf("[%d]",len);fflush(stdout);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
40 return len;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
41 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
42
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents: 537
diff changeset
43 int stream_seek_long(stream_t *s,unsigned int pos){
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
44 unsigned int newpos;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
45
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents: 537
diff changeset
46 // if(verbose>=3) printf("seek to 0x%X\n",pos);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
47
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
48 if(verbose>=3){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
49 printf("s->pos=%X newpos=%X new_bufpos=%X buflen=%X \n",
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents: 537
diff changeset
50 (unsigned int)s->pos,newpos,pos,s->buf_len);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
51 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
52
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
53 s->buf_pos=s->buf_len=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
54
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
55 switch(s->type){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
56 case STREAMTYPE_FILE:
692
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 598
diff changeset
57 case STREAMTYPE_STREAM:
492
888a85621f50 preliminary DVD support using libcss
lgb
parents: 180
diff changeset
58 newpos=pos&(~(STREAM_BUFFER_SIZE-1));break;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
59 case STREAMTYPE_VCD:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
60 newpos=(pos/VCD_SECTOR_DATA)*VCD_SECTOR_DATA;break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
61 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
62
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
63 pos-=newpos;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
64
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
65 if(newpos==0 || newpos!=s->pos){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
66 switch(s->type){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
67 case STREAMTYPE_FILE:
692
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 598
diff changeset
68 s->pos=newpos; // real seek
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
69 if(lseek(s->fd,s->pos,SEEK_SET)<0) s->eof=1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
70 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
71 case STREAMTYPE_VCD:
692
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 598
diff changeset
72 s->pos=newpos; // real seek
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
73 #ifdef VCD_CACHE
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
74 vcd_cache_seek(s->pos/VCD_SECTOR_DATA);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
75 #else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
76 vcd_set_msf(s->pos/VCD_SECTOR_DATA);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
77 #endif
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
78 break;
692
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 598
diff changeset
79 case STREAMTYPE_STREAM:
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 598
diff changeset
80 //s->pos=newpos; // real seek
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 598
diff changeset
81 if(newpos<s->pos){
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 598
diff changeset
82 printf("Cannot seek backward in linear streams!\n");
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 598
diff changeset
83 return 1;
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 598
diff changeset
84 }
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 598
diff changeset
85 while(s->pos<newpos){
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 598
diff changeset
86 if(stream_fill_buffer(s)<=0) break; // EOF
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 598
diff changeset
87 }
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 598
diff changeset
88 break;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
89 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
90 // putchar('.');fflush(stdout);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
91 //} else {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
92 // putchar('%');fflush(stdout);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
93 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
94
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
95 stream_fill_buffer(s);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
96 if(pos>=0 && pos<s->buf_len){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
97 s->buf_pos=pos; // byte position in sector
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
98 return 1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
99 }
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents: 537
diff changeset
100 if(verbose) printf("stream_seek: WARNING! Can't seek to 0x%X !\n",pos+newpos);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
101 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
102 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
103
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
104
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
105 void stream_reset(stream_t *s){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
106 if(s->eof){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
107 s->pos=0; //ftell(f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
108 // s->buf_pos=s->buf_len=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
109 s->eof=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
110 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
111 //stream_seek(s,0);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
112 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
113
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
114 stream_t* new_stream(int fd,int type){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
115 stream_t *s=malloc(sizeof(stream_t));
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
116 s->fd=fd;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
117 s->type=type;
180
afa2c05cfe43 terrible fatal bug fixed
arpi_esp
parents: 1
diff changeset
118 s->buf_pos=s->buf_len=0;
598
c7117e17e20b OSD seekbar fixed for mpeg/VCD
arpi_esp
parents: 578
diff changeset
119 s->start_pos=s->end_pos=0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
120 stream_reset(s);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
121 return s;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
122 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
123
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
124 void free_stream(stream_t *s){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
125 free(s);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
126 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
127
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
128