summaryrefslogtreecommitdiffstats
path: root/abs/core/libdv
diff options
context:
space:
mode:
Diffstat (limited to 'abs/core/libdv')
-rw-r--r--abs/core/libdv/PKGBUILD23
-rw-r--r--abs/core/libdv/libdv-0.104-amd64reloc.patch262
2 files changed, 285 insertions, 0 deletions
diff --git a/abs/core/libdv/PKGBUILD b/abs/core/libdv/PKGBUILD
new file mode 100644
index 0000000..bd54a0d
--- /dev/null
+++ b/abs/core/libdv/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 4510 2008-07-07 21:13:34Z ronald $
+# Maintainer: Jason Chu <jason@archlinux.org>
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+
+pkgname=libdv
+pkgver=1.0.0
+pkgrel=2
+pkgdesc="The Quasar DV codec (libdv) is a software codec for DV video"
+arch=('i686' 'x86_64')
+depends=('popt' 'gtk')
+makedepends=('pkgconfig' 'gtk')
+source=(http://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.gz)
+md5sums=('f895162161cfa4bb4a94c070a7caa6c7')
+url="http://libdv.sourceforge.net/"
+license=('GPL')
+options=(!libtool)
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
diff --git a/abs/core/libdv/libdv-0.104-amd64reloc.patch b/abs/core/libdv/libdv-0.104-amd64reloc.patch
new file mode 100644
index 0000000..f3cbdbd
--- /dev/null
+++ b/abs/core/libdv/libdv-0.104-amd64reloc.patch
@@ -0,0 +1,262 @@
+diff -aur libdv-0.104/libdv/encode_x86_64.S libdv-0.104-patched/libdv/encode_x86_64.S
+--- libdv-0.104/libdv/encode_x86_64.S 2004-11-17 03:36:30.000000000 +0000
++++ libdv-0.104-patched/libdv/encode_x86_64.S 2004-12-10 07:53:12.000000000 +0000
+@@ -47,7 +47,8 @@
+
+ mov $63, %rcx # loop counter
+
+- mov vlc_encode_lookup(%rip), %r11
++ mov vlc_encode_lookup@GOTPCREL(%rip), %r11
++ mov (%r11),%r11
+
+ pxor %mm0, %mm0
+ pxor %mm2, %mm2
+@@ -129,7 +130,8 @@
+ add $2, %rdi /* skip the DC coefficient */
+ mov $63, %rcx
+
+- mov vlc_num_bits_lookup(%rip), %r11
++ mov vlc_num_bits_lookup@GOTPCREL(%rip), %r11
++ mov (%r11),%r11
+
+ vlc_num_bits_block_x86_loop:
+ movw (%rdi), %ax /* get the next coeffiecient */
+diff -aur libdv-0.104/libdv/idct_block_mmx_x86_64.S libdv-0.104-patched/libdv/idct_block_mmx_x86_64.S
+--- libdv-0.104/libdv/idct_block_mmx_x86_64.S 2004-10-20 04:49:24.000000000 +0100
++++ libdv-0.104-patched/libdv/idct_block_mmx_x86_64.S 2004-12-10 07:38:23.000000000 +0000
+@@ -22,7 +22,7 @@
+ /* void _dv_idct_88(dv_coeff_t *block) */
+ /* argument block=rdi */
+
+- lea preSC(%rip), %r11
++ mov preSC@GOTPCREL(%rip), %r11
+
+ /*
+ * column 0: even part
+diff -aur libdv-0.104/libdv/quant_x86_64.S libdv-0.104-patched/libdv/quant_x86_64.S
+--- libdv-0.104/libdv/quant_x86_64.S 2004-11-17 03:36:30.000000000 +0000
++++ libdv-0.104-patched/libdv/quant_x86_64.S 2004-12-10 07:36:42.000000000 +0000
+@@ -73,10 +73,10 @@
+ /* pq = dv_quant_shifts[qno + dv_quant_offset[class]]; */
+ mov %rsi,%rax /* qno */
+ mov %rdx,%r12 /* class */
+- lea dv_quant_offset(%rip),%rcx
++ mov dv_quant_offset@GOTPCREL(%rip),%rcx
+ movzbq (%rcx,%r12,1),%rcx /* dv_quant_offset[class] */
+ add %rcx,%rax /* qno + */
+- lea dv_quant_shifts(%rip),%r11
++ mov dv_quant_shifts@GOTPCREL(%rip),%r11
+ lea (%r11,%rax,4),%r11 /* r11 is pq = dv_quant_shifts[...] */
+
+ /* extra = (class == 3); */
+@@ -217,10 +217,10 @@
+ mov %rsi,%rax /* qno */
+ mov %rdx,%r12 /* class */
+
+- lea dv_quant_offset(%rip),%rcx
++ mov dv_quant_offset@GOTPCREL(%rip),%rcx
+ movzbq (%rcx,%r12,1),%rcx
+ add %rcx,%rax
+- lea dv_quant_shifts(%rip),%r11
++ mov dv_quant_shifts@GOTPCREL(%rip),%r11
+ lea (%r11,%rax,4),%r11 /* r11 is pq */
+
+ /* extra = (class == 3); */
+diff -aur libdv-0.104/libdv/vlc_x86_64.S libdv-0.104-patched/libdv/vlc_x86_64.S
+--- libdv-0.104/libdv/vlc_x86_64.S 2004-10-20 04:49:24.000000000 +0100
++++ libdv-0.104-patched/libdv/vlc_x86_64.S 2004-12-12 05:43:49.000000000 +0000
+@@ -16,28 +16,28 @@
+ /* klass = dv_vlc_classes[maxbits][(bits & (dv_vlc_class_index_mask[maxbits])) >> */
+ /* (dv_vlc_class_index_rshift[maxbits])]; */
+ /* xor %rbp,%rbp */
+- lea dv_vlc_class_index_mask(%rip),%r11 /* use %rip for PIC code */
++ mov dv_vlc_class_index_mask@GOTPCREL(%rip),%r11 /* use %rip for PIC code */
+ mov (%r11,%rbx,4),%ebp /* int32 */ /* dv_vlc_class_index_mask[maxbits] */
+ and %eax,%ebp /* bits & */
+- lea dv_vlc_class_index_rshift(%rip),%rcx
++ mov dv_vlc_class_index_rshift@GOTPCREL(%rip),%rcx
+ mov (%rcx,%rbx,4),%ecx /* int32 */ /* dv_vlc_class_index_rshift[maxbits] */
+ sar %cl,%ebp /* >> */
+- lea dv_vlc_classes(%rip),%rcx
++ mov dv_vlc_classes@GOTPCREL(%rip),%rcx
+ mov (%rcx,%rbx,8),%rcx /* ptr */ /* dv_vlc_classes[maxbits], a pointer */
+ movsbq (%rcx,%rbp,1),%rbp /* int8 */ /* klass = */
+
+ /* *result = dv_vlc_lookups[klass][(bits & (dv_vlc_index_mask[klass])) >> */
+ /* (dv_vlc_index_rshift[klass])]; */
+ /* xor %rbx,%rbx */
+- lea dv_vlc_index_mask(%rip),%r11
++ mov dv_vlc_index_mask@GOTPCREL(%rip),%r11
+ mov (%r11,%rbp,4),%ebx /* int32 */ /* (dv_vlc_index_mask[klass]) */
+ /* xor %rcx,%rcx */
+- lea dv_vlc_index_rshift(%rip),%r11
++ mov dv_vlc_index_rshift@GOTPCREL(%rip),%r11
+ mov (%r11,%rbp,4),%ecx /* int32 */ /* dv_vlc_index_rshift[klass] */
+ and %eax,%ebx /* bits & */
+ sar %cl,%ebx /* >> */
+
+- lea dv_vlc_lookups(%rip),%r11
++ mov dv_vlc_lookups@GOTPCREL(%rip),%r11
+ mov (%r11,%rbp,8),%rbp /* ptr */ /* dv_vlc_lookups[klass] */
+ mov (%rbp,%rbx,4),%ebp /* int32 */ /* *result = */
+
+@@ -57,7 +57,7 @@
+ mov %ebp,%ecx
+ sar $8,%ecx
+ and $0xff,%ecx /* result->len */
+- lea sign_mask(%rip),%rbx
++ mov sign_mask@GOTPCREL(%rip),%rbx
+ mov (%rbx,%rcx,4),%ebx /* int32 */
+ and %ebx,%eax
+ neg %eax
+@@ -109,17 +109,17 @@
+ mov %rax,%rbp
+ and $0xfe00,%ebp
+ sar $9,%ebp
+- lea dv_vlc_class_lookup5(%rip),%r11
++ mov dv_vlc_class_lookup5@GOTPCREL(%rip),%r11
+ movsbq (%r11,%rbp),%rbp /* int8 klass */
+
+- lea dv_vlc_index_mask(%rip),%rbx
++ mov dv_vlc_index_mask@GOTPCREL(%rip),%rbx
+ mov (%rbx,%rbp,4),%ebx /* int32 */
+- lea dv_vlc_index_rshift(%rip),%rcx
++ mov dv_vlc_index_rshift@GOTPCREL(%rip),%rcx
+ mov (%rcx,%rbp,4),%ecx /* int32 */
+ and %eax,%ebx
+ sar %cl,%ebx /* %rbx is klass */
+
+- lea dv_vlc_lookups(%rip),%r11
++ mov dv_vlc_lookups@GOTPCREL(%rip),%r11
+ mov (%r11,%rbp,8),%rbp /* ptr */
+ mov (%rbp,%rbx,4),%ebp /* int32 */
+
+@@ -138,7 +138,7 @@
+ mov %ebp,%ecx
+ sar $8,%ecx
+ and $0xff,%ecx
+- lea sign_mask(%rip),%r11
++ mov sign_mask@GOTPCREL(%rip),%r11
+ mov (%r11,%rcx,4),%ecx /* int32 */
+ and %ecx,%eax
+ neg %eax
+@@ -253,7 +253,7 @@
+
+ /* Attempt to use the shortcut first. If it hits, then
+ this vlc term has been decoded. */
+- lea dv_vlc_class1_shortcut(%rip),%r10
++ mov dv_vlc_class1_shortcut@GOTPCREL(%rip),%r10
+ mov (%r10,%rcx,4),%r11d /* record32 dv_vlc_tab_t */
+ test $0x80,%r11d
+
+@@ -267,17 +267,17 @@
+
+ /* %rax is bits */
+
+- lea dv_vlc_class_lookup5(%rip),%r10
++ mov dv_vlc_class_lookup5@GOTPCREL(%rip),%r10
+ movsbq (%r10,%rcx,1),%rcx /* int8 */
+
+ /* xor %r12,%r12 */
+- lea dv_vlc_index_mask(%rip),%r10
++ mov dv_vlc_index_mask@GOTPCREL(%rip),%r10
+ mov (%r10,%rcx,4),%r12d /* int32 */
+
+- lea dv_vlc_lookups(%rip),%r10
++ mov dv_vlc_lookups@GOTPCREL(%rip),%r10
+ mov (%r10,%rcx,8),%r11 /* ptr->record32 */
+
+- lea dv_vlc_index_rshift(%rip),%r10
++ mov dv_vlc_index_rshift@GOTPCREL(%rip),%r10
+ mov (%r10,%rcx,4),%ecx /* int32 */
+
+ and %eax,%r12d
+@@ -303,7 +303,7 @@
+ mov %r11d,%ecx
+ sar $8,%ecx
+ and $0xff,%ecx
+- lea sign_mask(%rip),%r10
++ mov sign_mask@GOTPCREL(%rip),%r10
+ mov (%r10,%rcx,4),%ecx /* int32 */
+ and %ecx,%eax
+ neg %eax
+@@ -388,7 +388,8 @@
+ mov %r11,%rsi /* bits */
+ mov %rax,%rdi /* bits_left */
+ lea vlc(%rip),%rdx /* *vlc */
+- call dv_decode_vlc
++ mov dv_decode_vlc@GOTPCREL(%rip),%r11
++ call *%r11
+ pop %rdx
+ pop %rsi
+ pop %rdi
+@@ -473,7 +474,7 @@
+ movl %r11d,dv_macroblock_t_eob_count(%r13) /* int32 */
+
+ /* mb->i = (seg->i + dv_super_map_vertical[m]) % (seg->isPAL?12:10); */
+- lea dv_super_map_vertical(%rip),%r11
++ mov dv_super_map_vertical@GOTPCREL(%rip),%r11
+ movl (%r11,%rax,4),%r11d /* int32 */
+ /* xor %rcx,%rcx */
+ movl dv_videosegment_t_i(%r12),%ecx /* int32 */
+@@ -493,7 +494,7 @@
+ movl %r11d,dv_macroblock_t_i(%r13) /* int32 */
+
+ /* mb->j = dv_super_map_horizontal[m]; */
+- lea dv_super_map_horizontal(%rip),%r11
++ mov dv_super_map_horizontal@GOTPCREL(%rip),%r11
+ movl (%r11,%rax,4),%r11d /* int32 */
+ movl %r11d,dv_macroblock_t_j(%r13) /* int32 */
+
+@@ -546,7 +547,8 @@
+
+ /* bl->reorder = &dv_reorder[bl->dct_mode][1]; */
+ shl $6,%rax /* *64 */
+- lea (dv_reorder+1)(%rip),%rcx
++ mov dv_reorder@GOTPCREL(%rip),%rcx
++ add $1,%rcx
+ add %rcx,%rax
+ mov %rax,dv_block_t_reorder(%r15) /* ptr */
+
+@@ -557,13 +559,13 @@
+ /* bl->offset= mb_start + dv_parse_bit_start[b]; */
+ /* xor %rcx,%rcx */
+ movl mb_start(%rip),%ecx /* int32 */
+- lea dv_parse_bit_start(%rip),%rax
++ mov dv_parse_bit_start@GOTPCREL(%rip),%rax
+ mov (%rax,%r12,4),%eax /* int32 */
+ add %rcx,%rax
+ movl %eax,dv_block_t_offset(%r15) /* int32 */
+
+ /* bl->end= mb_start + dv_parse_bit_end[b]; */
+- lea dv_parse_bit_end(%rip),%rax
++ mov dv_parse_bit_end@GOTPCREL(%rip),%rax
+ mov (%rax,%r12,4),%eax /* int32 */
+ add %ecx,%eax
+ mov %eax,dv_block_t_end(%r15) /* int32 */
+@@ -603,7 +605,8 @@
+ mov dv_videosegment_t_bs(%rdi),%rdi /* passed in rdi was seg, now passing seg->bs */
+ mov %r13,%rsi /* mb */
+ mov %r15,%rdx /* bl */
+- call dv_parse_ac_coeffs_pass0
++ mov dv_parse_ac_coeffs_pass0@GOTPCREL(%rip),%r11
++ call *%r11
+ pop %rdi
+ pop %rsi
+ pop %rdx
+@@ -635,10 +638,12 @@
+ mov %rsi,%rax /* quality */
+ and $DV_QUALITY_AC_MASK,%rax
+ cmp $DV_QUALITY_AC_2,%rax
++
++ jne done
++ mov dv_parse_ac_coeffs@GOTPCREL(%rip),%r11
++ jmp *%r11
+
+- jz dv_parse_ac_coeffs
+-
+- mov $0,%rax
++done: mov $0,%rax
+
+ ret
+