How to build GStreamer on Mac OS/X PPC
Goals:
1. Get GStreamer to stream a video on native OS/X GUI (i.e., no XWindows). (This page, well in the future)
2. Do this using the Python bindings. (GstreamerMacPython page)
3. Do this in combination with wxPython. (GstreamerMacwxPython? page)
4. Use the Dirac video codec. (SchrodingerMac? page)
The native OS/X audio/video plugins are in the CVS version of gst-plugins-good. Due to depedencies, this means we have to build the rest from CVS as well. I checked out on 2006/11/02. The patches may not work on other versions.
1. Install libogg, libogg-shlibs, libvorbis0, libvorbis0-shlibs, glib2 2.12.0 and bison >= 1.35 using fink
- I installed esound too; future will tell if it will be used
2. Download, build and install liboil (http://liboil.freedesktop.org/download/liboil-0.3.8.tar.gz)
- To use liboil > 0.3.8, you need this patch:
--- liboil-0.3.9/liboil/liboilcpu.c 2006-05-22 20:07:56.000000000 -0400 +++ liboil-0.3.9-new/liboil/liboilcpu.c 2006-07-02 22:23:35.000000000 -0400 @@ -42,7 +42,7 @@ #include <sys/time.h> #include <time.h> -#if defined(__FreeBSD__) +#if defined(__FreeBSD__) || defined(__APPLE__) #include <sys/types.h> #include <sys/sysctl.h> #endif @@ -587,25 +587,17 @@ } static void -test_altivec (void * ignored) -{ - char x[16] = { 0, }; - - asm volatile ( - " lvx %%v0, %0, %%r0 \n" - :: "r" (x)); -} - -static void oil_cpu_detect_powerpc(void) { + int sels[2] = { CTL_HW, HW_VECTORUNIT }; + int vType = 0; //0 == scalar only + size_t length = sizeof(vType); + int error = sysctl(sels, 2, &vType, &length, NULL, 0); - oil_cpu_fault_check_enable (); - if (oil_cpu_fault_check_try(test_altivec, NULL)) { + if ( 0 == error ) { OIL_DEBUG ("cpu flag altivec"); oil_cpu_flags |= OIL_IMPL_FLAG_ALTIVEC; } - oil_cpu_fault_check_disable (); _oil_profile_stamp = oil_profile_stamp_tb; }
3. Download, build and install gstreamer from CVS:
cvs -d:pserver:anoncvs@anoncvs.freedesktop.org:/cvs/gstreamer co gstreamer cd gstreamer PKG_CONFIG_PATH=/usr/local/lib/pkgconfig ./autogen.sh make make install
4. Download, build and install gst-plugins-base from CVS:
cvs -d:pserver:anoncvs@anoncvs.freedesktop.org:/cvs/gstreamer co gst-plugins-base cd gst-plugins-base PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/sw/lib/pkgconfig ./autogen.sh make make install
5. Download, build and install gst-plugins-good from CVS:
cvs -d:pserver:anoncvs@anoncvs.freedesktop.org:/cvs/gstreamer co gst-plugins-good
cd gst-plugins-good
echo '
Index: sys/Makefile.am
===================================================================
RCS file: /cvs/gstreamer/gst-plugins-good/sys/Makefile.am,v
retrieving revision 1.35
diff -r1.35 Makefile.am
67c67
< SUBDIRS=$(OSS_DIR) $(SUNAUDIO_DIR) $(V4L2_DIR) $(XIMAGE_DIR)
---
> SUBDIRS=$(OSS_DIR) $(SUNAUDIO_DIR) $(V4L2_DIR) $(XIMAGE_DIR) osxaudio osxvideo
69c69
< DIST_SUBDIRS=oss sunaudio v4l2 ximage
---
> DIST_SUBDIRS=oss sunaudio v4l2 ximage osxaudio osxvideo
Index: sys/osxaudio/gstosxringbuffer.c
===================================================================
RCS file: /cvs/gstreamer/gst-plugins-good/sys/osxaudio/gstosxringbuffer.c,v
retrieving revision 1.1
diff -r1.1 gstosxringbuffer.c
158c158
< GST_DEBUG ("AudioHardwareGetProperty: device_id is %d\n",
---
> GST_DEBUG ("AudioHardwareGetProperty: device_id is %ld\n",
241c241
< GST_DEBUG ("osx ring buffer start ioproc: 0x%x device_id %d\n",
---
> GST_DEBUG ("osx ring buffer start ioproc: 0x%p device_id %ld\n",
Index: sys/osxaudio/gstosxaudiosink.c
===================================================================
RCS file: /cvs/gstreamer/gst-plugins-good/sys/osxaudio/gstosxaudiosink.c,v
retrieving revision 1.11
diff -r1.11 gstosxaudiosink.c
189c189
< gst_osx_audio_sink_create_ringbuffer (sink);
---
> gst_osx_audio_sink_create_ringbuffer ((GstBaseAudioSink *)sink);
254c254
< ("Getting available sample rates: Status: %d number of ranges: %d\n",
---
> ("Getting available sample rates: Status: %ld number of ranges: %ld\n",
274c274
< GST_DEBUG ("osx sink 0x%x element 0x%x ioproc 0x%x\n", osxsink,
---
> GST_DEBUG ("osx sink 0x%p element 0x%p ioproc 0x%p\n", osxsink,
Index: sys/osxaudio/gstosxaudiosrc.c
===================================================================
RCS file: /cvs/gstreamer/gst-plugins-good/sys/osxaudio/gstosxaudiosrc.c,v
retrieving revision 1.9
diff -r1.9 gstosxaudiosrc.c
238c238
< GST_DEBUG ("osx src 0x%x element 0x%x ioproc 0x%x\n", osxsrc,
---
> GST_DEBUG ("osx src 0x%p element 0x%p ioproc 0x%p\n", osxsrc,
' | patch -p0
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig ./autogen.sh
cd sys/osxaudio
make
make install
Now, audio works! To test, run:
gst-launch audiotestsrc ! audioconvert ! audioresample ! osxaudiosink
6. Download, build and install gst-ffmpeg from CVS:
cvs -d:pserver:anoncvs@anoncvs.freedesktop.org:/cvs/gstreamer co gst-ffmpeg cd gst-ffmpeg PKG_CONFIG_PATH=/usr/local/lib/pkgconfig ./autogen.sh cd gst-libs/ext/ffmpeg ./configure --prefix=/usr/local --enable-maintainer-mode --enable-gtk-doc --disable-v4l --disable-audio-oss --disable-dv1394 --disable-vhook --disable-ffmpeg --disable-ffserver --disable-ffplay --disable-sdltest --enable-pp --cache-file=/dev/null --srcdir=. --disable-altivec cd ../../.. make make install
The manual ./configure is needed to disable AltiVec, because ffmpeg refuses to compile with it enabled.
