diff -ur -r MPlayer-1.0rc2/configure MPlayer-1.0rc2_djgpp/configure --- MPlayer-1.0rc2/configure 2007-10-07 23:49:33.000000000 +0400 +++ MPlayer-1.0rc2_djgpp/configure 2007-10-12 11:06:11.000000000 +0400 @@ -388,6 +388,7 @@ Audio output: --disable-alsa disable ALSA audio output [autodetect] + --disable-allegro disable Allegro audio output [autodetect] --disable-ossaudio disable OSS audio output [autodetect] --disable-arts disable aRts audio output [autodetect] --disable-esd disable esd audio output [autodetect] @@ -452,6 +453,7 @@ --with-extralibdir=DIR extra linker search paths in DIR (*) --with-xvmclib=NAME adapter-specific library name (e.g. XvMCNVIDIA) + --with-allegro-config=PATH path to allegro-config --with-freetype-config=PATH path to freetype-config --with-fribidi-config=PATH path to fribidi-config --with-glib-config=PATH path to glib*-config @@ -599,6 +601,7 @@ _sgiaudio=auto _sunaudio=auto _alsa=auto +_allegro=auto _fastmemcpy=yes _unrarlib=yes _win32dll=auto @@ -728,6 +731,9 @@ _xvmclib=`echo $ac_option | cut -d '=' -f 2` ;; + --with-allegro-config=*) + _allegroconfig=`echo $ac_option | cut -d '=' -f 2` + ;; --with-sdl-config=*) _sdlconfig=`echo $ac_option | cut -d '=' -f 2` ;; @@ -967,6 +973,8 @@ --disable-sgiaudio) _sgiaudio=no ;; --enable-alsa) _alsa=yes ;; --disable-alsa) _alsa=no ;; + --enable-allegro) _allegro=yes ;; + --disable-allegro) _allegro=no ;; --enable-tv) _tv=yes ;; --disable-tv) _tv=no ;; --enable-tv-bsdbt848) _tv_bsdbt848=yes ;; @@ -1224,6 +1232,9 @@ MINGW32*) system_name=MINGW32 ;; + *-DOS|FreeDOS|OpenDOS) + system_name=DJGPP + ;; *) system_name="$system_name-UNKNOWN" ;; @@ -1285,6 +1296,7 @@ morphos) system_name=MorphOS ;; amigaos) system_name=AmigaOS ;; mingw32msvc) system_name=MINGW32 ;; + msdosdjgpp) system_name=DJGPP ;; esac # We need to convert underscores so that values like k6-2 and pentium-mmx can be passed host_arch=`echo $_target | cut -d '-' -f 1` @@ -1516,6 +1528,10 @@ _as=`$_cc -print-prog-name=as` test -z "$_as" && _as=as fi +if test $_cross_compile = yes; then + _cc_ranlib=`$_cc -print-prog-name=ranlib` + test "$_cc_ranlib" && _ranlib="$_cc_ranlib" +fi # XXX: this should be ok.. _cpuinfo="echo" @@ -2971,7 +2987,11 @@ int main (void) { (void) memalign(64, sizeof(char)); return 0; } EOF _memalign=no -cc_check && _memalign=yes +if test "$system_name" = DJGPP ; then + _memalign=no +else + cc_check && _memalign=yes +fi if test "$_memalign" = yes ; then _def_memalign='#define HAVE_MEMALIGN 1' else @@ -3666,7 +3686,7 @@ #include int main(void) { smbc_opendir("smb://"); return 0; } EOF - for _ld_tmp in "-lsmbclient" "-lsmbclient $_ld_dl" "-lsmbclient $_ld_dl -lnsl" "-lsmbclient $_ld_dl -lssl -lnsl" ; do + for _ld_tmp in "-lsmbclient" "-lsmbclient -lsocket" "-lsmbclient $_ld_dl" "-lsmbclient $_ld_dl -lnsl" "-lsmbclient $_ld_dl -lssl -lnsl" ; do cc_check $_ld_tmp && _ld_extra="$_ld_extra $_ld_tmp" && \ _smbsupport=yes && break done @@ -4728,11 +4748,19 @@ int main(void) { vbeVersion(); return 0; } EOF _vesa=no - cc_check -lvbe -llrmi && _vesa=yes + if test "$system_name" = DJGPP ; then + cc_check -lvbe && _vesa=yes + else + cc_check -lvbe -llrmi && _vesa=yes + fi fi if test "$_vesa" = yes ; then _def_vesa='#define HAVE_VESA 1' - _libs_mplayer="$_libs_mplayer -lvbe -llrmi" + if test "$system_name" = DJGPP ; then + _libs_mplayer="$_libs_mplayer -lvbe" + else + _libs_mplayer="$_libs_mplayer -lvbe -llrmi" + fi _vosrc="$_vosrc vo_vesa.c vesa_lvo.c gtf.c" _vomodules="vesa $_vomodules" else @@ -5281,6 +5309,36 @@ fi echores "$_alsa" +echocheck "Allegro audio" +if test "$_allegro" = auto ; then + cat > $TMPC << EOF +#include +int main(void) { allegro_init(); install_sound(DIGI_AUTODETECT, MIDI_NONE, NULL); return 0; } +EOF + _allegro=no + if test -z "$_allegroconfig" ; then + cc_check `allegro-config --cflags --libs` && _allegro=yes && _allegroconfig=allegro-config + if test "$_allegro" = no ; then + cc_check -lalleg && _allegro=yes + fi + else + cc_check `$_allegroconfig --cflags --libs` && _allegro=yes + fi +fi +if test "$_allegro" = yes ; then + _def_allegro='#define HAVE_ALLEGRO 1' + _aosrc="$_aosrc ao_allegro.c" + _aomodules="allegro $_aomodules" + if test -z "$_allegroconfig" ; then + _libs_mplayer="$_libs_mplayer -lalleg" + else + _libs_mplayer="$_libs_mplayer `$_allegroconfig --libs`" + fi +else + _def_allegro='#undef HAVE_ALLEGRO' + _noaomodules="allegro $_noaomodules" +fi +echores "$_allegro" echocheck "Sun audio" if test "$_sunaudio" = auto ; then @@ -8141,6 +8199,7 @@ $_def_alsa5 $_def_alsa9 $_def_alsa1x +$_def_allegro $_def_arts $_def_esd $_def_esd_latency @@ -8233,9 +8292,9 @@ #elif defined(HPUX) #define DEFAULT_CDROM_DEVICE "/dev/cdrom" #define DEFAULT_DVD_DEVICE "/dev/dvd" -#elif defined(WIN32) -#define DEFAULT_CDROM_DEVICE "D:" -#define DEFAULT_DVD_DEVICE "D:" +#elif defined(WIN32) || defined(__DJGPP__) +#define DEFAULT_CDROM_DEVICE "Z:" +#define DEFAULT_DVD_DEVICE "Z:" #elif defined(SYS_DARWIN) #define DEFAULT_CDROM_DEVICE "/dev/disk1" #define DEFAULT_DVD_DEVICE "/dev/rdiskN" diff -ur -r MPlayer-1.0rc2/libao2/audio_out.c MPlayer-1.0rc2_djgpp/libao2/audio_out.c --- MPlayer-1.0rc2/libao2/audio_out.c 2007-10-07 23:49:27.000000000 +0400 +++ MPlayer-1.0rc2_djgpp/libao2/audio_out.c 2007-10-12 11:06:11.000000000 +0400 @@ -44,6 +44,9 @@ #ifdef HAVE_ALSA1X extern ao_functions_t audio_out_alsa; #endif +#ifdef HAVE_ALLEGRO +extern ao_functions_t audio_out_allegro; +#endif #ifdef HAVE_NAS extern ao_functions_t audio_out_nas; #endif @@ -106,6 +109,9 @@ &audio_out_sun, #endif // wrappers: +#ifdef HAVE_ALLEGRO + &audio_out_allegro, +#endif #ifdef USE_ARTS &audio_out_arts, #endif diff -ur -r MPlayer-1.0rc2/libao2/ao_allegro.c MPlayer-1.0rc2_djgpp/libao2/ao_allegro.c --- MPlayer-1.0rc2/libao2/ao_allegro.c 1970-01-01 03:00:00.000000000 +0300 +++ MPlayer-1.0rc2_djgpp/libao2/ao_allegro.c 2007-10-12 11:06:11.000000000 +0400 @@ -0,0 +1,300 @@ +#include "config.h" + +#include +#include +#include + +#include + +#include "libavutil/common.h" +#include "mpbswap.h" +#include "subopt-helper.h" +#include "libaf/af_format.h" +#include "audio_out.h" +#include "audio_out_internal.h" +#include "mp_msg.h" +#include "help_mp.h" + + +static ao_info_t info = +{ + "Allegro audio output", + "allegro", + "Michael Kostylev ", + "experimental version, try `-autosync 30` to prevent a/v sync errors" +}; + +LIBAO_EXTERN(allegro) + +static AUDIOSTREAM *stream; +static void *mem_chunk; +static int bits; +static unsigned long total_samples; +static struct timeval play_start; + +// to set/get/query special features/parameters +static int control(int cmd,void *arg) +{ + int format, volume; + ao_control_vol_t* ao_vol; + + switch(cmd) + { + case AOCONTROL_QUERY_FORMAT: + format = (int)arg; + switch(format) + { + case AF_FORMAT_S8: + case AF_FORMAT_U8: + case AF_FORMAT_S16_BE: + case AF_FORMAT_U16_BE: + case AF_FORMAT_S16_LE: + case AF_FORMAT_U16_LE: + return CONTROL_OK; + default: + return CONTROL_FALSE; + } + case AOCONTROL_GET_VOLUME: + ao_vol = (ao_control_vol_t*)arg; + volume = voice_get_volume(stream->voice); + ao_vol->left = ao_vol->right = volume / 2.55; + return CONTROL_OK; + case AOCONTROL_SET_VOLUME: + ao_vol = (ao_control_vol_t*)arg; + volume = ao_vol->left * 255 / 100; + voice_set_volume(stream->voice, volume); + return CONTROL_OK; + } + return CONTROL_UNKNOWN; +} + +// open & setup audio device +// return: 1=success 0=fail +static int init(int rate,int channels,int format,int flags) +{ + unsigned int outburst = 16384; + int volume = 255, voices = 1, card_id = DIGI_AUTODETECT; + opt_t subopts[] = { + {"buffer", OPT_ARG_INT, &outburst, (opt_test_f)int_non_neg}, + {"volume", OPT_ARG_INT, &volume, (opt_test_f)int_non_neg}, + {"voices", OPT_ARG_INT, &voices, (opt_test_f)int_non_neg}, + {"card_id", OPT_ARG_INT, &card_id, NULL}, + {NULL} + }; + + if (subopt_parse(ao_subdevice, subopts) != 0) + { + mp_msg(MSGT_VO, MSGL_FATAL, + "\n-ao allegro command line help:\n" + "Example: mplayer -ao allegro:buffer=32768\n" + "\nOptions:\n" + " buffer=<4096..65535>\n" + " Buffer size, must be not too small (16384 bytes by default).\n" + " volume=<0..255>\n" + " Initial volume level (255 by default).\n" + " card_id=\n" + " Id can be one of the following:\n" + " %d (SB1.0), %d (SB1.5), %d (SB2.0),\n" + " %d (SBPro), %d (SBPro2), %d (SB16)\n" + " %d (ESS Audiodrive), %d (Ensoniq Soundscape),\n" + " %d (WSS)\n" + "\n", + DIGI_SB10, DIGI_SB15, DIGI_SB20, DIGI_SBPRO, DIGI_SBPRO2, + DIGI_SB16, DIGI_AUDIODRIVE, DIGI_SOUNDSCAPE, DIGI_WINSOUNDSYS); + return 0; + } + + if (outburst < 4096) outburst = 4096; + mp_msg(MSGT_AO,MSGL_DBG2, "ao_allegro: buffer size=%u\n", outburst); + + switch(format) + { + case AF_FORMAT_S16_BE: + case AF_FORMAT_U16_BE: + case AF_FORMAT_S16_LE: + case AF_FORMAT_U16_LE: + bits = 16; + ao_data.bps = channels * rate * 2; + break; + case AF_FORMAT_S8: + case AF_FORMAT_U8: + bits = 8; + ao_data.bps = channels * rate; + break; + default: + { + mp_msg(MSGT_AO,MSGL_ERR, "ao_allegro: unsupported format %s\n", af_fmt2str_short(format)); + return 0; + } + } + if(channels > 2) + { + mp_msg(MSGT_AO,MSGL_ERR, "ao_allegro: unable to play %d channel sound\n", channels); + return 0; + } + if(allegro_init() != 0) + { + mp_msg(MSGT_AO,MSGL_ERR, "ao_allegro: error initialising library\n"); + return 0; + } + + reserve_voices(voices, 0); + + if(install_sound(card_id, MIDI_NONE, NULL) != 0) + { + mp_msg(MSGT_AO,MSGL_ERR, "ao_allegro: error initialising sound system\n"); + mp_msg(MSGT_AO,MSGL_ERR, "ao_allegro: %s\n", allegro_error); + return 0; + } + + ao_data.samplerate = rate; + ao_data.channels = channels; + ao_data.format = format; + ao_data.outburst = outburst; + ao_data.buffersize = outburst; + + mp_msg(MSGT_AO,MSGL_DBG2, "ao_allegro: stream - buffer=%d, bits=%d, stereo=%d, rate=%d\n", + ao_data.outburst / (ao_data.channels * bits / 8), bits, channels - 1, rate); + + stream = play_audio_stream(ao_data.outburst / (ao_data.channels * bits / 8), bits, \ + ao_data.channels - 1, ao_data.samplerate, volume, 127); + + if (stream == NULL) + { + mp_msg(MSGT_AO,MSGL_ERR, "ao_allegro: error creating audio stream!\n"); + return 0; + } + return 1; +} + +// close audio device +static void uninit(int immed) +{ + stop_audio_stream(stream); +} + +// stop playing and empty buffers (for seeking/pause) +static void reset(void) +{ +// inaccurate :( + int volume = voice_get_volume(stream->voice); + stop_audio_stream(stream); + stream = play_audio_stream(ao_data.outburst / (ao_data.channels * bits / 8), bits, \ + ao_data.channels - 1, ao_data.samplerate, volume, 127); +} + +// stop playing, keep buffers (for pause) +static void audio_pause(void) +{ + voice_stop(stream->voice); +} + +// resume playing, after audio_pause() +static void audio_resume(void) +{ + voice_start(stream->voice); +} + +// return: how many bytes can be played without blocking +static int get_space(void) +{ + mem_chunk = get_audio_stream_buffer(stream); + if (mem_chunk != NULL) + { + return ao_data.outburst; + } + return 0; +} + +// puts to destination (stream) buffer unsigned (le) data of 'len' bytes +// 'len' should be even for 16-bit formats +void mkunsigned (void *dest, void *src, int len) +{ + int i; + + switch(ao_data.format) + { + case AF_FORMAT_S16_LE: + for (i = 0; i < len/2; i++) + ((uint16_t *)dest)[i] = ((uint16_t *)src)[i] ^ 0x8000; + break; + case AF_FORMAT_S16_BE: + for (i = 0; i < len; i += 2) + { + ((uint8_t *)dest)[i+1] = ((uint8_t *)src)[i] ^ 0x80; + ((uint8_t *)dest)[i] = ((uint8_t *)src)[i+1]; + } + break; + case AF_FORMAT_U16_BE: + swab(src, dest, len); + break; + case AF_FORMAT_S8: + for (i = 0; i < len; i++) + ((uint8_t *)dest)[i] = ((uint8_t *)src)[i] ^ 0x80; + break; + default: + memcpy (dest, src, len); + } +} + +// fills buffer of 'len' bytes with silence +void mksilence (void *data, int len) +{ + int i; + + if (bits == 8) + for (i = 0; i < len; i++) + ((uint8_t *)data)[i] = 0x80; + else + for (i = 0; i < len/2; i++) + ((uint16_t *)data)[i] = 0x8000; +} + +// plays 'len' bytes of 'data' +// it should round it down to outburst*n +// return: number of bytes played +static int play(void* data,int len,int flags) +{ + if (len <= 0) + return 0; + if (len > ao_data.outburst || !(flags & AOPLAY_FINAL_CHUNK)) + len = ao_data.outburst; + if (mem_chunk != NULL) + { + mkunsigned (mem_chunk, data, len); + if (flags & AOPLAY_FINAL_CHUNK) + mksilence((int8_t *)(mem_chunk) + len, ao_data.outburst - len); + free_audio_stream_buffer(stream); + if (!play_start.tv_sec) + gettimeofday(&play_start, NULL); + total_samples += len / (ao_data.channels * bits / 8); + return len; + } + return 0; +} + +// return: delay in seconds between first and last sample in buffer +static float get_delay(void) +{ + struct timeval now; + double buffered_samples_time; + double play_time; + + if (!play_start.tv_sec) + return 0; + buffered_samples_time = (float)total_samples / ao_data.samplerate; + gettimeofday (&now, NULL); + play_time = now.tv_sec - play_start.tv_sec; + play_time += (now.tv_usec - play_start.tv_usec) / 1000000.0; + + if (play_time > buffered_samples_time) + { +// mp_msg(MSGT_AO,MSGL_WARN, "\nao_allegro: underflow\n"); + play_start.tv_sec = 0; + total_samples = 0; + return 0; + } + + return buffered_samples_time - play_time; + +} diff -ur -r MPlayer-1.0rc2/libavutil/internal.h MPlayer-1.0rc2_djgpp/libavutil/internal.h --- MPlayer-1.0rc2/libavutil/internal.h 2007-10-07 23:49:34.000000000 +0400 +++ MPlayer-1.0rc2_djgpp/libavutil/internal.h 2007-10-12 12:52:00.000000000 +0400 @@ -118,7 +118,7 @@ #endif // Use rip-relative addressing if compiling PIC code on x86-64. -#if defined(__MINGW32__) || defined(__CYGWIN__) || \ +#if defined(__MINGW32__) || defined(__CYGWIN__) || defined(__DJGPP__) || \ defined(__OS2__) || (defined (__OpenBSD__) && !defined(__ELF__)) # if defined(ARCH_X86_64) && defined(PIC) # define MANGLE(a) "_" #a"(%%rip)" @@ -278,4 +278,37 @@ } #endif /* HAVE_LRINTF */ +#ifdef __DJGPP__ +static av_always_inline long int lrint(double x) +{ + int32_t i; + asm volatile( + "fistpl %0\n\t" + : "=m" (i) : "t" (x) : "st" + ); + return i; +} + +static av_always_inline long long llrint(double x) +{ + int64_t i; + asm volatile( + "fistpll %0\n\t" + : "=m" (i) : "t" (x) : "st" + ); + return i; +} + +static av_always_inline float roundf(float x) +{ + return (x + (x < 0 ? -0.5 : 0.5)); +} + +static av_always_inline double round(double v) +{ + return floor(v + 0.5); +} + +#endif /* __DJGPP__ */ + #endif /* INTERNAL_H */ diff -ur -r MPlayer-1.0rc2/libvo/gtf.c MPlayer-1.0rc2_djgpp/libvo/gtf.c --- MPlayer-1.0rc2/libvo/gtf.c 2007-10-07 23:49:28.000000000 +0400 +++ MPlayer-1.0rc2_djgpp/libvo/gtf.c 2007-10-12 12:55:50.000000000 +0400 @@ -25,6 +25,13 @@ static GTF_constants GTF_given_constants = { 3.0,550.0,1,8,1.8,8,40,20,128,600 }; +#ifdef __DJGPP__ +static double round(double v) +{ + return floor(v + 0.5); +} +#endif + static void GetRoundedConstants(GTF_constants *c) { c->Vsync_need = round(GTF_given_constants.Vsync_need); diff -ur -r MPlayer-1.0rc2/libvo/vesa_lvo.c MPlayer-1.0rc2_djgpp/libvo/vesa_lvo.c --- MPlayer-1.0rc2/libvo/vesa_lvo.c 2007-10-07 23:49:28.000000000 +0400 +++ MPlayer-1.0rc2_djgpp/libvo/vesa_lvo.c 2007-10-12 11:06:11.000000000 +0400 @@ -54,6 +54,7 @@ { mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_VESA_ThisBranchIsNoLongerSupported); return -1; +#if 0 if( mp_msg_test(MSGT_VO,MSGL_DBG2) ) { mp_msg(MSGT_VO,MSGL_DBG2, "vesa_lvo: vlvo_preinit(%s) was called\n",drvname);} lvo_handler = open(drvname,O_RDWR); @@ -69,6 +70,7 @@ video_out_vesa.draw_osd=vlvo_draw_osd; video_out_vesa.control=vlvo_control; return 0; +#endif } int vlvo_init(unsigned src_width,unsigned src_height, @@ -78,6 +80,7 @@ size_t i,awidth; mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_VESA_ThisBranchIsNoLongerSupported); return -1; +#if 0 if( mp_msg_test(MSGT_VO,MSGL_DBG2) ) { mp_msg(MSGT_VO,MSGL_DBG2, "vesa_lvo: vlvo_init() was called\n");} image_width = src_width; @@ -143,15 +146,20 @@ /*clear the buffer*/ memset(frames[0],0x80,mga_vid_config.frame_size*mga_vid_config.num_frames); return 0; +#endif } void vlvo_term( void ) { + mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_VESA_ThisBranchIsNoLongerSupported); + return; +#if 0 if( mp_msg_test(MSGT_VO,MSGL_DBG2) ) { mp_msg(MSGT_VO,MSGL_DBG2, "vesa_lvo: vlvo_term() was called\n");} ioctl( lvo_handler,MGA_VID_OFF,0 ); munmap(frames[0],mga_vid_config.frame_size*mga_vid_config.num_frames); if(lvo_handler != -1) close(lvo_handler); +#endif } uint32_t vlvo_draw_slice_420(uint8_t *image[], int stride[], int w,int h,int x,int y) diff -ur -r MPlayer-1.0rc2/libvo/video_out.c MPlayer-1.0rc2_djgpp/libvo/video_out.c --- MPlayer-1.0rc2/libvo/video_out.c 2007-10-07 23:49:28.000000000 +0400 +++ MPlayer-1.0rc2_djgpp/libvo/video_out.c 2007-10-12 11:06:11.000000000 +0400 @@ -206,6 +206,9 @@ #ifdef HAVE_SVGALIB &video_out_svga, #endif +#ifdef HAVE_VESA + &video_out_vesa, +#endif #ifdef HAVE_AA &video_out_aa, #endif @@ -231,9 +234,6 @@ #ifdef HAVE_BL &video_out_bl, #endif -#ifdef HAVE_VESA - &video_out_vesa, -#endif #ifdef HAVE_DIRECTFB &video_out_directfb, #ifdef HAVE_DFBMGA diff -ur -r MPlayer-1.0rc2/libvo/vo_vesa.c MPlayer-1.0rc2_djgpp/libvo/vo_vesa.c --- MPlayer-1.0rc2/libvo/vo_vesa.c 2007-10-07 23:49:28.000000000 +0400 +++ MPlayer-1.0rc2_djgpp/libvo/vo_vesa.c 2007-10-12 11:06:11.000000000 +0400 @@ -34,6 +34,10 @@ #include +#ifdef __DJGPP__ +#include +#endif + #include "video_out.h" #include "video_out_internal.h" @@ -164,10 +168,10 @@ #ifdef CONFIG_VIDIX else if(vidix_opened) { vidix_term(); vidix_opened = 0; } #endif - if(init_state) if((err=vbeRestoreState(init_state)) != VBE_OK) PRINT_VBE_ERR("vbeRestoreState",err); - init_state=NULL; if(init_mode) if((err=vbeSetMode(init_mode,NULL)) != VBE_OK) PRINT_VBE_ERR("vbeSetMode",err); init_mode=0; + if(init_state) if((err=vbeRestoreState(init_state)) != VBE_OK) PRINT_VBE_ERR("vbeRestoreState",err); + init_state=NULL; if(HAS_DGA()) vbeUnmapVideoBuffer((unsigned long)win.ptr,win.high); if(dga_buffer && !HAS_DGA()) free(dga_buffer); vbeDestroy(); @@ -680,7 +684,7 @@ /* Find best mode here */ num_modes = 0; mode_ptr = vib.VideoModePtr; - while(*mode_ptr++ != 0xffff) num_modes++; + while (mode_ptr[num_modes] != 0xffff) num_modes++; switch(format) { case IMGFMT_BGR8: @@ -720,7 +724,6 @@ { mp_msg(MSGT_VO,MSGL_V, "vo_vesa: Requested mode: %ux%u@%u (%s)\n",width,height,bpp,vo_format_name(format)); mp_msg(MSGT_VO,MSGL_V, "vo_vesa: Total modes found: %u\n",num_modes); - mode_ptr = vib.VideoModePtr; mp_msg(MSGT_VO,MSGL_V, "vo_vesa: Mode list:"); for(i = 0;i < num_modes;i++) { @@ -728,7 +731,6 @@ } mp_msg(MSGT_VO,MSGL_V, "\nvo_vesa: Modes in detail:\n"); } - mode_ptr = vib.VideoModePtr; if(use_scaler) { dstW = d_width; @@ -777,7 +779,7 @@ } if(best_mode_idx != UINT_MAX) { - video_mode = vib.VideoModePtr[best_mode_idx]; + video_mode = mode_ptr[best_mode_idx]; fflush(stdout); if((err=vbeGetMode(&init_mode)) != VBE_OK) { @@ -933,16 +935,15 @@ GTF constants might be read from monitor for best results, I don't have a spec (RM) */ + + if (((int)(vib.VESAVersion >> 8) & 0xff) > 2) + { - if (((int)(vib.VESAVersion >> 8) & 0xff) > 2) { - - if (set_refresh(video_mode_info.XResolution,video_mode_info.YResolution,video_mode,&crtc_pass)) - video_mode = video_mode | 0x800; + if (set_refresh(video_mode_info.XResolution,video_mode_info.YResolution,video_mode,&crtc_pass)) + video_mode = video_mode | 0x800; } - - ; - + if ((err=vbeSetMode(video_mode,&crtc_pass)) != VBE_OK) { PRINT_VBE_ERR("vbeSetMode",err); @@ -1086,6 +1087,10 @@ #ifdef CONFIG_VIDIX else if(vidix_name) pre_init_err = vidix_preinit(vidix_name,&video_out_vesa); #endif +#ifdef __DJGPP__ + if (!(_crt0_startup_flags & _CRT0_FLAG_NEARPTR)) + return -1; +#else // check if we can open /dev/mem (it will be opened later in config(), but if we // detect now that we can't we can exit cleanly) fd = open("/dev/mem", O_RDWR); @@ -1093,6 +1098,7 @@ return -1; else close(fd); +#endif if( mp_msg_test(MSGT_VO,MSGL_DBG3) ) mp_msg(MSGT_VO,MSGL_DBG3, "vo_subdevice: initialization returns: %i\n",pre_init_err); return pre_init_err; diff -ur -r MPlayer-1.0rc2/mangle.h MPlayer-1.0rc2_djgpp/mangle.h --- MPlayer-1.0rc2/mangle.h 2007-10-07 23:49:33.000000000 +0400 +++ MPlayer-1.0rc2_djgpp/mangle.h 2007-10-12 11:06:11.000000000 +0400 @@ -9,7 +9,8 @@ /* Feel free to add more to the list, eg. a.out IMO */ #if defined(__CYGWIN__) || defined(__MINGW32__) || defined(__OS2__) || \ - (defined(__OpenBSD__) && !defined(__ELF__)) || defined(__APPLE__) + (defined(__OpenBSD__) && !defined(__ELF__)) || defined(__APPLE__) || \ + defined(__DJGPP__) #define MANGLE(a) "_" #a #else #define MANGLE(a) #a diff -ur -r MPlayer-1.0rc2/mplayer.c MPlayer-1.0rc2_djgpp/mplayer.c --- MPlayer-1.0rc2/mplayer.c 2007-10-07 23:49:33.000000000 +0400 +++ MPlayer-1.0rc2_djgpp/mplayer.c 2007-10-12 11:06:11.000000000 +0400 @@ -36,6 +36,11 @@ #include +#if defined(__DJGPP__) && defined(HAVE_VESA) +#include +#include +#endif + #include "version.h" #include "mp_msg.h" @@ -1178,10 +1183,15 @@ line[pos] = 0; mp_msg(MSGT_STATUSLINE, MSGL_STATUS, "%s%s\r", line, erase_to_end_of_line); } else { +#ifdef __DJGPP__ + line[pos] = 0; + mp_msg(MSGT_STATUSLINE, MSGL_STATUS, "%-*s\r", width-2, line); +#else memset(&line[pos], ' ', width - pos); line[width] = 0; mp_msg(MSGT_STATUSLINE, MSGL_STATUS, "%s\r", line); - } +#endif +} free(line); } @@ -2293,6 +2303,12 @@ int gui_no_filename=0; +#if defined(__DJGPP__) && defined(HAVE_VESA) + _crt0_startup_flags |= _CRT0_FLAG_NEARPTR; + if (!__djgpp_nearptr_enable()) + return -1; +#endif + srand((int) time(NULL)); InitTimer(); @@ -2629,7 +2645,7 @@ #endif /// Catch signals -#ifndef __MINGW32__ +#if !defined(__MINGW32__) && !defined(__DJGPP__) signal(SIGCHLD,child_sighandler); #endif diff -ur -r MPlayer-1.0rc2/osdep/getch2.c MPlayer-1.0rc2_djgpp/osdep/getch2.c --- MPlayer-1.0rc2/osdep/getch2.c 2007-10-07 23:49:31.000000000 +0400 +++ MPlayer-1.0rc2_djgpp/osdep/getch2.c 2007-10-12 11:06:11.000000000 +0400 @@ -3,7 +3,7 @@ #include "config.h" //#define USE_TERMCAP -#if !defined(__OS2__) && !defined(__MORPHOS__) +#if !defined(__OS2__) && !defined(__MORPHOS__) && !defined(__DJGPP__) #define USE_IOCTL #endif diff -ur -r MPlayer-1.0rc2/osdep/shmem.c MPlayer-1.0rc2_djgpp/osdep/shmem.c --- MPlayer-1.0rc2/osdep/shmem.c 2007-10-07 23:49:31.000000000 +0400 +++ MPlayer-1.0rc2_djgpp/osdep/shmem.c 2007-10-12 11:06:11.000000000 +0400 @@ -46,6 +46,14 @@ static int devzero = -1; while(1){ switch(shmem_type){ +#ifdef __DJGPP__ + case 0: + case 1: + p=malloc(size); + if(p==NULL) break; + mp_dbg(MSGT_OSDEP, MSGL_DBG2, "shmem: %d bytes allocated using malloc (%p)\n",size,p); + return p; +#else case 0: // ========= MAP_ANON|MAP_SHARED ========== #ifdef MAP_ANON p=mmap(0,size,PROT_READ|PROT_WRITE,MAP_ANON|MAP_SHARED,-1,0); @@ -63,6 +71,7 @@ if(p==MAP_FAILED) break; // failed mp_dbg(MSGT_OSDEP, MSGL_DBG2, "shmem: %d bytes allocated using mmap /dev/zero (%p)\n",size,p); return p; +#endif case 2: { // ========= shmget() ========== #ifdef HAVE_SHM struct shmid_ds shmemds; @@ -98,11 +107,15 @@ switch(shmem_type){ case 0: case 1: +#ifdef __DJGPP__ + free(p); +#else if(munmap(p,size)) { mp_msg(MSGT_OSDEP, MSGL_ERR, "munmap failed on %p %d bytes: %s\n", p,size,strerror(errno)); } - break; +#endif + break; case 2: #ifdef HAVE_SHM if (shmdt(p) == -1) diff -ur -r MPlayer-1.0rc2/stream/librtsp/rtsp_rtp.c MPlayer-1.0rc2_djgpp/stream/librtsp/rtsp_rtp.c --- MPlayer-1.0rc2/stream/librtsp/rtsp_rtp.c 2007-10-07 23:49:26.000000000 +0400 +++ MPlayer-1.0rc2_djgpp/stream/librtsp/rtsp_rtp.c 2007-10-12 11:06:11.000000000 +0400 @@ -45,6 +45,10 @@ #include "../freesdp/common.h" #include "../freesdp/parser.h" +#ifdef __DJGPP__ +typedef int socklen_t; +#endif + #define RTSP_DEFAULT_PORT 31336 #define MAX_LENGTH 256 diff -ur -r MPlayer-1.0rc2/stream/stream_file.c MPlayer-1.0rc2_djgpp/stream/stream_file.c --- MPlayer-1.0rc2/stream/stream_file.c 2007-10-07 23:49:26.000000000 +0400 +++ MPlayer-1.0rc2_djgpp/stream/stream_file.c 2007-10-12 11:06:11.000000000 +0400 @@ -113,7 +113,7 @@ return STREAM_ERROR; } -#if defined(__CYGWIN__)|| defined(__MINGW32__) +#if defined(__CYGWIN__) || defined(__MINGW32__) || defined(__DJGPP__) m |= O_BINARY; #endif diff -ur -r MPlayer-1.0rc2/stream/tcp.c MPlayer-1.0rc2_djgpp/stream/tcp.c --- MPlayer-1.0rc2/stream/tcp.c 2007-10-07 23:49:26.000000000 +0400 +++ MPlayer-1.0rc2_djgpp/stream/tcp.c 2007-10-12 11:06:11.000000000 +0400 @@ -34,6 +34,10 @@ #include "tcp.h" +#ifdef __DJGPP__ +typedef int socklen_t; +#endif + /* IPv6 options */ int network_prefer_ipv4 = 0; @@ -224,7 +228,11 @@ mp_msg(MSGT_NETWORK,MSGL_ERR,MSGTR_MPDEMUX_NW_GetSockOptFailed,strerror(errno)); return TCP_ERROR_FATAL; } +#ifdef __DJGPP__ + if(err > 0 && err != EISCONN) { +#else if(err > 0) { +#endif mp_msg(MSGT_NETWORK,MSGL_ERR,MSGTR_MPDEMUX_NW_ConnectError,strerror(err)); return TCP_ERROR_PORT; } diff -ur -r MPlayer-1.0rc2/stream/udp.c MPlayer-1.0rc2_djgpp/stream/udp.c --- MPlayer-1.0rc2/stream/udp.c 2007-10-07 23:49:26.000000000 +0400 +++ MPlayer-1.0rc2_djgpp/stream/udp.c 2007-10-12 11:06:11.000000000 +0400 @@ -45,6 +45,10 @@ int reuse_socket=0; +#ifdef __DJGPP__ +typedef int socklen_t; +#endif + /* Start listening on a UDP port. If multicast, join the group. */ int udp_open_socket (URL_t *url)