X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=macosx%2FHBQueueController.mm;h=45d2f83a5e3e5615191f0d9007aabadacbf509bb;hb=8425b4e14041ee668806cff29e458ae73bcd894f;hp=0e14761281fbfdc960b137fc0b3aaca7e59ce925;hpb=3a728506090f98f9ff06699053eb106f5018b95d;p=handbrake-jp%2Fhandbrake-jp-git.git diff --git a/macosx/HBQueueController.mm b/macosx/HBQueueController.mm index 0e147612..45d2f83a 100644 --- a/macosx/HBQueueController.mm +++ b/macosx/HBQueueController.mm @@ -118,21 +118,21 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe - (void)setQueueArray: (NSMutableArray *)QueueFileArray { [fJobGroups setArray:QueueFileArray]; - + fIsDragging = NO; /* First stop any timer working now */ -[self stopAnimatingCurrentJobGroupInQueue]; - [fOutlineView reloadData]; - - - -/* lets get the stats on the status of the queue array */ - -fEncodingQueueItem = 0; -fPendingCount = 0; -fCompletedCount = 0; -fCanceledCount = 0; -fWorkingCount = 0; - + [self stopAnimatingCurrentJobGroupInQueue]; + [fOutlineView reloadData]; + + + + /* lets get the stats on the status of the queue array */ + + fEncodingQueueItem = 0; + fPendingCount = 0; + fCompletedCount = 0; + fCanceledCount = 0; + fWorkingCount = 0; + /* We use a number system to set the encode status of the queue item * in controller.mm * 0 == already encoded @@ -140,7 +140,7 @@ fWorkingCount = 0; * 2 == is yet to be encoded * 3 == cancelled */ - + int i = 0; NSEnumerator *enumerator = [fJobGroups objectEnumerator]; id tempObject; @@ -166,16 +166,16 @@ fWorkingCount = 0; } i++; } - -/* We should fire up the encoding timer here based on fWorkingCount */ - -if (fWorkingCount > 0) -{ - /* we have an encoding job so, lets start the animation timer */ - [self startAnimatingCurrentWorkingEncodeInQueue]; -} - -/* Set the queue status field in the queue window */ + + /* We should fire up the encoding timer here based on fWorkingCount */ + + if (fWorkingCount > 0) + { + /* we have an encoding job so, lets start the animation timer */ + [self startAnimatingCurrentWorkingEncodeInQueue]; + } + + /* Set the queue status field in the queue window */ NSMutableString * string; if (fPendingCount == 1) { @@ -186,7 +186,16 @@ if (fWorkingCount > 0) string = [NSMutableString stringWithFormat: NSLocalizedString( @"%d encode(s) pending", @"" ), fPendingCount]; } [fQueueCountField setStringValue:string]; - + +} +/* This method sets the status string in the queue window + * and is called from Controller.mm (fHBController) + * instead of running another timer here polling libhb + * for encoding status + */ +- (void)setQueueStatusString: (NSString *)statusString +{ +[fProgressTextField setStringValue:statusString]; } //------------------------------------------------------------------------------------ @@ -476,7 +485,11 @@ if (fWorkingCount > 0) if ([[[fJobGroups objectAtIndex:row] objectForKey:@"Status"] intValue] == 1) { - NSString * alertTitle = [NSString stringWithFormat:NSLocalizedString(@"Stop This Encode and Remove It ?", nil)]; + /* We pause the encode here so that it doesn't finish right after and then + * screw up the sync while the window is open + */ + [fHBController Pause:NULL]; + NSString * alertTitle = [NSString stringWithFormat:NSLocalizedString(@"Stop This Encode and Remove It ?", nil)]; // Which window to attach the sheet to? NSWindow * docWindow; if ([sender respondsToSelector: @selector(window)]) @@ -503,6 +516,13 @@ if (fWorkingCount > 0) - (void) didDimissCancelCurrentJob: (NSWindow *)sheet returnCode: (int)returnCode contextInfo: (void *)contextInfo { + /* We resume encoding and perform the appropriate actions + * Note: Pause: is a toggle type method based on hb's current + * state, if it paused, it will resume encoding and vice versa. + * In this case, we are paused from the calling window, so calling + * [fHBController Pause:NULL]; Again will resume encoding + */ + [fHBController Pause:NULL]; if (returnCode == NSAlertOtherReturn) { /* We need to save the currently encoding item number first */ @@ -688,16 +708,11 @@ if (fWorkingCount > 0) return YES; } -- (BOOL)outlineView:(NSOutlineView *)fOutlineView shouldExpandItem:(id)item +- (BOOL)outlineView:(NSOutlineView *)outlineView shouldExpandItem:(id)item { // Our outline view has no levels, but we can still expand every item. Doing so // just makes the row taller. See heightOfRowByItem below. - - // Don't autoexpand while dragging, since we can't drop into the items - // return ![(HBQueueOutlineView*)fOutlineView isDragging]; - - return YES; //<-- Needs to be YES to allow expanding - +return ![(HBQueueOutlineView*)outlineView isDragging]; } - (NSInteger)outlineView:(NSOutlineView *)fOutlineView numberOfChildrenOfItem:(id)item @@ -859,7 +874,10 @@ if (fWorkingCount > 0) [finalString appendString:[NSString stringWithFormat:@"%@", [item objectForKey:@"SourceName"]] withAttributes:titleAttr]; - summaryInfo = [NSString stringWithFormat: @" (%@, %@, %@)", titleString, chapterString, passesString]; + /* lets add the output file name to the title string here */ + NSString * outputFilenameString = [[item objectForKey:@"DestinationPath"] lastPathComponent]; + + summaryInfo = [NSString stringWithFormat: @" (%@, %@, %@) -> %@", titleString, chapterString, passesString, outputFilenameString]; [finalString appendString:[NSString stringWithFormat:@"%@\n", summaryInfo] withAttributes:detailAttr]; @@ -887,6 +905,15 @@ if (fWorkingCount > 0) [item objectForKey:@"Audio1Mixdown"] , [item objectForKey:@"Audio1Samplerate"], [item objectForKey:@"Audio1Bitrate"]]; + + if ([[item objectForKey:@"Audio1TrackDRCSlider"] floatValue] > 1.00) + { + audioDetail1 = [NSString stringWithFormat:@"%@, DRC: %@",audioDetail1,[item objectForKey:@"Audio1TrackDRCSlider"]]; + } + else + { + audioDetail1 = [NSString stringWithFormat:@"%@, DRC: Off",audioDetail1]; + } } if ([[item objectForKey:@"Audio2Track"] intValue] > 0) @@ -898,6 +925,15 @@ if (fWorkingCount > 0) [item objectForKey:@"Audio2Mixdown"] , [item objectForKey:@"Audio2Samplerate"], [item objectForKey:@"Audio2Bitrate"]]; + + if ([[item objectForKey:@"Audio2TrackDRCSlider"] floatValue] > 1.00) + { + audioDetail2 = [NSString stringWithFormat:@"%@, DRC: %@",audioDetail2,[item objectForKey:@"Audio2TrackDRCSlider"]]; + } + else + { + audioDetail2 = [NSString stringWithFormat:@"%@, DRC: Off",audioDetail2]; + } } if ([[item objectForKey:@"Audio3Track"] intValue] > 0) @@ -909,7 +945,17 @@ if (fWorkingCount > 0) [item objectForKey:@"Audio3Mixdown"] , [item objectForKey:@"Audio3Samplerate"], [item objectForKey:@"Audio3Bitrate"]]; + + if ([[item objectForKey:@"Audio3TrackDRCSlider"] floatValue] > 1.00) + { + audioDetail3 = [NSString stringWithFormat:@"%@, DRC: %@",audioDetail3,[item objectForKey:@"Audio3TrackDRCSlider"]]; + } + else + { + audioDetail3 = [NSString stringWithFormat:@"%@, DRC: Off",audioDetail3]; + } } + if ([[item objectForKey:@"Audio4Track"] intValue] > 0) { audioCodecSummary = [NSString stringWithFormat:@"%@, %@",audioCodecSummary ,[item objectForKey:@"Audio3Encoder"]]; @@ -919,6 +965,15 @@ if (fWorkingCount > 0) [item objectForKey:@"Audio4Mixdown"] , [item objectForKey:@"Audio4Samplerate"], [item objectForKey:@"Audio4Bitrate"]]; + + if ([[item objectForKey:@"Audio4TrackDRCSlider"] floatValue] > 1.00) + { + audioDetail4 = [NSString stringWithFormat:@"%@, DRC: %@",audioDetail4,[item objectForKey:@"Audio4TrackDRCSlider"]]; + } + else + { + audioDetail4 = [NSString stringWithFormat:@"%@, DRC: Off",audioDetail4]; + } } NSString * jobFormatInfo; @@ -939,18 +994,18 @@ if (fWorkingCount > 0) if( [[item objectForKey:@"Mp4LargeFile"] intValue] == 1) { mp4OptsPresent = YES; - MP4Opts = [MP4Opts stringByAppendingString:@" - 64 Bit"]; + MP4Opts = [MP4Opts stringByAppendingString:@" - Large file size"]; } if( [[item objectForKey:@"Mp4HttpOptimize"] intValue] == 1) { mp4OptsPresent = YES; - MP4Opts = [MP4Opts stringByAppendingString:@" - Http Optimized"]; + MP4Opts = [MP4Opts stringByAppendingString:@" - Web optimized"]; } if( [[item objectForKey:@"Mp4iPodCompatible"] intValue] == 1) { mp4OptsPresent = YES; - MP4Opts = [MP4Opts stringByAppendingString:@" - iPod Atom "]; + MP4Opts = [MP4Opts stringByAppendingString:@" - iPod 5G support "]; } if (mp4OptsPresent == YES) { @@ -980,7 +1035,7 @@ if (fWorkingCount > 0) [finalString appendString: pictureInfo withAttributes:detailAttr]; [finalString appendString:@"\n" withAttributes:detailAttr]; - /* Optional String for mp4 options */ + /* Optional String for Picture Filters */ NSString * pictureFilters = @""; BOOL pictureFiltersPresent = NO; @@ -1006,15 +1061,15 @@ if (fWorkingCount > 0) pictureFiltersPresent = YES; if ([[item objectForKey:@"PictureDeinterlace"] intValue] == 1) { - pictureFilters = [pictureFilters stringByAppendingString:@" - Decomb: Fast "]; + pictureFilters = [pictureFilters stringByAppendingString:@" - Deinterlace: Fast "]; } else if ([[item objectForKey:@"PictureDeinterlace"] intValue] == 2) { - pictureFilters = [pictureFilters stringByAppendingString:@" - Decomb: Slow "]; + pictureFilters = [pictureFilters stringByAppendingString:@" - Deinterlace: Slow "]; } else if ([[item objectForKey:@"PictureDeinterlace"] intValue] == 3) { - pictureFilters = [pictureFilters stringByAppendingString:@" - Decomb: Slower "]; + pictureFilters = [pictureFilters stringByAppendingString:@" - Deinterlace: Slower "]; } } @@ -1035,9 +1090,10 @@ if (fWorkingCount > 0) } } - if ([[item objectForKey:@"PictureDeblock"] intValue] == 1) + if ([[item objectForKey:@"PictureDeblock"] intValue] != 0) { - pictureFilters = [pictureFilters stringByAppendingString:@" - Deblock "]; + pictureFiltersPresent = YES; + pictureFilters = [pictureFilters stringByAppendingString: [NSString stringWithFormat:@" - Deblock (pp7) (%d) ",[[item objectForKey:@"PictureDeblock"] intValue]]]; } if (pictureFiltersPresent == YES) { @@ -1046,16 +1102,33 @@ if (fWorkingCount > 0) [finalString appendString:@"\n" withAttributes:detailAttr]; } - /* Sixth Line Video Details*/ - NSString * videoInfo; videoInfo = [NSString stringWithFormat:@"Encoder: %@", [item objectForKey:@"VideoEncoder"]]; - videoInfo = [NSString stringWithFormat:@"%@ Framerate: %@", videoInfo ,[item objectForKey:@"VideoFramerate"]]; + + /* for framerate look to see if we are using vfr detelecine */ + if ([[item objectForKey:@"JobIndexVideoFramerate"] intValue] == 0) + { + if ([[item objectForKey:@"PictureDetelecine"] intValue] == 1) + { + /* we are using same as source with vfr detelecine */ + videoInfo = [NSString stringWithFormat:@"%@ Framerate: Same as source (vfr detelecine)", videoInfo]; + } + else + { + /* we are using a variable framerate without dropping frames */ + videoInfo = [NSString stringWithFormat:@"%@ Framerate: Same as source (variable)", videoInfo]; + } + } + else + { + /* we have a specified, constant framerate */ + videoInfo = [NSString stringWithFormat:@"%@ Framerate: %@ (constant framerate)", videoInfo ,[item objectForKey:@"VideoFramerate"]]; + } if ([[item objectForKey:@"VideoQualityType"] intValue] == 0)// Target Size MB { - videoInfo = [NSString stringWithFormat:@"%@ Target Size: %@(MB)", videoInfo ,[item objectForKey:@"VideoTargetSize"]]; + videoInfo = [NSString stringWithFormat:@"%@ Target Size: %@(MB) (%d(kbps) abr)", videoInfo ,[item objectForKey:@"VideoTargetSize"],[[item objectForKey:@"VideoAvgBitrate"] intValue]]; } else if ([[item objectForKey:@"VideoQualityType"] intValue] == 1) // ABR { @@ -1093,14 +1166,8 @@ if (fWorkingCount > 0) [finalString appendString: @"Audio Track 4: " withAttributes:detailBoldAttr]; [finalString appendString: audioDetail4 withAttributes:detailAttr]; - //[finalString appendString:@"\n" withAttributes:detailAttr]; - return finalString; - - - - } else if ([[tableColumn identifier] isEqualToString:@"icon"]) { @@ -1215,15 +1282,17 @@ if (fWorkingCount > 0) // Don't allow dropping ONTO an item since they can't really contain any children. BOOL isOnDropTypeProposal = index == NSOutlineViewDropOnItemIndex; if (isOnDropTypeProposal) + { return NSDragOperationNone; - + } + // Don't allow dropping INTO an item since they can't really contain any children. if (item != nil) { index = [fOutlineView rowForItem: item] + 1; item = nil; } - + // NOTE: Should we allow dropping a pending job *above* the // finished or already encoded jobs ? // We do not let the user drop a pending job before or *above* @@ -1234,7 +1303,6 @@ if (fWorkingCount > 0) index = MAX (index, fEncodingQueueItem); } - [outlineView setDropItem:item dropChildIndex:index]; return NSDragOperationGeneric; } @@ -1251,43 +1319,13 @@ if (fWorkingCount > 0) { [moveItems addIndex:[fJobGroups indexOfObject:obj]]; } - // Successful drop, we use moveObjectsInQueueArray:... in fHBController // to properly rearrange the queue array, save it to plist and then send it back here. // since Controller.mm is handling all queue array manipulation. // We *could do this here, but I think we are better served keeping that code together. - [fHBController moveObjectsInQueueArray:fJobGroups fromIndexes:moveItems toIndex: index]; + [fHBController moveObjectsInQueueArray:fJobGroups fromIndexes:moveItems toIndex: index]; return YES; } -- (void)moveObjectsInQueueArray:(NSMutableArray *)array fromIndexes:(NSIndexSet *)indexSet toIndex:(unsigned)insertIndex -{ - unsigned index = [indexSet lastIndex]; - unsigned aboveInsertIndexCount = 0; - - while (index != NSNotFound) - { - unsigned removeIndex; - - if (index >= insertIndex) - { - removeIndex = index + aboveInsertIndexCount; - aboveInsertIndexCount++; - } - else - { - removeIndex = index; - insertIndex--; - } - - id object = [[array objectAtIndex:removeIndex] retain]; - [array removeObjectAtIndex:removeIndex]; - [array insertObject:object atIndex:insertIndex]; - [object release]; - - index = [indexSet indexLessThanIndex:index]; - } -} - @end