* ffmpeg: now ffmpeg has a SVQ3 decoder, so use it :)
[vlc.git] / modules / codec / ffmpeg / video.c
index bb6c4c9..95054ee 100644 (file)
@@ -2,7 +2,7 @@
  * video.c: video decoder using ffmpeg library
  *****************************************************************************
  * Copyright (C) 1999-2001 VideoLAN
- * $Id: video.c,v 1.26 2003/05/07 15:44:59 fenrir Exp $
+ * $Id: video.c,v 1.27 2003/05/09 23:23:45 fenrir Exp $
  *
  * Authors: Laurent Aimar <fenrir@via.ecp.fr>
  *          Gildas Bazin <gbazin@netcourrier.com>
@@ -194,6 +194,16 @@ static vout_thread_t *ffmpeg_CreateVout( vdec_thread_t  *p_vdec,
  * ffmpeg codec will be open, some memory allocated. But Vout is not yet
  * open (done after the first decoded frame)
  *****************************************************************************/
+static inline void SetDWBE( void *data, uint32_t dw )
+{
+    uint8_t *p = data;
+
+    p[0] = (dw >> 24 )&0xff;
+    p[1] = (dw >> 16 )&0xff;
+    p[2] = (dw >>  8 )&0xff;
+    p[3] = (dw )&0xff;
+}
+
 int E_( InitThread_Video )( vdec_thread_t *p_vdec )
 {
     int i_tmp;
@@ -284,6 +294,20 @@ int E_( InitThread_Video )( vdec_thread_t *p_vdec )
                                   (void *)&p_vdec->p_format[1],
                                   i_size );
         }
+#if LIBAVCODEC_BUILD >= 4666
+        else if( p_vdec->i_codec_id == CODEC_ID_SVQ3 )
+        {
+            p_vdec->p_context->extradata_size = i_size + 28;
+            p_vdec->p_context->extradata      = malloc( p_vdec->p_context->extradata_size );
+            memcpy ( &((char*)p_vdec->p_context->extradata)[ 0],  "stsd", 4 );
+            SetDWBE( &((char*)p_vdec->p_context->extradata)[ 4], 0 );       /* version and flag */
+            SetDWBE( &((char*)p_vdec->p_context->extradata)[ 8], 0 );       /* entry count */
+            SetDWBE( &((char*)p_vdec->p_context->extradata)[12], 0 );       /* sample soun size FIXME */
+            memcpy ( &((char*)p_vdec->p_context->extradata)[16], "SVQ3", 4 );
+            memset ( &((char*)p_vdec->p_context->extradata)[20], 0, 8 );    /* reserved[6] and ref index(16b) */
+            memcpy ( &((char*)p_vdec->p_context->extradata)[28], &p_vdec->p_format[1], i_size );
+        }
+#endif
         else
         {
             p_vdec->p_context->extradata_size = i_size;