- (void)awakeFromNib
{
- [_window setTitle: _NS("Convert & Save")];
- [_ok_btn setTitle: _NS("Save")];
+ [_window setTitle: _NS("Convert & Stream")];
+ [_ok_btn setTitle: _NS("Go!")];
[_drop_lbl setStringValue: _NS("Drop media here")];
[_drop_btn setTitle: _NS("Open media...")];
[_profile_lbl setStringValue: _NS("Choose Profile")];
[_customize_aud_codec_lbl setStringValue: _NS("Codec")];
[_customize_aud_bitrate_lbl setStringValue: _NS("Bitrate")];
[_customize_aud_channels_lbl setStringValue: _NS("Channels")];
- [_customize_aud_samplerate_lbl setStringValue: _NS("Sample Rate")];
+ [_customize_aud_samplerate_lbl setStringValue: _NS("Samplerate")];
[_customize_subs_ckb setTitle: _NS("Subtitles")];
[_customize_subs_overlay_ckb setTitle: _NS("Overlay subtitles on the video")];
- [_stream_ok_btn setTitle:_NS("Close")];
+ [_stream_ok_btn setTitle:_NS("OK")];
[_stream_destination_lbl setStringValue:_NS("Stream Destination")];
[_stream_announcement_lbl setStringValue:_NS("Stream Announcement")];
[_stream_type_lbl setStringValue:_NS("Type")];
[self setProfileNames: [defaults arrayForKey:@"CASProfileNames"]];
[self recreateProfilePopup];
- _videoCodecs = [[NSArray alloc] initWithObjects:
- [NSArray arrayWithObjects:@"MPEG-1", @"MPEG-2", @"MPEG-4", @"DIVX 1", @"DIVX 2", @"DIVX 3", @"H.263", @"H.264", @"VP8", @"WMV1", @"WMV2", @"M-JPEG", @"Theora", @"Dirac", nil],
- [NSArray arrayWithObjects:@"mpgv", @"mp2v", @"mp4v", @"DIV1", @"DIV2", @"DIV3", @"H263", @"h264", @"VP80", @"WMV1", @"WMV2", @"MJPG", @"theo", @"drac", nil],
- nil];
- _audioCodecs = [[NSArray alloc] initWithObjects:
- [NSArray arrayWithObjects:@"MPEG Audio", @"MP3", @"MPEG 4 Audio (AAC)", @"A52/AC-3", @"Vorbis", @"Flac", @"Speex", @"WAV", @"WMA2", nil],
- [NSArray arrayWithObjects:@"mpga", @"mp3", @"mp4a", @"a52", @"vorb", @"flac", @"spx", @"s16l", @"wma2", nil],
- nil];
- _subsCodecs = [[NSArray alloc] initWithObjects:
- [NSArray arrayWithObjects:@"DVB subtitle", @"T.140", nil],
- [NSArray arrayWithObjects:@"dvbs", @"t140", nil],
- nil];
+ _videoCodecs = @[@[@"MPEG-1", @"MPEG-2", @"MPEG-4", @"DIVX 1", @"DIVX 2", @"DIVX 3", @"H.263", @"H.264", @"VP8", @"WMV1", @"WMV2", @"M-JPEG", @"Theora", @"Dirac"],
+ @[@"mpgv", @"mp2v", @"mp4v", @"DIV1", @"DIV2", @"DIV3", @"H263", @"h264", @"VP80", @"WMV1", @"WMV2", @"MJPG", @"theo", @"drac"]];
+ _audioCodecs = @[@[@"MPEG Audio", @"MP3", @"MPEG 4 Audio (AAC)", @"A52/AC-3", @"Vorbis", @"Flac", @"Speex", @"WAV", @"WMA2"],
+ @[@"mpga", @"mp3", @"mp4a", @"a52", @"vorb", @"flac", @"spx", @"s16l", @"wma2"]];
+ _subsCodecs = @[@[@"DVB subtitle", @"T.140"],
+ @[@"dvbs", @"t140"]];
[_customize_vid_codec_pop removeAllItems];
[_customize_vid_scale_pop removeAllItems];
[_customize_aud_samplerate_pop removeAllItems];
[_customize_subs_pop removeAllItems];
- [_customize_vid_codec_pop addItemsWithTitles:[_videoCodecs objectAtIndex:0]];
- [_customize_aud_codec_pop addItemsWithTitles:[_audioCodecs objectAtIndex:0]];
- [_customize_subs_pop addItemsWithTitles:[_subsCodecs objectAtIndex:0]];
+ [_customize_vid_codec_pop addItemsWithTitles:_videoCodecs[0]];
+ [_customize_aud_codec_pop addItemsWithTitles:_audioCodecs[0]];
+ [_customize_subs_pop addItemsWithTitles:_subsCodecs[0]];
[_customize_aud_samplerate_pop addItemWithTitle:@"8000"];
[_customize_aud_samplerate_pop addItemWithTitle:@"11025"];
[_ok_btn setEnabled: NO];
- [self resetCustomizationSheetBasedOnProfile:[self.profileValueList objectAtIndex:0]];
+ [self resetCustomizationSheetBasedOnProfile:self.profileValueList[0]];
}
# pragma mark -
{
if (b_streaming) {
if ([[[_stream_type_pop selectedItem] title] isEqualToString:@"HTTP"]) {
- NSString *muxformat = [self.currentProfile objectAtIndex:0];
+ NSString *muxformat = self.currentProfile[0];
if ([muxformat isEqualToString:@"wav"] || [muxformat isEqualToString:@"mov"] || [muxformat isEqualToString:@"mp4"] || [muxformat isEqualToString:@"mkv"]) {
NSBeginInformationalAlertSheet(_NS("Invalid container format for HTTP streaming"), _NS("OK"), @"", @"", _window,
- nil, nil, nil, nil, @"%@",
+ nil, nil, nil, nil,
_NS("Media encapsulated as %@ cannot be streamed through the HTTP protocol for technical reasons."),
[[self currentEncapsulationFormatAsFileExtension:YES] uppercaseString]);
return;
[openPanel beginSheetModalForWindow:_window completionHandler:^(NSInteger returnCode) {
if (returnCode == NSOKButton)
{
- [self setMRL: [NSString stringWithUTF8String:vlc_path2uri([[[openPanel URL] path] UTF8String], NULL)]];
+ [self setMRL: @(vlc_path2uri([[[openPanel URL] path] UTF8String], NULL))];
[self updateOKButton];
[self updateDropView];
}
{
NSUInteger index = [_profile_pop indexOfSelectedItem];
if (index < ([self.profileValueList count] - 1))
- [self resetCustomizationSheetBasedOnProfile:[self.profileValueList objectAtIndex:index]];
+ [self resetCustomizationSheetBasedOnProfile:self.profileValueList[index]];
}
- (IBAction)customizeProfile:(id)sender
[saveFilePanel setCanSelectHiddenExtension: YES];
[saveFilePanel setCanCreateDirectories: YES];
if ([[_customize_encap_matrix selectedCell] tag] != RAW) // there is no clever guess for this
- [saveFilePanel setAllowedFileTypes:[NSArray arrayWithObject:[self currentEncapsulationFormatAsFileExtension:YES]]];
+ [saveFilePanel setAllowedFileTypes:@[[self currentEncapsulationFormatAsFileExtension:YES]]];
[saveFilePanel beginSheetModalForWindow:_window completionHandler:^(NSInteger returnCode) {
if (returnCode == NSOKButton) {
[self setOutputDestination:[[saveFilePanel URL] path]];
NSSavePanel * saveFilePanel = [NSSavePanel savePanel];
[saveFilePanel setCanSelectHiddenExtension: YES];
[saveFilePanel setCanCreateDirectories: YES];
- [saveFilePanel setAllowedFileTypes:[NSArray arrayWithObject:@"sdp"]];
+ [saveFilePanel setAllowedFileTypes:@[@"sdp"]];
[saveFilePanel beginSheetModalForWindow:_stream_panel completionHandler:^(NSInteger returnCode) {
if (returnCode == NSOKButton)
[_stream_sdp_fld setStringValue:[[saveFilePanel URL] path]];
- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender
{
NSPasteboard *paste = [sender draggingPasteboard];
- NSArray *types = [NSArray arrayWithObjects: NSFilenamesPboardType, @"VLCPlaylistItemPboardType", nil];
+ NSArray *types = @[NSFilenamesPboardType, @"VLCPlaylistItemPboardType"];
NSString *desired_type = [paste availableTypeFromArray: types];
NSData *carried_data = [paste dataForType: desired_type];
NSArray *values = [[paste propertyListForType: NSFilenamesPboardType] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
if ([values count] > 0) {
- [self setMRL: [NSString stringWithUTF8String:vlc_path2uri([[values objectAtIndex:0] UTF8String], NULL)]];
+ [self setMRL: @(vlc_path2uri([values[0] UTF8String], NULL))];
[self updateOKButton];
[self updateDropView];
return YES;
PL_LOCK;
/* let's look for the first proper input item */
for (NSUInteger x = 0; x < count; x++) {
- p_item = [[array objectAtIndex:x] pointerValue];
+ p_item = [array[x] pointerValue];
if (p_item) {
if (p_item->p_input) {
if (p_item->p_input->psz_uri != nil) {
return;
}
- [self selectCellByEncapsulationFormat:[components objectAtIndex:0]];
- [_customize_vid_ckb setState:[[components objectAtIndex:1] intValue]];
- [_customize_aud_ckb setState:[[components objectAtIndex:2] intValue]];
- [_customize_subs_ckb setState:[[components objectAtIndex:3] intValue]];
- [_customize_vid_bitrate_fld setStringValue:[components objectAtIndex:5]];
- [_customize_vid_scale_pop selectItemWithTitle:[components objectAtIndex:6]];
- [_customize_vid_framerate_fld setStringValue:[components objectAtIndex:7]];
- [_customize_vid_width_fld setStringValue:[components objectAtIndex:8]];
- [_customize_vid_height_fld setStringValue:[components objectAtIndex:9]];
- [_customize_aud_bitrate_fld setStringValue:[components objectAtIndex:11]];
- [_customize_aud_channels_fld setStringValue:[components objectAtIndex:12]];
- [_customize_aud_samplerate_pop selectItemWithTitle:[components objectAtIndex:13]];
- [_customize_subs_overlay_ckb setState:[[components objectAtIndex:15] intValue]];
+ [self selectCellByEncapsulationFormat:components[0]];
+ [_customize_vid_ckb setState:[components[1] intValue]];
+ [_customize_aud_ckb setState:[components[2] intValue]];
+ [_customize_subs_ckb setState:[components[3] intValue]];
+ [_customize_vid_bitrate_fld setStringValue:components[5]];
+ [_customize_vid_scale_pop selectItemWithTitle:components[6]];
+ [_customize_vid_framerate_fld setStringValue:components[7]];
+ [_customize_vid_width_fld setStringValue:components[8]];
+ [_customize_vid_height_fld setStringValue:components[9]];
+ [_customize_aud_bitrate_fld setStringValue:components[11]];
+ [_customize_aud_channels_fld setStringValue:components[12]];
+ [_customize_aud_samplerate_pop selectItemWithTitle:components[13]];
+ [_customize_subs_overlay_ckb setState:[components[15] intValue]];
/* since there is no proper lookup mechanism in arrays, we need to implement a string specific one ourselves */
- NSArray * tempArray = [_videoCodecs objectAtIndex:1];
+ NSArray * tempArray = _videoCodecs[1];
NSUInteger count = [tempArray count];
- NSString * searchString = [components objectAtIndex:4];
+ NSString * searchString = components[4];
if ([searchString isEqualToString:@"none"] || [searchString isEqualToString:@"0"]) {
[_customize_vid_codec_pop selectItemAtIndex:-1];
} else {
for (NSUInteger x = 0; x < count; x++) {
- if ([[tempArray objectAtIndex:x] isEqualToString: searchString]) {
+ if ([tempArray[x] isEqualToString: searchString]) {
[_customize_vid_codec_pop selectItemAtIndex:x];
break;
}
}
}
- tempArray = [_audioCodecs objectAtIndex:1];
+ tempArray = _audioCodecs[1];
count = [tempArray count];
- searchString = [components objectAtIndex:10];
+ searchString = components[10];
if ([searchString isEqualToString:@"none"] || [searchString isEqualToString:@"0"]) {
[_customize_aud_codec_pop selectItemAtIndex:-1];
} else {
for (NSUInteger x = 0; x < count; x++) {
- if ([[tempArray objectAtIndex:x] isEqualToString: searchString]) {
+ if ([tempArray[x] isEqualToString: searchString]) {
[_customize_aud_codec_pop selectItemAtIndex:x];
break;
}
}
}
- tempArray = [_subsCodecs objectAtIndex:1];
+ tempArray = _subsCodecs[1];
count = [tempArray count];
- searchString = [components objectAtIndex:14];
+ searchString = components[14];
if ([searchString isEqualToString:@"none"] || [searchString isEqualToString:@"0"]) {
[_customize_subs_pop selectItemAtIndex:-1];
} else {
for (NSUInteger x = 0; x < count; x++) {
- if ([[tempArray objectAtIndex:x] isEqualToString: searchString]) {
+ if ([tempArray[x] isEqualToString: searchString]) {
[_customize_subs_pop selectItemAtIndex:x];
break;
}
- (NSString *)composedOptions
{
NSMutableString *composedOptions = [[NSMutableString alloc] initWithString:@":sout=#transcode{"];
- if ([[self.currentProfile objectAtIndex:1] intValue]) {
+ if ([self.currentProfile[1] intValue]) {
// video is enabled
- [composedOptions appendFormat:@"vcodec=%@", [self.currentProfile objectAtIndex:4]];
- if (![[self.currentProfile objectAtIndex:4] isEqualToString:@"none"]) {
- if ([[self.currentProfile objectAtIndex:5] intValue] > 0) // bitrate
- [composedOptions appendFormat:@",vb=%@", [self.currentProfile objectAtIndex:5]];
- if ([[self.currentProfile objectAtIndex:6] floatValue] > 0.) // scale
- [composedOptions appendFormat:@",scale=%@", [self.currentProfile objectAtIndex:6]];
- if ([[self.currentProfile objectAtIndex:7] floatValue] > 0.) // fps
- [composedOptions appendFormat:@",fps=%@", [self.currentProfile objectAtIndex:7]];
- if ([[self.currentProfile objectAtIndex:8] intValue] > 0) // width
- [composedOptions appendFormat:@",width=%@", [self.currentProfile objectAtIndex:8]];
- if ([[self.currentProfile objectAtIndex:9] intValue] > 0) // height
- [composedOptions appendFormat:@",height=%@", [self.currentProfile objectAtIndex:9]];
+ [composedOptions appendFormat:@"vcodec=%@", self.currentProfile[4]];
+ if (![self.currentProfile[4] isEqualToString:@"none"]) {
+ if ([self.currentProfile[5] intValue] > 0) // bitrate
+ [composedOptions appendFormat:@",vb=%@", self.currentProfile[5]];
+ if ([self.currentProfile[6] floatValue] > 0.) // scale
+ [composedOptions appendFormat:@",scale=%@", self.currentProfile[6]];
+ if ([self.currentProfile[7] floatValue] > 0.) // fps
+ [composedOptions appendFormat:@",fps=%@", self.currentProfile[7]];
+ if ([self.currentProfile[8] intValue] > 0) // width
+ [composedOptions appendFormat:@",width=%@", self.currentProfile[8]];
+ if ([self.currentProfile[9] intValue] > 0) // height
+ [composedOptions appendFormat:@",height=%@", self.currentProfile[9]];
}
}
- if ([[self.currentProfile objectAtIndex:2] intValue]) {
+ if ([self.currentProfile[2] intValue]) {
// audio is enabled
// add another comma in case video is enabled
- if ([[self.currentProfile objectAtIndex:1] intValue])
+ if ([self.currentProfile[1] intValue])
[composedOptions appendString:@","];
- [composedOptions appendFormat:@"acodec=%@", [self.currentProfile objectAtIndex:10]];
- if (![[self.currentProfile objectAtIndex:10] isEqualToString:@"none"]) {
- [composedOptions appendFormat:@",ab=%@", [self.currentProfile objectAtIndex:11]]; // bitrate
- [composedOptions appendFormat:@",channels=%@", [self.currentProfile objectAtIndex:12]]; // channel number
- [composedOptions appendFormat:@",samplerate=%@", [self.currentProfile objectAtIndex:13]]; // sample rate
+ [composedOptions appendFormat:@"acodec=%@", self.currentProfile[10]];
+ if (![self.currentProfile[10] isEqualToString:@"none"]) {
+ [composedOptions appendFormat:@",ab=%@", self.currentProfile[11]]; // bitrate
+ [composedOptions appendFormat:@",channels=%@", self.currentProfile[12]]; // channel number
+ [composedOptions appendFormat:@",samplerate=%@", self.currentProfile[13]]; // sample rate
}
}
- if ([self.currentProfile objectAtIndex:3]) {
+ if (self.currentProfile[3]) {
// subtitles enabled
- [composedOptions appendFormat:@",scodec=%@", [self.currentProfile objectAtIndex:14]];
- if ([[self.currentProfile objectAtIndex:15] intValue])
+ [composedOptions appendFormat:@",scodec=%@", self.currentProfile[14]];
+ if ([self.currentProfile[15] intValue])
[composedOptions appendFormat:@",soverlay"];
}
if (!b_streaming) {
/* file transcoding */
// add muxer
- [composedOptions appendFormat:@"}:standard{mux=%@", [self.currentProfile objectAtIndex:0]];
+ [composedOptions appendFormat:@"}:standard{mux=%@", self.currentProfile[0]];
// add output destination
- [composedOptions appendFormat:@",dst=%@,access=file}", _outputDestination];
+ [composedOptions appendFormat:@",access=file{no-overwrite},dst=%@}", _outputDestination];
} else {
/* streaming */
if ([[[_stream_type_pop selectedItem] title] isEqualToString:@"RTP"])
else if ([[[_stream_type_pop selectedItem] title] isEqualToString:@"MMSH"])
[composedOptions appendFormat:@":standard{mux=asfh,dst=%@,port=%@,access=mmsh", _outputDestination, [_stream_port_fld stringValue]];
else
- [composedOptions appendFormat:@":standard{mux=%@,dst=%@,port=%@,access=http", [self.currentProfile objectAtIndex:0], [_stream_port_fld stringValue], _outputDestination];
+ [composedOptions appendFormat:@":standard{mux=%@,dst=%@,port=%@,access=http", self.currentProfile[0], [_stream_port_fld stringValue], _outputDestination];
if ([_stream_sap_ckb state])
[composedOptions appendFormat:@",sap,name=\"%@\"", [_stream_channel_fld stringValue]];
[self.currentProfile addObject: [NSString stringWithFormat:@"%li", [_customize_subs_ckb state]]];
i = [_customize_vid_codec_pop indexOfSelectedItem];
if (i >= 0)
- [self.currentProfile addObject: [[_videoCodecs objectAtIndex:1] objectAtIndex:i]];
+ [self.currentProfile addObject: _videoCodecs[1][i]];
else
[self.currentProfile addObject: @"none"];
[self.currentProfile addObject: [NSString stringWithFormat:@"%i", [_customize_vid_bitrate_fld intValue]]];
[self.currentProfile addObject: [NSString stringWithFormat:@"%i", [_customize_vid_height_fld intValue]]];
i = [_customize_aud_codec_pop indexOfSelectedItem];
if (i >= 0)
- [self.currentProfile addObject: [[_audioCodecs objectAtIndex:1] objectAtIndex:i]];
+ [self.currentProfile addObject: _audioCodecs[1][i]];
else
[self.currentProfile addObject: @"none"];
[self.currentProfile addObject: [NSString stringWithFormat:@"%i", [_customize_aud_bitrate_fld intValue]]];
[self.currentProfile addObject: [[_customize_aud_samplerate_pop selectedItem] title]];
i = [_customize_subs_pop indexOfSelectedItem];
if (i >= 0)
- [self.currentProfile addObject: [[_subsCodecs objectAtIndex:1] objectAtIndex:i]];
+ [self.currentProfile addObject: _subsCodecs[1][i]];
else
[self.currentProfile addObject: @"none"];
[self.currentProfile addObject: [NSString stringWithFormat:@"%li", [_customize_subs_overlay_ckb state]]];
- (void)awakeFromNib
{
- [self registerForDraggedTypes:[NSArray arrayWithObjects: NSFilenamesPboardType, @"VLCPlaylistItemPboardType", nil]];
+ [self registerForDraggedTypes:@[NSFilenamesPboardType, @"VLCPlaylistItemPboardType"]];
}
- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender
- (void)awakeFromNib
{
- [self registerForDraggedTypes:[NSArray arrayWithObjects: NSFilenamesPboardType, @"VLCPlaylistItemPboardType", nil]];
+ [self registerForDraggedTypes:@[NSFilenamesPboardType, @"VLCPlaylistItemPboardType"]];
}
- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender
- (void)awakeFromNib
{
- [self registerForDraggedTypes:[NSArray arrayWithObjects: NSFilenamesPboardType, @"VLCPlaylistItemPboardType", nil]];
+ [self registerForDraggedTypes:@[NSFilenamesPboardType, @"VLCPlaylistItemPboardType"]];
}
- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender