Ejemplo n.º 1
0
guint cdda_calculate_track_length(cdda_disc_toc_t *toc, int track)
{
	if (track == toc->last_track)
		return (LBA(toc->leadout) - LBA(toc->track[track]));
	else
		return (LBA(toc->track[track + 1]) - LBA(toc->track[track]));
}
Ejemplo n.º 2
0
bool TTPAttack::run( const TTPTuple& d )
{
  Word original_z = d.z;

  // Convert the tuples
  vector<ThLeftNormalForm> theTuple( d.WL.size()+d.WR.size() );
  for ( int i=0;i<d.WL.size();i++) {
    theTuple[i] = ThLeftNormalForm( BraidGroup( N )  , d.WL[i] );
    theTuple[i].setPower( theTuple[i].getPower() % 2 );
  }
  for ( int i=0;i<d.WR.size();i++) {
    theTuple[i+d.WL.size()] = ThLeftNormalForm( BraidGroup( N )  , d.WR[i] );
    theTuple[i+d.WL.size()].setPower( theTuple[i+d.WL.size()].getPower() % 2 );
  }
  


  // execute attack
  
  // run LBA to restore delta values
  reduceDeltaLBA( theTuple );
 
  // Test LBA
  bool DelatLBA_succ = true;
  for ( int i=0;i<d.WL.size();i++) {
    if ( shortenBraid(N,theTuple[i].getWord()*-d.WL[i]).length() > 0)
    	DelatLBA_succ = false;
//		cout << "F";
//    else
//	cout << "S";
  }

  for ( int i=0;i<d.WR.size();i++) {
    if ( shortenBraid(N,theTuple[i+d.WL.size()].getWord()*-d.WR[i]).length() > 0)
    	DelatLBA_succ = false;
//	cout << "F";
//    else
//	cout << "S";    
  }
  if ( !DelatLBA_succ  )
    cout << "WARN!!! Delta LBA FAILED!"  << endl;    
  	
  //  return oneOfSSSReps( d.WL.size(), d.WR.size(), theTuple );
  //  TTPTuple red_T;
  //return simpleLBA(d.WL.size(), d.WR.size(), theTuple, original_z );

  return LBA(d.WL.size(), d.WR.size(), theTuple, original_z );

}
Ejemplo n.º 3
0
static int get_current_frame(void)
{
	struct cdrom_subchnl subchnl;

	subchnl.cdsc_format = CDROM_MSF;
	if (ioctl(cdda_playing.fd, CDROMSUBCHNL, &subchnl) < 0)
		return -1;

	switch (subchnl.cdsc_audiostatus)
	{
		case CDROM_AUDIO_COMPLETED:
		case CDROM_AUDIO_ERROR:
			return -1;
	}

	return (LBA(subchnl.cdsc_absaddr.msf));
}
Ejemplo n.º 4
0
static int get_current_frame(void)
{
	struct ioc_read_subchannel subchnl;
	struct cd_sub_channel_info subinfo;
	subchnl.address_format = CD_MSF_FORMAT;
	subchnl.data_format = CD_CURRENT_POSITION;
	subchnl.track = 0;
	subchnl.data_len = sizeof(subinfo);
	subchnl.data = &subinfo;
	if (ioctl(cdda_playing.fd, CDIOCREADSUBCHANNEL, &subchnl) < 0)
		return -1;

#ifdef XMMS_CDROM_BSD_DARWIN
	return ((subchnl.data->what.position.absaddr[1] * 60
		 subchnl.data->what.position.absaddr[2]) * 75 +
		subchnl.data->what.position.absaddr[3]);
#else
	return (LBA(subchnl.data->what.position.absaddr.msf));
#endif
}
Ejemplo n.º 5
0
static int get_time_analog(void)
{
	int frame, start_frame, length;
	int track = cdda_playing.track;

	if (is_paused && pause_time != -1)
		return pause_time;

	frame = get_current_frame();

	if (frame == -1)
		return -1;
	
	start_frame = LBA(cdda_playing.cd_toc.track[track]);
	length = cdda_calculate_track_length(&cdda_playing.cd_toc, track);

	if (frame - start_frame >= length - 20)	/* 20 seems to work better */
		return -1;

	return ((frame - start_frame) * 1000) / 75;
}
Ejemplo n.º 6
0
static void *dae_play_loop(void *arg)
{
	char *buffer = g_malloc(CD_FRAMESIZE_RAW * CDDA_DAE_FRAMES);
	int pos = LBA(cdda_playing.cd_toc.track[cdda_playing.track]);
	int end, frames;

	if (cdda_playing.track == cdda_playing.cd_toc.last_track)
		end = LBA(cdda_playing.cd_toc.leadout);
	else
		end = LBA(cdda_playing.cd_toc.track[cdda_playing.track + 1]);

	while (cdda_playing.playing)
	{
		int left;
		char *data;

		if (dae_data.seek != -1)
		{
			cdda_ip.output->flush(dae_data.seek * 1000);
			pos = LBA(cdda_playing.cd_toc.track[cdda_playing.track])
				+ dae_data.seek * 75;
			dae_data.seek = -1;
			dae_data.eof = FALSE;
		}
		frames = MIN(CDDA_DAE_FRAMES, end - pos);
		if (frames == 0)
			dae_data.eof = TRUE;

		if (dae_data.eof)
		{
			xmms_usleep(30000);
			continue;
		}

		frames = read_audio_data(cdda_playing.fd, pos,
					 frames, buffer);
		if (frames <= 0)
		{
			int err = -frames;
			if (err == EOPNOTSUPP)
				dae_data.eof = TRUE;
			else
			{
				/*
				 * If the read failed, skip ahead to
				 * avoid getting stuck on scratches
				 * and such.
				 */
				g_message("read_audio_data() failed:  %s (%d)",
					  strerror(err), err);
				pos += MIN(CDDA_DAE_FRAMES, end - pos);
			}
			continue;
		}
		left = frames * CD_FRAMESIZE_RAW;
		data = buffer;
		while (cdda_playing.playing && left > 0 && dae_data.seek == -1)
		{
			int cur = MIN(512 * 2 * 2, left);
			cdda_ip.add_vis_pcm(cdda_ip.output->written_time(),
					    FMT_S16_LE, 2, cur, data);
			while (cdda_ip.output->buffer_free() < cur &&
			       cdda_playing.playing && dae_data.seek == -1)
				xmms_usleep(30000);
			if (cdda_playing.playing && dae_data.seek == -1)
				cdda_ip.output->write_audio(data, cur);
			left -= cur;
			data += cur;
		}
		pos += frames;
	}

	cdda_ip.output->buffer_free();
	cdda_ip.output->buffer_free();
	g_free(buffer);

	return NULL;
}
Ejemplo n.º 7
0
static void configurewin_check_drive(GtkButton *w, gpointer data)
{
	struct driveconfig *drive = data;
	GtkWidget *window, *vbox, *label, *bbox, *closeb;
	char *device, *directory;
	int fd, dae_track = -1;
	GString *str = g_string_new("");
	struct stat stbuf;

	device = gtk_entry_get_text(GTK_ENTRY(drive->device));
	directory = gtk_entry_get_text(GTK_ENTRY(drive->directory));

	if ((fd = open(device, CDOPENFLAGS)) < 0)
		g_string_sprintfa(str, _("Failed to open device %s\n"
					 "Error: %s\n\n"),
				  device, strerror(errno));
	else
	{
		cdda_disc_toc_t toc;
		if (!cdda_get_toc(&toc, device))
			g_string_append(str,
					_("Failed to read \"Table of Contents\""
					  "\nMaybe no disc in the drive?\n\n"));
		else
		{
			int i, data = 0;
			g_string_sprintfa(str, _("Device %s OK.\n"
						 "Disc has %d tracks"), device,
					  toc.last_track - toc.first_track + 1);
			for (i = toc.first_track; i <= toc.last_track; i++)
				if (toc.track[i].flags.data_track)
					data++;
				else if (dae_track < 0)
					dae_track = i;
			if (data > 0)
				g_string_sprintfa(str, _(" (%d data tracks)"),
						  data);
			g_string_sprintfa(str, _("\nTotal length: %d:%.2d\n"),
					  toc.leadout.minute,
					  toc.leadout.second);
#ifdef CDDA_HAS_READAUDIO
			if (dae_track == -1)
				g_string_sprintfa(str,
						  _("Digital audio extraction "
						    "not tested as the disc has "
						    "no audio tracks\n"));
			else
			{
				int start, end, fr;
				char buffer[CD_FRAMESIZE_RAW];
				start = LBA(toc.track[dae_track]);

				if (dae_track == toc.last_track)
					end = LBA(toc.leadout);
				else
					end = LBA(toc.track[dae_track + 1]);
				fr = read_audio_data(fd, start + (end - start) / 2,
						     1, buffer);
				if (fr > 0)
					g_string_sprintfa(str,
						_("Digital audio extraction "
						  "test: OK\n\n"));
				else
					g_string_sprintfa(str,
						_("Digital audio extraction "
						  "test failed: %s\n\n"),
						strerror(-fr));
			}
#else
			g_string_sprintfa(str, "\n");
#endif
		}
		close(fd);
	}

	if (stat(directory, &stbuf) < 0)
	{
		g_string_sprintfa(str, _("Failed to check directory %s\n"
					 "Error: %s"),
				  directory, strerror(errno));
	}
	else
	{
		if (!S_ISDIR(stbuf.st_mode))
			g_string_sprintfa(str,
				_("Error: %s exists, but is not a directory"),
				directory);
		else
		{
			if (!access(directory, R_OK))
				g_string_sprintfa(str, _("Directory %s OK."),
						  directory);
			else
				g_string_sprintfa(str,
						  _("Directory %s exists, but "
						    "you do not have permission "
						    "to access it."),
						  directory);
		}
				
	}
			
	window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	gtk_window_set_transient_for(GTK_WINDOW(window),
				     GTK_WINDOW(cdda_configure_win));
	gtk_container_set_border_width(GTK_CONTAINER(window), 10);
	vbox = gtk_vbox_new(FALSE, 10);
	gtk_container_add(GTK_CONTAINER(window), vbox);
	label = gtk_label_new(str->str);
	gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
	gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 0);

	bbox = gtk_hbutton_box_new();
	gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_SPREAD);
	gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5);
	gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0);

	closeb = gtk_button_new_with_label("Close");
	GTK_WIDGET_SET_FLAGS(closeb, GTK_CAN_DEFAULT);
	gtk_signal_connect_object(GTK_OBJECT(closeb), "clicked",
				  GTK_SIGNAL_FUNC(gtk_widget_destroy),
				  GTK_OBJECT(window));
	gtk_box_pack_start(GTK_BOX(bbox), closeb, TRUE, TRUE, 0);
	gtk_widget_grab_default(closeb);

	g_string_free(str, TRUE);

	gtk_widget_show_all(window);
}