]> git.sesse.net Git - vlc/blobdiff - modules/codec/ffmpeg/ffmpeg.h
* include/vlc_common.h:
[vlc] / modules / codec / ffmpeg / ffmpeg.h
index bead0fbb7abc4bccc2723989b7815733a1715a71..6cc1bc5959cdadc1fa8b9a076bcb1045c1229956 100644 (file)
@@ -2,15 +2,15 @@
  * ffmpeg_vdec.h: video decoder using ffmpeg library
  *****************************************************************************
  * Copyright (C) 2001 VideoLAN
- * $Id: ffmpeg.h,v 1.7 2002/10/28 06:26:11 fenrir Exp $
+ * $Id: ffmpeg.h,v 1.26 2003/10/25 00:49:13 sam Exp $
  *
  * Authors: Laurent Aimar <fenrir@via.ecp.fr>
- * 
+ *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
- * 
+ *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
@@ -21,6 +21,7 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
  *****************************************************************************/
 
+#include "codecs.h"                                      /* BITMAPINFOHEADER */
 
 
 #define DECODER_THREAD_COMMON \
     \
     AVCodecContext      *p_context; \
     AVCodec             *p_codec; \
+    mtime_t input_pts_previous; \
+    mtime_t input_pts; \
     mtime_t pts; \
     \
     /* Private stuff for frame gathering */ \
-    u8      *p_buffer;      /* buffer for gather pes */  \
-    int     i_buffer;       /* size of allocated p_framedata */
-        
+    uint8_t *p_buffer;      /* buffer for gather pes */  \
+    int     i_buffer_size;  /* size of allocated p_buffer */ \
+    int     i_buffer;       /* bytes already present in p_buffer */
+
 
 typedef struct generic_thread_s
 {
@@ -45,21 +49,23 @@ typedef struct generic_thread_s
 
 } generic_thread_t;
 
-#define GetWLE( p ) \
-    ( *(u8*)(p) + ( *((u8*)(p)+1) << 8 ) )
-
-#define GetDWLE( p ) \
-    (  *(u8*)(p) + ( *((u8*)(p)+1) << 8 ) + \
-     ( *((u8*)(p)+2) << 16 ) + ( *((u8*)(p)+3) << 24 ) )
+#if LIBAVCODEC_BUILD >= 4663
+#   define LIBAVCODEC_PP
+#else
+#   undef  LIBAVCODEC_PP
+#endif
 
 #define FREE( p ) if( p ) free( p ); p = NULL
 
-void E_( GetPESData )( u8 *p_buf, int i_max, pes_packet_t *p_pes );
+int E_( GetPESData )( uint8_t *p_buf, int i_max, pes_packet_t *p_pes );
 
 /*****************************************************************************
  * Video codec fourcc
  *****************************************************************************/
 
+/* MPEG 1/2 video */
+#define FOURCC_mpgv         VLC_FOURCC('m','p','g','v')
+
 /* MPEG4 video */
 #define FOURCC_DIVX         VLC_FOURCC('D','I','V','X')
 #define FOURCC_divx         VLC_FOURCC('d','i','v','x')
@@ -75,6 +81,8 @@ void E_( GetPESData )( u8 *p_buf, int i_max, pes_packet_t *p_pes );
 #define FOURCC_DX50         VLC_FOURCC('D','X','5','0')
 #define FOURCC_mp4v         VLC_FOURCC('m','p','4','v')
 #define FOURCC_4            VLC_FOURCC( 4,  0,  0,  0 )
+#define FOURCC_m4cc         VLC_FOURCC('m','4','c','c')
+#define FOURCC_M4CC         VLC_FOURCC('M','4','C','C')
 
 /* MSMPEG4 v2 */
 #define FOURCC_MPG4         VLC_FOURCC('M','P','G','4')
@@ -103,24 +111,113 @@ void E_( GetPESData )( u8 *p_buf, int i_max, pes_packet_t *p_pes );
 /* AngelPotion stuff */
 #define FOURCC_AP41         VLC_FOURCC('A','P','4','1')
 
-/* ?? */
+/* 3ivx doctered divx files */
+#define FOURCC_3IVD         VLC_FOURCC('3','I','V','D')
+#define FOURCC_3ivd         VLC_FOURCC('3','i','v','d')
+
+/* 3ivx delta 3.5 Unsupported */
 #define FOURCC_3IV1         VLC_FOURCC('3','I','V','1')
+#define FOURCC_3iv1         VLC_FOURCC('3','i','v','1')
+
+/* 3ivx delta 4 */
 #define FOURCC_3IV2         VLC_FOURCC('3','I','V','2')
+#define FOURCC_3iv2         VLC_FOURCC('3','i','v','2')
+
+/* who knows? */
+#define FOURCC_3VID         VLC_FOURCC('3','V','I','D')
+#define FOURCC_3vid         VLC_FOURCC('3','v','i','d')
 
-/* H263 and H263i */        
+/* H263 and H263i */
+/* H263(+) is also known as Real Video 1.0 */
 #define FOURCC_H263         VLC_FOURCC('H','2','6','3')
 #define FOURCC_h263         VLC_FOURCC('h','2','6','3')
 #define FOURCC_U263         VLC_FOURCC('U','2','6','3')
 #define FOURCC_I263         VLC_FOURCC('I','2','6','3')
 #define FOURCC_i263         VLC_FOURCC('i','2','6','3')
-
-/* Sorenson v1 */
-#define FOURCC_SVQ1 VLC_FOURCC( 'S', 'V', 'Q', '1' )
-
-/* wmv */
+/* Flash (H263) variant */
+#define FOURCC_FLV1         VLC_FOURCC('F','L','V','1')
+
+
+/* Sorenson v1/3 */
+#define FOURCC_SVQ1         VLC_FOURCC('S','V','Q','1')
+#define FOURCC_SVQ3         VLC_FOURCC('S','V','Q','3')
+
+/* mjpeg */
+#define FOURCC_MJPG         VLC_FOURCC( 'M', 'J', 'P', 'G' )
+#define FOURCC_mjpg         VLC_FOURCC( 'm', 'j', 'p', 'g' )
+    /* for mov file */
+#define FOURCC_mjpa         VLC_FOURCC( 'm', 'j', 'p', 'a' )
+    /* for mov file XXX: untested */
+#define FOURCC_mjpb         VLC_FOURCC( 'm', 'j', 'p', 'b' )
+
+#define FOURCC_jpeg         VLC_FOURCC( 'j', 'p', 'e', 'g' )
+#define FOURCC_JPEG         VLC_FOURCC( 'J', 'P', 'E', 'G' )
+#define FOURCC_JFIF         VLC_FOURCC( 'J', 'F', 'I', 'F' )
+#define FOURCC_JPGL         VLC_FOURCC( 'J', 'P', 'G', 'L' )
+
+/* Microsoft Video 1 */
+#define FOURCC_MSVC         VLC_FOURCC('M','S','V','C')
+#define FOURCC_msvc         VLC_FOURCC('m','s','v','c')
+#define FOURCC_CRAM         VLC_FOURCC('C','R','A','M')
+#define FOURCC_cram         VLC_FOURCC('c','r','a','m')
+#define FOURCC_WHAM         VLC_FOURCC('W','H','A','M')
+#define FOURCC_wham         VLC_FOURCC('w','h','a','m')
+
+/* Windows Screen Video */
+#define FOURCC_MSS1         VLC_FOURCC('M','S','S','1')
+
+/* Microsoft RLE */
+#define FOURCC_mrle         VLC_FOURCC('m','r','l','e')
+#define FOURCC_1000         VLC_FOURCC(0x1,0x0,0x0,0x0)
+
+/* Windows Media Video */
 #define FOURCC_WMV1         VLC_FOURCC('W','M','V','1')
 #define FOURCC_WMV2         VLC_FOURCC('W','M','V','2')
 
+/* DV */
+#define FOURCC_dvsl         VLC_FOURCC('d','v','s','l')
+#define FOURCC_dvsd         VLC_FOURCC('d','v','s','d')
+#define FOURCC_DVSD         VLC_FOURCC('D','V','S','D')
+#define FOURCC_dvhd         VLC_FOURCC('d','v','h','d')
+#define FOURCC_dvc          VLC_FOURCC('d','v','c',' ')
+#define FOURCC_dvp          VLC_FOURCC('d','v','p',' ')
+#define FOURCC_CDVC         VLC_FOURCC('C','D','V','C')
+
+/* Indeo Video Codecs */
+#define FOURCC_IV31         VLC_FOURCC('I','V','3','1')
+#define FOURCC_iv31         VLC_FOURCC('i','v','3','1')
+#define FOURCC_IV32         VLC_FOURCC('I','V','3','2')
+#define FOURCC_iv32         VLC_FOURCC('i','v','3','2')
+
+/* On2 VP3 Video Codecs */
+#define FOURCC_VP31         VLC_FOURCC('V','P','3','1')
+#define FOURCC_vp31         VLC_FOURCC('v','p','3','1')
+
+/* Asus Video */
+#define FOURCC_ASV1         VLC_FOURCC('A','S','V','1')
+#define FOURCC_ASV2         VLC_FOURCC('A','S','V','2')
+
+/* ATI VCR1 */
+#define FOURCC_VCR1         VLC_FOURCC('V','C','R','1')
+
+/* FFMPEG Video 1 (lossless codec) */
+#define FOURCC_FFV1         VLC_FOURCC('F','F','V','1')
+
+/* Cirrus Logic AccuPak */
+#define FOURCC_CLJR         VLC_FOURCC('C','L','J','R')
+
+/* Creative YUV */
+#define FOURCC_CYUV         VLC_FOURCC('C','Y','U','V')
+
+/* Huff YUV */
+#define FOURCC_HFYU         VLC_FOURCC('H','F','Y','U')
+
+/* Apple Video */
+#define FOURCC_rpza         VLC_FOURCC('r','p','z','a')
+
+/* Cinepak */
+#define FOURCC_cvid         VLC_FOURCC('c','v','i','d')
+
 
 /*****************************************************************************
  * Audio codec fourcc
@@ -129,4 +226,11 @@ void E_( GetPESData )( u8 *p_buf, int i_max, pes_packet_t *p_pes );
 #define FOURCC_wma1         VLC_FOURCC('w','m','a','1')
 #define FOURCC_WMA2         VLC_FOURCC('W','M','A','2')
 #define FOURCC_wma2         VLC_FOURCC('w','m','a','2')
+#define FOURCC_dvau         VLC_FOURCC('d','v','a','u')
+
+#define FOURCC_MAC3         VLC_FOURCC('M','A','C','3')
+#define FOURCC_MAC6         VLC_FOURCC('M','A','C','6')
+
+#define FOURCC_RA10         VLC_FOURCC('1','4','_','4')
+#define FOURCC_RA20         VLC_FOURCC('2','8','_','8')