From 0c3d44619b77cbcc3de75f0725c909f138716ef9 Mon Sep 17 00:00:00 2001
From: diego <diego@b3059339-0415-0410-9bf9-f77b7e298cf2>
Date: Wed, 17 Feb 2010 21:36:00 +0000
Subject: [PATCH 01/36] libmpcodecs: Remove pointless leftover '#if 1'
 preprocessor instructions.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30608 b3059339-0415-0410-9bf9-f77b7e298cf2
---
 libmpcodecs/ad_faad.c      | 2 --
 libmpcodecs/ad_qtaudio.c   | 5 -----
 libmpcodecs/dec_teletext.c | 2 --
 libmpcodecs/vd_vfw.c       | 4 ----
 libmpcodecs/ve_vfw.c       | 2 --
 libmpcodecs/vf_expand.c    | 2 --
 6 files changed, 17 deletions(-)

diff --git a/libmpcodecs/ad_faad.c b/libmpcodecs/ad_faad.c
index 7c283641e4..4f62765257 100644
--- a/libmpcodecs/ad_faad.c
+++ b/libmpcodecs/ad_faad.c
@@ -96,7 +96,6 @@ static int init(sh_audio_t *sh)
     mp_msg(MSGT_DECAUDIO,MSGL_DBG2,"FAAD: codecdata extracted from WAVEFORMATEX\n");
   }
   if(!sh->codecdata_len) {
-#if 1
     faacDecConfigurationPtr faac_conf;
     /* Set the default object type and samplerate */
     /* This is useful for RAW AAC files */
@@ -125,7 +124,6 @@ static int init(sh_audio_t *sh)
     //faac_conf->defObjectType = LTP; // => MAIN, LC, SSR, LTP available.
 
     faacDecSetConfiguration(faac_hdec, faac_conf);
-#endif
 
     sh->a_in_buffer_len = demux_read_data(sh->ds, sh->a_in_buffer, sh->a_in_buffer_size);
     pos = aac_probe(sh->a_in_buffer, sh->a_in_buffer_len);
diff --git a/libmpcodecs/ad_qtaudio.c b/libmpcodecs/ad_qtaudio.c
index 25775afe11..188238233c 100644
--- a/libmpcodecs/ad_qtaudio.c
+++ b/libmpcodecs/ad_qtaudio.c
@@ -118,7 +118,6 @@ static int loader_init(void)
         mp_msg(MSGT_DECAUDIO,MSGL_ERR,"failed loading qtmlClient.dll\n" );
 	return 1;
     }
-#if 1
     InitializeQTML = (LPFUNC1)GetProcAddress(qtml_dll,"InitializeQTML");
 	if ( InitializeQTML == NULL )
     {
@@ -173,7 +172,6 @@ static int loader_init(void)
         mp_msg(MSGT_DECAUDIO,MSGL_ERR,"failed getting proc address SoundConverterBeginConversion\n");
 		return 1;
     }
-#endif
     mp_msg(MSGT_DECAUDIO,MSGL_DBG2,"loader_init DONE???\n");
 	return 0;
 }
@@ -207,7 +205,6 @@ static int preinit(sh_audio_t *sh){
     }
 #endif
 
-#if 1
 	OutputFormatInfo.flags = InputFormatInfo.flags = 0;
 	OutputFormatInfo.sampleCount = InputFormatInfo.sampleCount = 0;
 	OutputFormatInfo.buffer = InputFormatInfo.buffer = NULL;
@@ -257,8 +254,6 @@ static int preinit(sh_audio_t *sh){
     sh->i_bps=sh->wf->nAvgBytesPerSec;
 //InputBufferSize*WantedBufferSize/OutputBufferSize;
 
-#endif
-
    if(sh->format==0x3343414D){
        // MACE 3:1
        sh->ds->ss_div = 2*3; // 1 samples/packet
diff --git a/libmpcodecs/dec_teletext.c b/libmpcodecs/dec_teletext.c
index 5be9812086..c2f125439d 100644
--- a/libmpcodecs/dec_teletext.c
+++ b/libmpcodecs/dec_teletext.c
@@ -952,7 +952,6 @@ static void render2text(tt_page* pt,FILE* f,int colored){
         color=-1;bkg=-1;
         fprintf(f,"|\n");
     }
-#if 1
     //for debug
     fprintf(f,"+====================raw=================+\n");
     for(i=0;i<VBI_ROWS;i++){
@@ -966,7 +965,6 @@ static void render2text(tt_page* pt,FILE* f,int colored){
             fprintf(f,"%02x ",dp[i*VBI_COLUMNS+j].lng);
         fprintf(f,"\n");
     }
-#endif
     fprintf(f,"+========================================+\n");
 }
 
diff --git a/libmpcodecs/vd_vfw.c b/libmpcodecs/vd_vfw.c
index 61702cc813..20b0fed6f1 100644
--- a/libmpcodecs/vd_vfw.c
+++ b/libmpcodecs/vd_vfw.c
@@ -127,7 +127,6 @@ static int control(sh_video_t *sh,int cmd,void* arg,...){
     case VDCTRL_SET_PP_LEVEL:
 	vfw_set_postproc(sh,10*(*((int*)arg)));
 	return CONTROL_OK;
-#if 1
     // FIXME: make this optional...
     case VDCTRL_QUERY_FORMAT:
       {
@@ -147,7 +146,6 @@ static int control(sh_video_t *sh,int cmd,void* arg,...){
 	}
 	return CONTROL_TRUE;
       }
-#endif
     }
     return CONTROL_UNKNOWN;
 }
@@ -230,7 +228,6 @@ static int init(sh_video_t *sh){
 	priv->o_bih->biCompression = 0;
 
     // sanity check:
-#if 1
 #ifdef BUILD_VFWEX
     ret = ICDecompressQueryEx(priv->handle, sh->bih, priv->o_bih);
 #else
@@ -242,7 +239,6 @@ static int init(sh_video_t *sh){
 //	return 0;
     } else
 	mp_msg(MSGT_WIN32,MSGL_V,"ICDecompressQuery OK\n");
-#endif
 
 #ifdef BUILD_VFWEX
     ret = ICDecompressBeginEx(priv->handle, sh->bih, priv->o_bih);
diff --git a/libmpcodecs/ve_vfw.c b/libmpcodecs/ve_vfw.c
index 44e27025fd..ed8c7cebe0 100644
--- a/libmpcodecs/ve_vfw.c
+++ b/libmpcodecs/ve_vfw.c
@@ -96,7 +96,6 @@ static BITMAPINFOHEADER* vfw_open_encoder(char *dll_name, char *compdatafile, BI
   }
   mp_msg(MSGT_WIN32,MSGL_INFO,"HIC: %x\n", encoder_hic);
 
-#if 1
 {
   ICINFO icinfo;
 
@@ -118,7 +117,6 @@ if (icinfo.dwFlags & VIDCF_QUALITYTIME)
     mp_msg(MSGT_WIN32,MSGL_INFO," temp-quality");
 mp_msg(MSGT_WIN32,MSGL_INFO,"\n");
 }
-#endif
 
   if(compdatafile){
     if (!strncmp(compdatafile, "dialog", 6)){
diff --git a/libmpcodecs/vf_expand.c b/libmpcodecs/vf_expand.c
index f8d21fb762..c595a0d2f5 100644
--- a/libmpcodecs/vf_expand.c
+++ b/libmpcodecs/vf_expand.c
@@ -285,13 +285,11 @@ static void get_image(struct vf_instance_s* vf, mp_image_t *mpi){
 	    mpi->type, mpi->flags,
             FFMAX(vf->priv->exp_w, mpi->width +vf->priv->exp_x),
             FFMAX(vf->priv->exp_h, mpi->height+vf->priv->exp_y));
-#if 1
 	if((vf->dmpi->flags & MP_IMGFLAG_DRAW_CALLBACK) &&
 	  !(vf->dmpi->flags & MP_IMGFLAG_DIRECT)){
 	    mp_msg(MSGT_VFILTER, MSGL_INFO, MSGTR_MPCODECS_FullDRNotPossible);
 	    return;
 	}
-#endif
 	// set up mpi as a cropped-down image of dmpi:
 	if(mpi->flags&MP_IMGFLAG_PLANAR){
 	    mpi->planes[0]=vf->dmpi->planes[0]+

From 632595c6f57a43eeeb1766e45fa52883a78d90e9 Mon Sep 17 00:00:00 2001
From: diego <diego@b3059339-0415-0410-9bf9-f77b7e298cf2>
Date: Wed, 17 Feb 2010 21:38:09 +0000
Subject: [PATCH 02/36] Ignore .ho files in loader/wine/.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30609 b3059339-0415-0410-9bf9-f77b7e298cf2

From ab1a5a630693cf7e85894d8753fed9b4ce9c347d Mon Sep 17 00:00:00 2001
From: corey <corey@b3059339-0415-0410-9bf9-f77b7e298cf2>
Date: Wed, 17 Feb 2010 21:45:53 +0000
Subject: [PATCH 03/36] Update x264 defaults listed in the man page.

x264 has changed the defaults for these parameters.


git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30610 b3059339-0415-0410-9bf9-f77b7e298cf2
---
 DOCS/man/en/mplayer.1 | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/DOCS/man/en/mplayer.1 b/DOCS/man/en/mplayer.1
index 611a7d6e7a..6e97d18cc2 100644
--- a/DOCS/man/en/mplayer.1
+++ b/DOCS/man/en/mplayer.1
@@ -10121,7 +10121,7 @@ are just as big as I-frames, but do not reset the "keyint counter".
 .
 .TP
 .B frameref=<1\-16>
-Number of previous frames used as predictors in B- and P-frames (default: 1).
+Number of previous frames used as predictors in B- and P-frames (default: 3).
 This is effective in anime, but in live-action material the improvements
 usually drop off very rapidly above 6 or so reference frames.
 This has no effect on decoding speed, but does increase the memory needed for
@@ -10130,7 +10130,7 @@ Some decoders can only handle a maximum of 15 reference frames.
 .
 .TP
 .B bframes=<0\-16>
-maximum number of consecutive B-frames between I- and P-frames (default: 0)
+maximum number of consecutive B-frames between I- and P-frames (default: 3)
 .
 .TP
 .B (no)b_adapt
@@ -10401,9 +10401,9 @@ SATD metric, rather than reusing vectors from the forward and backward
 searches.
 .IPs 6
 Enables rate-distortion optimization of macroblock types in
-I- and P-frames (default).
+I- and P-frames.
 .IPs 7
-Enables rate-distortion optimization of macroblock types in all frames.
+Enables rate-distortion optimization of macroblock types in all frames (default).
 .IPs 8
 Enables rate-distortion optimization of motion vectors and intra prediction modes in I- and P-frames.
 .IPs 9
@@ -10434,9 +10434,9 @@ rate-distortion optimal quantization
 .PD 0
 .RSs
 .IPs 0
-disabled (default)
+disabled
 .IPs 1
-enabled only for the final encode
+enabled only for the final encode (default)
 .IPs 2
 enabled during all mode decisions (slow, requires subq>=6)
 .RE
@@ -10586,7 +10586,7 @@ and you have a need to set it.
 .
 .TP
 .B threads=<0\-16>
-Spawn threads to encode in parallel on multiple CPUs (default: 1).
+Spawn threads to encode in parallel on multiple CPUs (default: 0).
 This has a slight penalty to compression quality.
 0 or 'auto' tells x264 to detect how many CPUs you have and pick an
 appropriate number of threads.

From 8438cc472dea27a2c9ab9ae39f16f051c09e25ce Mon Sep 17 00:00:00 2001
From: corey <corey@b3059339-0415-0410-9bf9-f77b7e298cf2>
Date: Wed, 17 Feb 2010 21:49:17 +0000
Subject: [PATCH 04/36] Document several new x264 parameters.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30611 b3059339-0415-0410-9bf9-f77b7e298cf2
---
 DOCS/man/en/mplayer.1 | 86 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 86 insertions(+)

diff --git a/DOCS/man/en/mplayer.1 b/DOCS/man/en/mplayer.1
index 6e97d18cc2..8d127ab9a7 100644
--- a/DOCS/man/en/mplayer.1
+++ b/DOCS/man/en/mplayer.1
@@ -10120,6 +10120,13 @@ This is not recommended and wastes bitrate as scenecuts encoded as P-frames
 are just as big as I-frames, but do not reset the "keyint counter".
 .
 .TP
+.B (no)intra_refresh
+Periodic intra block refresh instead of keyframes (default: disabled).
+This option disables IDR-frames, and, instead, uses a moving vertical bar
+of intra-coded blocks. This reduces compression efficiency but benefits
+low-latency streaming and resilience to packet loss.
+.
+.TP
 .B frameref=<1\-16>
 Number of previous frames used as predictors in B- and P-frames (default: 3).
 This is effective in anime, but in live-action material the improvements
@@ -10206,6 +10213,20 @@ maximum value by which the quantizer may be incremented/decremented between
 frames (default: 4)
 .
 .TP
+.B (no)mbtree
+Enable macroblock tree ratecontrol (default: enabled).
+Use a large lookahead to track temporal propagation of data and weight quality
+accordingly.
+In multi-pass mode, this writes to a separate stats file named
+<passlogfile>.mbtree.
+.
+.TP
+.B rc_lookahead=<0\-250>
+Adjust the mbtree lookahead distance (default: 40).
+Larger values will be slower and cause x264 to consume more memory, but can
+yield higher quality.
+.
+.TP
 .B ratetol=<0.1\-100.0> (ABR or two pass)
 allowed variance in average bitrate (no particular units) (default: 1.0)
 .
@@ -10298,6 +10319,20 @@ direct_pred=none is both slower and lower quality.
 .RE
 .
 .TP
+.B weightp
+Weighted P-frame prediction mode (default: 2).
+.PD 0
+.RSs
+.IPs 0
+disabled (fastest)
+.IPs 1
+blind mode (slightly better quality)
+.IPs 2
+smart mode (best)
+.RE
+.PD 1
+.
+.TP
 .B (no)weight_b
 Use weighted prediction in B-frames.
 Without this option, bidirectionally predicted macroblocks give
@@ -10455,6 +10490,11 @@ trellis (requires trellis, experimental) (default: 0.0)
 .PD 1
 .
 .TP
+.B (no)psy
+Enable psychovisual optimizations that hurt PSNR and SSIM but ought to look
+better (default: enabled).
+.
+.TP
 .B deadzone_inter=<0\-32>
 Set the size of the inter luma quantization deadzone for non-trellis
 quantization (default: 21).
@@ -10592,6 +10632,37 @@ This has a slight penalty to compression quality.
 appropriate number of threads.
 .
 .TP
+.B (no)sliced_threads
+Use slice-based threading (default: disabled).
+Unlike normal threading, this option adds no encoding latency, but is slightly
+slower and less effective at compression.
+.
+.TP
+.B slice_max_size=<0 or positive integer>
+Maximum slice size in bytes (default:0).
+A value of zero disables the maximum.
+.
+.TP
+.B slice_max_mbs=<0 or positive integer>
+Maximum slice size in number of macroblocks (default:0).
+A value of zero disables the maximum.
+.
+.TP
+.B slices=<0 or positive integer>
+Maximum number of slices per frame (default:0).
+A value of zero disables the maximum.
+.
+.TP
+.B sync_lookahead=<0\-250>
+Adjusts the size of the threaded lookahead buffer (default: 0).
+0 or 'auto' tells x264 to automatically determine buffer size.
+.
+.TP
+.B (no)deterministic
+Use only deterministic optimizations with multithreaded encoding (default:
+enabled).
+.
+.TP
 .B (no)global_header
 Causes SPS and PPS to appear only once, at the beginning of the bitstream
 (default: disabled).
@@ -10603,6 +10674,16 @@ The default behavior causes SPS and PPS to repeat prior to each IDR frame.
 Treat the video content as interlaced.
 .
 .TP
+.B (no)constrained_intra
+Enable constrained intra prediction (default: disabled).
+This significantly reduces compression, but is required for the base layer of
+SVC encodes.
+.
+.TP
+.B (no)aud
+Write access unit delimeters to the stream (default: disabled).
+.
+.TP
 .B log=<\-1\-3>
 Adjust the amount of logging info printed to the screen.
 .PD 0
@@ -10644,6 +10725,11 @@ If the x264 on your system supports it, a new window will be opened during
 the encoding process, in which x264 will attempt to present an overview of
 how each frame gets encoded.
 Each block type on the visualized movie will be colored as follows:
+.
+.TP
+.B dump_yuv=<file name>
+Dump YUV frames to the specified file.
+For debugging use.
 .PD 0
 .RSs
 .IPs red/pink

From eafb70de50b3ff32d6f99c51b425a885377e1e16 Mon Sep 17 00:00:00 2001
From: diego <diego@b3059339-0415-0410-9bf9-f77b7e298cf2>
Date: Wed, 17 Feb 2010 22:01:35 +0000
Subject: [PATCH 05/36] libmpdemux: Mark functions not used outside of their
 files as static.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30612 b3059339-0415-0410-9bf9-f77b7e298cf2
---
 libmpdemux/aviheader.c |  3 ++-
 libmpdemux/demux_avi.c | 17 ++++++++++++-----
 libmpdemux/demux_avs.c |  2 +-
 libmpdemux/demux_gif.c |  3 ++-
 libmpdemux/demux_mpg.c | 10 +++++++---
 libmpdemux/demux_ogg.c |  6 ++++--
 libmpdemux/demux_pva.c |  2 +-
 libmpdemux/demuxer.c   |  2 +-
 libmpdemux/parse_mp4.c |  3 ++-
 9 files changed, 32 insertions(+), 16 deletions(-)

diff --git a/libmpdemux/aviheader.c b/libmpdemux/aviheader.c
index 8435fa3c4f..003874bb2e 100644
--- a/libmpdemux/aviheader.c
+++ b/libmpdemux/aviheader.c
@@ -59,7 +59,8 @@ static int odml_get_vstream_id(int id, unsigned char res[])
     return 0;
 }
 
-int avi_idx_cmp(const void *elem1,const void *elem2) {
+static int avi_idx_cmp(const void *elem1, const void *elem2)
+{
   register off_t a = AVI_IDX_OFFSET((AVIINDEXENTRY *)elem1);
   register off_t b = AVI_IDX_OFFSET((AVIINDEXENTRY *)elem2);
   return (a > b) - (b > a);
diff --git a/libmpdemux/demux_avi.c b/libmpdemux/demux_avi.c
index 51a33ca6ae..e3f26d21d3 100644
--- a/libmpdemux/demux_avi.c
+++ b/libmpdemux/demux_avi.c
@@ -43,7 +43,9 @@ extern const demuxer_desc_t demuxer_desc_avi_nini;
 int pts_from_bps=1;
 
 // Select ds from ID
-demux_stream_t* demux_avi_select_stream(demuxer_t *demux,unsigned int id){
+static demux_stream_t *demux_avi_select_stream(demuxer_t *demux,
+                                               unsigned int id)
+{
   int stream_id=avi_stream_id(id);
 
 
@@ -306,7 +308,8 @@ do{
 // return value:
 //     0 = EOF or no stream found
 //     1 = successfully read a packet
-int demux_avi_fill_buffer_ni(demuxer_t *demux,demux_stream_t* ds){
+static int demux_avi_fill_buffer_ni(demuxer_t *demux, demux_stream_t *ds)
+{
 avi_priv_t *priv=demux->priv;
 unsigned int id=0;
 unsigned int len;
@@ -374,7 +377,8 @@ do{
 // return value:
 //     0 = EOF or no stream found
 //     1 = successfully read a packet
-int demux_avi_fill_buffer_nini(demuxer_t *demux,demux_stream_t* ds){
+static int demux_avi_fill_buffer_nini(demuxer_t *demux, demux_stream_t *ds)
+{
 avi_priv_t *priv=demux->priv;
 unsigned int id=0;
 unsigned int len;
@@ -586,7 +590,9 @@ static demuxer_t* demux_open_avi(demuxer_t* demuxer){
 }
 
 
-void demux_seek_avi(demuxer_t *demuxer,float rel_seek_secs,float audio_delay,int flags){
+static void demux_seek_avi(demuxer_t *demuxer, float rel_seek_secs,
+                           float audio_delay, int flags)
+{
     avi_priv_t *priv=demuxer->priv;
     demux_stream_t *d_audio=demuxer->audio;
     demux_stream_t *d_video=demuxer->video;
@@ -759,7 +765,8 @@ void demux_seek_avi(demuxer_t *demuxer,float rel_seek_secs,float audio_delay,int
 }
 
 
-void demux_close_avi(demuxer_t *demuxer) {
+static void demux_close_avi(demuxer_t *demuxer)
+{
   avi_priv_t* priv=demuxer->priv;
 
   if(!priv)
diff --git a/libmpdemux/demux_avs.c b/libmpdemux/demux_avs.c
index e52afea4dd..d8bdad6676 100644
--- a/libmpdemux/demux_avs.c
+++ b/libmpdemux/demux_avs.c
@@ -85,7 +85,7 @@ typedef struct tagAVS
     imp_avs_get_audio avs_get_audio;
 } AVS_T;
 
-AVS_T *initAVS(const char *filename)
+static AVS_T *initAVS(const char *filename)
 {
     AVS_T *AVS = malloc (sizeof(AVS_T));
     AVS_Value arg0 = avs_new_value_string(filename);
diff --git a/libmpdemux/demux_gif.c b/libmpdemux/demux_gif.c
index a85963931a..f18c807626 100644
--- a/libmpdemux/demux_gif.c
+++ b/libmpdemux/demux_gif.c
@@ -47,7 +47,8 @@ typedef struct {
 
 #ifndef CONFIG_GIF_TVT_HACK
 // not supported by certain versions of the library
-int my_read_gif(GifFileType *gif, uint8_t *buf, int len) {
+static int my_read_gif(GifFileType *gif, uint8_t *buf, int len)
+{
   return stream_read(gif->UserData, buf, len);
 }
 #endif
diff --git a/libmpdemux/demux_mpg.c b/libmpdemux/demux_mpg.c
index 72ab2a9b27..d37971b44a 100644
--- a/libmpdemux/demux_mpg.c
+++ b/libmpdemux/demux_mpg.c
@@ -814,7 +814,8 @@ static int demux_mpg_gxf_fill_buffer(demuxer_t *demux, demux_stream_t *ds) {
   return 1;
 }
 
-int demux_mpg_fill_buffer(demuxer_t *demux, demux_stream_t *ds){
+static int demux_mpg_fill_buffer(demuxer_t *demux, demux_stream_t *ds)
+{
 unsigned int head=0;
 int skipped=0;
 int max_packs=256; // 512kbyte
@@ -901,7 +902,9 @@ do{
 
 void skip_audio_frame(sh_audio_t *sh_audio);
 
-void demux_seek_mpg(demuxer_t *demuxer,float rel_seek_secs,float audio_delay, int flags){
+static void demux_seek_mpg(demuxer_t *demuxer, float rel_seek_secs,
+                           float audio_delay, int flags)
+{
     demux_stream_t *d_audio=demuxer->audio;
     demux_stream_t *d_video=demuxer->video;
     sh_audio_t *sh_audio=d_audio->sh;
@@ -1007,7 +1010,8 @@ void demux_seek_mpg(demuxer_t *demuxer,float rel_seek_secs,float audio_delay, in
     }
 }
 
-int demux_mpg_control(demuxer_t *demuxer,int cmd, void *arg){
+static int demux_mpg_control(demuxer_t *demuxer, int cmd, void *arg)
+{
     mpg_demuxer_t *mpg_d=(mpg_demuxer_t*)demuxer->priv;
 
     switch(cmd) {
diff --git a/libmpdemux/demux_ogg.c b/libmpdemux/demux_ogg.c
index 3af4866926..d0a462347a 100644
--- a/libmpdemux/demux_ogg.c
+++ b/libmpdemux/demux_ogg.c
@@ -177,7 +177,8 @@ extern int dvdsub_id;
 static subtitle ogg_sub;
 //FILE* subout;
 
-void demux_ogg_add_sub (ogg_stream_t* os,ogg_packet* pack) {
+static void demux_ogg_add_sub(ogg_stream_t *os, ogg_packet *pack)
+{
   int lcv;
   char *packet = pack->packet;
 
@@ -513,7 +514,8 @@ static int demux_ogg_add_packet(demux_stream_t* ds,ogg_stream_t* os,int id,ogg_p
 
 /// if -forceidx build a table of all syncpoints to make seeking easier
 /// otherwise try to get at least the final_granulepos
-void demux_ogg_scan_stream(demuxer_t* demuxer) {
+static void demux_ogg_scan_stream(demuxer_t *demuxer)
+{
   ogg_demuxer_t* ogg_d = demuxer->priv;
   stream_t *s = demuxer->stream;
   ogg_sync_state* sync = &ogg_d->sync;
diff --git a/libmpdemux/demux_pva.c b/libmpdemux/demux_pva.c
index 835fba2961..39fad12184 100644
--- a/libmpdemux/demux_pva.c
+++ b/libmpdemux/demux_pva.c
@@ -73,7 +73,7 @@ typedef struct {
 
 
 
-int pva_sync(demuxer_t * demuxer)
+static int pva_sync(demuxer_t * demuxer)
 {
 	uint8_t buffer[5]={0,0,0,0,0};
 	int count;
diff --git a/libmpdemux/demuxer.c b/libmpdemux/demuxer.c
index 5d4798470a..d30b11f97e 100644
--- a/libmpdemux/demuxer.c
+++ b/libmpdemux/demuxer.c
@@ -277,7 +277,7 @@ sh_sub_t *new_sh_sub_sid(demuxer_t *demuxer, int id, int sid)
     return demuxer->s_streams[id];
 }
 
-void free_sh_sub(sh_sub_t *sh)
+static void free_sh_sub(sh_sub_t *sh)
 {
     mp_msg(MSGT_DEMUXER, MSGL_DBG2, "DEMUXER: freeing sh_sub at %p\n", sh);
     free(sh->extradata);
diff --git a/libmpdemux/parse_mp4.c b/libmpdemux/parse_mp4.c
index bdae91a0fe..767dfc3ff9 100644
--- a/libmpdemux/parse_mp4.c
+++ b/libmpdemux/parse_mp4.c
@@ -33,7 +33,8 @@
 #define MP4_DL MSGL_V
 #define freereturn(a,b) free(a); return b
 
-int mp4_read_descr_len(stream_t *s) {
+static int mp4_read_descr_len(stream_t *s)
+{
   uint8_t b;
   uint8_t numBytes = 0;
   uint32_t length = 0;

From 8615d008344b47523ac6aae2e7bda66762119bd9 Mon Sep 17 00:00:00 2001
From: diego <diego@b3059339-0415-0410-9bf9-f77b7e298cf2>
Date: Wed, 17 Feb 2010 22:11:05 +0000
Subject: [PATCH 06/36] Mark mov_build_index() as static; it is not used
 outside of the file.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30613 b3059339-0415-0410-9bf9-f77b7e298cf2
---
 libmpdemux/demux_mov.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libmpdemux/demux_mov.c b/libmpdemux/demux_mov.c
index a1a250c05f..3848cf1903 100644
--- a/libmpdemux/demux_mov.c
+++ b/libmpdemux/demux_mov.c
@@ -165,7 +165,7 @@ typedef struct {
     void* desc; // image/sound/etc description (pointer to ImageDescription etc)
 } mov_track_t;
 
-void mov_build_index(mov_track_t* trak,int timescale){
+static void mov_build_index(mov_track_t* trak,int timescale){
     int i,j,s;
     int last=trak->chunks_size;
     unsigned int pts=0;

From 69429048a21918a0e109ba106ad2161c4a413f03 Mon Sep 17 00:00:00 2001
From: diego <diego@b3059339-0415-0410-9bf9-f77b7e298cf2>
Date: Wed, 17 Feb 2010 22:14:04 +0000
Subject: [PATCH 07/36] Mark mp_mp3_get_lsf() as static; it is not used outside
 of the file.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30614 b3059339-0415-0410-9bf9-f77b7e298cf2
---
 libmpdemux/mp3_hdr.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libmpdemux/mp3_hdr.c b/libmpdemux/mp3_hdr.c
index 0266469cb9..ee7d8211df 100644
--- a/libmpdemux/mp3_hdr.c
+++ b/libmpdemux/mp3_hdr.c
@@ -38,7 +38,7 @@ static long freqs[9] = { 44100, 48000, 32000,	// MPEG 1.0
 			 22050, 24000, 16000,   // MPEG 2.0
 			 11025, 12000,  8000};  // MPEG 2.5
 
-int mp_mp3_get_lsf(unsigned char* hbuf){
+static int mp_mp3_get_lsf(unsigned char* hbuf){
     unsigned long newhead =
       hbuf[0] << 24 |
       hbuf[1] << 16 |

From 2df3416d32c3e1732bbf96a8b020792db40ad7a2 Mon Sep 17 00:00:00 2001
From: diego <diego@b3059339-0415-0410-9bf9-f77b7e298cf2>
Date: Wed, 17 Feb 2010 22:22:51 +0000
Subject: [PATCH 08/36] Add separate header for real_fix_timestamp(); avoids
 forward declarations.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30615 b3059339-0415-0410-9bf9-f77b7e298cf2
---
 libmpdemux/demux_mkv.c  |  3 +--
 libmpdemux/demux_real.c |  1 +
 libmpdemux/demux_real.h | 28 ++++++++++++++++++++++++++++
 3 files changed, 30 insertions(+), 2 deletions(-)
 create mode 100644 libmpdemux/demux_real.h

diff --git a/libmpdemux/demux_mkv.c b/libmpdemux/demux_mkv.c
index d2ee9be643..ecb171c551 100644
--- a/libmpdemux/demux_mkv.c
+++ b/libmpdemux/demux_mkv.c
@@ -33,6 +33,7 @@
 #include "stheader.h"
 #include "ebml.h"
 #include "matroska.h"
+#include "demux_real.h"
 
 #include "mp_msg.h"
 #include "help_mp.h"
@@ -2393,8 +2394,6 @@ handle_subtitles(demuxer_t *demuxer, mkv_track_t *track, char *block,
   ds_add_packet(demuxer->sub, dp);
 }
 
-double real_fix_timestamp(unsigned char *buf, unsigned int timestamp, unsigned int format, int64_t *kf_base, int *kf_pts, double *pts);
-
 static void
 handle_realvideo (demuxer_t *demuxer, mkv_track_t *track, uint8_t *buffer,
                   uint32_t size, int block_bref)
diff --git a/libmpdemux/demux_real.c b/libmpdemux/demux_real.c
index de6ff785ee..78a404b826 100644
--- a/libmpdemux/demux_real.c
+++ b/libmpdemux/demux_real.c
@@ -47,6 +47,7 @@
 #include "stream/stream.h"
 #include "demuxer.h"
 #include "stheader.h"
+#include "demux_real.h"
 
 //#define mp_dbg(mod,lev, args... ) mp_msg_c((mod<<8)|lev, ## args )
 
diff --git a/libmpdemux/demux_real.h b/libmpdemux/demux_real.h
new file mode 100644
index 0000000000..9c58bbf89a
--- /dev/null
+++ b/libmpdemux/demux_real.h
@@ -0,0 +1,28 @@
+/*
+ * This file is part of MPlayer.
+ *
+ * MPlayer 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.
+ *
+ * MPlayer 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
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with MPlayer; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef MPLAYER_DEMUX_REAL_H
+#define MPLAYER_DEMUX_REAL_H
+
+#include <stdint.h>
+
+double real_fix_timestamp(unsigned char *buf, unsigned int timestamp,
+                          unsigned int format, int64_t *kf_base,
+                          int *kf_pts, double *pts);
+
+#endif /* MPLAYER_DEMUX_REAL_H */

From 9905880267cacb259eb11cc7cdbdfbb4d7149325 Mon Sep 17 00:00:00 2001
From: diego <diego@b3059339-0415-0410-9bf9-f77b7e298cf2>
Date: Wed, 17 Feb 2010 22:28:24 +0000
Subject: [PATCH 09/36] Add separate header for aac_parse_frame(); avoids
 forward declarations.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30616 b3059339-0415-0410-9bf9-f77b7e298cf2
---
 libmpdemux/aac_hdr.c    |  1 +
 libmpdemux/aac_hdr.h    | 26 ++++++++++++++++++++++++++
 libmpdemux/demux_aac.c  |  8 +-------
 libmpdemux/muxer_mpeg.c |  3 +--
 4 files changed, 29 insertions(+), 9 deletions(-)
 create mode 100644 libmpdemux/aac_hdr.h

diff --git a/libmpdemux/aac_hdr.c b/libmpdemux/aac_hdr.c
index 1866288349..aed06f0e28 100644
--- a/libmpdemux/aac_hdr.c
+++ b/libmpdemux/aac_hdr.c
@@ -19,6 +19,7 @@
  */
 
 #include <stdint.h>
+#include "aac_hdr.h"
 
 /// \param srate (out) sample rate
 /// \param num (out) number of audio frames in this ADTS frame
diff --git a/libmpdemux/aac_hdr.h b/libmpdemux/aac_hdr.h
new file mode 100644
index 0000000000..be56368925
--- /dev/null
+++ b/libmpdemux/aac_hdr.h
@@ -0,0 +1,26 @@
+/*
+ * This file is part of MPlayer.
+ *
+ * MPlayer 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.
+ *
+ * MPlayer 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
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with MPlayer; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef MPLAYER_AAC_HDR_H
+#define MPLAYER_AAC_HDR_H
+
+#include <stdint.h>
+
+int aac_parse_frame(uint8_t *buf, int *srate, int *num);
+
+#endif /* MPLAYER_AAC_HDR_H */
diff --git a/libmpdemux/demux_aac.c b/libmpdemux/demux_aac.c
index 2ebbb2995e..cfbedfc8c1 100644
--- a/libmpdemux/demux_aac.c
+++ b/libmpdemux/demux_aac.c
@@ -28,7 +28,7 @@
 #include "demuxer.h"
 #include "parse_es.h"
 #include "stheader.h"
-
+#include "aac_hdr.h"
 #include "ms_hdr.h"
 
 typedef struct {
@@ -39,12 +39,6 @@ typedef struct {
 	int bitrate;	/// bitrate computed as size/time
 } aac_priv_t;
 
-/// \param srate (out) sample rate
-/// \param num (out) number of audio frames in this ADTS frame
-/// \return size of the ADTS frame in bytes
-/// aac_parse_frames needs a buffer at least 8 bytes long
-int aac_parse_frame(uint8_t *buf, int *srate, int *num);
-
 static int demux_aac_init(demuxer_t *demuxer)
 {
 	aac_priv_t *priv;
diff --git a/libmpdemux/muxer_mpeg.c b/libmpdemux/muxer_mpeg.c
index 20b552a96e..faa5eb4bf5 100644
--- a/libmpdemux/muxer_mpeg.c
+++ b/libmpdemux/muxer_mpeg.c
@@ -34,6 +34,7 @@
 #include "demuxer.h"
 #include "stheader.h"
 #include "m_option.h"
+#include "aac_hdr.h"
 #include "mpeg_hdr.h"
 #include "mp3_hdr.h"
 #include "liba52/a52.h"
@@ -2067,8 +2068,6 @@ static int analyze_mpa(muxer_stream_t *s)
 	return layer;	//actual layer with the highest score
 }
 
-int aac_parse_frame(uint8_t *buf, int *srate, int *num);
-
 static int parse_audio(muxer_stream_t *s, int finalize, unsigned int *nf, double *timer, double delay, int drop)
 {
 	int i, j, len, chans, srate, spf, layer, dummy, tot, num, frm_idx;

From e286b38529bf4ab782067049be63bf7dfab06462 Mon Sep 17 00:00:00 2001
From: diego <diego@b3059339-0415-0410-9bf9-f77b7e298cf2>
Date: Wed, 17 Feb 2010 22:33:21 +0000
Subject: [PATCH 10/36] Add config.h header #include; it is required for the
 HAVE_BIGENDIAN check.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30617 b3059339-0415-0410-9bf9-f77b7e298cf2
---
 libmpdemux/ms_hdr.h | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/libmpdemux/ms_hdr.h b/libmpdemux/ms_hdr.h
index aaeffa6ef3..2bfefa9ca2 100644
--- a/libmpdemux/ms_hdr.h
+++ b/libmpdemux/ms_hdr.h
@@ -19,6 +19,8 @@
 #ifndef MPLAYER_MS_HDR_H
 #define MPLAYER_MS_HDR_H
 
+#include "config.h"
+
 #ifndef _WAVEFORMATEX_
 #define _WAVEFORMATEX_
 typedef struct __attribute__((__packed__)) _WAVEFORMATEX {

From 6f8c91b9a2094f8d52978359ac89841352ac9163 Mon Sep 17 00:00:00 2001
From: diego <diego@b3059339-0415-0410-9bf9-f77b7e298cf2>
Date: Wed, 17 Feb 2010 22:40:50 +0000
Subject: [PATCH 11/36] Add separate header for mp_a52_framesize(); avoids
 forward declarations.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30618 b3059339-0415-0410-9bf9-f77b7e298cf2
---
 libmpdemux/demux_ts.c   |  2 +-
 libmpdemux/demux_ts.h   | 26 ++++++++++++++++++++++++++
 libmpdemux/muxer_mpeg.c |  3 +--
 3 files changed, 28 insertions(+), 3 deletions(-)
 create mode 100644 libmpdemux/demux_ts.h

diff --git a/libmpdemux/demux_ts.c b/libmpdemux/demux_ts.c
index 6b56b55ffc..7ee6d5ea1c 100644
--- a/libmpdemux/demux_ts.c
+++ b/libmpdemux/demux_ts.c
@@ -34,9 +34,9 @@
 #include "demuxer.h"
 #include "parse_es.h"
 #include "stheader.h"
-
 #include "ms_hdr.h"
 #include "mpeg_hdr.h"
+#include "demux_ts.h"
 
 #define TS_PH_PACKET_SIZE 192
 #define TS_FEC_PACKET_SIZE 204
diff --git a/libmpdemux/demux_ts.h b/libmpdemux/demux_ts.h
new file mode 100644
index 0000000000..e8db01716f
--- /dev/null
+++ b/libmpdemux/demux_ts.h
@@ -0,0 +1,26 @@
+/*
+ * This file is part of MPlayer.
+ *
+ * MPlayer 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.
+ *
+ * MPlayer 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
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with MPlayer; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef MPLAYER_DEMUX_TS_H
+#define MPLAYER_DEMUX_TS_H
+
+#include <stdint.h>
+
+int mp_a52_framesize(uint8_t *buf, int *srate);
+
+#endif /* MPLAYER_DEMUX_TS_H */
diff --git a/libmpdemux/muxer_mpeg.c b/libmpdemux/muxer_mpeg.c
index faa5eb4bf5..fc066d1eca 100644
--- a/libmpdemux/muxer_mpeg.c
+++ b/libmpdemux/muxer_mpeg.c
@@ -32,6 +32,7 @@
 #include "stream/stream.h"
 #include "muxer.h"
 #include "demuxer.h"
+#include "demux_ts.h"
 #include "stheader.h"
 #include "m_option.h"
 #include "aac_hdr.h"
@@ -232,8 +233,6 @@ m_option_t mpegopts_conf[] = {
 	{NULL, NULL, 0, 0, 0, 0, NULL}
 };
 
-int mp_a52_framesize(uint8_t *buf, int *srate);
-
 static void fix_audio_sys_header(muxer_priv_t *priv, uint8_t id, uint8_t newid, uint32_t size)
 {
 	uint8_t i;

From c66aa21366043b81d263e453dda28ac50d573114 Mon Sep 17 00:00:00 2001
From: diego <diego@b3059339-0415-0410-9bf9-f77b7e298cf2>
Date: Wed, 17 Feb 2010 22:48:32 +0000
Subject: [PATCH 12/36] Add header for ty_ClearOSD(), ty_processuserdata();
 avoids forward declarations.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30619 b3059339-0415-0410-9bf9-f77b7e298cf2
---
 libmpdemux/demux_ty.c     |  2 +-
 libmpdemux/demux_ty_osd.c |  1 +
 libmpdemux/demux_ty_osd.h | 25 +++++++++++++++++++++++++
 libmpdemux/video.c        |  3 +--
 4 files changed, 28 insertions(+), 3 deletions(-)
 create mode 100644 libmpdemux/demux_ty_osd.h

diff --git a/libmpdemux/demux_ty.c b/libmpdemux/demux_ty.c
index b784715e2f..67ff4f114e 100644
--- a/libmpdemux/demux_ty.c
+++ b/libmpdemux/demux_ty.c
@@ -41,6 +41,7 @@
 
 #include "stream/stream.h"
 #include "demuxer.h"
+#include "demux_ty_osd.h"
 #include "parse_es.h"
 #include "stheader.h"
 #include "sub_cc.h"
@@ -105,7 +106,6 @@ typedef struct
 } TiVoInfo;
 
 off_t vstream_streamsize( );
-void ty_ClearOSD( int start );
 
 // ===========================================================================
 #define TMF_SIG "showing.xml"
diff --git a/libmpdemux/demux_ty_osd.c b/libmpdemux/demux_ty_osd.c
index 9ae04ece5d..a9429d79c8 100644
--- a/libmpdemux/demux_ty_osd.c
+++ b/libmpdemux/demux_ty_osd.c
@@ -26,6 +26,7 @@
 //#include "subreader.h"
 #include "sub_cc.h"
 #include "libvo/sub.h"
+#include "demux_ty_osd.h"
 
 //#include "dvdauth.h"
 
diff --git a/libmpdemux/demux_ty_osd.h b/libmpdemux/demux_ty_osd.h
new file mode 100644
index 0000000000..3b81933759
--- /dev/null
+++ b/libmpdemux/demux_ty_osd.h
@@ -0,0 +1,25 @@
+/*
+ * This file is part of MPlayer.
+ *
+ * MPlayer 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.
+ *
+ * MPlayer 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
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with MPlayer; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef MPLAYER_DEMUX_TY_OSD_H
+#define MPLAYER_DEMUX_TY_OSD_H
+
+void ty_ClearOSD(int start);
+void ty_processuserdata(unsigned char *buf, int len);
+
+#endif /* MPLAYER_DEMUX_TY_OSD_H */
diff --git a/libmpdemux/video.c b/libmpdemux/video.c
index 6b507b0d57..482c3d6a7a 100644
--- a/libmpdemux/video.c
+++ b/libmpdemux/video.c
@@ -33,6 +33,7 @@
 
 #include "stream/stream.h"
 #include "demuxer.h"
+#include "demux_ty_osd.h"
 #include "stheader.h"
 #include "parse_es.h"
 #include "mpeg_hdr.h"
@@ -405,8 +406,6 @@ mpeg_header_parser:
 return 1;
 }
 
-void ty_processuserdata( unsigned char* buf, int len );
-
 static void process_userdata(unsigned char* buf,int len){
     int i;
     /* if the user data starts with "CC", assume it is a CC info packet */

From 2d776c8c768349798412a6121e581a3078fff4e6 Mon Sep 17 00:00:00 2001
From: diego <diego@b3059339-0415-0410-9bf9-f77b7e298cf2>
Date: Wed, 17 Feb 2010 22:52:31 +0000
Subject: [PATCH 13/36] libmpdemux: Remove pointless leftover '#if 1'
 preprocessor instructions.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30620 b3059339-0415-0410-9bf9-f77b7e298cf2
---
 libmpdemux/demux_mpg.c  | 2 --
 libmpdemux/demux_real.c | 2 --
 libmpdemux/mp3_hdr.c    | 2 --
 3 files changed, 6 deletions(-)

diff --git a/libmpdemux/demux_mpg.c b/libmpdemux/demux_mpg.c
index d37971b44a..f6c7fc5169 100644
--- a/libmpdemux/demux_mpg.c
+++ b/libmpdemux/demux_mpg.c
@@ -824,11 +824,9 @@ int ret=0;
 // System stream
 do{
   demux->filepos=stream_tell(demux->stream);
-#if 1
   //lame workaround: this is needed to show the progress bar when playing dvdnav://
   //(ths poor guy doesn't know teh length of the stream at startup)
   demux->movi_end = demux->stream->end_pos;
-#endif
   head=stream_read_dword(demux->stream);
   if((head&0xFFFFFF00)!=0x100){
    // sync...
diff --git a/libmpdemux/demux_real.c b/libmpdemux/demux_real.c
index 78a404b826..45ee5efdd4 100644
--- a/libmpdemux/demux_real.c
+++ b/libmpdemux/demux_real.c
@@ -496,7 +496,6 @@ double real_fix_timestamp(unsigned char *buf, unsigned int timestamp, unsigned i
   int pict_type;
   unsigned int orig_kf;
 
-#if 1
   if(format==mmioFOURCC('R','V','3','0') || format==mmioFOURCC('R','V','4','0')){
     if(format==mmioFOURCC('R','V','3','0')){
       SKIP_BITS(3);
@@ -531,7 +530,6 @@ double real_fix_timestamp(unsigned char *buf, unsigned int timestamp, unsigned i
     }
     mp_msg(MSGT_DEMUX, MSGL_DBG2,"\nTS: %08X -> %08X (%04X) %d %02X %02X %02X %02X %5u\n",timestamp,kf,orig_kf,pict_type,s[0],s[1],s[2],s[3],pts?kf-(unsigned int)(*pts*1000.0):0);
   }
-#endif
     v_pts=kf*0.001f;
 //    if(pts && (v_pts<*pts || !kf)) v_pts=*pts+frametime;
     if(pts) *pts=v_pts;
diff --git a/libmpdemux/mp3_hdr.c b/libmpdemux/mp3_hdr.c
index ee7d8211df..d2520f1d8d 100644
--- a/libmpdemux/mp3_hdr.c
+++ b/libmpdemux/mp3_hdr.c
@@ -65,13 +65,11 @@ int mp_get_mp3_header(unsigned char* hbuf,int* chans, int* srate, int* spf, int*
 
 //    printf("head=0x%08X\n",newhead);
 
-#if 1
     // head_check:
     if( (newhead & 0xffe00000) != 0xffe00000 ){
 	mp_msg(MSGT_DEMUXER,MSGL_DBG2,"head_check failed\n");
 	return -1;
     }
-#endif
 
     layer = 4-((newhead>>17)&3);
     if(layer==4){

From 4a9770c1c27b146bac553502cfacd11ae5ead0df Mon Sep 17 00:00:00 2001
From: diego <diego@b3059339-0415-0410-9bf9-f77b7e298cf2>
Date: Wed, 17 Feb 2010 22:58:03 +0000
Subject: [PATCH 14/36] Add mp_getbits() to mpeg_hdr.h to avoid a forward
 declaration.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30621 b3059339-0415-0410-9bf9-f77b7e298cf2
---
 libmpdemux/demux_ts.c | 1 -
 libmpdemux/mpeg_hdr.h | 2 ++
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/libmpdemux/demux_ts.c b/libmpdemux/demux_ts.c
index 7ee6d5ea1c..d27ae76596 100644
--- a/libmpdemux/demux_ts.c
+++ b/libmpdemux/demux_ts.c
@@ -1115,7 +1115,6 @@ static void demux_close_ts(demuxer_t * demuxer)
 }
 
 
-unsigned char mp_getbits(unsigned char*, unsigned int, unsigned char);
 #define getbits mp_getbits
 
 static int mp4_parse_sl_packet(pmt_t *pmt, uint8_t *buf, uint16_t packet_len, int pid, ES_stream_t *pes_es)
diff --git a/libmpdemux/mpeg_hdr.h b/libmpdemux/mpeg_hdr.h
index cb9aef1625..d9922767b2 100644
--- a/libmpdemux/mpeg_hdr.h
+++ b/libmpdemux/mpeg_hdr.h
@@ -48,4 +48,6 @@ void mp4_header_process_vop(mp_mpeg_header_t * picture, unsigned char * buffer);
 int h264_parse_sps(mp_mpeg_header_t * picture, unsigned char * buf, int len);
 int mp_vc1_decode_sequence_header(mp_mpeg_header_t * picture, unsigned char * buf, int len);
 
+unsigned char mp_getbits(unsigned char *buffer, unsigned int from, unsigned char len);
+
 #endif /* MPLAYER_MPEG_HDR_H */

From d28c27df8d038c42c5da75946e6053daeb8031d9 Mon Sep 17 00:00:00 2001
From: diego <diego@b3059339-0415-0410-9bf9-f77b7e298cf2>
Date: Wed, 17 Feb 2010 23:02:13 +0000
Subject: [PATCH 15/36] Add header file for store_ughvlc(); avoids forward
 declarations.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30622 b3059339-0415-0410-9bf9-f77b7e298cf2
---
 libmpdemux/demux_mov.c |  1 +
 libmpdemux/demux_mov.h | 24 ++++++++++++++++++++++++
 libmpdemux/demux_ogg.c |  4 +---
 3 files changed, 26 insertions(+), 3 deletions(-)
 create mode 100644 libmpdemux/demux_mov.h

diff --git a/libmpdemux/demux_mov.c b/libmpdemux/demux_mov.c
index 3848cf1903..a8ca20f211 100644
--- a/libmpdemux/demux_mov.c
+++ b/libmpdemux/demux_mov.c
@@ -67,6 +67,7 @@
 
 #include "libvo/sub.h"
 
+#include "demux_mov.h"
 #include "qtpalette.h"
 #include "parse_mp4.h" // .MP4 specific stuff
 
diff --git a/libmpdemux/demux_mov.h b/libmpdemux/demux_mov.h
new file mode 100644
index 0000000000..8aa515c349
--- /dev/null
+++ b/libmpdemux/demux_mov.h
@@ -0,0 +1,24 @@
+/*
+ * This file is part of MPlayer.
+ *
+ * MPlayer 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.
+ *
+ * MPlayer 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
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with MPlayer; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef MPLAYER_DEMUX_MOV_H
+#define MPLAYER_DEMUX_MOV_H
+
+unsigned int store_ughvlc(unsigned char *s, unsigned int v);
+
+#endif /* MPLAYER_DEMUX_MOV_H */
diff --git a/libmpdemux/demux_ogg.c b/libmpdemux/demux_ogg.c
index d0a462347a..a72600243f 100644
--- a/libmpdemux/demux_ogg.c
+++ b/libmpdemux/demux_ogg.c
@@ -31,6 +31,7 @@
 #include "demuxer.h"
 #include "stheader.h"
 #include "libavutil/intreadwrite.h"
+#include "demux_mov.h"
 
 #define FOURCC_VORBIS mmioFOURCC('v', 'r', 'b', 's')
 #define FOURCC_SPEEX  mmioFOURCC('s', 'p', 'x', ' ')
@@ -640,9 +641,6 @@ static void demux_ogg_scan_stream(demuxer_t *demuxer)
 void print_wave_header(WAVEFORMATEX *h, int verbose_level);
 void print_video_header(BITMAPINFOHEADER *h, int verbose_level);
 
-/* defined in demux_mov.c */
-unsigned int store_ughvlc(unsigned char *s, unsigned int v);
-
 /** \brief Change the current subtitle stream and return its ID.
 
   \param demuxer The demuxer whose subtitle stream will be changed.

From 965f604636d3a3ee161dbdc818d6b323893bf2a1 Mon Sep 17 00:00:00 2001
From: diego <diego@b3059339-0415-0410-9bf9-f77b7e298cf2>
Date: Wed, 17 Feb 2010 23:10:56 +0000
Subject: [PATCH 16/36] Add read_avi_header() to aviheader.h; avoids forward
 declarations.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30623 b3059339-0415-0410-9bf9-f77b7e298cf2
---
 libmpdemux/aviheader.h | 3 +++
 libmpdemux/demux_avi.c | 2 --
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/libmpdemux/aviheader.h b/libmpdemux/aviheader.h
index 4074f6bb03..6740c249ce 100644
--- a/libmpdemux/aviheader.h
+++ b/libmpdemux/aviheader.h
@@ -24,6 +24,7 @@
 #include "config.h"	/* get correct definition of HAVE_BIGENDIAN */
 #include "libavutil/common.h"
 #include "mpbswap.h"
+#include "demuxer.h"
 
 #ifndef mmioFOURCC
 #define mmioFOURCC( ch0, ch1, ch2, ch3 )				\
@@ -374,4 +375,6 @@ typedef struct {
 
 #define AVI_IDX_OFFSET(x) ((((uint64_t)(x)->dwFlags&0xffff0000)<<16)+(x)->dwChunkOffset)
 
+void read_avi_header(demuxer_t *demuxer, int index_mode);
+
 #endif /* MPLAYER_AVIHEADER_H */
diff --git a/libmpdemux/demux_avi.c b/libmpdemux/demux_avi.c
index e3f26d21d3..89ec44549e 100644
--- a/libmpdemux/demux_avi.c
+++ b/libmpdemux/demux_avi.c
@@ -434,8 +434,6 @@ int index_mode=-1;  // -1=untouched  0=don't use index  1=use (generate) index
 char *index_file_save = NULL, *index_file_load = NULL;
 int force_ni=0;     // force non-interleaved AVI parsing
 
-void read_avi_header(demuxer_t *demuxer,int index_mode);
-
 static demuxer_t* demux_open_avi(demuxer_t* demuxer){
     demux_stream_t *d_audio=demuxer->audio;
     demux_stream_t *d_video=demuxer->video;

From a37c279d27525ac28936d345f2c216da38e42e90 Mon Sep 17 00:00:00 2001
From: diego <diego@b3059339-0415-0410-9bf9-f77b7e298cf2>
Date: Wed, 17 Feb 2010 23:25:02 +0000
Subject: [PATCH 17/36] Move up demux_ogg_sub_id, demux_ogg_sub_reverse_id;
 avoids forward declarations.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30624 b3059339-0415-0410-9bf9-f77b7e298cf2
---
 libmpdemux/demux_ogg.c | 54 +++++++++++++++++++-----------------------
 1 file changed, 25 insertions(+), 29 deletions(-)

diff --git a/libmpdemux/demux_ogg.c b/libmpdemux/demux_ogg.c
index a72600243f..127bde5b48 100644
--- a/libmpdemux/demux_ogg.c
+++ b/libmpdemux/demux_ogg.c
@@ -367,7 +367,31 @@ static int demux_ogg_check_lang(const char *clang, const char *langlist)
   return 0;
 }
 
-static int demux_ogg_sub_reverse_id(demuxer_t *demuxer, int id);
+/** \brief Change the current subtitle stream and return its ID.
+
+  \param demuxer The demuxer whose subtitle stream will be changed.
+  \param new_num The number of the new subtitle track. The number must be
+  between 0 and ogg_d->n_text - 1.
+
+  \returns The Ogg stream number ( = page serial number) of the newly selected
+  track.
+*/
+int demux_ogg_sub_id(demuxer_t *demuxer, int index) {
+  ogg_demuxer_t *ogg_d = demuxer->priv;
+  return (index < 0) ? index : (index >= ogg_d->n_text) ? -1 : ogg_d->text_ids[index];
+}
+
+/** \brief Translate the ogg track number into the subtitle number.
+ *  \param demuxer The demuxer about whose subtitles we are inquiring.
+ *  \param id The ogg track number of the subtitle track.
+ */
+static int demux_ogg_sub_reverse_id(demuxer_t *demuxer, int id) {
+  ogg_demuxer_t *ogg_d = demuxer->priv;
+  int i;
+  for (i = 0; i < ogg_d->n_text; i++)
+    if (ogg_d->text_ids[i] == id) return i;
+  return -1;
+}
 
 /// Try to print out comments and also check for LANGUAGE= tag
 static void demux_ogg_check_comments(demuxer_t *d, ogg_stream_t *os, int id, vorbis_comment *vc)
@@ -641,34 +665,6 @@ static void demux_ogg_scan_stream(demuxer_t *demuxer)
 void print_wave_header(WAVEFORMATEX *h, int verbose_level);
 void print_video_header(BITMAPINFOHEADER *h, int verbose_level);
 
-/** \brief Change the current subtitle stream and return its ID.
-
-  \param demuxer The demuxer whose subtitle stream will be changed.
-  \param new_num The number of the new subtitle track. The number must be
-  between 0 and ogg_d->n_text - 1.
-
-  \returns The Ogg stream number ( = page serial number) of the newly selected
-  track.
-*/
-int demux_ogg_sub_id(demuxer_t *demuxer, int index) {
-  ogg_demuxer_t *ogg_d = demuxer->priv;
-  return (index < 0) ? index : (index >= ogg_d->n_text) ? -1 : ogg_d->text_ids[index];
-}
-
-/** \brief Translate the ogg track number into the subtitle number.
- *  \param demuxer The demuxer about whose subtitles we are inquiring.
- *  \param id The ogg track number of the subtitle track.
- */
-static int demux_ogg_sub_reverse_id(demuxer_t *demuxer, int id) {
-  ogg_demuxer_t *ogg_d = demuxer->priv;
-  int i;
-  for (i = 0; i < ogg_d->n_text; i++)
-    if (ogg_d->text_ids[i] == id) return i;
-  return -1;
-}
-
-static void demux_close_ogg(demuxer_t* demuxer);
-
 static void fixup_vorbis_wf(sh_audio_t *sh, ogg_demuxer_t *od)
 {
   int i, offset;

From 2dbe8cf340253fb914e793be7282b82d032371a5 Mon Sep 17 00:00:00 2001
From: diego <diego@b3059339-0415-0410-9bf9-f77b7e298cf2>
Date: Wed, 17 Feb 2010 23:27:47 +0000
Subject: [PATCH 18/36] Mark demux_ogg_sub_id() as static; it is not used
 outside of the file.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30625 b3059339-0415-0410-9bf9-f77b7e298cf2
---
 libmpdemux/demux_ogg.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/libmpdemux/demux_ogg.c b/libmpdemux/demux_ogg.c
index 127bde5b48..cc8b65cd43 100644
--- a/libmpdemux/demux_ogg.c
+++ b/libmpdemux/demux_ogg.c
@@ -376,7 +376,8 @@ static int demux_ogg_check_lang(const char *clang, const char *langlist)
   \returns The Ogg stream number ( = page serial number) of the newly selected
   track.
 */
-int demux_ogg_sub_id(demuxer_t *demuxer, int index) {
+static int demux_ogg_sub_id(demuxer_t *demuxer, int index)
+{
   ogg_demuxer_t *ogg_d = demuxer->priv;
   return (index < 0) ? index : (index >= ogg_d->n_text) ? -1 : ogg_d->text_ids[index];
 }

From e606c4652665b26b5560b3b28a13b8fd6c87c951 Mon Sep 17 00:00:00 2001
From: diego <diego@b3059339-0415-0410-9bf9-f77b7e298cf2>
Date: Wed, 17 Feb 2010 23:33:17 +0000
Subject: [PATCH 19/36] Remove demux_ogg-related declarations that are no
 longer necessary.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30626 b3059339-0415-0410-9bf9-f77b7e298cf2
---
 libmpdemux/demuxer.h | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/libmpdemux/demuxer.h b/libmpdemux/demuxer.h
index 28c4c951f1..09da39713d 100644
--- a/libmpdemux/demuxer.h
+++ b/libmpdemux/demuxer.h
@@ -414,12 +414,6 @@ char* demux_info_get(demuxer_t *demuxer, const char *opt);
 int demux_info_print(demuxer_t *demuxer);
 int demux_control(demuxer_t *demuxer, int cmd, void *arg);
 
-#ifdef CONFIG_OGGVORBIS
-/* Found in demux_ogg.c */
-int demux_ogg_num_subs(demuxer_t *demuxer);
-int demux_ogg_sub_id(demuxer_t *demuxer, int index);
-#endif
-
 int demuxer_get_current_time(demuxer_t *demuxer);
 double demuxer_get_time_length(demuxer_t *demuxer);
 int demuxer_get_percent_pos(demuxer_t *demuxer);

From e01e094438ad05c052b0694d99548498d1602b3d Mon Sep 17 00:00:00 2001
From: diego <diego@b3059339-0415-0410-9bf9-f77b7e298cf2>
Date: Wed, 17 Feb 2010 23:36:44 +0000
Subject: [PATCH 20/36] Add header for demux_ogg_open, init_avi_with_ogg;
 avoids forward declarations.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30627 b3059339-0415-0410-9bf9-f77b7e298cf2
---
 libmpdemux/demux_avi.c |  5 +----
 libmpdemux/demux_ogg.c |  1 +
 libmpdemux/demux_ogg.h | 27 +++++++++++++++++++++++++++
 3 files changed, 29 insertions(+), 4 deletions(-)
 create mode 100644 libmpdemux/demux_ogg.h

diff --git a/libmpdemux/demux_avi.c b/libmpdemux/demux_avi.c
index 89ec44549e..eb9b586706 100644
--- a/libmpdemux/demux_avi.c
+++ b/libmpdemux/demux_avi.c
@@ -30,12 +30,9 @@
 #include "stream/stream.h"
 #include "demuxer.h"
 #include "stheader.h"
-
+#include "demux_ogg.h"
 #include "aviheader.h"
 
-demuxer_t* init_avi_with_ogg(demuxer_t* demuxer);
-int demux_ogg_open(demuxer_t* demuxer);
-
 extern const demuxer_desc_t demuxer_desc_avi_ni;
 extern const demuxer_desc_t demuxer_desc_avi_nini;
 
diff --git a/libmpdemux/demux_ogg.c b/libmpdemux/demux_ogg.c
index cc8b65cd43..80bc1d248b 100644
--- a/libmpdemux/demux_ogg.c
+++ b/libmpdemux/demux_ogg.c
@@ -32,6 +32,7 @@
 #include "stheader.h"
 #include "libavutil/intreadwrite.h"
 #include "demux_mov.h"
+#include "demux_ogg.h"
 
 #define FOURCC_VORBIS mmioFOURCC('v', 'r', 'b', 's')
 #define FOURCC_SPEEX  mmioFOURCC('s', 'p', 'x', ' ')
diff --git a/libmpdemux/demux_ogg.h b/libmpdemux/demux_ogg.h
new file mode 100644
index 0000000000..0bdc30b910
--- /dev/null
+++ b/libmpdemux/demux_ogg.h
@@ -0,0 +1,27 @@
+/*
+ * This file is part of MPlayer.
+ *
+ * MPlayer 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.
+ *
+ * MPlayer 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
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with MPlayer; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef MPLAYER_DEMUX_OGG_H
+#define MPLAYER_DEMUX_OGG_H
+
+#include "demuxer.h"
+
+int demux_ogg_open(demuxer_t *demuxer);
+demuxer_t *init_avi_with_ogg(demuxer_t *demuxer);
+
+#endif /* MPLAYER_DEMUX_OGG_H */

From e52d7ceb38bd6277e17b5e3fabe6d6e59c16e032 Mon Sep 17 00:00:00 2001
From: diego <diego@b3059339-0415-0410-9bf9-f77b7e298cf2>
Date: Wed, 17 Feb 2010 23:40:48 +0000
Subject: [PATCH 21/36] #include proper header for skip_audio_frame() instead
 of forward declaring it.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30628 b3059339-0415-0410-9bf9-f77b7e298cf2
---
 libmpdemux/demux_asf.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/libmpdemux/demux_asf.c b/libmpdemux/demux_asf.c
index 30856486b4..c880028af5 100644
--- a/libmpdemux/demux_asf.c
+++ b/libmpdemux/demux_asf.c
@@ -31,7 +31,7 @@
 #include "stream/stream.h"
 #include "asf.h"
 #include "demuxer.h"
-
+#include "libmpcodecs/dec_audio.h"
 #include "libvo/fastmemcpy.h"
 #include "libavutil/intreadwrite.h"
 
@@ -550,8 +550,6 @@ static int demux_asf_fill_buffer(demuxer_t *demux, demux_stream_t *ds){
 
 #include "stheader.h"
 
-void skip_audio_frame(sh_audio_t *sh_audio);
-
 static void demux_seek_asf(demuxer_t *demuxer,float rel_seek_secs,float audio_delay,int flags){
     struct asf_priv* asf = demuxer->priv;
     demux_stream_t *d_audio=demuxer->audio;

From 01df6700de05935c9fc1c595d406165f4b1008d4 Mon Sep 17 00:00:00 2001
From: diego <diego@b3059339-0415-0410-9bf9-f77b7e298cf2>
Date: Wed, 17 Feb 2010 23:45:01 +0000
Subject: [PATCH 22/36] Add header for asf_check_header, read_asf_header;
 avoids forward declarations.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30629 b3059339-0415-0410-9bf9-f77b7e298cf2
---
 libmpdemux/asfheader.c |  2 +-
 libmpdemux/asfheader.h | 28 ++++++++++++++++++++++++++++
 libmpdemux/demux_asf.c |  6 +-----
 3 files changed, 30 insertions(+), 6 deletions(-)
 create mode 100644 libmpdemux/asfheader.h

diff --git a/libmpdemux/asfheader.c b/libmpdemux/asfheader.c
index d0532f1e3d..1040df540d 100644
--- a/libmpdemux/asfheader.c
+++ b/libmpdemux/asfheader.c
@@ -33,8 +33,8 @@
 #include "stheader.h"
 
 #include "asf.h"
-
 #include "asfguid.h"
+#include "asfheader.h"
 
 typedef struct {
   // must be 0 for metadata record, might be non-zero for metadata lib record
diff --git a/libmpdemux/asfheader.h b/libmpdemux/asfheader.h
new file mode 100644
index 0000000000..9c239f7987
--- /dev/null
+++ b/libmpdemux/asfheader.h
@@ -0,0 +1,28 @@
+/*
+ * This file is part of MPlayer.
+ *
+ * MPlayer 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.
+ *
+ * MPlayer 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
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with MPlayer; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef MPLAYER_ASFHEADER_H
+#define MPLAYER_ASFHEADER_H
+
+#include "asf.h"
+#include "demuxer.h"
+
+int asf_check_header(demuxer_t *demuxer);
+int read_asf_header(demuxer_t *demuxer, struct asf_priv *asf);
+
+#endif /* MPLAYER_ASFHEADER_H */
diff --git a/libmpdemux/demux_asf.c b/libmpdemux/demux_asf.c
index c880028af5..32a2c5bda0 100644
--- a/libmpdemux/demux_asf.c
+++ b/libmpdemux/demux_asf.c
@@ -30,16 +30,12 @@
 
 #include "stream/stream.h"
 #include "asf.h"
+#include "asfheader.h"
 #include "demuxer.h"
 #include "libmpcodecs/dec_audio.h"
 #include "libvo/fastmemcpy.h"
 #include "libavutil/intreadwrite.h"
 
-// defined at asfheader.c:
-
-int asf_check_header(demuxer_t *demuxer);
-int read_asf_header(demuxer_t *demuxer,struct asf_priv* asf);
-
 // based on asf file-format doc by Eugene [http://divx.euro.ru]
 
 /**

From 84da7d44ef5b626f198dba84d15483745aabc7c7 Mon Sep 17 00:00:00 2001
From: reimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>
Date: Wed, 17 Feb 2010 23:46:57 +0000
Subject: [PATCH 23/36] Handle negative height in draw_slice from FFmpeg in
 vd_ffmpeg.c, since at least vo_xv and vo_sdl can not handle it and the scale
 filter seems to work fine either way. The FFmpeg vp3/Theora decoder produces
 such slices. Fixes bug #1646.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30630 b3059339-0415-0410-9bf9-f77b7e298cf2
---
 libmpcodecs/vd_ffmpeg.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/libmpcodecs/vd_ffmpeg.c b/libmpcodecs/vd_ffmpeg.c
index 29394317fe..a54254b80b 100644
--- a/libmpcodecs/vd_ffmpeg.c
+++ b/libmpcodecs/vd_ffmpeg.c
@@ -480,6 +480,7 @@ static void draw_slice(struct AVCodecContext *s,
                         int y, int type, int height){
     sh_video_t *sh = s->opaque;
     uint8_t *source[MP_MAX_PLANES]= {src->data[0] + offset[0], src->data[1] + offset[1], src->data[2] + offset[2]};
+    int strides[MP_MAX_PLANES] = {src->linesize[0], src->linesize[1], src->linesize[2]};
 #if 0
     int start=0, i;
     int width= s->width;
@@ -502,8 +503,19 @@ static void draw_slice(struct AVCodecContext *s,
         }
     }else
 #endif
+    if (height < 0)
+    {
+        int i;
+        height = -height;
+        y -= height;
+        for (i = 0; i < MP_MAX_PLANES; i++)
+        {
+            strides[i] = -strides[i];
+            source[i] -= strides[i];
+        }
+    }
     if (y < sh->disp_h) {
-        mpcodecs_draw_slice (sh, source, src->linesize, sh->disp_w, (y+height)<=sh->disp_h?height:sh->disp_h-y, 0, y);
+        mpcodecs_draw_slice (sh, source, strides, sh->disp_w, (y+height)<=sh->disp_h?height:sh->disp_h-y, 0, y);
     }
 }
 

From 00554417742997c413ea611910065d0527b690ee Mon Sep 17 00:00:00 2001
From: diego <diego@b3059339-0415-0410-9bf9-f77b7e298cf2>
Date: Thu, 18 Feb 2010 00:18:50 +0000
Subject: [PATCH 24/36] Add header for AVI print functions; avoids many forward
 declarations.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30631 b3059339-0415-0410-9bf9-f77b7e298cf2
---
 libmpcodecs/ad_acm.c       |  4 +---
 libmpcodecs/ad_twin.c      |  2 +-
 libmpcodecs/vd_vfw.c       |  4 +---
 libmpdemux/asfheader.c     |  5 +----
 libmpdemux/aviheader.c     | 12 +-----------
 libmpdemux/aviprint.c      |  1 +
 libmpdemux/aviprint.h      | 34 ++++++++++++++++++++++++++++++++++
 libmpdemux/demux_audio.c   |  3 +--
 libmpdemux/demux_lavf.c    |  4 +---
 libmpdemux/demux_ogg.c     |  4 +---
 libmpdemux/demux_real.c    |  3 +--
 libmpdemux/demux_realaud.c |  5 +----
 mencoder.c                 |  3 +--
 13 files changed, 46 insertions(+), 38 deletions(-)
 create mode 100644 libmpdemux/aviprint.h

diff --git a/libmpcodecs/ad_acm.c b/libmpcodecs/ad_acm.c
index 21d31bd02c..b179515754 100644
--- a/libmpcodecs/ad_acm.c
+++ b/libmpcodecs/ad_acm.c
@@ -23,7 +23,7 @@
 #include "config.h"
 #include "mp_msg.h"
 #include "help_mp.h"
-
+#include "libmpdemux/aviprint.h"
 #include "loader/wineacm.h"
 
 #include "ad_internal.h"
@@ -56,8 +56,6 @@ static int init(sh_audio_t *sh_audio)
   return 1;
 }
 
-void print_wave_header(WAVEFORMATEX *h, int verbose_level);
-
 static int preinit(sh_audio_t *sh_audio)
 {
     HRESULT ret;
diff --git a/libmpcodecs/ad_twin.c b/libmpcodecs/ad_twin.c
index f387821a5b..823ace89dd 100644
--- a/libmpcodecs/ad_twin.c
+++ b/libmpcodecs/ad_twin.c
@@ -23,6 +23,7 @@
 
 #include "ad_internal.h"
 #include "vqf.h"
+#include "libmpdemux/aviprint.h"
 #include "loader/ldt_keeper.h"
 #include "loader/wine/windef.h"
 #include "libaf/af_format.h"
@@ -106,7 +107,6 @@ static int load_dll( char *libname )
      TvqGetNumFixedBitsPerFrame;
 }
 
-void print_wave_header(WAVEFORMATEX *h, int verbose_level);
 static int init_vqf_audio_codec(sh_audio_t *sh_audio){
     WAVEFORMATEX *in_fmt=sh_audio->wf;
     vqf_priv_t*priv=sh_audio->context;
diff --git a/libmpcodecs/vd_vfw.c b/libmpcodecs/vd_vfw.c
index 20b0fed6f1..c87f5ef5d9 100644
--- a/libmpcodecs/vd_vfw.c
+++ b/libmpcodecs/vd_vfw.c
@@ -24,7 +24,7 @@
 #include "help_mp.h"
 
 #include "vd_internal.h"
-
+#include "libmpdemux/aviprint.h"
 #include "loader/wine/driver.h"
 #include "loader/wine/vfw.h"
 
@@ -150,8 +150,6 @@ static int control(sh_video_t *sh,int cmd,void* arg,...){
     return CONTROL_UNKNOWN;
 }
 
-void print_video_header(BITMAPINFOHEADER *h, int verbose_level);
-
 // init driver
 static int init(sh_video_t *sh){
     HRESULT ret;
diff --git a/libmpdemux/asfheader.c b/libmpdemux/asfheader.c
index 1040df540d..f31eda31fd 100644
--- a/libmpdemux/asfheader.c
+++ b/libmpdemux/asfheader.c
@@ -29,6 +29,7 @@
 #include "help_mp.h"
 
 #include "stream/stream.h"
+#include "aviprint.h"
 #include "demuxer.h"
 #include "stheader.h"
 
@@ -135,10 +136,6 @@ int asf_check_header(demuxer_t *demuxer){
   return DEMUXER_TYPE_ASF;
 }
 
-void print_wave_header(WAVEFORMATEX *h, int verbose_level);
-void print_video_header(BITMAPINFOHEADER *h, int verbose_level);
-
-
 static int get_ext_stream_properties(char *buf, int buf_len, int stream_num, struct asf_priv* asf, int is_video)
 {
   int pos=0;
diff --git a/libmpdemux/aviheader.c b/libmpdemux/aviheader.c
index 003874bb2e..25a4f6cef9 100644
--- a/libmpdemux/aviheader.c
+++ b/libmpdemux/aviheader.c
@@ -28,22 +28,12 @@
 #include "stream/stream.h"
 #include "demuxer.h"
 #include "stheader.h"
-
+#include "aviprint.h"
 #include "aviheader.h"
 #include "libavutil/common.h"
 
 static MainAVIHeader avih;
 
-void print_avih(MainAVIHeader *h, int verbose_level);
-void print_avih_flags(MainAVIHeader *h, int verbose_level);
-void print_strh(AVIStreamHeader *h, int verbose_level);
-void print_wave_header(WAVEFORMATEX *h, int verbose_level);
-void print_video_header(BITMAPINFOHEADER *h, int verbose_level);
-void print_index(AVIINDEXENTRY *idx,int idx_size, int verbose_level);
-void print_avistdindex_chunk(avistdindex_chunk *h, int verbose_level);
-void print_avisuperindex_chunk(avisuperindex_chunk *h, int verbose_level);
-void print_vprp(VideoPropHeader *vprp, int verbose_level);
-
 static int odml_get_vstream_id(int id, unsigned char res[])
 {
     unsigned char *p = (unsigned char *)&id;
diff --git a/libmpdemux/aviprint.c b/libmpdemux/aviprint.c
index f12451a6b4..aa432f54b2 100644
--- a/libmpdemux/aviprint.c
+++ b/libmpdemux/aviprint.c
@@ -29,6 +29,7 @@
 
 #include "aviheader.h"
 #include "ms_hdr.h"
+#include "aviprint.h"
 
 //#include "codec-cfg.h"
 //#include "stheader.h"
diff --git a/libmpdemux/aviprint.h b/libmpdemux/aviprint.h
new file mode 100644
index 0000000000..0f0f6c8e8d
--- /dev/null
+++ b/libmpdemux/aviprint.h
@@ -0,0 +1,34 @@
+/*
+ * This file is part of MPlayer.
+ *
+ * MPlayer 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.
+ *
+ * MPlayer 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
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with MPlayer; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef MPLAYER_AVIPRINT_H
+#define MPLAYER_AVIPRINT_H
+
+#include "ms_hdr.h"
+#include "aviheader.h"
+
+void print_avih_flags(MainAVIHeader *h, int verbose_level);
+void print_avih(MainAVIHeader *h, int verbose_level);
+void print_strh(AVIStreamHeader *h, int verbose_level);
+void print_wave_header(WAVEFORMATEX *h, int verbose_level);
+void print_video_header(BITMAPINFOHEADER *h, int verbose_level);
+void print_index(AVIINDEXENTRY *idx, int idx_size, int verbose_level);
+void print_avistdindex_chunk(avistdindex_chunk *h, int verbose_level);
+void print_avisuperindex_chunk(avisuperindex_chunk *h, int verbose_level);
+
+#endif /* MPLAYER_AVIPRINT_H */
diff --git a/libmpdemux/demux_audio.c b/libmpdemux/demux_audio.c
index 5b38fae206..63b710427d 100644
--- a/libmpdemux/demux_audio.c
+++ b/libmpdemux/demux_audio.c
@@ -23,6 +23,7 @@
 #include <stdlib.h>
 #include <stdio.h>
 #include "stream/stream.h"
+#include "aviprint.h"
 #include "demuxer.h"
 #include "stheader.h"
 #include "genres.h"
@@ -62,8 +63,6 @@ typedef struct mp3_hdr {
   struct mp3_hdr *next;
 } mp3_hdr_t;
 
-void print_wave_header(WAVEFORMATEX *h, int verbose_level);
-
 int hr_mp3_seek = 0;
 
 /**
diff --git a/libmpdemux/demux_lavf.c b/libmpdemux/demux_lavf.c
index 979064f079..f70a88146a 100644
--- a/libmpdemux/demux_lavf.c
+++ b/libmpdemux/demux_lavf.c
@@ -29,6 +29,7 @@
 #include "av_opts.h"
 
 #include "stream/stream.h"
+#include "aviprint.h"
 #include "demuxer.h"
 #include "stheader.h"
 #include "m_option.h"
@@ -80,9 +81,6 @@ typedef struct lavf_priv_t{
     int cur_program;
 }lavf_priv_t;
 
-void print_wave_header(WAVEFORMATEX *h, int verbose_level);
-void print_video_header(BITMAPINFOHEADER *h, int verbose_level);
-
 static int mp_read(void *opaque, uint8_t *buf, int size) {
     stream_t *stream = opaque;
     int ret;
diff --git a/libmpdemux/demux_ogg.c b/libmpdemux/demux_ogg.c
index 80bc1d248b..dd8f5e9aab 100644
--- a/libmpdemux/demux_ogg.c
+++ b/libmpdemux/demux_ogg.c
@@ -31,6 +31,7 @@
 #include "demuxer.h"
 #include "stheader.h"
 #include "libavutil/intreadwrite.h"
+#include "aviprint.h"
 #include "demux_mov.h"
 #include "demux_ogg.h"
 
@@ -664,9 +665,6 @@ static void demux_ogg_scan_stream(demuxer_t *demuxer)
 
 }
 
-void print_wave_header(WAVEFORMATEX *h, int verbose_level);
-void print_video_header(BITMAPINFOHEADER *h, int verbose_level);
-
 static void fixup_vorbis_wf(sh_audio_t *sh, ogg_demuxer_t *od)
 {
   int i, offset;
diff --git a/libmpdemux/demux_real.c b/libmpdemux/demux_real.c
index 45ee5efdd4..0ce2dfa859 100644
--- a/libmpdemux/demux_real.c
+++ b/libmpdemux/demux_real.c
@@ -45,6 +45,7 @@
 #include "mpbswap.h"
 
 #include "stream/stream.h"
+#include "aviprint.h"
 #include "demuxer.h"
 #include "stheader.h"
 #include "demux_real.h"
@@ -1089,8 +1090,6 @@ discard:
   return 0;
 }
 
-void print_wave_header(WAVEFORMATEX *h, int verbose_level);
-
 static demuxer_t* demux_open_real(demuxer_t* demuxer)
 {
     real_priv_t* priv = demuxer->priv;
diff --git a/libmpdemux/demux_realaud.c b/libmpdemux/demux_realaud.c
index fab5672392..dbb1f73ce3 100644
--- a/libmpdemux/demux_realaud.c
+++ b/libmpdemux/demux_realaud.c
@@ -28,6 +28,7 @@
 #include "help_mp.h"
 
 #include "stream/stream.h"
+#include "aviprint.h"
 #include "demuxer.h"
 #include "stheader.h"
 
@@ -157,10 +158,6 @@ static int demux_ra_fill_buffer(demuxer_t *demuxer, demux_stream_t *dsds)
 
 
 
-void print_wave_header(WAVEFORMATEX *h, int verbose_level);
-
-
-
 static demuxer_t* demux_open_ra(demuxer_t* demuxer)
 {
 	ra_priv_t* ra_priv = demuxer->priv;
diff --git a/mencoder.c b/mencoder.c
index 1265c0b227..93f10324f4 100644
--- a/mencoder.c
+++ b/mencoder.c
@@ -66,6 +66,7 @@
 #include "get_path.h"
 
 #include "stream/stream.h"
+#include "libmpdemux/aviprint.h"
 #include "libmpdemux/demuxer.h"
 #include "libmpdemux/stheader.h"
 #include "libmpdemux/mp3_hdr.h"
@@ -369,8 +370,6 @@ static void exit_sighandler(int x){
 
 static muxer_t* muxer=NULL;
 
-void print_wave_header(WAVEFORMATEX *h, int verbose_level);
-
 int main(int argc,char* argv[]){
 
 stream_t* stream=NULL;

From 93c1e23c479397fb14740d76746d6da4c6f8961c Mon Sep 17 00:00:00 2001
From: diego <diego@b3059339-0415-0410-9bf9-f77b7e298cf2>
Date: Thu, 18 Feb 2010 09:26:00 +0000
Subject: [PATCH 25/36] Mark some more functions that are not used outside of
 their files as static.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30632 b3059339-0415-0410-9bf9-f77b7e298cf2
---
 asxparser.c     | 4 ++--
 input/input.c   | 4 ++--
 libao2/ao_sdl.c | 3 ++-
 libmenu/menu.c  | 6 ++++--
 playtree.c      | 4 ++--
 spudec.c        | 5 +++--
 6 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/asxparser.c b/asxparser.c
index 1505e8a625..931482e339 100644
--- a/asxparser.c
+++ b/asxparser.c
@@ -36,7 +36,7 @@ extern m_config_t* mconfig;
 
 ////// List utils
 
-void
+static void
 asx_list_add(void* list_ptr,void* entry){
   void** list = *(void***)list_ptr;
   int c = 0;
@@ -53,7 +53,7 @@ asx_list_add(void* list_ptr,void* entry){
 }
 
 
-void
+static void
 asx_list_remove(void* list_ptr,void* entry,ASX_FreeFunc free_func) {
   void** list = *(void***)list_ptr;
   int c,e = -1;
diff --git a/input/input.c b/input/input.c
index b8ccca308d..baf0723a16 100644
--- a/input/input.c
+++ b/input/input.c
@@ -1494,7 +1494,7 @@ mp_input_get_input_from_name(char* name,int* keys) {
 #define BS_MAX 256
 #define SPACE_CHAR " \n\r\t"
 
-void
+static void
 mp_input_bind_keys(const int keys[MP_MAX_KEY_DOWN+1], char* cmd) {
   int i = 0,j;
   mp_cmd_bind_t* bind = NULL;
@@ -1538,7 +1538,7 @@ mp_input_bind_keys(const int keys[MP_MAX_KEY_DOWN+1], char* cmd) {
   memcpy(bind->input,keys,(MP_MAX_KEY_DOWN+1)*sizeof(int));
 }
 
-void
+static void
 mp_input_add_binds(const mp_cmd_bind_t* list) {
   int i;
   for(i = 0 ; list[i].cmd ; i++)
diff --git a/libao2/ao_sdl.c b/libao2/ao_sdl.c
index 8df8c0ccf2..914e05eca7 100644
--- a/libao2/ao_sdl.c
+++ b/libao2/ao_sdl.c
@@ -120,7 +120,8 @@ static int control(int cmd,void *arg){
 }
 
 // SDL Callback function
-void outputaudio(void *unused, Uint8 *stream, int len) {
+static void outputaudio(void *unused, Uint8 *stream, int len)
+{
 	//SDL_MixAudio(stream, read_buffer(buffers, len), len, SDL_MIX_MAXVOLUME);
 	//if(!full_buffers) printf("SDL: Buffer underrun!\n");
 
diff --git a/libmenu/menu.c b/libmenu/menu.c
index c8cf349c94..a262d7a960 100644
--- a/libmenu/menu.c
+++ b/libmenu/menu.c
@@ -94,7 +94,8 @@ static menu_cmd_bindings_t *cmd_bindings = NULL;
 static int cmd_bindings_num = 0;
 
 
-menu_cmd_bindings_t *get_cmd_bindings(const char *name) {
+static menu_cmd_bindings_t *get_cmd_bindings(const char *name)
+{
   int i;
   for (i = 0; i < cmd_bindings_num; ++i)
     if (!strcasecmp(cmd_bindings[i].name, name))
@@ -725,7 +726,8 @@ int menu_text_num_lines(char* txt, int max_width) {
   return l;
 }
 
-char* menu_text_get_next_line(char* txt, int max_width) {
+static char* menu_text_get_next_line(char* txt, int max_width)
+{
   int i = 0;
   render_txt(txt);
   while (*txt) {
diff --git a/playtree.c b/playtree.c
index f06d1eebea..f6f068ec33 100644
--- a/playtree.c
+++ b/playtree.c
@@ -415,7 +415,7 @@ play_tree_set_params_from(play_tree_t* dest,play_tree_t* src) {
 }
 
 // all children if deep < 0
-void
+static void
 play_tree_set_flag(play_tree_t* pt, int flags , int deep) {
   play_tree_t*  i;
 
@@ -428,7 +428,7 @@ play_tree_set_flag(play_tree_t* pt, int flags , int deep) {
   }
 }
 
-void
+static void
 play_tree_unset_flag(play_tree_t* pt, int flags , int deep) {
   play_tree_t*  i;
 
diff --git a/spudec.c b/spudec.c
index 51a70ec708..a79d708e38 100644
--- a/spudec.c
+++ b/spudec.c
@@ -767,8 +767,9 @@ static void scale_image(int x, int y, scale_pixel* table_x, scale_pixel* table_y
   }
 }
 
-void sws_spu_image(unsigned char *d1, unsigned char *d2, int dw, int dh, int ds,
-	unsigned char *s1, unsigned char *s2, int sw, int sh, int ss)
+static void sws_spu_image(unsigned char *d1, unsigned char *d2, int dw, int dh,
+                          int ds, unsigned char *s1, unsigned char *s2, int sw,
+                          int sh, int ss)
 {
 	struct SwsContext *ctx;
 	static SwsFilter filter;

From 98d06ba17c4fbe30f30739f09054a87800f879b9 Mon Sep 17 00:00:00 2001
From: diego <diego@b3059339-0415-0410-9bf9-f77b7e298cf2>
Date: Thu, 18 Feb 2010 09:29:05 +0000
Subject: [PATCH 26/36] Add required header #include for config.h.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30633 b3059339-0415-0410-9bf9-f77b7e298cf2
---
 get_path.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/get_path.c b/get_path.c
index ec76f57191..4a04f9ebb7 100644
--- a/get_path.c
+++ b/get_path.c
@@ -26,6 +26,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include "config.h"
 #include "mp_msg.h"
 #include "get_path.h"
 

From 352dfc79e4c3434ea8835cb1d9014ae0c08d461a Mon Sep 17 00:00:00 2001
From: diego <diego@b3059339-0415-0410-9bf9-f77b7e298cf2>
Date: Thu, 18 Feb 2010 09:41:52 +0000
Subject: [PATCH 27/36] Remove forward declarations for non-existing functions
 readPPOpt, revertPPOpt.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30634 b3059339-0415-0410-9bf9-f77b7e298cf2
---
 cfg-mencoder.h | 2 --
 cfg-mplayer.h  | 2 --
 2 files changed, 4 deletions(-)

diff --git a/cfg-mencoder.h b/cfg-mencoder.h
index d58f87b4d3..98ffc098d8 100644
--- a/cfg-mencoder.h
+++ b/cfg-mencoder.h
@@ -26,8 +26,6 @@
 #include "cfg-common.h"
 
 extern int sws_flags;
-int readPPOpt(void *, char *arg);
-void revertPPOpt(void *conf, char* opt);
 extern char *pp_help;
 
 extern m_option_t lameopts_conf[];
diff --git a/cfg-mplayer.h b/cfg-mplayer.h
index 4eb42a3adf..0fa7249cad 100644
--- a/cfg-mplayer.h
+++ b/cfg-mplayer.h
@@ -72,8 +72,6 @@ extern float force_monitor_aspect;
 extern float monitor_pixel_aspect;
 
 extern int sws_flags;
-int readPPOpt(void *conf, char *arg);
-void revertPPOpt(void *conf, char* opt);
 extern char* pp_help;
 
 const m_option_t vd_conf[]={

From eea4f2238b61d8938e14aa8176b147f40f9c2368 Mon Sep 17 00:00:00 2001
From: diego <diego@b3059339-0415-0410-9bf9-f77b7e298cf2>
Date: Thu, 18 Feb 2010 10:19:42 +0000
Subject: [PATCH 28/36] Add header for functions exported from vo_zr.c and use
 it appropriately.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30635 b3059339-0415-0410-9bf9-f77b7e298cf2
---
 cfg-mplayer.h |  4 +---
 libvo/vo_zr.c |  2 +-
 libvo/vo_zr.h | 29 +++++++++++++++++++++++++++++
 3 files changed, 31 insertions(+), 4 deletions(-)
 create mode 100644 libvo/vo_zr.h

diff --git a/cfg-mplayer.h b/cfg-mplayer.h
index 0fa7249cad..a9d23e381a 100644
--- a/cfg-mplayer.h
+++ b/cfg-mplayer.h
@@ -24,6 +24,7 @@
  */
 
 #include "cfg-common.h"
+#include "libvo/vo_zr.h"
 
 extern int key_fifo_size;
 extern unsigned doubleclick_time;
@@ -58,9 +59,6 @@ extern int menu_fribidi_flip_commas;
 
 extern char *unrar_executable;
 
-int vo_zr_parseoption(const m_option_t* conf, char *opt, char * param);
-void vo_zr_revertoption(const m_option_t* opt,char* pram);
-
 extern m_option_t dxr2_opts[];
 
 extern char * skinName;
diff --git a/libvo/vo_zr.c b/libvo/vo_zr.c
index 95b12eb243..af9cc9b00a 100644
--- a/libvo/vo_zr.c
+++ b/libvo/vo_zr.c
@@ -41,8 +41,8 @@
 #include "mp_msg.h"
 #include "m_option.h"
 #include "fastmemcpy.h"
-
 #include "jpeg_enc.h"
+#include "vo_zr.h"
 
 static const vo_info_t info =
 {
diff --git a/libvo/vo_zr.h b/libvo/vo_zr.h
new file mode 100644
index 0000000000..ce13f0fb41
--- /dev/null
+++ b/libvo/vo_zr.h
@@ -0,0 +1,29 @@
+/*
+ * playback on Zoran cards
+ *
+ * This file is part of MPlayer.
+ *
+ * MPlayer 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.
+ *
+ * MPlayer 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
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with MPlayer; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef MPLAYER_VO_ZR_H
+#define MPLAYER_VO_ZR_H
+
+#include "m_option.h"
+
+int  vo_zr_parseoption(const m_option_t *conf, const char *opt, const char *param);
+void vo_zr_revertoption(const m_option_t *opt, const char *param);
+
+#endif /* MPLAYER_VO_ZR_H */

From 39ce4dd0889c8fd0b0f9c464a68d38435de348da Mon Sep 17 00:00:00 2001
From: diego <diego@b3059339-0415-0410-9bf9-f77b7e298cf2>
Date: Thu, 18 Feb 2010 10:26:39 +0000
Subject: [PATCH 29/36] Add header #include for print_wave_header() instead of
 a forward declaration.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30636 b3059339-0415-0410-9bf9-f77b7e298cf2
---
 loader/dmo/DMO_AudioDecoder.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/loader/dmo/DMO_AudioDecoder.c b/loader/dmo/DMO_AudioDecoder.c
index 55a597b2d7..37a32f2923 100644
--- a/loader/dmo/DMO_AudioDecoder.c
+++ b/loader/dmo/DMO_AudioDecoder.c
@@ -29,9 +29,9 @@ struct DMO_AudioDecoder
 #include <stdlib.h>
 
 #include "mp_msg.h"
+#include "libmpdemux/aviprint.h"
 
 typedef long STDCALL (*GETCLASS) (GUID*, GUID*, void**);
-void print_wave_header(WAVEFORMATEX *h, int verbose_level);
 
 DMO_AudioDecoder * DMO_AudioDecoder_Open(char* dllname, GUID* guid, WAVEFORMATEX* wf,int out_channels)
 //DMO_AudioDecoder * DMO_AudioDecoder_Create(const CodecInfo * info, const WAVEFORMATEX* wf)

From 4565c3ac282bf198be68aa2dfb16b204ea6bfdc4 Mon Sep 17 00:00:00 2001
From: cehoyos <cehoyos@b3059339-0415-0410-9bf9-f77b7e298cf2>
Date: Thu, 18 Feb 2010 10:32:00 +0000
Subject: [PATCH 30/36] Use new FFmpeg WMA Voice decoder.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30637 b3059339-0415-0410-9bf9-f77b7e298cf2
---
 etc/codecs.conf | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/etc/codecs.conf b/etc/codecs.conf
index fb0b9667a6..af8d946ea0 100644
--- a/etc/codecs.conf
+++ b/etc/codecs.conf
@@ -4032,6 +4032,13 @@ audiocodec ffwmapro
   driver ffmpeg
   dll "wmapro"
 
+audiocodec ffwmavoice
+  info "WMA Voice audio (FFmpeg)"
+  status untested
+  format 0xA
+  driver ffmpeg
+  dll "wmavoice"
+
 audiocodec ffmac3
   info "Macintosh Audio Compression and Expansion 3:1"
   status untested

From 2903a8583f568508236f74d522d2f3a6676e3479 Mon Sep 17 00:00:00 2001
From: reimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>
Date: Thu, 18 Feb 2010 20:20:23 +0000
Subject: [PATCH 31/36] Use snprintf to ensure we do not write outside the
 buffer bounds when recording stub names into export_names.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30638 b3059339-0415-0410-9bf9-f77b7e298cf2
---
 loader/win32.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/loader/win32.c b/loader/win32.c
index 812815e699..8e314d5935 100644
--- a/loader/win32.c
+++ b/loader/win32.c
@@ -5516,7 +5516,7 @@ void* LookupExternal(const char* library, int ordinal)
 
 no_dll:
     if(pos>150)return 0;
-    sprintf(export_names[pos], "%s:%d", library, ordinal);
+    snprintf(export_names[pos], sizeof(export_names[pos]), "%s:%d", library, ordinal);
     return add_stub();
 }
 
@@ -5583,7 +5583,7 @@ void* LookupExternalByName(const char* library, const char* name)
 
 no_dll_byname:
     if(pos>150)return 0;// to many symbols
-    strcpy(export_names[pos], name);
+    snprintf(export_names[pos], sizeof(export_names[pos]), "%s", name);
     return add_stub();
 }
 

From 87edb382c68161f5f23bf2061a93bf684690e870 Mon Sep 17 00:00:00 2001
From: reimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>
Date: Thu, 18 Feb 2010 20:23:05 +0000
Subject: [PATCH 32/36] Add a GetModuleHandleW implementation.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30639 b3059339-0415-0410-9bf9-f77b7e298cf2
---
 loader/win32.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/loader/win32.c b/loader/win32.c
index 8e314d5935..100c1f3c89 100644
--- a/loader/win32.c
+++ b/loader/win32.c
@@ -596,6 +596,19 @@ static HMODULE WINAPI expGetModuleHandleA(const char* name)
     return result;
 }
 
+static HMODULE WINAPI expGetModuleHandleW(const uint16_t* name)
+{
+    char aname[256];
+    int pos = 0;
+    while (*name) {
+        if (*name > 256 || pos >= sizeof(aname) - 1)
+            return NULL;
+        aname[pos++] = *name++;
+    }
+    aname[pos] = 0;
+    return expGetModuleHandleA(aname);
+}
+
 static void* WINAPI expCreateThread(void* pSecAttr, long dwStackSize,
 				    void* lpStartAddress, void* lpParameter,
 				    long dwFlags, long* dwThreadId)
@@ -5030,6 +5043,7 @@ struct exports exp_kernel32[]=
     FF(UnmapViewOfFile, -1)
     FF(Sleep, -1)
     FF(GetModuleHandleA, -1)
+    FF(GetModuleHandleW, -1)
     FF(GetProfileIntA, -1)
     FF(GetPrivateProfileIntA, -1)
     FF(GetPrivateProfileStringA, -1)

From 134bbb8cd880698e08e13e1159c9c1cba6908ce4 Mon Sep 17 00:00:00 2001
From: reimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>
Date: Thu, 18 Feb 2010 20:24:52 +0000
Subject: [PATCH 33/36] Add a InitializeCriticalSectionAndSpinCount function.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30640 b3059339-0415-0410-9bf9-f77b7e298cf2
---
 loader/win32.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/loader/win32.c b/loader/win32.c
index 100c1f3c89..39c9d65b05 100644
--- a/loader/win32.c
+++ b/loader/win32.c
@@ -1348,6 +1348,11 @@ static void WINAPI expInitializeCriticalSection(CRITICAL_SECTION* c)
     return;
 }
 
+static void WINAPI expInitializeCriticalSectionAndSpinCount(CRITICAL_SECTION* c, DWORD spin)
+{
+    expInitializeCriticalSection(c);
+}
+
 static void WINAPI expEnterCriticalSection(CRITICAL_SECTION* c)
 {
 #ifdef CRITSECS_NEWTYPE
@@ -4984,6 +4989,7 @@ struct exports exp_kernel32[]=
     FF(VirtualAlloc, -1)
     FF(VirtualFree, -1)
     FF(InitializeCriticalSection, -1)
+    FF(InitializeCriticalSectionAndSpinCount, -1)
     FF(EnterCriticalSection, -1)
     FF(LeaveCriticalSection, -1)
     FF(DeleteCriticalSection, -1)

From b07bf5bddc48ec4b79b6d10dadb1ec2f6ea848b7 Mon Sep 17 00:00:00 2001
From: stefano <stefano@b3059339-0415-0410-9bf9-f77b7e298cf2>
Date: Thu, 18 Feb 2010 21:12:05 +0000
Subject: [PATCH 34/36] Merge two if conditions, allow to decrese the level of
 indentation of the block.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30641 b3059339-0415-0410-9bf9-f77b7e298cf2
---
 libswscale/utils.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/libswscale/utils.c b/libswscale/utils.c
index eebd40c79a..eb690740fd 100644
--- a/libswscale/utils.c
+++ b/libswscale/utils.c
@@ -1566,17 +1566,17 @@ struct SwsContext *sws_getCachedContext(struct SwsContext *context,
     if (!param)
         param = default_param;
 
-    if (context) {
-        if (context->srcW != srcW || context->srcH != srcH ||
+    if (context &&
+        (context->srcW != srcW || context->srcH != srcH ||
             context->srcFormat != srcFormat ||
             context->dstW != dstW || context->dstH != dstH ||
             context->dstFormat != dstFormat || context->flags != flags ||
-            context->param[0] != param[0] || context->param[1] != param[1])
+            context->param[0] != param[0] || context->param[1] != param[1]))
         {
             sws_freeContext(context);
             context = NULL;
         }
-    }
+
     if (!context) {
         return sws_getContext(srcW, srcH, srcFormat,
                               dstW, dstH, dstFormat, flags,

From 8090adeed3e04f019f79fcb50605294e442ae1ed Mon Sep 17 00:00:00 2001
From: stefano <stefano@b3059339-0415-0410-9bf9-f77b7e298cf2>
Date: Thu, 18 Feb 2010 21:17:07 +0000
Subject: [PATCH 35/36] Vertically align a list of comparisons in
 sws_getCachedContext().

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30642 b3059339-0415-0410-9bf9-f77b7e298cf2
---
 libswscale/utils.c | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/libswscale/utils.c b/libswscale/utils.c
index eb690740fd..66d22811f8 100644
--- a/libswscale/utils.c
+++ b/libswscale/utils.c
@@ -1567,11 +1567,15 @@ struct SwsContext *sws_getCachedContext(struct SwsContext *context,
         param = default_param;
 
     if (context &&
-        (context->srcW != srcW || context->srcH != srcH ||
-            context->srcFormat != srcFormat ||
-            context->dstW != dstW || context->dstH != dstH ||
-            context->dstFormat != dstFormat || context->flags != flags ||
-            context->param[0] != param[0] || context->param[1] != param[1]))
+        (context->srcW      != srcW      ||
+         context->srcH      != srcH      ||
+         context->srcFormat != srcFormat ||
+         context->dstW      != dstW      ||
+         context->dstH      != dstH      ||
+         context->dstFormat != dstFormat ||
+         context->flags     != flags     ||
+         context->param[0]  != param[0]  ||
+         context->param[1]  != param[1]))
         {
             sws_freeContext(context);
             context = NULL;

From 2aafb808284d74edab6e5320e1114f5c74d5881e Mon Sep 17 00:00:00 2001
From: stefano <stefano@b3059339-0415-0410-9bf9-f77b7e298cf2>
Date: Thu, 18 Feb 2010 21:20:37 +0000
Subject: [PATCH 36/36] Reindent and fix brace placement.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30643 b3059339-0415-0410-9bf9-f77b7e298cf2
---
 libswscale/utils.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/libswscale/utils.c b/libswscale/utils.c
index 66d22811f8..99bc663840 100644
--- a/libswscale/utils.c
+++ b/libswscale/utils.c
@@ -1575,11 +1575,10 @@ struct SwsContext *sws_getCachedContext(struct SwsContext *context,
          context->dstFormat != dstFormat ||
          context->flags     != flags     ||
          context->param[0]  != param[0]  ||
-         context->param[1]  != param[1]))
-        {
-            sws_freeContext(context);
-            context = NULL;
-        }
+         context->param[1]  != param[1])) {
+        sws_freeContext(context);
+        context = NULL;
+    }
 
     if (!context) {
         return sws_getContext(srcW, srcH, srcFormat,