OSDN Git Service

Merge from avformat branch
authortiter <titer@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Mon, 17 Apr 2006 18:50:02 +0000 (18:50 +0000)
committertiter <titer@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Mon, 17 Apr 2006 18:50:02 +0000 (18:50 +0000)
git-svn-id: svn://localhost/HandBrake/trunk@60 b64f7644-9d1e-0410-96f1-a4d463321fa5

21 files changed:
Jamfile
configure
contrib/Jamfile
contrib/patch-ffmpeg-macintel.patch [moved from contrib/ffmpeg.patch with 83% similarity]
contrib/patch-ffmpeg.patch [new file with mode: 0644]
contrib/version_ffmpeg.txt
contrib/version_mpeg4ip.txt [deleted file]
libhb/common.c
libhb/common.h
libhb/encavcodec.c
libhb/encfaac.c
libhb/encx264.c
libhb/hb.c
libhb/internal.h
libhb/muxcommon.c
libhb/muxmp4.c
libhb/work.c
macosx/English.lproj/Express.nib/info.nib
macosx/English.lproj/Express.nib/keyedobjects.nib
macosx/ExpressController.m
macosx/HandBrake.xcodeproj/project.pbxproj

diff --git a/Jamfile b/Jamfile
index 8066a1b..fb1229a 100644 (file)
--- a/Jamfile
+++ b/Jamfile
@@ -8,10 +8,10 @@ SubDir TOP ;
 
 # libhb + contrib libraries
 HB_LIBS = libhb.a
-          contrib/lib/liba52.a        contrib/lib/libavcodec.a
-          contrib/lib/libavutil.a     contrib/lib/libdvdread.a
-          contrib/lib/libdvdcss.a     contrib/lib/libfaac.a
-          contrib/lib/libmp3lame.a    contrib/lib/libmp4v2.a
+          contrib/lib/liba52.a        contrib/lib/libavformat.a
+          contrib/lib/libavcodec.a    contrib/lib/libavutil.a
+          contrib/lib/libdvdread.a    contrib/lib/libdvdcss.a
+          contrib/lib/libfaac.a       contrib/lib/libmp3lame.a
           contrib/lib/libmpeg2.a      contrib/lib/libvorbis.a
           contrib/lib/libvorbisenc.a  contrib/lib/libogg.a
           contrib/lib/libsamplerate.a contrib/lib/libx264.a
index d0c2928..abe2b17 100755 (executable)
--- a/configure
+++ b/configure
@@ -4,6 +4,7 @@ CC="gcc"
 CXX="g++"
 CCFLAGS="$CCFLAGS -Wall -g"
 OPTIM="$OPTIM -O3 -funroll-loops"
+LINKLIBS="-lz"
 
 # System-specific flags
 SYSTEM=`uname -s`
index 3271a46..908fc38 100644 (file)
@@ -42,14 +42,11 @@ LibA52 $(SUBDIR)/lib/liba52.a  : $(SUBDIR)/a52dec.tar.gz ;
 # libavcodec
 rule LibAvCodec
 {
+    FFMPEG_PATCH = "patch -p1 < ../patch-ffmpeg.patch" ;
     if $(OS) = MACOSX && $(OSPLAT) = X86
     {
-       FFMPEG_OPTIONS = --enable-memalign-hack ;
-       FFMPEG_PATCH   = "patch -p1 < ../ffmpeg.patch" ;
-    }
-    else
-    {
-        FFMPEG_PATCH = true ;
+       FFMPEG_OPTIONS  = --enable-memalign-hack ;
+       FFMPEG_PATCH   += " && patch -p1 < ../patch-ffmpeg-macintel.patch" ;
     }
     Depends $(<) : $(>) ;
     Depends lib  : $(<) ;
@@ -57,11 +54,10 @@ rule LibAvCodec
 actions LibAvCodec
 {
     cd `dirname $(>)` && CONTRIB=`pwd` &&
-    rm -rf ffmpeg && tar xzf ffmpeg.tar.gz && cd ffmpeg &&
-    $(FFMPEG_PATCH) &&
-    ./configure --prefix=$CONTRIB $(FFMPEG_OPTIONS) --enable-gpl &&
-    make -C libavcodec && make -C libavutil &&
-    make -C libavcodec installlib && make -C libavutil installlib &&
+    rm -rf ffmpeg-20060326 && tar xzf ffmpeg.tar.gz &&
+    cd ffmpeg-20060326 && $(FFMPEG_PATCH) &&
+    ./configure --prefix=$CONTRIB $(FFMPEG_OPTIONS) --enable-gpl --disable-audio-beos &&
+    make lib && make install-libs install-headers &&
     strip -S $CONTRIB/lib/libavcodec.a
 }
 Wget       $(SUBDIR)/ffmpeg.tar.gz    : $(SUBDIR)/version_ffmpeg.txt ;
@@ -78,6 +74,17 @@ actions LibAvUtil
 }
 LibAvUtil $(SUBDIR)/lib/libavutil.a : $(SUBDIR)/lib/libavcodec.a ;
 
+rule LibAvFormat
+{
+    Depends $(<) : $(>) ;
+    Depends lib  : $(<) ;
+}
+actions LibAvFormat
+{
+    strip -S $(<)
+}
+LibAvUtil $(SUBDIR)/lib/libavformat.a : $(SUBDIR)/lib/libavcodec.a ;
+
 # libdvdcss
 # We need libdvdcss.so for libdvdread's configure to work...
 rule LibDvdCss
@@ -146,25 +153,6 @@ actions LibMp3Lame
 Wget       $(SUBDIR)/lame.tar.gz      : $(SUBDIR)/version_lame.txt ;
 LibMp3Lame $(SUBDIR)/lib/libmp3lame.a : $(SUBDIR)/lame.tar.gz ;
 
-# libmp4v2
-rule LibMp4v2
-{
-    Depends $(<) : $(>) ;
-    Depends lib  : $(<) ;
-}
-actions LibMp4v2
-{
-    cd `dirname $(>)` && CONTRIB=`pwd` &&
-    rm -rf mpeg4ip && tar xzf mpeg4ip.tar.gz && cd mpeg4ip &&
-    ./bootstrap && make -C lib/mp4v2 libmp4v2.la &&
-    cp lib/mp4v2/.libs/libmp4v2.a $CONTRIB/lib &&
-    cp mpeg4ip_config.h include/mpeg4ip.h include/mpeg4ip_version.h \
-      include/mpeg4ip_win32.h lib/mp4v2/mp4.h $CONTRIB/include &&
-    strip -S $CONTRIB/lib/libmp4v2.a
-}
-Wget     $(SUBDIR)/mpeg4ip.tar.gz : $(SUBDIR)/version_mpeg4ip.txt ;
-LibMp4v2 $(SUBDIR)/lib/libmp4v2.a : $(SUBDIR)/mpeg4ip.tar.gz ;
-
 # libmpeg2
 rule LibMpeg2
 {
similarity index 83%
rename from contrib/ffmpeg.patch
rename to contrib/patch-ffmpeg-macintel.patch
index c507502..ecc0dc6 100644 (file)
@@ -1,6 +1,6 @@
-diff -ru ffmpeg.orig/libavcodec/i386/dsputil_mmx.c ffmpeg/libavcodec/i386/dsputil_mmx.c
---- ffmpeg.orig/libavcodec/i386/dsputil_mmx.c  2006-01-12 23:43:17.000000000 +0100
-+++ ffmpeg/libavcodec/i386/dsputil_mmx.c       2006-02-01 06:10:53.000000000 +0100
+diff -ru ffmpeg-20060326-bak/libavcodec/i386/dsputil_mmx.c ffmpeg-20060326/libavcodec/i386/dsputil_mmx.c
+--- ffmpeg-20060326-bak/libavcodec/i386/dsputil_mmx.c  2006-03-26 22:04:53.000000000 +0200
++++ ffmpeg-20060326/libavcodec/i386/dsputil_mmx.c      2006-03-26 22:13:32.000000000 +0200
 @@ -52,7 +52,7 @@
  static const uint64_t ff_pb_3F attribute_used __attribute__ ((aligned(8))) = 0x3F3F3F3F3F3F3F3FULL;
  static const uint64_t ff_pb_FC attribute_used __attribute__ ((aligned(8))) = 0xFCFCFCFCFCFCFCFCULL;
@@ -55,9 +55,9 @@ diff -ru ffmpeg.orig/libavcodec/i386/dsputil_mmx.c ffmpeg/libavcodec/i386/dsputi
           "1:                            \n\t"
           "movq (%1), %%mm0              \n\t"
           "movq 8(%1), %%mm4             \n\t"
-diff -ru ffmpeg.orig/libavcodec/i386/dsputil_mmx_avg.h ffmpeg/libavcodec/i386/dsputil_mmx_avg.h
---- ffmpeg.orig/libavcodec/i386/dsputil_mmx_avg.h      2006-01-12 23:43:17.000000000 +0100
-+++ ffmpeg/libavcodec/i386/dsputil_mmx_avg.h   2006-02-01 06:10:53.000000000 +0100
+diff -ru ffmpeg-20060326-bak/libavcodec/i386/dsputil_mmx_avg.h ffmpeg-20060326/libavcodec/i386/dsputil_mmx_avg.h
+--- ffmpeg-20060326-bak/libavcodec/i386/dsputil_mmx_avg.h      2006-03-26 22:04:53.000000000 +0200
++++ ffmpeg-20060326/libavcodec/i386/dsputil_mmx_avg.h  2006-03-26 22:13:51.000000000 +0200
 @@ -754,7 +754,7 @@
          "lea (%3, %3), %%"REG_a"        \n\t"
          "movq (%1), %%mm0               \n\t"
@@ -67,9 +67,9 @@ diff -ru ffmpeg.orig/libavcodec/i386/dsputil_mmx_avg.h ffmpeg/libavcodec/i386/ds
          "1:                             \n\t"
          "movq (%1, %%"REG_a"), %%mm2    \n\t"
          "movq (%1, %3), %%mm1           \n\t"
-diff -ru ffmpeg.orig/libavcodec/i386/dsputil_mmx_rnd.h ffmpeg/libavcodec/i386/dsputil_mmx_rnd.h
---- ffmpeg.orig/libavcodec/i386/dsputil_mmx_rnd.h      2006-01-12 23:43:17.000000000 +0100
-+++ ffmpeg/libavcodec/i386/dsputil_mmx_rnd.h   2006-02-01 06:10:53.000000000 +0100
+diff -ru ffmpeg-20060326-bak/libavcodec/i386/dsputil_mmx_rnd.h ffmpeg-20060326/libavcodec/i386/dsputil_mmx_rnd.h
+--- ffmpeg-20060326-bak/libavcodec/i386/dsputil_mmx_rnd.h      2006-03-26 22:04:53.000000000 +0200
++++ ffmpeg-20060326/libavcodec/i386/dsputil_mmx_rnd.h  2006-03-26 22:15:09.000000000 +0200
 @@ -28,7 +28,7 @@
      MOVQ_BFE(mm6);
      __asm __volatile(
@@ -142,10 +142,10 @@ diff -ru ffmpeg.orig/libavcodec/i386/dsputil_mmx_rnd.h ffmpeg/libavcodec/i386/ds
          "1:                             \n\t"
          "movq   (%1, %%"REG_a"), %%mm0  \n\t"
          "movq   1(%1, %%"REG_a"), %%mm2 \n\t"
-diff -ru ffmpeg.orig/libavcodec/i386/fdct_mmx.c ffmpeg/libavcodec/i386/fdct_mmx.c
---- ffmpeg.orig/libavcodec/i386/fdct_mmx.c     2005-12-22 02:10:09.000000000 +0100
-+++ ffmpeg/libavcodec/i386/fdct_mmx.c  2006-02-01 06:10:53.000000000 +0100
-@@ -350,61 +350,67 @@
+diff -ru ffmpeg-20060326-bak/libavcodec/i386/fdct_mmx.c ffmpeg-20060326/libavcodec/i386/fdct_mmx.c
+--- ffmpeg-20060326-bak/libavcodec/i386/fdct_mmx.c     2006-03-26 22:04:53.000000000 +0200
++++ ffmpeg-20060326/libavcodec/i386/fdct_mmx.c 2006-03-26 22:19:01.000000000 +0200
+@@ -350,61 +350,61 @@
  
  static always_inline void fdct_row_sse2(const int16_t *in, int16_t *out)
  {
@@ -218,12 +218,6 @@ diff -ru ffmpeg.orig/libavcodec/i386/fdct_mmx.c ffmpeg/libavcodec/i386/fdct_mmx.
 -        "packssdw  %%xmm3, %%xmm1       \n\t"
 -        "movdqa    %%xmm1, \\i(%4)      \n\t"
 -        ".endm                          \n\t"
-+//        ".macro FDCT_ROW_SSE2_H1 i t    \n\t"
-+//        ".endm                          \n\t"
-+//        ".macro FDCT_ROW_SSE2_H2 i t    \n\t"
-+//        ".endm                          \n\t"
-+//        ".macro FDCT_ROW_SSE2 i         \n\t"
-+//        ".endm                          \n\t"
          "movdqa    (%2), %%xmm6         \n\t"
 -        "FDCT_ROW_SSE2_H1 0 0           \n\t"
 -        "FDCT_ROW_SSE2 0                \n\t"
@@ -266,9 +260,9 @@ diff -ru ffmpeg.orig/libavcodec/i386/fdct_mmx.c ffmpeg/libavcodec/i386/fdct_mmx.
          :
          : "r" (in), "r" (tab_frw_01234567_sse2.tab_frw_01234567_sse2), "r" (fdct_r_row_sse2.fdct_r_row_sse2), "i" (SHIFT_FRW_ROW), "r" (out)
      );
-diff -ru ffmpeg.orig/libavcodec/i386/idct_mmx_xvid.c ffmpeg/libavcodec/i386/idct_mmx_xvid.c
---- ffmpeg.orig/libavcodec/i386/idct_mmx_xvid.c        2006-01-12 23:43:18.000000000 +0100
-+++ ffmpeg/libavcodec/i386/idct_mmx_xvid.c     2006-02-01 06:10:53.000000000 +0100
+diff -ru ffmpeg-20060326-bak/libavcodec/i386/idct_mmx_xvid.c ffmpeg-20060326/libavcodec/i386/idct_mmx_xvid.c
+--- ffmpeg-20060326-bak/libavcodec/i386/idct_mmx_xvid.c        2006-03-26 22:04:53.000000000 +0200
++++ ffmpeg-20060326/libavcodec/i386/idct_mmx_xvid.c    2006-03-26 22:20:28.000000000 +0200
 @@ -295,17 +295,17 @@
    "movq 8+" #A1 ",%%mm1                \n\t"/* 1     ; x7 x6 x5 x4*/\
    "movq %%mm0,%%mm2                \n\t"/* 2     ; x3 x2 x1 x0*/\
@@ -300,9 +294,9 @@ diff -ru ffmpeg.orig/libavcodec/i386/idct_mmx_xvid.c ffmpeg/libavcodec/i386/idct
    "movq %%mm7,8                +" #A2 "\n\t"/* 7     ; save y7 y6 y5 y4*/\
  
  
-diff -ru ffmpeg.orig/libavcodec/i386/motion_est_mmx.c ffmpeg/libavcodec/i386/motion_est_mmx.c
---- ffmpeg.orig/libavcodec/i386/motion_est_mmx.c       2006-01-12 23:43:18.000000000 +0100
-+++ ffmpeg/libavcodec/i386/motion_est_mmx.c    2006-02-01 06:10:53.000000000 +0100
+diff -ru ffmpeg-20060326-bak/libavcodec/i386/motion_est_mmx.c ffmpeg-20060326/libavcodec/i386/motion_est_mmx.c
+--- ffmpeg-20060326-bak/libavcodec/i386/motion_est_mmx.c       2006-03-26 22:04:53.000000000 +0200
++++ ffmpeg-20060326/libavcodec/i386/motion_est_mmx.c   2006-03-26 22:24:48.000000000 +0200
 @@ -34,7 +34,7 @@
  {
      long len= -(stride*h);
@@ -357,9 +351,9 @@ diff -ru ffmpeg.orig/libavcodec/i386/motion_est_mmx.c ffmpeg/libavcodec/i386/mot
          "1:                             \n\t"
          "movq (%1, %%"REG_a"), %%mm0    \n\t"
          "movq (%2, %%"REG_a"), %%mm1    \n\t"
-diff -ru ffmpeg.orig/libavcodec/i386/mpegvideo_mmx.c ffmpeg/libavcodec/i386/mpegvideo_mmx.c
---- ffmpeg.orig/libavcodec/i386/mpegvideo_mmx.c        2006-01-12 23:43:18.000000000 +0100
-+++ ffmpeg/libavcodec/i386/mpegvideo_mmx.c     2006-02-01 06:10:53.000000000 +0100
+diff -ru ffmpeg-20060326-bak/libavcodec/i386/mpegvideo_mmx.c ffmpeg-20060326/libavcodec/i386/mpegvideo_mmx.c
+--- ffmpeg-20060326-bak/libavcodec/i386/mpegvideo_mmx.c        2006-03-26 22:04:53.000000000 +0200
++++ ffmpeg-20060326/libavcodec/i386/mpegvideo_mmx.c    2006-03-26 22:25:09.000000000 +0200
 @@ -66,7 +66,7 @@
                  "packssdw %%mm5, %%mm5          \n\t"
                  "psubw %%mm5, %%mm7             \n\t"
@@ -414,9 +408,9 @@ diff -ru ffmpeg.orig/libavcodec/i386/mpegvideo_mmx.c ffmpeg/libavcodec/i386/mpeg
                  "1:                             \n\t"
                  "movq (%0, %%"REG_a"), %%mm0    \n\t"
                  "movq 8(%0, %%"REG_a"), %%mm1   \n\t"
-diff -ru ffmpeg.orig/libavcodec/i386/mpegvideo_mmx_template.c ffmpeg/libavcodec/i386/mpegvideo_mmx_template.c
---- ffmpeg.orig/libavcodec/i386/mpegvideo_mmx_template.c       2006-01-12 23:43:18.000000000 +0100
-+++ ffmpeg/libavcodec/i386/mpegvideo_mmx_template.c    2006-02-01 06:10:53.000000000 +0100
+diff -ru ffmpeg-20060326-bak/libavcodec/i386/mpegvideo_mmx_template.c ffmpeg-20060326/libavcodec/i386/mpegvideo_mmx_template.c
+--- ffmpeg-20060326-bak/libavcodec/i386/mpegvideo_mmx_template.c       2006-03-26 22:04:53.000000000 +0200
++++ ffmpeg-20060326/libavcodec/i386/mpegvideo_mmx_template.c   2006-03-26 22:25:33.000000000 +0200
 @@ -111,7 +111,7 @@
              "pxor %%mm6, %%mm6                  \n\t"
              "psubw (%3), %%mm6                  \n\t" // -bias[0]
@@ -435,10 +429,10 @@ diff -ru ffmpeg.orig/libavcodec/i386/mpegvideo_mmx_template.c ffmpeg/libavcodec/
              "1:                                 \n\t"
              "pxor %%mm1, %%mm1                  \n\t" // 0
              "movq (%1, %%"REG_a"), %%mm0        \n\t" // block[i]
-diff -ru ffmpeg.orig/libavcodec/i386/simple_idct_mmx.c ffmpeg/libavcodec/i386/simple_idct_mmx.c
---- ffmpeg.orig/libavcodec/i386/simple_idct_mmx.c      2006-01-12 23:43:18.000000000 +0100
-+++ ffmpeg/libavcodec/i386/simple_idct_mmx.c   2006-02-01 06:10:53.000000000 +0100
-@@ -459,13 +459,12 @@
+diff -ru ffmpeg-20060326-bak/libavcodec/i386/simple_idct_mmx.c ffmpeg-20060326/libavcodec/i386/simple_idct_mmx.c
+--- ffmpeg-20060326-bak/libavcodec/i386/simple_idct_mmx.c      2006-03-26 22:04:53.000000000 +0200
++++ ffmpeg-20060326/libavcodec/i386/simple_idct_mmx.c  2006-03-26 22:39:09.000000000 +0200
+@@ -459,10 +459,10 @@
  
  
  //IDCT(      src0,   src4,   src1,    src5,    dst, rounder, shift)
@@ -452,11 +446,8 @@ diff -ru ffmpeg.orig/libavcodec/i386/simple_idct_mmx.c ffmpeg/libavcodec/i386/si
 +COL_IDCT(  24(%1), 88(%1), 56(%1), 120(%1), 12(%0), "nop", 20)
  
  #else
--
- #define DC_COND_IDCT(src0, src4, src1, src5, dst, rounder, shift) \
-         "movq " #src0 ", %%mm0          \n\t" /* R4     R0      r4      r0 */\
-         "movq " #src4 ", %%mm1          \n\t" /* R6     R2      r6      r2 */\
-@@ -783,10 +782,10 @@
+@@ -783,10 +783,10 @@
  
  
  //IDCT(  src0,   src4,   src1,    src5,    dst, rounder, shift)
@@ -471,7 +462,7 @@ diff -ru ffmpeg.orig/libavcodec/i386/simple_idct_mmx.c ffmpeg/libavcodec/i386/si
          "jmp 9f                         \n\t"
  
          "#.balign 16                    \n\t"\
-@@ -860,10 +859,10 @@
+@@ -860,10 +860,10 @@
          "movd %%mm5, 80+" #dst "        \n\t"
  
  //IDCT(  src0,   src4,   src1,    src5,    dst, rounder, shift)
@@ -486,7 +477,7 @@ diff -ru ffmpeg.orig/libavcodec/i386/simple_idct_mmx.c ffmpeg/libavcodec/i386/si
          "jmp 9f                         \n\t"
  
          "#.balign 16                    \n\t"\
-@@ -928,10 +927,10 @@
+@@ -928,10 +928,10 @@
  
  
  //IDCT(  src0,   src4,   src1,    src5,    dst, rounder, shift)
@@ -501,7 +492,7 @@ diff -ru ffmpeg.orig/libavcodec/i386/simple_idct_mmx.c ffmpeg/libavcodec/i386/si
          "jmp 9f                         \n\t"
  
          "#.balign 16                    \n\t"\
-@@ -1007,10 +1006,10 @@
+@@ -1007,10 +1007,10 @@
          "movd %%mm5, 80+" #dst "        \n\t"
  
  //IDCT(  src0,   src4,   src1,    src5,    dst, rounder, shift)
@@ -516,7 +507,7 @@ diff -ru ffmpeg.orig/libavcodec/i386/simple_idct_mmx.c ffmpeg/libavcodec/i386/si
          "jmp 9f                         \n\t"
  
          "#.balign 16                    \n\t"\
-@@ -1073,10 +1072,10 @@
+@@ -1073,10 +1073,10 @@
  
  
  //IDCT(  src0,   src4,   src1,    src5,    dst, rounder, shift)
@@ -531,22 +522,19 @@ diff -ru ffmpeg.orig/libavcodec/i386/simple_idct_mmx.c ffmpeg/libavcodec/i386/si
          "jmp 9f                         \n\t"
  
          "#.balign 16                    \n\t"\
-@@ -1141,10 +1140,10 @@
+@@ -1141,9 +1141,9 @@
  
  
  //IDCT(  src0,   src4,   src1,    src5,    dst, rounder, shift)
 -IDCT(    0(%1), 64(%1), 32(%1),  96(%1),  0(%0),/nop, 20)
--//IDCT(   8(%1), 72(%1), 40(%1), 104(%1),  4(%0),/nop, 20)
--IDCT(  16(%1), 80(%1), 48(%1), 112(%1),  8(%0),/nop, 20)
--//IDCT(  24(%1), 88(%1), 56(%1), 120(%1), 12(%0),/nop, 20)
 +IDCT(    0(%1), 64(%1), 32(%1),  96(%1),  0(%0), "nop", 20)
-+//IDCT(   8(%1), 72(%1), 40(%1), 104(%1),  4(%0), "nop", 20)
+ //IDCT(   8(%1), 72(%1), 40(%1), 104(%1),  4(%0),/nop, 20)
+-IDCT(  16(%1), 80(%1), 48(%1), 112(%1),  8(%0),/nop, 20)
 +IDCT(  16(%1), 80(%1), 48(%1), 112(%1),  8(%0), "nop", 20)
-+//IDCT(  24(%1), 88(%1), 56(%1), 120(%1), 12(%0), "nop", 20)
+ //IDCT(  24(%1), 88(%1), 56(%1), 120(%1), 12(%0),/nop, 20)
          "jmp 9f                         \n\t"
  
-@@ -1217,10 +1216,10 @@
+@@ -1217,10 +1217,10 @@
  
  
  //IDCT(  src0,   src4,   src1,    src5,    dst, rounder, shift)
@@ -561,42 +549,15 @@ diff -ru ffmpeg.orig/libavcodec/i386/simple_idct_mmx.c ffmpeg/libavcodec/i386/si
          "jmp 9f                         \n\t"
  
  
-@@ -1259,10 +1258,10 @@
+@@ -1259,9 +1259,9 @@
          "movq %%mm0, 80+" #dst "        \n\t"
  
  //IDCT(  src0,   src4,   src1,    src5,    dst, rounder, shift)
 -IDCT(   0(%1), 64(%1), 32(%1),  96(%1),  0(%0),/nop, 20)
--//IDCT(   8(%1), 72(%1), 40(%1), 104(%1),  4(%0),/nop, 20)
--IDCT(  16(%1), 80(%1), 48(%1), 112(%1),  8(%0),/nop, 20)
--//IDCT(  24(%1), 88(%1), 56(%1), 120(%1), 12(%0),/nop, 20)
 +IDCT(   0(%1), 64(%1), 32(%1),  96(%1),  0(%0), "nop", 20)
-+//IDCT(   8(%1), 72(%1), 40(%1), 104(%1),  4(%0), "nop", 20)
+ //IDCT(   8(%1), 72(%1), 40(%1), 104(%1),  4(%0),/nop, 20)
+-IDCT(  16(%1), 80(%1), 48(%1), 112(%1),  8(%0),/nop, 20)
 +IDCT(  16(%1), 80(%1), 48(%1), 112(%1),  8(%0), "nop", 20)
-+//IDCT(  24(%1), 88(%1), 56(%1), 120(%1), 12(%0), "nop", 20)
+ //IDCT(  24(%1), 88(%1), 56(%1), 120(%1), 12(%0),/nop, 20)
  
  
- #endif
-diff -ru ffmpeg.orig/libavcodec/libpostproc/mangle.h ffmpeg/libavcodec/libpostproc/mangle.h
---- ffmpeg.orig/libavcodec/libpostproc/mangle.h        2004-12-18 04:07:15.000000000 +0100
-+++ ffmpeg/libavcodec/libpostproc/mangle.h     2006-02-01 06:10:53.000000000 +0100
-@@ -19,6 +19,8 @@
- #else
- #if defined(ARCH_X86_64) && defined(PIC)
- #define MANGLE(a) #a"(%%rip)"
-+#elif defined(CONFIG_DARWIN)
-+#define MANGLE(a) "_" #a
- #else
- #define MANGLE(a) #a
- #endif
-diff -ru ffmpeg.orig/libavutil/common.h ffmpeg/libavutil/common.h
---- ffmpeg.orig/libavutil/common.h     2006-01-30 01:22:41.000000000 +0100
-+++ ffmpeg/libavutil/common.h  2006-02-01 06:10:53.000000000 +0100
-@@ -267,6 +267,8 @@
- #    else
- #        if defined(ARCH_X86_64) && defined(PIC)
- #            define MANGLE(a) #a"(%%rip)"
-+#        elif defined(CONFIG_DARWIN)
-+#            define MANGLE(a) "_" #a
- #        else
- #            define MANGLE(a) #a
- #        endif
diff --git a/contrib/patch-ffmpeg.patch b/contrib/patch-ffmpeg.patch
new file mode 100644 (file)
index 0000000..cd482bd
--- /dev/null
@@ -0,0 +1,68 @@
+diff -ru ffmpeg-20060326-bak/configure ffmpeg-20060326/configure
+--- ffmpeg-20060326-bak/configure      2006-03-26 22:04:53.000000000 +0200
++++ ffmpeg-20060326/configure  2006-03-30 13:29:36.000000000 +0200
+@@ -272,7 +272,7 @@
+ 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
+ mmx="no"
+ ;;
+-*20010315*) echo "BeBits gcc"
++*20010315*|2.95.3*) echo "BeBits gcc"
+ CFLAGS="$CFLAGS -fno-expensive-optimizations"
+ ;;
+ esac
+diff -ru ffmpeg-20060326-bak/libavformat/movenc.c ffmpeg-20060326/libavformat/movenc.c
+--- ffmpeg-20060326-bak/libavformat/movenc.c   2006-03-26 22:04:53.000000000 +0200
++++ ffmpeg-20060326/libavformat/movenc.c       2006-03-30 13:31:03.000000000 +0200
+@@ -22,6 +22,10 @@
+ #include "avio.h"
+ #include "mov.h"
++#ifndef UINT32_MAX
++#define UINT32_MAX (4294967295U)
++#endif
++
+ #undef NDEBUG
+ #include <assert.h>
+@@ -435,11 +439,6 @@
+             end = track->vosData + track->vosLen;
+             put_byte(pb, 1); /* version */
+-            put_byte(pb, 77); /* profile */
+-            put_byte(pb, 64); /* profile compat */
+-            put_byte(pb, 30); /* level */
+-            put_byte(pb, 0xff); /* 6 bits reserved (111111) + 2 bits nal size length - 1 (11) */
+-            put_byte(pb, 0xe1); /* 3 bits reserved (111) + 5 bits number of sps (00001) */
+             /* look for sps and pps */
+             while (buf < end) {
+@@ -458,6 +457,12 @@
+             }
+             assert(sps);
+             assert(pps);
++
++            put_byte(pb, sps[1]); /* profile */
++            put_byte(pb, sps[2]); /* profile compat */
++            put_byte(pb, sps[3]); /* level */
++            put_byte(pb, 0xff); /* 6 bits reserved (111111) + 2 bits nal size length - 1 (11) */
++            put_byte(pb, 0xe1); /* 3 bits reserved (111) + 5 bits number of sps (00001) */
+             put_be16(pb, sps_size);
+             put_buffer(pb, sps, sps_size);
+             put_byte(pb, 1); /* number of pps */
+diff -ru ffmpeg-20060326-bak/libavformat/tcp.c ffmpeg-20060326/libavformat/tcp.c
+--- ffmpeg-20060326-bak/libavformat/tcp.c      2006-03-26 22:04:53.000000000 +0200
++++ ffmpeg-20060326/libavformat/tcp.c  2006-03-30 13:29:36.000000000 +0200
+@@ -112,11 +112,13 @@
+                 break;
+         }
++#ifndef __BEOS__
+         /* test error */
+         optlen = sizeof(ret);
+         getsockopt (fd, SOL_SOCKET, SO_ERROR, &ret, &optlen);
+         if (ret != 0)
+             goto fail;
++#endif
+     }
+     s->fd = fd;
+     return 0;
index fb7435f..a13a338 100644 (file)
@@ -1 +1 @@
-http://download.m0k.org/handbrake/contrib/ffmpeg-20060201.tar.gz
+http://download.m0k.org/handbrake/contrib/ffmpeg-20060326.tar.gz
diff --git a/contrib/version_mpeg4ip.txt b/contrib/version_mpeg4ip.txt
deleted file mode 100644 (file)
index f60e597..0000000
+++ /dev/null
@@ -1 +0,0 @@
-http://download.m0k.org/handbrake/contrib/mpeg4ip-1.3.tar.gz
index 7bd125c..c9650ab 100644 (file)
@@ -115,6 +115,7 @@ int hb_calc_bitrate( hb_job_t * job, int size )
     switch( job->mux )
     {
        case HB_MUX_MP4:
+       case HB_MUX_PSP:
             overhead = 6;
             break; 
         case HB_MUX_AVI:
index dea4a48..a0c22ff 100644 (file)
@@ -155,8 +155,9 @@ struct hb_job_s
          file: file path */
 #define HB_MUX_MASK 0xFF0000
 #define HB_MUX_MP4  0x010000
-#define HB_MUX_AVI  0x020000
-#define HB_MUX_OGM  0x040000
+#define HB_MUX_PSP  0x020000
+#define HB_MUX_AVI  0x040000
+#define HB_MUX_OGM  0x080000
     int             mux;
     char          * file;
 
index 155ff9b..f046069 100644 (file)
@@ -65,10 +65,14 @@ int encavcodecInit( hb_work_object_t * w, hb_job_t * job )
     context->gop_size  = 10 * job->vrate / job->vrate_base;
     context->pix_fmt   = PIX_FMT_YUV420P;
 
-    if( job->mux & HB_MUX_MP4 )
+    if( job->mux & ( HB_MUX_MP4 | HB_MUX_PSP ) )
     {
         context->flags |= CODEC_FLAG_GLOBAL_HEADER;
     }
+    if( job->mux & HB_MUX_PSP )
+    {
+        context->flags |= CODEC_FLAG_BITEXACT;
+    }
     if( job->grayscale )
     {
         context->flags |= CODEC_FLAG_GRAY;
@@ -110,11 +114,17 @@ int encavcodecInit( hb_work_object_t * w, hb_job_t * job )
     }
     pv->context = context;
 
-    if( ( job->mux & HB_MUX_MP4 ) && job->pass != 1 )
+    if( ( job->mux & ( HB_MUX_MP4 | HB_MUX_PSP ) ) && job->pass != 1 )
     {
+#if 0
         /* Hem hem */
         w->config->mpeg4.length = 15;
         memcpy( w->config->mpeg4.bytes, context->extradata + 15, 15 );
+#else
+        w->config->mpeg4.length = context->extradata_size;
+        memcpy( w->config->mpeg4.bytes, context->extradata,
+                context->extradata_size );
+#endif
     }
     
     return 0;
index 4c0d19e..8e2bd43 100644 (file)
@@ -42,9 +42,11 @@ hb_work_object_t hb_encfaac =
 int encfaacInit( hb_work_object_t * w, hb_job_t * job )
 {
     hb_work_private_t * pv = calloc( 1, sizeof( hb_work_private_t ) );
-    w->private_data = pv;
-
     faacEncConfigurationPtr cfg;
+    uint8_t * bytes;
+    unsigned long length;
+
+    w->private_data = pv;
 
     pv->job   = job;
 
@@ -67,8 +69,6 @@ int encfaacInit( hb_work_object_t * w, hb_job_t * job )
         hb_log( "faacEncSetConfiguration failed" );
     }
 
-    uint8_t * bytes;
-    unsigned long length;
     if( faacEncGetDecoderSpecificInfo( pv->faac, &bytes, &length ) < 0 )
     {
         hb_log( "faacEncGetDecoderSpecificInfo failed" );
index 806fc4c..13faadc 100644 (file)
@@ -43,6 +43,7 @@ int encx264Init( hb_work_object_t * w, hb_job_t * job )
     x264_param_t       param;
     x264_nal_t       * nal;
     int                nal_count;
+    int i, size;
 
     hb_work_private_t * pv = calloc( 1, sizeof( hb_work_private_t ) );
     w->private_data = pv;
@@ -63,6 +64,7 @@ int encx264Init( hb_work_object_t * w, hb_job_t * job )
     param.i_log_level  = X264_LOG_NONE;
     if( job->h264_13 )
     {
+        param.i_threads   = 1;
         param.b_cabac     = 0;
         param.i_level_idc = 13;
     }
@@ -98,17 +100,17 @@ int encx264Init( hb_work_object_t * w, hb_job_t * job )
     hb_log( "encx264: opening libx264 (pass %d)", job->pass );
     pv->x264 = x264_encoder_open( &param );
 
-    x264_encoder_headers( pv->x264, &nal, &nal_count );
+    w->config->mpeg4.length = 0;
 
-    /* Sequence Parameter Set */
-    w->config->h264.sps_length = 1 + nal[1].i_payload;
-    w->config->h264.sps[0] = 0x67;
-    memcpy( &w->config->h264.sps[1], nal[1].p_payload, nal[1].i_payload );
+    x264_encoder_headers( pv->x264, &nal, &nal_count );
 
-    /* Picture Parameter Set */
-    w->config->h264.pps_length = 1 + nal[2].i_payload;
-    w->config->h264.pps[0] = 0x68;
-    memcpy( &w->config->h264.pps[1], nal[2].p_payload, nal[2].i_payload );
+    for( i = 0; i < nal_count; i++ )
+    {
+        size = sizeof( w->config->mpeg4.bytes ) - w->config->mpeg4.length;
+        x264_nal_encode( &w->config->mpeg4.bytes[w->config->mpeg4.length],
+                         &size, 1, &nal[i] );
+        w->config->mpeg4.length += size;
+    }
 
     x264_picture_alloc( &pv->pic_in, X264_CSP_I420,
                         job->width, job->height );
@@ -158,51 +160,19 @@ int encx264Work( hb_work_object_t * w, hb_buffer_t ** buf_in,
 
     /* Should be way too large */
     buf        = hb_buffer_init( 3 * job->width * job->height / 2 );
-    buf->size  = 0;
     buf->start = in->start;
     buf->stop  = in->stop;
-    buf->key   = 0;
+    buf->key   = ( pv->pic_out.i_type == X264_TYPE_IDR );
 
+    buf->size  = 0;
     for( i = 0; i < i_nal; i++ )
     {
         int size, data;
-
         data = buf->alloc - buf->size;
-        if( ( size = x264_nal_encode( buf->data + buf->size, &data,
-                                      1, &nal[i] ) ) < 1 )
+        if( ( size = x264_nal_encode( &buf->data[buf->size], &data,
+                                      1, &nal[i] ) ) > 0 )
         {
-            continue;
-        }
-
-        if( job->mux & HB_MUX_AVI )
-        {
-            if( nal[i].i_ref_idc == NAL_PRIORITY_HIGHEST )
-            {
-                buf->key = 1;
-            }
             buf->size += size;
-            continue;
-        }
-
-        /* H.264 in .mp4 */
-        switch( buf->data[buf->size+4] & 0x1f )
-        {
-            case 0x7:
-            case 0x8:
-                /* SPS, PPS */
-                break;
-
-            default:
-                /* H.264 in mp4 (stolen from mp4creator) */
-                buf->data[buf->size+0] = ( ( size - 4 ) >> 24 ) & 0xFF;
-                buf->data[buf->size+1] = ( ( size - 4 ) >> 16 ) & 0xFF;
-                buf->data[buf->size+2] = ( ( size - 4 ) >>  8 ) & 0xFF;
-                buf->data[buf->size+3] = ( ( size - 4 ) >>  0 ) & 0xFF;
-                if( nal[i].i_ref_idc == NAL_PRIORITY_HIGHEST )
-                {
-                    buf->key = 1;
-                }
-                buf->size += size;
         }
     }
 
index 7bc41be..d44c05d 100644 (file)
@@ -260,6 +260,7 @@ void hb_set_size( hb_job_t * job, int aspect, int pixels )
     int croppedAspect = title->aspect * title->height * croppedWidth /
                             croppedHeight / title->width;
     int addCrop;
+    int i, w, h;
 
     if( aspect <= 0 )
     {
@@ -296,11 +297,29 @@ void hb_set_size( hb_job_t * job, int aspect, int pixels )
     else if( aspect > croppedAspect )
     {
         /* Need to crop on the top and bottom */
-        /* TODO */
+        addCrop = croppedHeight - croppedWidth * title->aspect *
+            title->height / aspect / title->width;
+        if( addCrop & 3 )
+        {
+            addCrop = ( addCrop + 1 ) / 2;
+            job->crop[0] += addCrop;
+            job->crop[1] += addCrop;
+        }
+        else if( addCrop & 2 )
+        {
+            addCrop /= 2;
+            job->crop[0] += addCrop - 1;
+            job->crop[1] += addCrop + 1;
+        }
+        else
+        {
+            addCrop /= 2;
+            job->crop[0] += addCrop;
+            job->crop[1] += addCrop;
+        }
     }
 
     /* Compute a resolution from the number of pixels and aspect */
-    int i, w, h;
     for( i = 0;; i++ )
     {
         w = 16 * i;
index 7a6caad..e13008f 100644 (file)
@@ -123,14 +123,6 @@ union hb_esconfig_u
 
     struct
     {
-        uint8_t sps[HB_CONFIG_MAX_SIZE];
-        int     sps_length;
-        uint8_t pps[HB_CONFIG_MAX_SIZE];
-        int     pps_length;
-    } h264;
-
-    struct
-    {
         uint8_t bytes[HB_CONFIG_MAX_SIZE];
         int     length;
     } aac;
index 090f332..8deba08 100644 (file)
@@ -70,6 +70,7 @@ static void MuxerFunc( void * _mux )
         switch( job->mux )
         {
             case HB_MUX_MP4:
+            case HB_MUX_PSP:
                 m = hb_mux_mp4_init( job );
                 break;
             case HB_MUX_AVI:
index d5002fa..21aea7a 100644 (file)
@@ -4,27 +4,28 @@
    Homepage: <http://handbrake.m0k.org/>.
    It may be used under the terms of the GNU General Public License. */
 
-/* libmp4v2 header */
-#include "mp4.h"
+#include <ffmpeg/avformat.h>
 
 #include "hb.h"
 
+int64_t ff_gcd(int64_t a, int64_t b);
+static inline int ff_get_fourcc(const char *s)
+{
+    return (s[0]) + (s[1]<<8) + (s[2]<<16) + (s[3]<<24);
+}
+
 struct hb_mux_object_s
 {
     HB_MUX_COMMON;
 
     hb_job_t * job;
 
-    /* libmp4v2 handle */
-    MP4FileHandle file;
-
-    /* Cumulated durations so far, in timescale units (see MP4Mux) */
-    uint64_t sum_dur;
+    AVFormatContext * format;
 };
 
 struct hb_mux_data_s
 {
-    MP4TrackId track;
+    int track;
 };
 
 /**********************************************************************
@@ -38,110 +39,141 @@ static int MP4Init( hb_mux_object_t * m )
     hb_title_t * title = job->title;
     
     hb_audio_t    * audio;
-    hb_mux_data_t * mux_data;
     int i;
+    AVFormatContext * oc;
+    AVStream *st;
+    AVFormatParameters params;
 
-    /* Create an empty mp4 file */
-    m->file = MP4Create( job->file, MP4_DETAILS_ERROR, 0 );
+    register_protocol(&file_protocol);
+    movenc_init();
 
-    /* Video track */
-    mux_data      = malloc( sizeof( hb_mux_data_t ) );
-    job->mux_data = mux_data;
+    oc = av_alloc_format_context();
 
-    /* When using the standard 90000 timescale, QuickTime tends to have
-       synchronization issues (audio not playing at the correct speed).
-       To workaround this, we use the audio samplerate as the
-       timescale */
-    MP4SetTimeScale( m->file, job->arate );
-
-    if( job->vcodec == HB_VCODEC_X264 )
+    if( job->mux & HB_MUX_PSP )
+    {
+        oc->oformat = guess_format( "psp", NULL, NULL );
+    }
+    else
+    {
+        oc->oformat = guess_format( "mp4", NULL, NULL );
+    }
+    if( !oc->oformat )
     {
-        /* Stolen from mp4creator */
-        MP4SetVideoProfileLevel( m->file, 0x7F );
-
-        mux_data->track = MP4AddH264VideoTrack( m->file, job->arate,
-                MP4_INVALID_DURATION, job->width, job->height,
-                job->config.h264.sps[1], /* AVCProfileIndication */
-                job->config.h264.sps[2], /* profile_compat */
-                job->config.h264.sps[3], /* AVCLevelIndication */
-                3 );      /* 4 bytes length before each NAL unit */
-
-        MP4AddH264SequenceParameterSet( m->file, mux_data->track,
-                job->config.h264.sps, job->config.h264.sps_length );
-        MP4AddH264PictureParameterSet( m->file, mux_data->track,
-                job->config.h264.pps, job->config.h264.pps_length );
+        hb_log( "guess_format failed" );
+        return 1;
     }
-    else /* FFmpeg or XviD */
+    snprintf( oc->filename, sizeof( oc->filename ),
+              "%s", job->file );
+
+    st = av_new_stream( oc, oc->nb_streams );
+    if( !st )
     {
-        MP4SetVideoProfileLevel( m->file, MPEG4_SP_L3 );
-        mux_data->track = MP4AddVideoTrack( m->file, job->arate,
-                MP4_INVALID_DURATION, job->width, job->height,
-                MP4_MPEG4_VIDEO_TYPE );
-
-        /* VOL from FFmpeg or XviD */
-        MP4SetTrackESConfiguration( m->file, mux_data->track,
-                job->config.mpeg4.bytes, job->config.mpeg4.length );
+        hb_log( "av_new_stream failed" );
+        return 1;
     }
+    st->stream_copy = 1;
+    st->codec->flags |= CODEC_FLAG_GLOBAL_HEADER;
+    st->codec->codec_type = CODEC_TYPE_VIDEO;
+    st->codec->codec_id = ( job->vcodec == HB_VCODEC_X264 ) ?
+                            CODEC_ID_H264 : CODEC_ID_MPEG4;
+    st->codec->extradata= job->config.mpeg4.bytes;
+    st->codec->extradata_size= job->config.mpeg4.length;
+    st->codec->bit_rate = 1000 * job->vbitrate;
+    i = ff_gcd( job->vrate_base, job->vrate );
+    st->codec->time_base = (AVRational){ job->vrate_base / i, job->vrate / i };
+
+    st->codec->pix_fmt = PIX_FMT_YUV420P;
+    st->codec->width = job->width;
+    st->codec->height = job->height;
+    st->codec->has_b_frames = 0;
+
+    job->mux_data = malloc( sizeof( hb_mux_data_t ) );
+    job->mux_data->track = 0;
 
     for( i = 0; i < hb_list_count( title->list_audio ); i++ )
     {
         audio = hb_list_item( title->list_audio, i );
-        mux_data = malloc( sizeof( hb_mux_data_t ) );
-        audio->mux_data = mux_data;
-
-        mux_data->track = MP4AddAudioTrack( m->file,
-                job->arate, 1024, MP4_MPEG4_AUDIO_TYPE );
-        MP4SetAudioProfileLevel( m->file, 0x0F );
-        MP4SetTrackESConfiguration( m->file, mux_data->track,
-                audio->config.aac.bytes, audio->config.aac.length );
+
+        audio->mux_data = malloc( sizeof( hb_mux_data_t ) );
+        audio->mux_data->track = i + 1;
+
+        st = av_new_stream( oc, oc->nb_streams );
+        if( !st )
+        {
+            hb_log( "av_new_stream failed" );
+            return 1;
+        }
+        st->stream_copy = 1;
+        st->codec->flags |= CODEC_FLAG_GLOBAL_HEADER;
+        st->codec->codec_type = CODEC_TYPE_AUDIO;
+        st->codec->codec_id = CODEC_ID_AAC;
+        st->codec->bit_rate = 1000 * job->abitrate;
+        st->codec->extradata= audio->config.aac.bytes;
+        st->codec->extradata_size= audio->config.aac.length;
+        st->codec->time_base = (AVRational){ 1, job->arate };
+        st->codec->channels = 2;
+        st->codec->sample_rate = job->arate;
+        st->codec->frame_size = 1024;
+        st->codec->block_align = 0;
     }
 
+    oc->timestamp = 0;
+    if( url_fopen( &oc->pb, job->file, URL_WRONLY ) < 0 )
+    {
+        hb_log( "url_fopen failed (%s)", job->file );
+        return 1;
+    }
+
+    memset( &params, 0, sizeof( params ) );
+    if( av_set_parameters( oc, &params ) < 0 )
+    {
+        hb_log( "av_set_parameters failed" );
+        return 1;
+    }
+
+    oc->packet_size= 0;
+    oc->mux_rate= 0;
+    oc->preload= (int)(0.5*AV_TIME_BASE);
+    oc->max_delay= (int)(0.7*AV_TIME_BASE);
+    oc->loop_output = AVFMT_NOOUTPUTLOOP;
+
+    if( av_write_header( oc ) < 0 )
+    {
+        hb_log( "av_write_header failed" );
+        return 1;
+    }
+
+    m->format = oc;
+
     return 0;
 }
 
 static int MP4Mux( hb_mux_object_t * m, hb_mux_data_t * mux_data,
                    hb_buffer_t * buf )
 {
-    hb_job_t * job = m->job;
+    AVPacket pkt;
+    av_init_packet(&pkt);
 
-    uint64_t duration;
+    pkt.stream_index = mux_data->track;
+    pkt.data         = buf->data;
+    pkt.size         = buf->size;
+    pkt.pts          = buf->start;
 
-    if( mux_data == job->mux_data )
-    {
-        /* Video */
-        /* Because we use the audio samplerate as the timescale,
-           we have to use potentially variable durations so the video
-           doesn't go out of sync */
-        duration    = ( buf->stop * job->arate / 90000 ) - m->sum_dur;
-        m->sum_dur += duration;
-    }
-    else
+    if( buf->key )
     {
-        /* Audio */
-        duration = MP4_INVALID_DURATION;
+        pkt.flags |= PKT_FLAG_KEY;
     }
 
-    MP4WriteSample( m->file, mux_data->track, buf->data, buf->size,
-                    duration, 0, buf->key );
+    av_interleaved_write_frame( m->format, &pkt );
+
     return 0;
 }
 
 static int MP4End( hb_mux_object_t * m )
 {
-#if 0
-    hb_job_t * job = m->job;
-#endif
-    char filename[1024]; memset( filename, 0, 1024 );
-
-    MP4Close( m->file );
-
-#if 0
-    hb_log( "muxmp4: optimizing file" );
-    snprintf( filename, 1024, "%s.tmp", job->file );
-    MP4Optimize( job->file, filename, MP4_DETAILS_ERROR );
-    remove( job->file );
-    rename( filename, job->file );
-#endif
+    av_write_trailer( m->format );
+    url_fclose( &m->format->pb );
+    av_free( m->format );
 
     return 0;
 }
index 2ad4f65..349a630 100644 (file)
@@ -71,6 +71,7 @@ static void do_job( hb_job_t * job, int cpu_count )
     hb_work_object_t * w;
     hb_audio_t   * audio;
     hb_subtitle_t * subtitle;
+    int done;
 
     title = job->title;
 
@@ -229,7 +230,7 @@ static void do_job( hb_job_t * job, int cpu_count )
                                     HB_LOW_PRIORITY );
     }
 
-    int done = 0;
+    done = 0;
     w = hb_list_item( job->list_work, 0 );
     w->init( w, job );
     while( !*job->die )
index b7418f0..ae8fc64 100644 (file)
@@ -9,7 +9,7 @@
                <key>248</key>
                <string>487 424 408 321 0 0 1440 878 </string>
                <key>259</key>
-               <string>417 300 408 508 0 0 1280 832 </string>
+               <string>487 331 408 508 0 0 1440 878 </string>
                <key>29</key>
                <string>33 298 338 44 0 0 1280 832 </string>
                <key>303</key>
@@ -18,6 +18,6 @@
        <key>IBFramework Version</key>
        <string>443.0</string>
        <key>IBSystem Version</key>
-       <string>8H14</string>
+       <string>8G1454</string>
 </dict>
 </plist>
index 34bee0b..960c3e0 100644 (file)
Binary files a/macosx/English.lproj/Express.nib/keyedobjects.nib and b/macosx/English.lproj/Express.nib/keyedobjects.nib differ
index b78bdf8..2ffddf5 100644 (file)
         hb_job_t   * job   = title->job;
 
         int pixels, aspect;
-        if( [fConvertFormatPopUp indexOfSelectedItem] )
+        if( [fConvertFormatPopUp indexOfSelectedItem] == 0 )
         {
+            /* iPod / H.264 */
+            job->mux      = HB_MUX_MP4;
+            job->vcodec   = HB_VCODEC_X264;
+            job->h264_13  = 1;
+            job->vbitrate = 600;
+            pixels        = 76800;
+            aspect        = 4 * HB_ASPECT_BASE / 3;
+        }
+        else if( [fConvertFormatPopUp indexOfSelectedItem] == 1 )
+        {
+            /* iPod / MPEG-4 */
+            job->mux      = HB_MUX_MP4;
             job->vcodec   = HB_VCODEC_FFMPEG;
             job->vbitrate = 1200;
             pixels        = 230400;
+            aspect        = 4 * HB_ASPECT_BASE / 3;
         }
         else
         {
-            job->vcodec   = HB_VCODEC_X264;
-            job->h264_13  = 1;
-            job->vbitrate = 600;
-            pixels        = 76800;
+            /* PSP / MPEG-4 */
+            job->mux        = HB_MUX_PSP;
+            job->vrate      = 27000000;
+            job->vrate_base = 900900;   /* 29.97 fps */
+            job->vcodec     = HB_VCODEC_FFMPEG;
+            job->vbitrate   = 600;
+            pixels          = 76800;
+            job->arate      = 24000;
+            job->abitrate   = 96;
+            aspect          = 16 * HB_ASPECT_BASE / 9;
+
         }
         if( [fConvertAspectPopUp indexOfSelectedItem] )
         {
             aspect = -1;
         }
-        else
-        {
-            aspect = 4 * HB_ASPECT_BASE / 3;
-        }
 
         hb_set_size( job, aspect, pixels );
 
index de53484..e9eeb94 100644 (file)
@@ -7,6 +7,8 @@
        objects = {
 
 /* Begin PBXBuildFile section */
+               4D1125D809D72FD200E0657B /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D1125D709D72FD200E0657B /* libz.dylib */; };
+               4D1125D909D72FD200E0657B /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D1125D709D72FD200E0657B /* libz.dylib */; };
                4D1EA2EA0993B09A00FDC1A2 /* main.mm in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.mm */; };
                4D1EA2F60993B0CA00FDC1A2 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
                4D1EA3010993B13700FDC1A2 /* Express.nib in Resources */ = {isa = PBXBuildFile; fileRef = 4D1EA3000993B13700FDC1A2 /* Express.nib */; };
@@ -73,6 +75,7 @@
                29B97319FDCFA39411CA2CEA /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/MainMenu.nib; sourceTree = "<group>"; };
                29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
                29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
+               4D1125D709D72FD200E0657B /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = /usr/lib/libz.dylib; sourceTree = "<absolute>"; };
                4D118405053054CD00C39CA9 /* HandBrake.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = HandBrake.icns; sourceTree = "<group>"; };
                4D1EA2DA0993B01000FDC1A2 /* HandBrake Express.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "HandBrake Express.app"; sourceTree = BUILT_PRODUCTS_DIR; };
                4D1EA2DC0993B01000FDC1A2 /* Express.plist */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = Express.plist; sourceTree = "<group>"; };
                        files = (
                                4D1EA2F60993B0CA00FDC1A2 /* Cocoa.framework in Frameworks */,
                                4D2AEA1A09CCB332007E18F6 /* IOKit.framework in Frameworks */,
+                               4D1125D909D72FD200E0657B /* libz.dylib in Frameworks */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                                4DD93FA2082036E8008E1322 /* Cocoa.framework in Frameworks */,
                                4DD93FA3082036E8008E1322 /* IOKit.framework in Frameworks */,
                                4DD93FA4082036E8008E1322 /* OpenGL.framework in Frameworks */,
+                               4D1125D809D72FD200E0657B /* libz.dylib in Frameworks */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                29B97323FDCFA39411CA2CEA /* Frameworks */ = {
                        isa = PBXGroup;
                        children = (
+                               4D1125D709D72FD200E0657B /* libz.dylib */,
                                1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
                                4DEB2024052B055F00C39CA9 /* IOKit.framework */,
                                4DDE9724052B7B2B00C39CA9 /* OpenGL.framework */,
                                OTHER_LDFLAGS = (
                                        ../libhb/libhb.a,
                                        ../contrib/lib/liba52.a,
+                                       ../contrib/lib/libavformat.a,
                                        ../contrib/lib/libavcodec.a,
                                        ../contrib/lib/libavutil.a,
                                        ../contrib/lib/libdvdread.a,
                                        ../contrib/lib/libdvdcss.a,
                                        ../contrib/lib/libfaac.a,
                                        ../contrib/lib/libmp3lame.a,
-                                       ../contrib/lib/libmp4v2.a,
                                        ../contrib/lib/libmpeg2.a,
                                        ../contrib/lib/libvorbis.a,
                                        ../contrib/lib/libvorbisenc.a,
                                OTHER_LDFLAGS = (
                                        ../libhb/libhb.a,
                                        ../contrib/lib/liba52.a,
+                                       ../contrib/lib/libavformat.a,
                                        ../contrib/lib/libavcodec.a,
                                        ../contrib/lib/libavutil.a,
                                        ../contrib/lib/libdvdread.a,
                                        ../contrib/lib/libdvdcss.a,
                                        ../contrib/lib/libfaac.a,
                                        ../contrib/lib/libmp3lame.a,
-                                       ../contrib/lib/libmp4v2.a,
                                        ../contrib/lib/libmpeg2.a,
                                        ../contrib/lib/libvorbis.a,
                                        ../contrib/lib/libvorbisenc.a,
                                OTHER_LDFLAGS = (
                                        ../libhb/libhb.a,
                                        ../contrib/lib/liba52.a,
+                                       ../contrib/lib/libavformat.a,
                                        ../contrib/lib/libavcodec.a,
                                        ../contrib/lib/libavutil.a,
                                        ../contrib/lib/libdvdread.a,
                                        ../contrib/lib/libdvdcss.a,
                                        ../contrib/lib/libfaac.a,
                                        ../contrib/lib/libmp3lame.a,
-                                       ../contrib/lib/libmp4v2.a,
                                        ../contrib/lib/libmpeg2.a,
                                        ../contrib/lib/libvorbis.a,
                                        ../contrib/lib/libvorbisenc.a,
                                OTHER_LDFLAGS = (
                                        ../libhb/libhb.a,
                                        ../contrib/lib/liba52.a,
+                                       ../contrib/lib/libavformat.a,
                                        ../contrib/lib/libavcodec.a,
                                        ../contrib/lib/libavutil.a,
                                        ../contrib/lib/libdvdread.a,
                                        ../contrib/lib/libdvdcss.a,
                                        ../contrib/lib/libfaac.a,
                                        ../contrib/lib/libmp3lame.a,
-                                       ../contrib/lib/libmp4v2.a,
                                        ../contrib/lib/libmpeg2.a,
                                        ../contrib/lib/libvorbis.a,
                                        ../contrib/lib/libvorbisenc.a,
                                OTHER_LDFLAGS = (
                                        ../libhb/libhb.a,
                                        ../contrib/lib/liba52.a,
+                                       ../contrib/lib/libavformat.a,
                                        ../contrib/lib/libavcodec.a,
                                        ../contrib/lib/libavutil.a,
                                        ../contrib/lib/libdvdread.a,
                                        ../contrib/lib/libdvdcss.a,
                                        ../contrib/lib/libfaac.a,
                                        ../contrib/lib/libmp3lame.a,
-                                       ../contrib/lib/libmp4v2.a,
                                        ../contrib/lib/libmpeg2.a,
                                        ../contrib/lib/libvorbis.a,
                                        ../contrib/lib/libvorbisenc.a,
                                OTHER_LDFLAGS = (
                                        ../libhb/libhb.a,
                                        ../contrib/lib/liba52.a,
+                                       ../contrib/lib/libavformat.a,
                                        ../contrib/lib/libavcodec.a,
                                        ../contrib/lib/libavutil.a,
                                        ../contrib/lib/libdvdread.a,
                                        ../contrib/lib/libdvdcss.a,
                                        ../contrib/lib/libfaac.a,
                                        ../contrib/lib/libmp3lame.a,
-                                       ../contrib/lib/libmp4v2.a,
                                        ../contrib/lib/libmpeg2.a,
                                        ../contrib/lib/libvorbis.a,
                                        ../contrib/lib/libvorbisenc.a,
                                OTHER_LDFLAGS = (
                                        ../libhb/libhb.a,
                                        ../contrib/lib/liba52.a,
+                                       ../contrib/lib/libavformat.a,
                                        ../contrib/lib/libavcodec.a,
                                        ../contrib/lib/libavutil.a,
                                        ../contrib/lib/libdvdread.a,
                                        ../contrib/lib/libdvdcss.a,
                                        ../contrib/lib/libfaac.a,
                                        ../contrib/lib/libmp3lame.a,
-                                       ../contrib/lib/libmp4v2.a,
                                        ../contrib/lib/libmpeg2.a,
                                        ../contrib/lib/libvorbis.a,
                                        ../contrib/lib/libvorbisenc.a,