update to 1.1.1 [release 1.1.1-1mamba;Sat Dec 11 2010]

This commit is contained in:
Silvan Calarco 2024-01-06 05:55:05 +01:00
parent 5bf0d51c7c
commit ad89b3cba6
5 changed files with 610 additions and 0 deletions

View File

@ -1,2 +1,4 @@
# libtheora # libtheora
Ogg Theora is a fully open, non-proprietary, patent-and-royalty-free, general-purpose compressed video format.

409
dct_decode_mmx.c Normal file
View File

@ -0,0 +1,409 @@
/********************************************************************
* *
* THIS FILE IS PART OF THE OggTheora SOFTWARE CODEC SOURCE CODE. *
* USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2008 *
* by the Xiph.Org Foundation http://www.xiph.org/ *
* *
********************************************************************
function:
last mod: $Id: dct_decode_mmx.c,v 1.1 2008/10/03 16:03:15 mclasen Exp $
********************************************************************/
#include <stdlib.h>
#include "codec_internal.h"
#if defined(USE_ASM)
static const __attribute__((aligned(8),used)) ogg_int64_t OC_V3=
0x0003000300030003LL;
static const __attribute__((aligned(8),used)) ogg_int64_t OC_V4=
0x0004000400040004LL;
static void loop_filter_v(unsigned char *_pix,int _ystride,
const ogg_int16_t *_ll){
long esi;
_pix-=_ystride*2;
__asm__ __volatile__(
/*mm0=0*/
"pxor %%mm0,%%mm0\n\t"
/*esi=_ystride*3*/
"lea (%[ystride],%[ystride],2),%[s]\n\t"
/*mm7=_pix[0...8]*/
"movq (%[pix]),%%mm7\n\t"
/*mm4=_pix[0...8+_ystride*3]*/
"movq (%[pix],%[s]),%%mm4\n\t"
/*mm6=_pix[0...8]*/
"movq %%mm7,%%mm6\n\t"
/*Expand unsigned _pix[0...3] to 16 bits.*/
"punpcklbw %%mm0,%%mm6\n\t"
"movq %%mm4,%%mm5\n\t"
/*Expand unsigned _pix[4...8] to 16 bits.*/
"punpckhbw %%mm0,%%mm7\n\t"
/*Expand other arrays too.*/
"punpcklbw %%mm0,%%mm4\n\t"
"punpckhbw %%mm0,%%mm5\n\t"
/*mm7:mm6=_p[0...8]-_p[0...8+_ystride*3]:*/
"psubw %%mm4,%%mm6\n\t"
"psubw %%mm5,%%mm7\n\t"
/*mm5=mm4=_pix[0...8+_ystride]*/
"movq (%[pix],%[ystride]),%%mm4\n\t"
/*mm1=mm3=mm2=_pix[0..8]+_ystride*2]*/
"movq (%[pix],%[ystride],2),%%mm2\n\t"
"movq %%mm4,%%mm5\n\t"
"movq %%mm2,%%mm3\n\t"
"movq %%mm2,%%mm1\n\t"
/*Expand these arrays.*/
"punpckhbw %%mm0,%%mm5\n\t"
"punpcklbw %%mm0,%%mm4\n\t"
"punpckhbw %%mm0,%%mm3\n\t"
"punpcklbw %%mm0,%%mm2\n\t"
/*Preload...*/
"movq %[OC_V3],%%mm0\n\t"
/*mm3:mm2=_pix[0...8+_ystride*2]-_pix[0...8+_ystride]*/
"psubw %%mm5,%%mm3\n\t"
"psubw %%mm4,%%mm2\n\t"
/*Scale by 3.*/
"pmullw %%mm0,%%mm3\n\t"
"pmullw %%mm0,%%mm2\n\t"
/*Preload...*/
"movq %[OC_V4],%%mm0\n\t"
/*f=mm3:mm2==_pix[0...8]-_pix[0...8+_ystride*3]+
3*(_pix[0...8+_ystride*2]-_pix[0...8+_ystride])*/
"paddw %%mm7,%%mm3\n\t"
"paddw %%mm6,%%mm2\n\t"
/*Add 4.*/
"paddw %%mm0,%%mm3\n\t"
"paddw %%mm0,%%mm2\n\t"
/*"Divide" by 8.*/
"psraw $3,%%mm3\n\t"
"psraw $3,%%mm2\n\t"
/*Now compute lflim of mm3:mm2 cf. Section 7.10 of the sepc.*/
/*Free up mm5.*/
"packuswb %%mm5,%%mm4\n\t"
/*mm0=L L L L*/
"movq (%[ll]),%%mm0\n\t"
/*if(R_i<-2L||R_i>2L)R_i=0:*/
"movq %%mm2,%%mm5\n\t"
"pxor %%mm6,%%mm6\n\t"
"movq %%mm0,%%mm7\n\t"
"psubw %%mm0,%%mm6\n\t"
"psllw $1,%%mm7\n\t"
"psllw $1,%%mm6\n\t"
/*mm2==R_3 R_2 R_1 R_0*/
/*mm5==R_3 R_2 R_1 R_0*/
/*mm6==-2L -2L -2L -2L*/
/*mm7==2L 2L 2L 2L*/
"pcmpgtw %%mm2,%%mm7\n\t"
"pcmpgtw %%mm6,%%mm5\n\t"
"pand %%mm7,%%mm2\n\t"
"movq %%mm0,%%mm7\n\t"
"pand %%mm5,%%mm2\n\t"
"psllw $1,%%mm7\n\t"
"movq %%mm3,%%mm5\n\t"
/*mm3==R_7 R_6 R_5 R_4*/
/*mm5==R_7 R_6 R_5 R_4*/
/*mm6==-2L -2L -2L -2L*/
/*mm7==2L 2L 2L 2L*/
"pcmpgtw %%mm3,%%mm7\n\t"
"pcmpgtw %%mm6,%%mm5\n\t"
"pand %%mm7,%%mm3\n\t"
"movq %%mm0,%%mm7\n\t"
"pand %%mm5,%%mm3\n\t"
/*if(R_i<-L)R_i'=R_i+2L;
if(R_i>L)R_i'=R_i-2L;
if(R_i<-L||R_i>L)R_i=-R_i':*/
"psraw $1,%%mm6\n\t"
"movq %%mm2,%%mm5\n\t"
"psllw $1,%%mm7\n\t"
/*mm2==R_3 R_2 R_1 R_0*/
/*mm5==R_3 R_2 R_1 R_0*/
/*mm6==-L -L -L -L*/
/*mm0==L L L L*/
/*mm5=R_i>L?FF:00*/
"pcmpgtw %%mm0,%%mm5\n\t"
/*mm6=-L>R_i?FF:00*/
"pcmpgtw %%mm2,%%mm6\n\t"
/*mm7=R_i>L?2L:0*/
"pand %%mm5,%%mm7\n\t"
/*mm2=R_i>L?R_i-2L:R_i*/
"psubw %%mm7,%%mm2\n\t"
"movq %%mm0,%%mm7\n\t"
/*mm5=-L>R_i||R_i>L*/
"por %%mm6,%%mm5\n\t"
"psllw $1,%%mm7\n\t"
/*mm7=-L>R_i?2L:0*/
"pand %%mm6,%%mm7\n\t"
"pxor %%mm6,%%mm6\n\t"
/*mm2=-L>R_i?R_i+2L:R_i*/
"paddw %%mm7,%%mm2\n\t"
"psubw %%mm0,%%mm6\n\t"
/*mm5=-L>R_i||R_i>L?-R_i':0*/
"pand %%mm2,%%mm5\n\t"
"movq %%mm0,%%mm7\n\t"
/*mm2=-L>R_i||R_i>L?0:R_i*/
"psubw %%mm5,%%mm2\n\t"
"psllw $1,%%mm7\n\t"
/*mm2=-L>R_i||R_i>L?-R_i':R_i*/
"psubw %%mm5,%%mm2\n\t"
"movq %%mm3,%%mm5\n\t"
/*mm3==R_7 R_6 R_5 R_4*/
/*mm5==R_7 R_6 R_5 R_4*/
/*mm6==-L -L -L -L*/
/*mm0==L L L L*/
/*mm6=-L>R_i?FF:00*/
"pcmpgtw %%mm3,%%mm6\n\t"
/*mm5=R_i>L?FF:00*/
"pcmpgtw %%mm0,%%mm5\n\t"
/*mm7=R_i>L?2L:0*/
"pand %%mm5,%%mm7\n\t"
/*mm2=R_i>L?R_i-2L:R_i*/
"psubw %%mm7,%%mm3\n\t"
"psllw $1,%%mm0\n\t"
/*mm5=-L>R_i||R_i>L*/
"por %%mm6,%%mm5\n\t"
/*mm0=-L>R_i?2L:0*/
"pand %%mm6,%%mm0\n\t"
/*mm3=-L>R_i?R_i+2L:R_i*/
"paddw %%mm0,%%mm3\n\t"
/*mm5=-L>R_i||R_i>L?-R_i':0*/
"pand %%mm3,%%mm5\n\t"
/*mm2=-L>R_i||R_i>L?0:R_i*/
"psubw %%mm5,%%mm3\n\t"
/*mm2=-L>R_i||R_i>L?-R_i':R_i*/
"psubw %%mm5,%%mm3\n\t"
/*Unfortunately, there's no unsigned byte+signed byte with unsigned
saturation op code, so we have to promote things back 16 bits.*/
"pxor %%mm0,%%mm0\n\t"
"movq %%mm4,%%mm5\n\t"
"punpcklbw %%mm0,%%mm4\n\t"
"punpckhbw %%mm0,%%mm5\n\t"
"movq %%mm1,%%mm6\n\t"
"punpcklbw %%mm0,%%mm1\n\t"
"punpckhbw %%mm0,%%mm6\n\t"
/*_pix[0...8+_ystride]+=R_i*/
"paddw %%mm2,%%mm4\n\t"
"paddw %%mm3,%%mm5\n\t"
/*_pix[0...8+_ystride*2]-=R_i*/
"psubw %%mm2,%%mm1\n\t"
"psubw %%mm3,%%mm6\n\t"
"packuswb %%mm5,%%mm4\n\t"
"packuswb %%mm6,%%mm1\n\t"
/*Write it back out.*/
"movq %%mm4,(%[pix],%[ystride])\n\t"
"movq %%mm1,(%[pix],%[ystride],2)\n\t"
:[s]"=&S"(esi)
:[pix]"r"(_pix),[ystride]"r"((long)_ystride),[ll]"r"(_ll),
[OC_V3]"m"(OC_V3),[OC_V4]"m"(OC_V4)
:"memory"
);
}
/*This code implements the bulk of loop_filter_h().
Data are striped p0 p1 p2 p3 ... p0 p1 p2 p3 ..., so in order to load all
four p0's to one register we must transpose the values in four mmx regs.
When half is done we repeat this for the rest.*/
static void loop_filter_h4(unsigned char *_pix,long _ystride,
const ogg_int16_t *_ll){
long esi;
long edi;
__asm__ __volatile__(
/*x x x x 3 2 1 0*/
"movd (%[pix]),%%mm0\n\t"
/*esi=_ystride*3*/
"lea (%[ystride],%[ystride],2),%[s]\n\t"
/*x x x x 7 6 5 4*/
"movd (%[pix],%[ystride]),%%mm1\n\t"
/*x x x x B A 9 8*/
"movd (%[pix],%[ystride],2),%%mm2\n\t"
/*x x x x F E D C*/
"movd (%[pix],%[s]),%%mm3\n\t"
/*mm0=7 3 6 2 5 1 4 0*/
"punpcklbw %%mm1,%%mm0\n\t"
/*mm2=F B E A D 9 C 8*/
"punpcklbw %%mm3,%%mm2\n\t"
/*mm1=7 3 6 2 5 1 4 0*/
"movq %%mm0,%%mm1\n\t"
/*mm0=F B 7 3 E A 6 2*/
"punpckhwd %%mm2,%%mm0\n\t"
/*mm1=D 9 5 1 C 8 4 0*/
"punpcklwd %%mm2,%%mm1\n\t"
"pxor %%mm7,%%mm7\n\t"
/*mm5=D 9 5 1 C 8 4 0*/
"movq %%mm1,%%mm5\n\t"
/*mm1=x C x 8 x 4 x 0==pix[0]*/
"punpcklbw %%mm7,%%mm1\n\t"
/*mm5=x D x 9 x 5 x 1==pix[1]*/
"punpckhbw %%mm7,%%mm5\n\t"
/*mm3=F B 7 3 E A 6 2*/
"movq %%mm0,%%mm3\n\t"
/*mm0=x E x A x 6 x 2==pix[2]*/
"punpcklbw %%mm7,%%mm0\n\t"
/*mm3=x F x B x 7 x 3==pix[3]*/
"punpckhbw %%mm7,%%mm3\n\t"
/*mm1=mm1-mm3==pix[0]-pix[3]*/
"psubw %%mm3,%%mm1\n\t"
/*Save a copy of pix[2] for later.*/
"movq %%mm0,%%mm4\n\t"
/*mm0=mm0-mm5==pix[2]-pix[1]*/
"psubw %%mm5,%%mm0\n\t"
/*Scale by 3.*/
"pmullw %[OC_V3],%%mm0\n\t"
/*f=mm1==_pix[0]-_pix[3]+ 3*(_pix[2]-_pix[1])*/
"paddw %%mm1,%%mm0\n\t"
/*Add 4.*/
"paddw %[OC_V4],%%mm0\n\t"
/*"Divide" by 8, producing the residuals R_i.*/
"psraw $3,%%mm0\n\t"
/*Now compute lflim of mm0 cf. Section 7.10 of the sepc.*/
/*mm6=L L L L*/
"movq (%[ll]),%%mm6\n\t"
/*if(R_i<-2L||R_i>2L)R_i=0:*/
"movq %%mm0,%%mm1\n\t"
"pxor %%mm2,%%mm2\n\t"
"movq %%mm6,%%mm3\n\t"
"psubw %%mm6,%%mm2\n\t"
"psllw $1,%%mm3\n\t"
"psllw $1,%%mm2\n\t"
/*mm0==R_3 R_2 R_1 R_0*/
/*mm1==R_3 R_2 R_1 R_0*/
/*mm2==-2L -2L -2L -2L*/
/*mm3==2L 2L 2L 2L*/
"pcmpgtw %%mm0,%%mm3\n\t"
"pcmpgtw %%mm2,%%mm1\n\t"
"pand %%mm3,%%mm0\n\t"
"pand %%mm1,%%mm0\n\t"
/*if(R_i<-L)R_i'=R_i+2L;
if(R_i>L)R_i'=R_i-2L;
if(R_i<-L||R_i>L)R_i=-R_i':*/
"psraw $1,%%mm2\n\t"
"movq %%mm0,%%mm1\n\t"
"movq %%mm6,%%mm3\n\t"
/*mm0==R_3 R_2 R_1 R_0*/
/*mm1==R_3 R_2 R_1 R_0*/
/*mm2==-L -L -L -L*/
/*mm6==L L L L*/
/*mm2=-L>R_i?FF:00*/
"pcmpgtw %%mm0,%%mm2\n\t"
/*mm1=R_i>L?FF:00*/
"pcmpgtw %%mm6,%%mm1\n\t"
/*mm3=2L 2L 2L 2L*/
"psllw $1,%%mm3\n\t"
/*mm6=2L 2L 2L 2L*/
"psllw $1,%%mm6\n\t"
/*mm3=R_i>L?2L:0*/
"pand %%mm1,%%mm3\n\t"
/*mm6=-L>R_i?2L:0*/
"pand %%mm2,%%mm6\n\t"
/*mm0=R_i>L?R_i-2L:R_i*/
"psubw %%mm3,%%mm0\n\t"
/*mm1=-L>R_i||R_i>L*/
"por %%mm2,%%mm1\n\t"
/*mm0=-L>R_i?R_i+2L:R_i*/
"paddw %%mm6,%%mm0\n\t"
/*mm1=-L>R_i||R_i>L?R_i':0*/
"pand %%mm0,%%mm1\n\t"
/*mm0=-L>R_i||R_i>L?0:R_i*/
"psubw %%mm1,%%mm0\n\t"
/*mm0=-L>R_i||R_i>L?-R_i':R_i*/
"psubw %%mm1,%%mm0\n\t"
/*_pix[1]+=R_i;*/
"paddw %%mm0,%%mm5\n\t"
/*_pix[2]-=R_i;*/
"psubw %%mm0,%%mm4\n\t"
/*mm5=x x x x D 9 5 1*/
"packuswb %%mm7,%%mm5\n\t"
/*mm4=x x x x E A 6 2*/
"packuswb %%mm7,%%mm4\n\t"
/*mm5=E D A 9 6 5 2 1*/
"punpcklbw %%mm4,%%mm5\n\t"
/*edi=6 5 2 1*/
"movd %%mm5,%%edi\n\t"
"movw %%di,1(%[pix])\n\t"
/*Why is there such a big stall here?*/
"psrlq $32,%%mm5\n\t"
"shrl $16,%%edi\n\t"
"movw %%di,1(%[pix],%[ystride])\n\t"
/*edi=E D A 9*/
"movd %%mm5,%%edi\n\t"
"movw %%di,1(%[pix],%[ystride],2)\n\t"
"shrl $16,%%edi\n\t"
"movw %%di,1(%[pix],%[s])\n\t"
:[s]"=&S"(esi),[d]"=&D"(edi),
[pix]"+r"(_pix),[ystride]"+r"(_ystride),[ll]"+r"(_ll)
:[OC_V3]"m"(OC_V3),[OC_V4]"m"(OC_V4)
:"memory"
);
}
static void loop_filter_h(unsigned char *_pix,int _ystride,
const ogg_int16_t *_ll){
_pix-=2;
loop_filter_h4(_pix,_ystride,_ll);
loop_filter_h4(_pix+(_ystride<<2),_ystride,_ll);
}
static void loop_filter_mmx(PB_INSTANCE *pbi, int FLimit){
int j;
ogg_int16_t __attribute__((aligned(8))) ll[4];
unsigned char *cp = pbi->display_fragments;
ogg_uint32_t *bp = pbi->recon_pixel_index_table;
if ( FLimit == 0 ) return;
ll[0]=ll[1]=ll[2]=ll[3]=FLimit;
for ( j = 0; j < 3 ; j++){
ogg_uint32_t *bp_begin = bp;
ogg_uint32_t *bp_end;
int stride;
int h;
switch(j) {
case 0: /* y */
bp_end = bp + pbi->YPlaneFragments;
h = pbi->HFragments;
stride = pbi->YStride;
break;
default: /* u,v, 4:20 specific */
bp_end = bp + pbi->UVPlaneFragments;
h = pbi->HFragments >> 1;
stride = pbi->UVStride;
break;
}
while(bp<bp_end){
ogg_uint32_t *bp_left = bp;
ogg_uint32_t *bp_right = bp + h;
while(bp<bp_right){
if(cp[0]){
if(bp>bp_left)
loop_filter_h(&pbi->LastFrameRecon[bp[0]],stride,ll);
if(bp_left>bp_begin)
loop_filter_v(&pbi->LastFrameRecon[bp[0]],stride,ll);
if(bp+1<bp_right && !cp[1])
loop_filter_h(&pbi->LastFrameRecon[bp[0]]+8,stride,ll);
if(bp+h<bp_end && !cp[h])
loop_filter_v(&pbi->LastFrameRecon[bp[h]],stride,ll);
}
bp++;
cp++;
}
}
}
__asm__ __volatile__("emms\n\t");
}
/* install our implementation in the function table */
void dsp_mmx_dct_decode_init(DspFunctions *funcs)
{
funcs->LoopFilter = loop_filter_mmx;
}
#endif /* USE_ASM */

View File

@ -0,0 +1,11 @@
--- libtheora-1.0/doc/Makefile.in 2008-12-31 13:33:04.000000000 +0100
+++ libtheora-1.0/doc/Makefile.in-gil 2008-12-31 13:35:55.000000000 +0100
@@ -276,7 +276,7 @@
-rm -rf .libs _libs
install-docDATA: $(doc_DATA)
@$(NORMAL_INSTALL)
- test -z "$(docdir)" || $(MKDIR_P) "$(DESTDIR)$(docdir)"
+ test -z "$(DESTDIR)$(docdir)" || $(MKDIR_P) "$(DESTDIR)$(docdir)"
@list='$(doc_DATA)'; for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
f=$(am__strip_dir) \

View File

@ -0,0 +1,24 @@
diff -up libtheora-1.0beta3/lib/Makefile.am.foo libtheora-1.0beta3/lib/Makefile.am
--- libtheora-1.0beta3/lib/Makefile.am.foo 2008-04-16 22:25:54.000000000 +0200
+++ libtheora-1.0beta3/lib/Makefile.am 2008-04-19 10:29:14.000000000 +0200
@@ -144,6 +144,7 @@ libtheoraenc_la_SOURCES = \
libtheoraenc_la_LDFLAGS = \
-version-info @THENC_LIB_CURRENT@:@THENC_LIB_REVISION@:@THENC_LIB_AGE@ \
@THEORAENC_LDFLAGS@ $(OGG_LIBS)
+libtheoraenc_la_LIBADD = libtheoradec.la
libtheora_la_SOURCES = \
cpu.c \
diff -up libtheora-1.0beta3/lib/Makefile.in.foo libtheora-1.0beta3/lib/Makefile.in
--- libtheora-1.0beta3/lib/Makefile.in.foo 2008-04-16 22:26:15.000000000 +0200
+++ libtheora-1.0beta3/lib/Makefile.in 2008-04-19 10:32:32.000000000 +0200
@@ -119,7 +119,8 @@ libtheoradec_la_OBJECTS = $(am_libtheora
libtheoradec_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(libtheoradec_la_LDFLAGS) $(LDFLAGS) -o $@
-libtheoraenc_la_LIBADD =
+libtheoraenc_la_LIBADD = libtheoradec.la
+libtheoraenc_la_DEPENDENCIES = libtheoradec.la
am__libtheoraenc_la_SOURCES_DIST = cpu.c \
$(enc_arch_dir)/dct_decode_mmx.c $(enc_arch_dir)/dsp_mmx.c \
$(enc_arch_dir)/dsp_mmxext.c $(enc_arch_dir)/recon_mmx.c \

164
libtheora.spec Normal file
View File

@ -0,0 +1,164 @@
#%d efine prever RC2
Name: libtheora
Version: 1.1.1
Release: 1mamba
Summary: Theora video compression codec
Group: System/Libraries
Vendor: openmamba
Distribution: openmamba
Packager: Aleph0 <aleph0@openmamba.org>
URL: http://www.theora.org/
Source0: http://downloads.xiph.org/releases/theora/libtheora-%{version}%{?prever}.tar.bz2
# missing from tarball
Source1: dct_decode_mmx.c
Patch0: libtheora-1.0RC2-docdir.patch
Patch1: libtheora-1.0beta3-undef-nonweak-symbols.patch
License: BSD
BuildRequires: libalsa-devel
## AUTOBUILDREQ-BEGIN
BuildRequires: glibc-devel
BuildRequires: libogg-devel
BuildRequires: libpng-devel
BuildRequires: libSDL-devel
BuildRequires: libvorbis-devel
## AUTOBUILDREQ-END
BuildRequires: doxygen
BuildRequires: tetex-latex
BuildRequires: transfig
BuildRoot: %{_tmppath}/%{name}-%{version}-root
# libtheora 1.0: Automatic configuration OK.
# General configuration:
# Encoding support: ........... yes
# Floating point support: ..... yes
# Assembly optimization: ...... 32 bit x86
# Build example code: ......... yes
# API Documentation: .......... yes
# Format Documentation: ....... yes
# Installation paths:
# libtheora: ................... /usr/lib
# C header files: .............. /usr/include/theora
# Documentation: ............... /usr/share/doc/libtheora
%description
Ogg Theora is a fully open, non-proprietary, patent-and-royalty-free, general-purpose compressed video format.
%package devel
Summary: Headers for developing programs that will use libtheora
Group: Development/Libraries
Requires: %{name} = %{?epoch:%epoch:}%{version}-%{release}
%description devel
Ogg Theora is a fully open, non-proprietary, patent-and-royalty-free, general-purpose compressed video format.
This package contains the headers that programmers will need to develop applications which will use %{name}.
%package tools
Summary: Command line tools for Theora videos
Group: Applications/Multimedia
Requires: %{name} = %{?epoch:%epoch:}%{version}-%{release}
%description tools
Ogg Theora is a fully open, non-proprietary, patent-and-royalty-free, general-purpose compressed video format.
The %{name}-tools package contains simple command line tools for use with theora bitstreams
%prep
#%{?prever}
%setup -q -n %{name}-%{version}
#if [ ! -f lib/enc/x86_64/dct_decode_mmx.c ] ; then
# cp %{S:1} lib/enc/x86_64
#fi
#%patch0 -p1
#%patch1 -p1
sed -i 's/CFLAGS="$CFLAGS $cflags_save"/CFLAGS="$cflags_save"/g' configure
%build
%configure --enable-shared --disable-static
# Don't use rpath!
sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool
sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool
%make
make -C doc/spec
%install
[ "%{buildroot}" != / ] && rm -rf "%{buildroot}"
%makeinstall
#rm -r %{buildroot}%{_docdir}/*
mkdir -p %{buildroot}%{_bindir}
install -m 755 examples/.libs/dump_video %{buildroot}%{_bindir}/theora_dump_video
install -m 755 examples/.libs/encoder_example %{buildroot}%{_bindir}/theora_encode
install -m 755 examples/.libs/player_example %{buildroot}%{_bindir}/theora_player
install -m 755 examples/.libs/png2theora %{buildroot}%{_bindir}/png2theora
%clean
[ "%{buildroot}" != / ] && rm -rf "%{buildroot}"
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig
%files
%defattr(-,root,root)
%{_libdir}/libtheora.so.*
%{_libdir}/libtheoradec.so.*
%{_libdir}/libtheoraenc.so.*
%doc README COPYING
%files devel
%defattr(-,root,root)
%dir %{_includedir}/theora
%{_includedir}/theora/*.h
%{_libdir}/libtheora.la
%{_libdir}/libtheoraenc.la
%{_libdir}/libtheoradec.la
%{_libdir}/libtheoradec.so
%{_libdir}/libtheoraenc.so
%{_libdir}/libtheora.so
%{_libdir}/pkgconfig/theora.pc
%{_libdir}/pkgconfig/theoradec.pc
%{_libdir}/pkgconfig/theoraenc.pc
#%doc %{_datadir}/doc/%{name}-%{version}%{?prever}/
%doc doc/libtheora/html doc/vp3-format.txt doc/spec/Theora.pdf
%doc doc/color.html doc/draft-ietf-avt-rtp-theora-00.txt
#%doc doc/libtheora/latex
%files tools
%defattr(-,root,root)
%{_bindir}/png2theora
%{_bindir}/theora_dump_video
%{_bindir}/theora_encode
%{_bindir}/theora_player
%changelog
* Sat Dec 11 2010 Silvan Calarco <silvan.calarco@mambasoft.it> 1.1.1-1mamba
- update to 1.1.1
* Fri Jan 02 2009 gil <puntogil@libero.it> 1.0-6mamba
- fixed some error in the spec file
* Wed Dec 31 2008 gil <puntogil@libero.it> 1.0-5mamba
- update to 1.0RC2
- added package tools
* Tue Jun 12 2007 Aleph0 <aleph0@openmamba.org> 1.0-4mamba
- update to 1.0alpha7
- new package mantainer
- run ldconfig
- do not build libtheora.a
* Tue Jun 14 2005 Davide Madrisan <davide.madrisan@qilinux.it> 1.0-3qilnx
- package updated (version 1.0alpha4)
- added documentation to devel package
* Sat Oct 02 2004 Davide Madrisan <davide.madrisan@qilinux.it> 1.0-2qilnx
- specfile modified to match QiLinux standards
* Sun Sep 19 2004 Matteo Bernasconi <voyagernm@virgilio.it> 1.0-1qilnx
- first build