diff options
author | lioux <lioux@FreeBSD.org> | 2004-07-11 06:47:59 +0800 |
---|---|---|
committer | lioux <lioux@FreeBSD.org> | 2004-07-11 06:47:59 +0800 |
commit | f469661f65333a1c5feb0b890a9c11b86050dee9 (patch) | |
tree | 2a3854b90b6062138a05bf5997fbbf1b52951e3d /multimedia | |
parent | 1a781737180c47992fa22ca42ccf76adbd48bf07 (diff) | |
download | freebsd-ports-graphics-f469661f65333a1c5feb0b890a9c11b86050dee9.tar.gz freebsd-ports-graphics-f469661f65333a1c5feb0b890a9c11b86050dee9.tar.zst freebsd-ports-graphics-f469661f65333a1c5feb0b890a9c11b86050dee9.zip |
o Add VCD plugin [1]
- take bsdi_dvd.h from mplayer which now lies on FILESDIR
- MD5 (MPlayer-1.0pre4.tar.bz2) = 83ebac0f05b192516a41fca2350ca01
o Add WITH_CDROM_DEVICE to allow one to pick the CDROM device [1]
o Add WITH_DVD_DEVICE to allow one to pick the DVD device [1]
o Add mpeg2enc plugin which depends on multimedia/mjpegtools port
o Really install KDE kio support WITH_KIO. This required some
CONFIGURE_ENV hacking
o Make sure plugins build/install even if PREFIX != {LOCAL,X11}BASE.
This required hackery called EXTRA_BUILD_DIR. Check port's Makefile
for more information. This fixed both vcd and modplug plugins
o Bump PORTREVISION due to PLIST change since VCD plugin is built
per default
PR: 65451 [1]
Submitted by: michael johnson <ahze@ahze.net> [1]
Reviewed by: marcus, vs, michael johnson <ahze@ahze.net>
Diffstat (limited to 'multimedia')
-rw-r--r-- | multimedia/gstreamer-plugins/Makefile | 119 | ||||
-rw-r--r-- | multimedia/gstreamer-plugins/files/bsdi_dvd.h | 340 | ||||
-rw-r--r-- | multimedia/gstreamer-plugins/pkg-plist | 2 | ||||
-rw-r--r-- | multimedia/gstreamer-plugins80/Makefile | 119 | ||||
-rw-r--r-- | multimedia/gstreamer-plugins80/files/bsdi_dvd.h | 340 | ||||
-rw-r--r-- | multimedia/gstreamer-plugins80/pkg-plist | 2 |
6 files changed, 898 insertions, 24 deletions
diff --git a/multimedia/gstreamer-plugins/Makefile b/multimedia/gstreamer-plugins/Makefile index c38577efdb8..895596e0f43 100644 --- a/multimedia/gstreamer-plugins/Makefile +++ b/multimedia/gstreamer-plugins/Makefile @@ -7,6 +7,7 @@ PORTNAME= gstreamer PORTVERSION= 0.8.2 +PORTREVISION= 1 CATEGORIES= multimedia audio MASTER_SITES= ${MASTER_SITE_GNOME} \ http://gstreamer.freedesktop.org/src/gst-plugins/ @@ -34,7 +35,6 @@ GNU_CONFIGURE= yes CONFIGURE_ARGS= --disable-tests \ --disable-alsa \ --enable-cdrom \ - --disable-mjpegtools \ --disable-divx \ --disable-dxr3 \ --disable-http \ @@ -42,7 +42,6 @@ CONFIGURE_ARGS= --disable-tests \ --disable-raw1394 \ --disable-v4l2 \ --disable-v4l \ - --disable-vcd \ --disable-dependency-tracking \ --enable-xshm \ --enable-static @@ -79,6 +78,19 @@ GST_VERSION=${PORTVERSION:C/..$//} # library minor number SHLIB_VERSION= 1 +## Additional directories which should be both built and installed +## but configure neglected to correctly identify them +# cdrom/vcd support +EXTRA_BUILD_DIR+= sys/vcd +# modplug +EXTRA_BUILD_DIR+= gst/modplug + +post-extract: +# for cdrom/vcd support +# taken from mplayer distfile +# MD5 (MPlayer-1.0pre4.tar.bz2) = 83ebac0f05b192516a41fca2350ca01a + @${CP} ${FILESDIR}/bsdi_dvd.h ${WRKSRC}/sys/vcd/ + post-patch: # as of this writing, FreeBSD does not support lrint* C99 math functions @${REINPLACE_CMD} -E -e \ @@ -93,10 +105,6 @@ post-patch: @${REINPLACE_CMD} -E -e \ 's|(mcopidl.+)(\$$<)(.+)$$|\1 \3 \2|' \ ${WRKSRC}/ext/arts/Makefile.in -# no linux/cdrom.h - @${REINPLACE_CMD} -E -e \ - 's|^#include[[:space:]]+.+linux/cdrom\.h.*$$||' \ - ${WRKSRC}/ext/dvdread/dvdreadsrc.c # malloc.h was deprecated in favor of stdlib.h # inttypes.h not stdint.h @${FIND} ${WRKSRC} -type f | \ @@ -107,10 +115,25 @@ post-patch: @${REINPLACE_CMD} -E -e \ 's|^.*afOpenVirtualFile[[:space:]]*\(\);|;|' \ ${CONFIGURE_WRKSRC}/${CONFIGURE_SCRIPT} - -post-install: -# register plugins - -@${X11BASE}/bin/gst-register-${GST_VERSION} 2>/dev/null +# cdrom default device + @${REINPLACE_CMD} -e 's|/dev/cdrom|${DEFAULT_CDROM_DEVICE}|' \ + ${WRKSRC}/ext/cdparanoia/gstcdparanoia.c \ + ${WRKSRC}/sys/cdrom/gstcdplayer.c \ + ${WRKSRC}/sys/vcd/vcdsrc.c +# dvd default device + @${REINPLACE_CMD} -e 's|/dev/dvd|${DEFAULT_DVD_DEVICE}|' \ + ${WRKSRC}/ext/dvdnav/dvdnavsrc.c \ + ${WRKSRC}/ext/dvdread/dvdreadsrc.c +# cdrom/vcd support + @${REINPLACE_CMD} -e 's|<linux/cdrom.h>|"bsdi_dvd.h"|' \ + ${WRKSRC}/sys/cdrom/gstcdplayer_ioctl.c \ + ${WRKSRC}/sys/vcd/vcdsrc.c \ + ${WRKSRC}/sys/vcd/vcdsrc.h +# KDE libkio required thread support + ${REINPLACE_CMD} -E \ + -e 's|(KIO_CFLAGS=.+)"$$|\1 ${PTHREAD_CFLAGS}"|' \ + -e 's|(KIO_LIBS=.+)"$$|\1 ${PTHREAD_LIBS}"|' \ + ${CONFIGURE_WRKSRC}/${CONFIGURE_SCRIPT} .include <bsd.port.pre.mk> @@ -187,7 +210,7 @@ WITH_JACK=YES .endif # KIO -.if exists(${LOCALBASE}/lib/libkio.a) +.if exists(${LOCALBASE}/lib/libkio.so) WITH_KIO=yes .endif @@ -286,6 +309,11 @@ WITH_LIBTHEORA=yes WITH_MAD=yes .endif +# mjpegtools +.if exists(${LOCALBASE}/lib/libmjpegutils.a) +WITH_MJPEGTOOLS=yes +.endif + # nas .if exists(${X11BASE}/lib/libaudio.a) WITH_NAS=YES @@ -388,6 +416,17 @@ LIB_DEPENDS+= cdda_interface.0:${PORTSDIR}/audio/cdparanoia PLIST_SUB+= CDPARANOIA="" .endif +# cdrom default device +.ifdef(WITH_CDROM_DEVICE) +DEFAULT_CDROM_DEVICE=${WITH_CDROM_DEVICE} +.else +. if ${OSVERSION} < 500000 +DEFAULT_CDROM_DEVICE=/dev/acd0c +. else +DEFAULT_CDROM_DEVICE=/dev/acd0 +. endif +.endif + # dts .ifndef(WITH_DTS) CONFIGURE_ARGS+= --disable-dts @@ -398,6 +437,17 @@ RUN_DEPENDS+= ${LOCALBASE}/lib/libdts_pic.a:${PORTSDIR}/multimedia/libdts PLIST_SUB+= DTS="" .endif +# dvd default device +.ifdef(WITH_DVD_DEVICE) +DEFAULT_DVD_DEVICE=${WITH_DVD_DEVICE} +.else +. if ${OSVERSION} < 500000 +DEFAULT_DVD_DEVICE=/dev/acd0c +. else +DEFAULT_DVD_DEVICE=/dev/acd0 +. endif +.endif + # esound .ifndef(WITH_ESOUND) CONFIGURE_ARGS+= --disable-esd \ @@ -484,6 +534,10 @@ CONFIGURE_ARGS+= --disable-kio PLIST_SUB+= KIO="@comment " .else LIB_DEPENDS+= kio.6:${PORTSDIR}/x11/kdelibs3 + +CONFIGURE_ENV+= KDE_PREFIX="${LOCALBASE}" \ + KDE_MOC="${X11BASE}/bin/moc" \ + QTDIR="${X11BASE}" PLIST_SUB+= KIO="" .endif @@ -619,7 +673,6 @@ PLIST_SUB+= LIBMPEG2="@comment " .else LIB_DEPENDS+= mpeg2.0:${PORTSDIR}/multimedia/libmpeg2 -CONFIGURE_ARGS+= --with-mpeg2dec-prefix=${LOCALBASE} PLIST_SUB+= LIBMPEG2="" .endif @@ -681,6 +734,20 @@ LIB_DEPENDS+= mad.2:${PORTSDIR}/audio/libmad \ PLIST_SUB+= LIBMAD="" .endif +# mjpegtools +.ifndef(WITH_MJPEGTOOLS) +CONFIGURE_ARGS+= --disable-mpeg2enc +PLIST_SUB+= MJPEGTOOLS="@comment " +.else +LIB_DEPENDS+= lavjpeg-1.6.2:${PORTSDIR}/multimedia/mjpegtools + +# XXX - make sure CONFIGURE works with mpeg2enc even with "ccache +# c++" ... weird but necessary +CONFIGURE_ENV+= HAVE_CXX=yes + +PLIST_SUB+= MJPEGTOOLS="" +.endif + # nas .ifndef(WITH_NAS) CONFIGURE_ARGS+= --disable-nas @@ -815,6 +882,22 @@ PLIST_SUB+= XVID="@comment " #PLIST_SUB+= XVID="" #.endif +post-build: +.ifdef(EXTRA_BUILD_DIR) +. for dir in ${EXTRA_BUILD_DIR} + @cd ${WRKSRC}/${dir}; ${SETENV} ${MAKE_ENV} ${GMAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} ${ALL_TARGET} +. endfor +.endif + +post-install: +.ifdef(EXTRA_BUILD_DIR) +. for dir in ${EXTRA_BUILD_DIR} + @cd ${WRKSRC}/${dir}; ${SETENV} ${MAKE_ENV} ${GMAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} ${INSTALL_TARGET} +. endfor +.endif +# register plugins + -@${X11BASE}/bin/gst-register-${GST_VERSION} 2>/dev/null + pre-everything:: .ifndef(WITH_AALIB) @${ECHO_MSG} '===>' @@ -831,10 +914,22 @@ pre-everything:: @${ECHO_MSG} '===>' @${ECHO_MSG} '===> Define WITH_CDPARANOIA to enable cdparanoia Audio plugin' .endif +.ifndef(WITH_CDROM_DEVICE) + @${ECHO_MSG} '===>' + @${ECHO_MSG} '===> The default CDROM device is ${DEFAULT_CDROM_DEVICE}' + @${ECHO_MSG} '===> Define WITH_CDROM_DEVICE if you want to change the default' + @${ECHO_MSG} '===> For example, make WITH_CDROM_DEVICE="/dev/somedevice"' +.endif .ifndef(WITH_DTS) @${ECHO_MSG} '===>' @${ECHO_MSG} '===> Define WITH_DTS to enable DTS decoding support' .endif +.ifndef(WITH_DVD_DEVICE) + @${ECHO_MSG} '===>' + @${ECHO_MSG} '===> The default DVD device is ${DEFAULT_DVD_DEVICE}' + @${ECHO_MSG} '===> Define WITH_DVD_DEVICE if you want to change the default' + @${ECHO_MSG} '===> For example, make WITH_DVD_DEVICE="/dev/somedevice"' +.endif .ifndef(WITH_ESOUND) @${ECHO_MSG} '===>' @${ECHO_MSG} '===> Define WITH_ESOUND to enable esound Audio plugin' diff --git a/multimedia/gstreamer-plugins/files/bsdi_dvd.h b/multimedia/gstreamer-plugins/files/bsdi_dvd.h new file mode 100644 index 00000000000..ff61ebd252f --- /dev/null +++ b/multimedia/gstreamer-plugins/files/bsdi_dvd.h @@ -0,0 +1,340 @@ +#ifndef _DVD_H_ +#define _DVD_H_ + +#include <sys/cdefs.h> +#include <machine/endian.h> +#include <sys/ioctl.h> + +__BEGIN_DECLS +int dvd_cdrom_ioctl(int, unsigned long, void *); +int cdrom_blocksize(int, int); +void dvd_cdrom_debug(int); +__END_DECLS + +#define ioctl(a,b,c) dvd_cdrom_ioctl((a),(b),(c)) + +typedef unsigned char __u8; +typedef unsigned short __u16; +typedef unsigned int __u32; + +#define DVD_READ_STRUCT 0x5390 /* Read structure */ +#define DVD_WRITE_STRUCT 0x5391 /* Write structure */ +#define DVD_AUTH 0x5392 /* Authentication */ + +#define DVD_STRUCT_PHYSICAL 0x00 +#define DVD_STRUCT_COPYRIGHT 0x01 +#define DVD_STRUCT_DISCKEY 0x02 +#define DVD_STRUCT_BCA 0x03 +#define DVD_STRUCT_MANUFACT 0x04 + +struct dvd_layer { + __u8 book_version : 4; + __u8 book_type : 4; + __u8 min_rate : 4; + __u8 disc_size : 4; + __u8 layer_type : 4; + __u8 track_path : 1; + __u8 nlayers : 2; + __u8 track_density : 4; + __u8 linear_density : 4; + __u8 bca : 1; + __u32 start_sector; + __u32 end_sector; + __u32 end_sector_l0; +}; + +struct dvd_physical { + __u8 type; + __u8 layer_num; + struct dvd_layer layer[4]; +}; + +struct dvd_copyright { + __u8 type; + + __u8 layer_num; + __u8 cpst; + __u8 rmi; +}; + +struct dvd_disckey { + __u8 type; + + unsigned agid : 2; + __u8 value[2048]; +}; + +struct dvd_bca { + __u8 type; + + int len; + __u8 value[188]; +}; + +struct dvd_manufact { + __u8 type; + + __u8 layer_num; + int len; + __u8 value[2048]; +}; + +typedef union { + __u8 type; + + struct dvd_physical physical; + struct dvd_copyright copyright; + struct dvd_disckey disckey; + struct dvd_bca bca; + struct dvd_manufact manufact; +} dvd_struct; + +/* + * DVD authentication ioctl + */ + +/* Authentication states */ +#define DVD_LU_SEND_AGID 0 +#define DVD_HOST_SEND_CHALLENGE 1 +#define DVD_LU_SEND_KEY1 2 +#define DVD_LU_SEND_CHALLENGE 3 +#define DVD_HOST_SEND_KEY2 4 + +/* Termination states */ +#define DVD_AUTH_ESTABLISHED 5 +#define DVD_AUTH_FAILURE 6 + +/* Other functions */ +#define DVD_LU_SEND_TITLE_KEY 7 +#define DVD_LU_SEND_ASF 8 +#define DVD_INVALIDATE_AGID 9 +#define DVD_LU_SEND_RPC_STATE 10 +#define DVD_HOST_SEND_RPC_STATE 11 + +/* State data */ +typedef __u8 dvd_key[5]; /* 40-bit value, MSB is first elem. */ +typedef __u8 dvd_challenge[10]; /* 80-bit value, MSB is first elem. */ + +struct dvd_lu_send_agid { + __u8 type; + unsigned agid : 2; +}; + +struct dvd_host_send_challenge { + __u8 type; + unsigned agid : 2; + + dvd_challenge chal; +}; + +struct dvd_send_key { + __u8 type; + unsigned agid : 2; + + dvd_key key; +}; + +struct dvd_lu_send_challenge { + __u8 type; + unsigned agid : 2; + + dvd_challenge chal; +}; + +#define DVD_CPM_NO_COPYRIGHT 0 +#define DVD_CPM_COPYRIGHTED 1 + +#define DVD_CP_SEC_NONE 0 +#define DVD_CP_SEC_EXIST 1 + +#define DVD_CGMS_UNRESTRICTED 0 +#define DVD_CGMS_SINGLE 2 +#define DVD_CGMS_RESTRICTED 3 + +struct dvd_lu_send_title_key { + __u8 type; + unsigned agid : 2; + + dvd_key title_key; + int lba; + unsigned cpm : 1; + unsigned cp_sec : 1; + unsigned cgms : 2; +}; + +struct dvd_lu_send_asf { + __u8 type; + unsigned agid : 2; + + unsigned asf : 1; +}; + +struct dvd_host_send_rpcstate { + __u8 type; + __u8 pdrc; +}; + +struct dvd_lu_send_rpcstate { + __u8 type : 2; + __u8 vra : 3; + __u8 ucca : 3; + __u8 region_mask; + __u8 rpc_scheme; +}; + +typedef union { + __u8 type; + + struct dvd_lu_send_agid lsa; + struct dvd_host_send_challenge hsc; + struct dvd_send_key lsk; + struct dvd_lu_send_challenge lsc; + struct dvd_send_key hsk; + struct dvd_lu_send_title_key lstk; + struct dvd_lu_send_asf lsasf; + struct dvd_host_send_rpcstate hrpcs; + struct dvd_lu_send_rpcstate lrpcs; +} dvd_authinfo; + + +typedef struct { + __u16 report_key_length; + __u8 reserved1; + __u8 reserved2; +#if BYTE_ORDER == BIG_ENDIAN + __u8 type_code : 2; + __u8 vra : 3; + __u8 ucca : 3; +#elif BYTE_ORDER == LITTLE_ENDIAN + __u8 ucca : 3; + __u8 vra : 3; + __u8 type_code : 2; +#endif + __u8 region_mask; + __u8 rpc_scheme; + __u8 reserved3; +} rpc_state_t; + +/* + * Stuff for the CDROM ioctls +*/ + +#define CDROMREADTOCHDR 0x5305 /* Read TOC header (cdrom_tochdr) */ +#define CDROMREADTOCENTRY 0x5306 /* Read TOC entry (cdrom_tocentry) */ +#define CDROMEJECT 0x5309 /* Ejects the cdrom media */ +#define CDROMCLOSETRAY 0x5319 /* Reverse of CDROMEJECT */ +#define CDROM_DRIVE_STATUS 0x5326 /* Get tray position, etc. */ +#define CDROM_DISC_STATUS 0x5327 /* Get disc type, etc. */ +#define CDROMREADMODE2 0x530c /* Read CDROM mode 2 data (2336 Bytes) */ +#define CDROMREADMODE1 0x530d /* Read CDROM mode 1 data (2048 Bytes) */ +#define CDROMREADRAW 0x5314 /* read data in raw mode (2352 bytes) */ + +#define CD_MINS 74 /* max. minutes per CD, not really a limit */ +#define CD_SECS 60 /* seconds per minute */ +#define CD_FRAMES 75 /* frames per second */ +#define CD_MSF_OFFSET 150 /* MSF numbering offset of first frame */ + +#define CD_HEAD_SIZE 4 /* header (address) bytes per raw data frame */ +#define CD_SYNC_SIZE 12 /* 12 sync bytes per raw data frame */ +#define CD_FRAMESIZE 2048 /* bytes per frame, "cooked" mode */ +#define CD_FRAMESIZE_RAW 2352 /* bytes per frame, "raw" mode */ +#define CD_FRAMESIZE_RAW0 (CD_FRAMESIZE_RAW-CD_SYNC_SIZE-CD_HEAD_SIZE) /*2336*/ +#define CD_FRAMESIZE_RAW1 (CD_FRAMESIZE_RAW-CD_SYNC_SIZE) /*2340*/ + +/* CD-ROM address types (cdrom_tocentry.cdte_format) */ +#define CDROM_LBA 0x01 /* logical block: first frame is #0 */ +#define CDROM_MSF 0x02 /* minute-second-frame: binary. not bcd here!*/ + +/* bit to tell whether track is data or audio (cdrom_tocentry.cdte_ctrl) */ +#define CDROM_DATA_TRACK 0x04 + +/* The leadout track is always 0xAA, regardless of # of tracks on disc */ +#define CDROM_LEADOUT 0xAA + +/* drive status returned by CDROM_DRIVE_STATUS ioctl */ +#define CDS_NO_INFO 0 /* if not implemented */ +#define CDS_NO_DISC 1 +#define CDS_TRAY_OPEN 2 +#define CDS_DRIVE_NOT_READY 3 +#define CDS_DISC_OK 4 + +/* + * Return values for CDROM_DISC_STATUS ioctl. + * Can also return CDS_NO_INFO and CDS_NO_DISC from above +*/ +#define CDS_AUDIO 100 +#define CDS_DATA_1 101 +#define CDS_DATA_2 102 +#define CDS_XA_2_1 103 +#define CDS_XA_2_2 104 +#define CDS_MIXED 105 + +/* For compile compatibility only - we don't support changers */ +#define CDSL_NONE ((int) (~0U>>1)-1) +#define CDSL_CURRENT ((int) (~0U>>1)) + +struct cdrom_msf +{ + __u8 cdmsf_min0; /* start minute */ + __u8 cdmsf_sec0; /* start second */ + __u8 cdmsf_frame0; /* start frame */ + __u8 cdmsf_min1; /* end minute */ + __u8 cdmsf_sec1; /* end second */ + __u8 cdmsf_frame1; /* end frame */ +}; + +struct cdrom_tochdr + { + __u8 cdth_trk0; /* start track */ + __u8 cdth_trk1; /* end track */ + }; + +struct cdrom_msf0 +{ + __u8 minute; + __u8 second; + __u8 frame; +}; + +union cdrom_addr +{ + struct cdrom_msf0 msf; + int lba; +}; + +struct cdrom_tocentry +{ + __u8 cdte_track; + __u8 cdte_adr :4; + __u8 cdte_ctrl :4; + __u8 cdte_format; + union cdrom_addr cdte_addr; + __u8 cdte_datamode; +}; + +struct modesel_head +{ + __u8 reserved1; + __u8 medium; + __u8 reserved2; + __u8 block_desc_length; + __u8 density; + __u8 number_of_blocks_hi; + __u8 number_of_blocks_med; + __u8 number_of_blocks_lo; + __u8 reserved3; + __u8 block_length_hi; + __u8 block_length_med; + __u8 block_length_lo; +}; + +typedef struct +{ + int data; + int audio; + int cdi; + int xa; + int error; +} tracktype; + +#endif /* _DVD_H_ */ diff --git a/multimedia/gstreamer-plugins/pkg-plist b/multimedia/gstreamer-plugins/pkg-plist index da2d3a74eeb..6a0c14924d9 100644 --- a/multimedia/gstreamer-plugins/pkg-plist +++ b/multimedia/gstreamer-plugins/pkg-plist @@ -98,6 +98,7 @@ lib/gstreamer-%%VERSION%%/libgstmonoscope.so lib/gstreamer-%%VERSION%%/libgstmp1videoparse.so lib/gstreamer-%%VERSION%%/libgstmpeg1systemencode.so %%LIBMPEG2%%lib/gstreamer-%%VERSION%%/libgstmpeg2dec.so +%%MJPEGTOOLS%%lib/gstreamer-%%VERSION%%/libgstmpeg2enc.so lib/gstreamer-%%VERSION%%/libgstmpeg2subt.so lib/gstreamer-%%VERSION%%/libgstmpegaudio.so lib/gstreamer-%%VERSION%%/libgstmpegaudioparse.so @@ -145,6 +146,7 @@ lib/gstreamer-%%VERSION%%/libgsttimeoverlay.so lib/gstreamer-%%VERSION%%/libgsttypefindfunctions.so lib/gstreamer-%%VERSION%%/libgstudp.so lib/gstreamer-%%VERSION%%/libgstvbidec.so +lib/gstreamer-%%VERSION%%/libgstvcdsrc.so lib/gstreamer-%%VERSION%%/libgstvideo.so lib/gstreamer-%%VERSION%%/libgstvideobalance.so lib/gstreamer-%%VERSION%%/libgstvideobox.so diff --git a/multimedia/gstreamer-plugins80/Makefile b/multimedia/gstreamer-plugins80/Makefile index c38577efdb8..895596e0f43 100644 --- a/multimedia/gstreamer-plugins80/Makefile +++ b/multimedia/gstreamer-plugins80/Makefile @@ -7,6 +7,7 @@ PORTNAME= gstreamer PORTVERSION= 0.8.2 +PORTREVISION= 1 CATEGORIES= multimedia audio MASTER_SITES= ${MASTER_SITE_GNOME} \ http://gstreamer.freedesktop.org/src/gst-plugins/ @@ -34,7 +35,6 @@ GNU_CONFIGURE= yes CONFIGURE_ARGS= --disable-tests \ --disable-alsa \ --enable-cdrom \ - --disable-mjpegtools \ --disable-divx \ --disable-dxr3 \ --disable-http \ @@ -42,7 +42,6 @@ CONFIGURE_ARGS= --disable-tests \ --disable-raw1394 \ --disable-v4l2 \ --disable-v4l \ - --disable-vcd \ --disable-dependency-tracking \ --enable-xshm \ --enable-static @@ -79,6 +78,19 @@ GST_VERSION=${PORTVERSION:C/..$//} # library minor number SHLIB_VERSION= 1 +## Additional directories which should be both built and installed +## but configure neglected to correctly identify them +# cdrom/vcd support +EXTRA_BUILD_DIR+= sys/vcd +# modplug +EXTRA_BUILD_DIR+= gst/modplug + +post-extract: +# for cdrom/vcd support +# taken from mplayer distfile +# MD5 (MPlayer-1.0pre4.tar.bz2) = 83ebac0f05b192516a41fca2350ca01a + @${CP} ${FILESDIR}/bsdi_dvd.h ${WRKSRC}/sys/vcd/ + post-patch: # as of this writing, FreeBSD does not support lrint* C99 math functions @${REINPLACE_CMD} -E -e \ @@ -93,10 +105,6 @@ post-patch: @${REINPLACE_CMD} -E -e \ 's|(mcopidl.+)(\$$<)(.+)$$|\1 \3 \2|' \ ${WRKSRC}/ext/arts/Makefile.in -# no linux/cdrom.h - @${REINPLACE_CMD} -E -e \ - 's|^#include[[:space:]]+.+linux/cdrom\.h.*$$||' \ - ${WRKSRC}/ext/dvdread/dvdreadsrc.c # malloc.h was deprecated in favor of stdlib.h # inttypes.h not stdint.h @${FIND} ${WRKSRC} -type f | \ @@ -107,10 +115,25 @@ post-patch: @${REINPLACE_CMD} -E -e \ 's|^.*afOpenVirtualFile[[:space:]]*\(\);|;|' \ ${CONFIGURE_WRKSRC}/${CONFIGURE_SCRIPT} - -post-install: -# register plugins - -@${X11BASE}/bin/gst-register-${GST_VERSION} 2>/dev/null +# cdrom default device + @${REINPLACE_CMD} -e 's|/dev/cdrom|${DEFAULT_CDROM_DEVICE}|' \ + ${WRKSRC}/ext/cdparanoia/gstcdparanoia.c \ + ${WRKSRC}/sys/cdrom/gstcdplayer.c \ + ${WRKSRC}/sys/vcd/vcdsrc.c +# dvd default device + @${REINPLACE_CMD} -e 's|/dev/dvd|${DEFAULT_DVD_DEVICE}|' \ + ${WRKSRC}/ext/dvdnav/dvdnavsrc.c \ + ${WRKSRC}/ext/dvdread/dvdreadsrc.c +# cdrom/vcd support + @${REINPLACE_CMD} -e 's|<linux/cdrom.h>|"bsdi_dvd.h"|' \ + ${WRKSRC}/sys/cdrom/gstcdplayer_ioctl.c \ + ${WRKSRC}/sys/vcd/vcdsrc.c \ + ${WRKSRC}/sys/vcd/vcdsrc.h +# KDE libkio required thread support + ${REINPLACE_CMD} -E \ + -e 's|(KIO_CFLAGS=.+)"$$|\1 ${PTHREAD_CFLAGS}"|' \ + -e 's|(KIO_LIBS=.+)"$$|\1 ${PTHREAD_LIBS}"|' \ + ${CONFIGURE_WRKSRC}/${CONFIGURE_SCRIPT} .include <bsd.port.pre.mk> @@ -187,7 +210,7 @@ WITH_JACK=YES .endif # KIO -.if exists(${LOCALBASE}/lib/libkio.a) +.if exists(${LOCALBASE}/lib/libkio.so) WITH_KIO=yes .endif @@ -286,6 +309,11 @@ WITH_LIBTHEORA=yes WITH_MAD=yes .endif +# mjpegtools +.if exists(${LOCALBASE}/lib/libmjpegutils.a) +WITH_MJPEGTOOLS=yes +.endif + # nas .if exists(${X11BASE}/lib/libaudio.a) WITH_NAS=YES @@ -388,6 +416,17 @@ LIB_DEPENDS+= cdda_interface.0:${PORTSDIR}/audio/cdparanoia PLIST_SUB+= CDPARANOIA="" .endif +# cdrom default device +.ifdef(WITH_CDROM_DEVICE) +DEFAULT_CDROM_DEVICE=${WITH_CDROM_DEVICE} +.else +. if ${OSVERSION} < 500000 +DEFAULT_CDROM_DEVICE=/dev/acd0c +. else +DEFAULT_CDROM_DEVICE=/dev/acd0 +. endif +.endif + # dts .ifndef(WITH_DTS) CONFIGURE_ARGS+= --disable-dts @@ -398,6 +437,17 @@ RUN_DEPENDS+= ${LOCALBASE}/lib/libdts_pic.a:${PORTSDIR}/multimedia/libdts PLIST_SUB+= DTS="" .endif +# dvd default device +.ifdef(WITH_DVD_DEVICE) +DEFAULT_DVD_DEVICE=${WITH_DVD_DEVICE} +.else +. if ${OSVERSION} < 500000 +DEFAULT_DVD_DEVICE=/dev/acd0c +. else +DEFAULT_DVD_DEVICE=/dev/acd0 +. endif +.endif + # esound .ifndef(WITH_ESOUND) CONFIGURE_ARGS+= --disable-esd \ @@ -484,6 +534,10 @@ CONFIGURE_ARGS+= --disable-kio PLIST_SUB+= KIO="@comment " .else LIB_DEPENDS+= kio.6:${PORTSDIR}/x11/kdelibs3 + +CONFIGURE_ENV+= KDE_PREFIX="${LOCALBASE}" \ + KDE_MOC="${X11BASE}/bin/moc" \ + QTDIR="${X11BASE}" PLIST_SUB+= KIO="" .endif @@ -619,7 +673,6 @@ PLIST_SUB+= LIBMPEG2="@comment " .else LIB_DEPENDS+= mpeg2.0:${PORTSDIR}/multimedia/libmpeg2 -CONFIGURE_ARGS+= --with-mpeg2dec-prefix=${LOCALBASE} PLIST_SUB+= LIBMPEG2="" .endif @@ -681,6 +734,20 @@ LIB_DEPENDS+= mad.2:${PORTSDIR}/audio/libmad \ PLIST_SUB+= LIBMAD="" .endif +# mjpegtools +.ifndef(WITH_MJPEGTOOLS) +CONFIGURE_ARGS+= --disable-mpeg2enc +PLIST_SUB+= MJPEGTOOLS="@comment " +.else +LIB_DEPENDS+= lavjpeg-1.6.2:${PORTSDIR}/multimedia/mjpegtools + +# XXX - make sure CONFIGURE works with mpeg2enc even with "ccache +# c++" ... weird but necessary +CONFIGURE_ENV+= HAVE_CXX=yes + +PLIST_SUB+= MJPEGTOOLS="" +.endif + # nas .ifndef(WITH_NAS) CONFIGURE_ARGS+= --disable-nas @@ -815,6 +882,22 @@ PLIST_SUB+= XVID="@comment " #PLIST_SUB+= XVID="" #.endif +post-build: +.ifdef(EXTRA_BUILD_DIR) +. for dir in ${EXTRA_BUILD_DIR} + @cd ${WRKSRC}/${dir}; ${SETENV} ${MAKE_ENV} ${GMAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} ${ALL_TARGET} +. endfor +.endif + +post-install: +.ifdef(EXTRA_BUILD_DIR) +. for dir in ${EXTRA_BUILD_DIR} + @cd ${WRKSRC}/${dir}; ${SETENV} ${MAKE_ENV} ${GMAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} ${INSTALL_TARGET} +. endfor +.endif +# register plugins + -@${X11BASE}/bin/gst-register-${GST_VERSION} 2>/dev/null + pre-everything:: .ifndef(WITH_AALIB) @${ECHO_MSG} '===>' @@ -831,10 +914,22 @@ pre-everything:: @${ECHO_MSG} '===>' @${ECHO_MSG} '===> Define WITH_CDPARANOIA to enable cdparanoia Audio plugin' .endif +.ifndef(WITH_CDROM_DEVICE) + @${ECHO_MSG} '===>' + @${ECHO_MSG} '===> The default CDROM device is ${DEFAULT_CDROM_DEVICE}' + @${ECHO_MSG} '===> Define WITH_CDROM_DEVICE if you want to change the default' + @${ECHO_MSG} '===> For example, make WITH_CDROM_DEVICE="/dev/somedevice"' +.endif .ifndef(WITH_DTS) @${ECHO_MSG} '===>' @${ECHO_MSG} '===> Define WITH_DTS to enable DTS decoding support' .endif +.ifndef(WITH_DVD_DEVICE) + @${ECHO_MSG} '===>' + @${ECHO_MSG} '===> The default DVD device is ${DEFAULT_DVD_DEVICE}' + @${ECHO_MSG} '===> Define WITH_DVD_DEVICE if you want to change the default' + @${ECHO_MSG} '===> For example, make WITH_DVD_DEVICE="/dev/somedevice"' +.endif .ifndef(WITH_ESOUND) @${ECHO_MSG} '===>' @${ECHO_MSG} '===> Define WITH_ESOUND to enable esound Audio plugin' diff --git a/multimedia/gstreamer-plugins80/files/bsdi_dvd.h b/multimedia/gstreamer-plugins80/files/bsdi_dvd.h new file mode 100644 index 00000000000..ff61ebd252f --- /dev/null +++ b/multimedia/gstreamer-plugins80/files/bsdi_dvd.h @@ -0,0 +1,340 @@ +#ifndef _DVD_H_ +#define _DVD_H_ + +#include <sys/cdefs.h> +#include <machine/endian.h> +#include <sys/ioctl.h> + +__BEGIN_DECLS +int dvd_cdrom_ioctl(int, unsigned long, void *); +int cdrom_blocksize(int, int); +void dvd_cdrom_debug(int); +__END_DECLS + +#define ioctl(a,b,c) dvd_cdrom_ioctl((a),(b),(c)) + +typedef unsigned char __u8; +typedef unsigned short __u16; +typedef unsigned int __u32; + +#define DVD_READ_STRUCT 0x5390 /* Read structure */ +#define DVD_WRITE_STRUCT 0x5391 /* Write structure */ +#define DVD_AUTH 0x5392 /* Authentication */ + +#define DVD_STRUCT_PHYSICAL 0x00 +#define DVD_STRUCT_COPYRIGHT 0x01 +#define DVD_STRUCT_DISCKEY 0x02 +#define DVD_STRUCT_BCA 0x03 +#define DVD_STRUCT_MANUFACT 0x04 + +struct dvd_layer { + __u8 book_version : 4; + __u8 book_type : 4; + __u8 min_rate : 4; + __u8 disc_size : 4; + __u8 layer_type : 4; + __u8 track_path : 1; + __u8 nlayers : 2; + __u8 track_density : 4; + __u8 linear_density : 4; + __u8 bca : 1; + __u32 start_sector; + __u32 end_sector; + __u32 end_sector_l0; +}; + +struct dvd_physical { + __u8 type; + __u8 layer_num; + struct dvd_layer layer[4]; +}; + +struct dvd_copyright { + __u8 type; + + __u8 layer_num; + __u8 cpst; + __u8 rmi; +}; + +struct dvd_disckey { + __u8 type; + + unsigned agid : 2; + __u8 value[2048]; +}; + +struct dvd_bca { + __u8 type; + + int len; + __u8 value[188]; +}; + +struct dvd_manufact { + __u8 type; + + __u8 layer_num; + int len; + __u8 value[2048]; +}; + +typedef union { + __u8 type; + + struct dvd_physical physical; + struct dvd_copyright copyright; + struct dvd_disckey disckey; + struct dvd_bca bca; + struct dvd_manufact manufact; +} dvd_struct; + +/* + * DVD authentication ioctl + */ + +/* Authentication states */ +#define DVD_LU_SEND_AGID 0 +#define DVD_HOST_SEND_CHALLENGE 1 +#define DVD_LU_SEND_KEY1 2 +#define DVD_LU_SEND_CHALLENGE 3 +#define DVD_HOST_SEND_KEY2 4 + +/* Termination states */ +#define DVD_AUTH_ESTABLISHED 5 +#define DVD_AUTH_FAILURE 6 + +/* Other functions */ +#define DVD_LU_SEND_TITLE_KEY 7 +#define DVD_LU_SEND_ASF 8 +#define DVD_INVALIDATE_AGID 9 +#define DVD_LU_SEND_RPC_STATE 10 +#define DVD_HOST_SEND_RPC_STATE 11 + +/* State data */ +typedef __u8 dvd_key[5]; /* 40-bit value, MSB is first elem. */ +typedef __u8 dvd_challenge[10]; /* 80-bit value, MSB is first elem. */ + +struct dvd_lu_send_agid { + __u8 type; + unsigned agid : 2; +}; + +struct dvd_host_send_challenge { + __u8 type; + unsigned agid : 2; + + dvd_challenge chal; +}; + +struct dvd_send_key { + __u8 type; + unsigned agid : 2; + + dvd_key key; +}; + +struct dvd_lu_send_challenge { + __u8 type; + unsigned agid : 2; + + dvd_challenge chal; +}; + +#define DVD_CPM_NO_COPYRIGHT 0 +#define DVD_CPM_COPYRIGHTED 1 + +#define DVD_CP_SEC_NONE 0 +#define DVD_CP_SEC_EXIST 1 + +#define DVD_CGMS_UNRESTRICTED 0 +#define DVD_CGMS_SINGLE 2 +#define DVD_CGMS_RESTRICTED 3 + +struct dvd_lu_send_title_key { + __u8 type; + unsigned agid : 2; + + dvd_key title_key; + int lba; + unsigned cpm : 1; + unsigned cp_sec : 1; + unsigned cgms : 2; +}; + +struct dvd_lu_send_asf { + __u8 type; + unsigned agid : 2; + + unsigned asf : 1; +}; + +struct dvd_host_send_rpcstate { + __u8 type; + __u8 pdrc; +}; + +struct dvd_lu_send_rpcstate { + __u8 type : 2; + __u8 vra : 3; + __u8 ucca : 3; + __u8 region_mask; + __u8 rpc_scheme; +}; + +typedef union { + __u8 type; + + struct dvd_lu_send_agid lsa; + struct dvd_host_send_challenge hsc; + struct dvd_send_key lsk; + struct dvd_lu_send_challenge lsc; + struct dvd_send_key hsk; + struct dvd_lu_send_title_key lstk; + struct dvd_lu_send_asf lsasf; + struct dvd_host_send_rpcstate hrpcs; + struct dvd_lu_send_rpcstate lrpcs; +} dvd_authinfo; + + +typedef struct { + __u16 report_key_length; + __u8 reserved1; + __u8 reserved2; +#if BYTE_ORDER == BIG_ENDIAN + __u8 type_code : 2; + __u8 vra : 3; + __u8 ucca : 3; +#elif BYTE_ORDER == LITTLE_ENDIAN + __u8 ucca : 3; + __u8 vra : 3; + __u8 type_code : 2; +#endif + __u8 region_mask; + __u8 rpc_scheme; + __u8 reserved3; +} rpc_state_t; + +/* + * Stuff for the CDROM ioctls +*/ + +#define CDROMREADTOCHDR 0x5305 /* Read TOC header (cdrom_tochdr) */ +#define CDROMREADTOCENTRY 0x5306 /* Read TOC entry (cdrom_tocentry) */ +#define CDROMEJECT 0x5309 /* Ejects the cdrom media */ +#define CDROMCLOSETRAY 0x5319 /* Reverse of CDROMEJECT */ +#define CDROM_DRIVE_STATUS 0x5326 /* Get tray position, etc. */ +#define CDROM_DISC_STATUS 0x5327 /* Get disc type, etc. */ +#define CDROMREADMODE2 0x530c /* Read CDROM mode 2 data (2336 Bytes) */ +#define CDROMREADMODE1 0x530d /* Read CDROM mode 1 data (2048 Bytes) */ +#define CDROMREADRAW 0x5314 /* read data in raw mode (2352 bytes) */ + +#define CD_MINS 74 /* max. minutes per CD, not really a limit */ +#define CD_SECS 60 /* seconds per minute */ +#define CD_FRAMES 75 /* frames per second */ +#define CD_MSF_OFFSET 150 /* MSF numbering offset of first frame */ + +#define CD_HEAD_SIZE 4 /* header (address) bytes per raw data frame */ +#define CD_SYNC_SIZE 12 /* 12 sync bytes per raw data frame */ +#define CD_FRAMESIZE 2048 /* bytes per frame, "cooked" mode */ +#define CD_FRAMESIZE_RAW 2352 /* bytes per frame, "raw" mode */ +#define CD_FRAMESIZE_RAW0 (CD_FRAMESIZE_RAW-CD_SYNC_SIZE-CD_HEAD_SIZE) /*2336*/ +#define CD_FRAMESIZE_RAW1 (CD_FRAMESIZE_RAW-CD_SYNC_SIZE) /*2340*/ + +/* CD-ROM address types (cdrom_tocentry.cdte_format) */ +#define CDROM_LBA 0x01 /* logical block: first frame is #0 */ +#define CDROM_MSF 0x02 /* minute-second-frame: binary. not bcd here!*/ + +/* bit to tell whether track is data or audio (cdrom_tocentry.cdte_ctrl) */ +#define CDROM_DATA_TRACK 0x04 + +/* The leadout track is always 0xAA, regardless of # of tracks on disc */ +#define CDROM_LEADOUT 0xAA + +/* drive status returned by CDROM_DRIVE_STATUS ioctl */ +#define CDS_NO_INFO 0 /* if not implemented */ +#define CDS_NO_DISC 1 +#define CDS_TRAY_OPEN 2 +#define CDS_DRIVE_NOT_READY 3 +#define CDS_DISC_OK 4 + +/* + * Return values for CDROM_DISC_STATUS ioctl. + * Can also return CDS_NO_INFO and CDS_NO_DISC from above +*/ +#define CDS_AUDIO 100 +#define CDS_DATA_1 101 +#define CDS_DATA_2 102 +#define CDS_XA_2_1 103 +#define CDS_XA_2_2 104 +#define CDS_MIXED 105 + +/* For compile compatibility only - we don't support changers */ +#define CDSL_NONE ((int) (~0U>>1)-1) +#define CDSL_CURRENT ((int) (~0U>>1)) + +struct cdrom_msf +{ + __u8 cdmsf_min0; /* start minute */ + __u8 cdmsf_sec0; /* start second */ + __u8 cdmsf_frame0; /* start frame */ + __u8 cdmsf_min1; /* end minute */ + __u8 cdmsf_sec1; /* end second */ + __u8 cdmsf_frame1; /* end frame */ +}; + +struct cdrom_tochdr + { + __u8 cdth_trk0; /* start track */ + __u8 cdth_trk1; /* end track */ + }; + +struct cdrom_msf0 +{ + __u8 minute; + __u8 second; + __u8 frame; +}; + +union cdrom_addr +{ + struct cdrom_msf0 msf; + int lba; +}; + +struct cdrom_tocentry +{ + __u8 cdte_track; + __u8 cdte_adr :4; + __u8 cdte_ctrl :4; + __u8 cdte_format; + union cdrom_addr cdte_addr; + __u8 cdte_datamode; +}; + +struct modesel_head +{ + __u8 reserved1; + __u8 medium; + __u8 reserved2; + __u8 block_desc_length; + __u8 density; + __u8 number_of_blocks_hi; + __u8 number_of_blocks_med; + __u8 number_of_blocks_lo; + __u8 reserved3; + __u8 block_length_hi; + __u8 block_length_med; + __u8 block_length_lo; +}; + +typedef struct +{ + int data; + int audio; + int cdi; + int xa; + int error; +} tracktype; + +#endif /* _DVD_H_ */ diff --git a/multimedia/gstreamer-plugins80/pkg-plist b/multimedia/gstreamer-plugins80/pkg-plist index da2d3a74eeb..6a0c14924d9 100644 --- a/multimedia/gstreamer-plugins80/pkg-plist +++ b/multimedia/gstreamer-plugins80/pkg-plist @@ -98,6 +98,7 @@ lib/gstreamer-%%VERSION%%/libgstmonoscope.so lib/gstreamer-%%VERSION%%/libgstmp1videoparse.so lib/gstreamer-%%VERSION%%/libgstmpeg1systemencode.so %%LIBMPEG2%%lib/gstreamer-%%VERSION%%/libgstmpeg2dec.so +%%MJPEGTOOLS%%lib/gstreamer-%%VERSION%%/libgstmpeg2enc.so lib/gstreamer-%%VERSION%%/libgstmpeg2subt.so lib/gstreamer-%%VERSION%%/libgstmpegaudio.so lib/gstreamer-%%VERSION%%/libgstmpegaudioparse.so @@ -145,6 +146,7 @@ lib/gstreamer-%%VERSION%%/libgsttimeoverlay.so lib/gstreamer-%%VERSION%%/libgsttypefindfunctions.so lib/gstreamer-%%VERSION%%/libgstudp.so lib/gstreamer-%%VERSION%%/libgstvbidec.so +lib/gstreamer-%%VERSION%%/libgstvcdsrc.so lib/gstreamer-%%VERSION%%/libgstvideo.so lib/gstreamer-%%VERSION%%/libgstvideobalance.so lib/gstreamer-%%VERSION%%/libgstvideobox.so |