]> git.sesse.net Git - vlc/commitdiff
* modules/access/rtsp: fixed problem in BlockRead().
authorGildas Bazin <gbazin@videolan.org>
Mon, 19 Sep 2005 21:16:23 +0000 (21:16 +0000)
committerGildas Bazin <gbazin@videolan.org>
Mon, 19 Sep 2005 21:16:23 +0000 (21:16 +0000)
modules/access/rtsp/access.c
modules/access/rtsp/real.c
modules/access/rtsp/real.h

index 51902ffb9ee395f06e32bb8165a65a63ef94411e..7ae26f0d9e698d634013754e049d96fc9f416d8e 100644 (file)
@@ -259,6 +259,8 @@ static block_t *BlockRead( access_t *p_access )
 {
     access_sys_t *p_sys = p_access->p_sys;
     block_t *p_block;
+    rmff_pheader_t pheader;
+    int i_size;
 
     if( p_sys->p_header )
     {
@@ -267,8 +269,11 @@ static block_t *BlockRead( access_t *p_access )
         return p_block;
     }
 
-    p_block = block_New( p_access, 4096 );
-    p_block->i_buffer = real_get_rdt_chunk( p_access->p_sys->p_rtsp,
+    i_size = real_get_rdt_chunk_header( p_access->p_sys->p_rtsp, &pheader );
+    if( i_size <= 0 ) return 0;
+
+    p_block = block_New( p_access, i_size );
+    p_block->i_buffer = real_get_rdt_chunk( p_access->p_sys->p_rtsp, &pheader,
                                             &p_block->p_buffer );
 
     return p_block;
index 580c8cab143fddd95f9551847ac7ca59d2787547..a4bccc22b2f8767ded21df12ff6dd82995e3b910 100644 (file)
@@ -532,11 +532,11 @@ rmff_header_t *real_parse_sdp(char *data, char **stream_rules, uint32_t bandwidt
   return header;
 }
 
-int real_get_rdt_chunk(rtsp_client_t *rtsp_session, unsigned char **buffer) {
+int real_get_rdt_chunk_header(rtsp_client_t *rtsp_session, rmff_pheader_t *ph)
+{
 
   int n=1;
   uint8_t header[8];
-  rmff_pheader_t ph;
   int size;
   int flags1;
   int unknown1;
@@ -582,17 +582,22 @@ int real_get_rdt_chunk(rtsp_client_t *rtsp_session, unsigned char **buffer) {
 
   size+=2;
   
-  ph.object_version=0;
-  ph.length=size;
-  ph.stream_number=(flags1>>1)&1;
-  ph.timestamp=ts;
-  ph.reserved=0;
-  ph.flags=0;      /* TODO: determine keyframe flag and insert here? */
-  //xine_buffer_ensure_size(*buffer, 12+size);
-  rmff_dump_pheader(&ph, *buffer);
-  size-=12;
-  n=rtsp_read_data(rtsp_session, (*buffer)+12, size);
-  
+  ph->object_version=0;
+  ph->length=size;
+  ph->stream_number=(flags1>>1)&1;
+  ph->timestamp=ts;
+  ph->reserved=0;
+  ph->flags=0;      /* TODO: determine keyframe flag and insert here? */
+
+  return size;
+}
+
+int real_get_rdt_chunk(rtsp_client_t *rtsp_session, rmff_pheader_t *ph,
+                       unsigned char **buffer)
+{
+  int n;
+  rmff_dump_pheader(ph, *buffer);
+  n=rtsp_read_data(rtsp_session, *buffer + 12, ph->length - 12);
   return (n <= 0) ? 0 : n+12;
 }
 
index c3362551c38230e9f081daaee12f8018d2694e9f..4eff4cbb01f3a449abb496a79ff74ca94b131d12 100644 (file)
@@ -40,7 +40,8 @@
     static inline void lprintf( char *dummy, ... ){}
 #endif
 
-int real_get_rdt_chunk(rtsp_client_t *, unsigned char **buffer);
+int real_get_rdt_chunk_header(rtsp_client_t *, rmff_pheader_t *);
+int real_get_rdt_chunk(rtsp_client_t *, rmff_pheader_t *, unsigned char **);
 rmff_header_t *real_setup_and_get_header(rtsp_client_t *, int bandwidth);
 
 int asmrp_match(const char *rules, int bandwidth, int *matches) ;