OSDN Git Service

WinGui:
[handbrake-jp/handbrake-jp-git.git] / macosx / ExpressController.m
index 5121f91..c22912e 100644 (file)
                  titleOfSelectedItem]] UTF8String], 0 );
     }
 
-    NSTimer * timer = [NSTimer scheduledTimerWithTimeInterval: 0.5
+    NSTimer * timer = [NSTimer scheduledTimerWithTimeInterval: 2.0
         target: self selector: @selector( openTimer: ) userInfo: nil
         repeats: YES];
 }
         hb_title_t * title = hb_list_item( fList, i );
         hb_job_t   * job   = title->job;
 
-        int pixels, aspect;
+        int pixels = 307200;
+               int aspect = title->aspect;
+               if( [fConvertAspectPopUp indexOfSelectedItem] == 1)
+               {
+            aspect = 4 * HB_ASPECT_BASE / 3;
+               }
+
+               int maxwidth = 640;
+               job->vbitrate = 1000;
+               if( [fConvertMaxWidthPopUp indexOfSelectedItem] == 1)
+               {
+            maxwidth = 320;
+                       job->vbitrate = 500;
+               }
+               job->deinterlace = 1;
+               
+               do
+               {
+                       hb_set_size( job, aspect, pixels );
+                       pixels -= 10;
+               } while(job->width > maxwidth);
+               
         if( [fConvertFormatPopUp indexOfSelectedItem] == 0 )
         {
             /* iPod / H.264 */
-            job->mux      = HB_MUX_MP4;
+            job->mux      = HB_MUX_IPOD;
             job->vcodec   = HB_VCODEC_X264;
-            job->h264_13  = 1;
-            job->vbitrate = 600;
-            pixels        = 76800;
-            aspect        = 4 * HB_ASPECT_BASE / 3;
+                       job->h264_level = 30;
         }
         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->abitrate   = 96;
             aspect          = 16 * HB_ASPECT_BASE / 9;
 
-        }
-        if( [fConvertAspectPopUp indexOfSelectedItem] )
-        {
-            aspect = -1;
-        }
+                       if( [fConvertAspectPopUp indexOfSelectedItem] )
+                       {
+                               aspect = -1;
+                       }
 
-        hb_set_size( job, aspect, pixels );
+                       hb_set_size( job, aspect, pixels );
+        }
 
         job->vquality = -1.0;
 
         }
         job->audios[1] = -1;
 
+        job->audio_mixdowns[0] = HB_AMIXDOWN_DOLBYPLII;
+        
         /* Subtitle selection */
         hb_subtitle_t * subtitle;
         lang = [[fConvertSubtitlePopUp titleOfSelectedItem] UTF8String];
             }
         }
         
-        job->file = strdup( [[NSString stringWithFormat:
-            @"%@/%p - Title %d.mp4", fConvertFolderString, self,
-            title->index] UTF8String] );
+        job->file = strdup( [[NSString stringWithFormat:                 
+                @"%@/%s - Title %d.m4v", fConvertFolderString,      
+                title->name, title->index] UTF8String] );
         hb_add( fHandle, job );
     }
 
     hb_start( fHandle );
 
-    NSTimer * timer = [NSTimer scheduledTimerWithTimeInterval: 0.5
+    NSTimer * timer = [NSTimer scheduledTimerWithTimeInterval: 2.0
         target: self selector: @selector( convertTimer: ) userInfo: nil
         repeats: YES];
 
 - (void) convertCancel: (id) sender
 {
     hb_stop( fHandle );
-    [fConvertGoButton setEnabled: NO];
+    [self convertEnable: YES];
 }
 
 @end
             [fConvertAudioPopUp addItemWithTitle:
                 [NSString stringWithUTF8String: audio->lang_simple]];
         }
+               [fConvertAudioPopUp selectItemWithTitle: @"English"];
 
         /* Update subtitle popup */
         hb_subtitle_t * subtitle;
     [fConvertFolderPopUp setEnabled: b];
     [fConvertFormatPopUp setEnabled: b];
     [fConvertAspectPopUp setEnabled: b];
+    [fConvertMaxWidthPopUp setEnabled: b];
     [fConvertAudioPopUp setEnabled: b];
     [fConvertSubtitlePopUp setEnabled: b];
     [fConvertOpenButton setEnabled: b];
     }
 }
 
+/***********************************************************************
+* UpdateDockIcon
+***********************************************************************
+* Shows a progression bar on the dock icon, filled according to
+* 'progress' (0.0 <= progress <= 1.0).
+* Called with progress < 0.0 or progress > 1.0, restores the original
+* icon.
+**********************************************************************/
+- (void) UpdateDockIcon: (float) progress
+{
+    NSImage * icon;
+    NSData * tiff;
+    NSBitmapImageRep * bmp;
+    uint32_t * pen;
+    uint32_t black = htonl( 0x000000FF );
+    uint32_t red   = htonl( 0xFF0000FF );
+    uint32_t white = htonl( 0xFFFFFFFF );
+    int row_start, row_end;
+    int i, j;
+       
+    /* Get application original icon */
+    icon = [NSImage imageNamed: @"NSApplicationIcon"];
+       
+    if( progress < 0.0 || progress > 1.0 )
+    {
+        [NSApp setApplicationIconImage: icon];
+        return;
+    }
+       
+    /* Get it in a raw bitmap form */
+    tiff = [icon TIFFRepresentationUsingCompression:
+                                          NSTIFFCompressionNone factor: 1.0];
+    bmp = [NSBitmapImageRep imageRepWithData: tiff];
+    
+    /* Draw the progression bar */
+    /* It's pretty simple (ugly?) now, but I'm no designer */
+       
+    row_start = 3 * (int) [bmp size].height / 4;
+    row_end   = 7 * (int) [bmp size].height / 8;
+       
+    for( i = row_start; i < row_start + 2; i++ )
+    {
+        pen = (uint32_t *) ( [bmp bitmapData] + i * [bmp bytesPerRow] );
+        for( j = 0; j < (int) [bmp size].width; j++ )
+        {
+            pen[j] = black;
+        }
+    }
+    for( i = row_start + 2; i < row_end - 2; i++ )
+    {
+        pen = (uint32_t *) ( [bmp bitmapData] + i * [bmp bytesPerRow] );
+        pen[0] = black;
+        pen[1] = black;
+        for( j = 2; j < (int) [bmp size].width - 2; j++ )
+        {
+            if( j < 2 + (int) ( ( [bmp size].width - 4.0 ) * progress ) )
+            {
+                pen[j] = red;
+            }
+            else
+            {
+                pen[j] = white;
+            }
+        }
+        pen[j]   = black;
+        pen[j+1] = black;
+    }
+    for( i = row_end - 2; i < row_end; i++ )
+    {
+        pen = (uint32_t *) ( [bmp bitmapData] + i * [bmp bytesPerRow] );
+        for( j = 0; j < (int) [bmp size].width; j++ )
+        {
+            pen[j] = black;
+        }
+    }
+       
+    /* Now update the dock icon */
+    tiff = [bmp TIFFRepresentationUsingCompression:
+                                         NSTIFFCompressionNone factor: 1.0];
+    icon = [[NSImage alloc] initWithData: tiff];
+    [NSApp setApplicationIconImage: icon];
+    [icon release];
+}
+
 - (void) convertTimer: (NSTimer *) timer
 {
     hb_state_t s;
 #define p s.param.working
         case HB_STATE_WORKING:
         {
+            float progress_total = ( p.progress + p.job_cur - 1 ) / p.job_count;
             NSMutableString * string = [NSMutableString
                 stringWithFormat: @"Converting: %.1f %%",
-                100.0 * p.progress];
+                100.0 * progress_total];
             if( p.seconds > -1 )
             {
                 [string appendFormat: @" (%.1f fps, ", p.rate_avg];
             }
             [fConvertInfoString setStringValue: string];
             [fConvertIndicator setIndeterminate: NO];
-            [fConvertIndicator setDoubleValue: 100.0 * p.progress];
+            [fConvertIndicator setDoubleValue: 100.0 * progress_total];
+            [self UpdateDockIcon: progress_total];
+                       break;
+        }
+#undef p
+
+#define p s.param.muxing
+        case HB_STATE_MUXING:
+        {
+            NSMutableString * string = [NSMutableString
+                stringWithFormat: @"Muxing..."];
+            [fConvertInfoString setStringValue: string];
+            [fConvertIndicator setIndeterminate: YES];
+            [fConvertIndicator startAnimation: nil];
+            [self UpdateDockIcon: 1.0];
             break;
         }
 #undef p
 
         case HB_STATE_WORKDONE:
-            [timer invalidate];
-            [fConvertInfoString setStringValue: @"Done."];
+               {
+                       [timer invalidate];
             [fConvertIndicator setIndeterminate: NO];
             [fConvertIndicator setDoubleValue: 0.0];
+            [self UpdateDockIcon: -1.0];
             [self convertEnable: YES];
+                       
+#define p s.param.workdone
+                       switch(p.error)
+                       {
+                               case HB_ERROR_NONE:
+                                       [fConvertInfoString setStringValue: @"Done."];
+                                       break;
+                               case HB_ERROR_CANCELED:
+                                       [fConvertInfoString setStringValue: @"Canceled."];
+                                       break;
+                               case HB_ERROR_UNKNOWN:
+                                       [fConvertInfoString setStringValue: @"Unknown Error."];
+                                       break;
+                       }
+#undef p
 
-            hb_job_t * job;
+                       hb_job_t * job;
             while( ( job = hb_job( fHandle, 0 ) ) )
             {
                 hb_rem( fHandle, job );
             }
-            break;
-
+                       break;
+               }
         default:
             break;
     }