]> git.sesse.net Git - vlc/commitdiff
all: Use BITMAPINFOHEADER everywhere (Needed because of endian issue).
authorLaurent Aimar <fenrir@videolan.org>
Tue, 19 Nov 2002 17:23:21 +0000 (17:23 +0000)
committerLaurent Aimar <fenrir@videolan.org>
Tue, 19 Nov 2002 17:23:21 +0000 (17:23 +0000)
modules/demux/asf/asf.c
modules/demux/mp4/mp4.c

index 7413ed639a16a5cf4e460261299c1fda9e112db7..13541478a1301729549593524db4f653ba59aa72 100644 (file)
@@ -2,7 +2,7 @@
  * asf.c : ASFv01 file input module for vlc
  *****************************************************************************
  * Copyright (C) 2001 VideoLAN
- * $Id: asf.c,v 1.6 2002/11/15 18:10:26 fenrir Exp $
+ * $Id: asf.c,v 1.7 2002/11/19 17:23:21 fenrir Exp $
  * Authors: Laurent Aimar <fenrir@via.ecp.fr>
  * 
  * This program is free software; you can redistribute it and/or modify
@@ -266,11 +266,34 @@ static int Activate( vlc_object_t * p_this )
             }
             if( p_sp->i_type_specific_data_length > 11 )
             {
-                p_stream->p_es->p_demux_data =
-                    malloc( p_sp->i_type_specific_data_length - 11);
-                memcpy( p_stream->p_es->p_demux_data,
-                        p_sp->p_type_specific_data + 11,
-                        p_sp->i_type_specific_data_length - 11 );
+                BITMAPINFOHEADER *p_bih;
+                int         i_size;
+                uint8_t     *p_data;
+
+                i_size = p_sp->i_type_specific_data_length - 11;
+                
+                p_bih = malloc( i_size );
+                p_stream->p_es->p_demux_data = (void*)p_bih;
+                p_data = p_sp->p_type_specific_data + 11;
+                
+                p_bih->biSize       = GetDWLE( p_data );
+                p_bih->biWidth      = GetDWLE( p_data + 4 );
+                p_bih->biHeight     = GetDWLE( p_data + 8 );
+                p_bih->biPlanes     = GetDWLE( p_data + 12 );
+                p_bih->biBitCount   = GetDWLE( p_data + 14 );
+                p_bih->biCompression= GetDWLE( p_data + 16 );
+                p_bih->biSizeImage  = GetDWLE( p_data + 20 );
+                p_bih->biXPelsPerMeter = GetDWLE( p_data + 24 );
+                p_bih->biYPelsPerMeter = GetDWLE( p_data + 28 );
+                p_bih->biClrUsed       = GetDWLE( p_data + 32 );
+                p_bih->biClrImportant  = GetDWLE( p_data + 36 );
+
+                if( i_size > sizeof( BITMAPINFOHEADER ) )
+                {
+                    memcpy( (uint8_t*)p_stream->p_es->p_demux_data + sizeof( BITMAPINFOHEADER ),
+                            p_data + sizeof( BITMAPINFOHEADER ),
+                            i_size - sizeof( BITMAPINFOHEADER ) );
+                }
             }
 
         }
index 263f579a07ca9b82f79d926aac63ede961a465a8..ce10a4e8347ede081a57251dc374d8b86f8bd031 100644 (file)
@@ -2,7 +2,7 @@
  * mp4.c : MP4 file input module for vlc
  *****************************************************************************
  * Copyright (C) 2001 VideoLAN
- * $Id: mp4.c,v 1.5 2002/11/17 06:46:56 fenrir Exp $
+ * $Id: mp4.c,v 1.6 2002/11/19 17:23:21 fenrir Exp $
  * Authors: Laurent Aimar <fenrir@via.ecp.fr>
  * 
  * This program is free software; you can redistribute it and/or modify
@@ -30,7 +30,7 @@
 
 #include <vlc/vlc.h>
 #include <vlc/input.h>
-
+#include "codecs.h"
 #include "libmp4.h"
 #include "mp4.h"
 
@@ -901,8 +901,9 @@ static void MP4_StartDecoder( input_thread_t *p_input,
     int         i_decoder_specific_info_len;
     uint8_t     *p_decoder_specific_info;
     
-    uint8_t     *p_init;
+    uint8_t             *p_init;
+    BITMAPINFOHEADER    *p_bih;
+
     MP4_Box_t   *p_esds;
 
     
@@ -1047,31 +1048,35 @@ static void MP4_StartDecoder( input_thread_t *p_input,
         case( VIDEO_ES ):    
             /* now create a bitmapinfoheader_t for decoder and 
                add information found in p_esds */
-            p_init = malloc( 40 + i_decoder_specific_info_len);
-            memset( p_init, 0, 40 + i_decoder_specific_info_len);
-            MP4_Set4BytesLE( p_init, 40 + i_decoder_specific_info_len );
-            if( p_sample->data.p_sample_vide->i_width )
-            {
-                MP4_Set4BytesLE( p_init + 4, 
-                                 p_sample->data.p_sample_vide->i_width );
-            }
-            else
+            p_init = malloc( sizeof( BITMAPINFOHEADER ) + i_decoder_specific_info_len );
+            p_bih = (BITMAPINFOHEADER*)p_init;
+
+            p_bih->biSize     = sizeof( BITMAPINFOHEADER ) + i_decoder_specific_info_len;
+            p_bih->biWidth    = p_sample->data.p_sample_vide->i_width;
+            p_bih->biHeight   = p_sample->data.p_sample_vide->i_height;
+            p_bih->biPlanes   = 1;      // FIXME
+            p_bih->biBitCount = 0;      // FIXME
+            p_bih->biCompression   = 0; // FIXME
+            p_bih->biSizeImage     = 0; // FIXME
+            p_bih->biXPelsPerMeter = 0; // FIXME
+            p_bih->biYPelsPerMeter = 0; // FIXME
+            p_bih->biClrUsed       = 0; // FIXME
+            p_bih->biClrImportant  = 0; // FIXME
+
+            if( p_bih->biWidth == 0 )
             {
-                /* use display size */
-                MP4_Set4BytesLE( p_init + 4, p_demux_track->i_width );
+                // fall on display size
+                p_bih->biWidth = p_demux_track->i_width;
             }
-            if( p_sample->data.p_sample_vide->i_height )
+            if( p_bih->biHeight == 0 )
             {
-                MP4_Set4BytesLE( p_init + 8, 
-                                 p_sample->data.p_sample_vide->i_height );
-            }
-            else
-            {
-                MP4_Set4BytesLE( p_init + 8, p_demux_track->i_height );
+                // fall on display size
+                p_bih->biHeight = p_demux_track->i_height;
             }
+            
             if( i_decoder_specific_info_len )
             {
-                memcpy( p_init + 40
+                memcpy( p_init + sizeof( BITMAPINFOHEADER )
                         p_decoder_specific_info,
                         i_decoder_specific_info_len);
             }