summaryrefslogtreecommitdiffstats
path: root/demux_mpg.c
diff options
context:
space:
mode:
authorlgb <lgb@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-04-17 22:04:44 +0000
committerlgb <lgb@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-04-17 22:04:44 +0000
commit247b44e482927b578d26fd0b75b89ef8fc383ec2 (patch)
treecc979d90c402ddb2b2a90c0b9a2ef35a599767c7 /demux_mpg.c
parente35f1762a1d34472259cb3e9d62d4b426e1d1211 (diff)
downloadmpv-247b44e482927b578d26fd0b75b89ef8fc383ec2.tar.bz2
mpv-247b44e482927b578d26fd0b75b89ef8fc383ec2.tar.xz
preliminary DVD support using libcss
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@493 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'demux_mpg.c')
-rw-r--r--demux_mpg.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/demux_mpg.c b/demux_mpg.c
index 3b3e5fc804..4c09da6f7b 100644
--- a/demux_mpg.c
+++ b/demux_mpg.c
@@ -17,6 +17,9 @@ static char dvdaudio_table[256];
static int demux_mpg_read_packet(demuxer_t *demux,int id){
int d;
int len;
+#ifdef HAVE_LIBCSS
+ int css=0;
+#endif
unsigned char c=0;
unsigned int pts=0;
unsigned int dts=0;
@@ -31,7 +34,7 @@ static int demux_mpg_read_packet(demuxer_t *demux,int id){
len=stream_read_word(demux->stream);
if(verbose>=3) printf("PACKET len=%d",len);
- if(len==0 || len>4096) return -2; // invalid packet !!!!!!
+ if(len==0 || len>STREAM_BUFFER_SIZE) return -2; // invalid packet !!!!!!
while(len>0){ // Skip stuFFing bytes
c=stream_read_char(demux->stream);--len;
@@ -60,7 +63,13 @@ static int demux_mpg_read_packet(demuxer_t *demux,int id){
int pts_flags;
int hdrlen;
// System-2 (.VOB) stream:
- if((c>>4)&3) printf("Warning! Encrypted VOB file! (DeCSS not (yet) supported)\n");
+ if((c>>4)&3) {
+#ifdef HAVE_LIBCSS
+ css=1;
+#else
+ printf("Encrypted VOB file (not compiled with libcss support)! Read file DOCS/DVD\n");
+#endif
+ }
c=stream_read_char(demux->stream); pts_flags=c>>6;
c=stream_read_char(demux->stream); hdrlen=c;
len-=2;
@@ -121,7 +130,7 @@ static int demux_mpg_read_packet(demuxer_t *demux,int id){
}
if(verbose>=3) printf(" => len=%d\n",len);
- if(len<=0 || len>4096) return -1; // Invalid packet size
+ if(len<=0 || len>STREAM_BUFFER_SIZE) return -1; // Invalid packet size
if(id>=0x1C0 && id<=0x1DF){
// mpeg audio
@@ -148,6 +157,9 @@ static int demux_mpg_read_packet(demuxer_t *demux,int id){
if(ds){
if(verbose>=2) printf("DEMUX_MPG: Read %d data bytes from packet %04X\n",len,id);
// printf("packet start = 0x%X \n",stream_tell(demux->stream)-packet_start_pos);
+#ifdef HAVE_LIBCSS
+ if (css) CSSDescramble(demux->stream->buffer,key_title);
+#endif
ds_read_packet(ds,demux->stream,len,pts/90000.0f,0);
return 1;
}
@@ -164,7 +176,7 @@ int demux_mpg_es_fill_buffer(demuxer_t *demux){
// Elementary video stream
if(demux->stream->eof) return 0;
demux->filepos=stream_tell(demux->stream);
- ds_read_packet(demux->video,demux->stream,4096,0,0);
+ ds_read_packet(demux->video,demux->stream,STREAM_BUFFER_SIZE,0,0);
return 1;
}