Пример #1
0
Файл: mp3.c Проект: hjelmn/upod
int get_mp3_info (char *file_name, tihm_t *tihm) {
  struct mp3_file mp3;

  if (mp3_open (file_name, &mp3) < 0) {
    mp3_close (&mp3); /* Make sure everything is cleaned up */
    return -1;
  }

  if (mp3_scan (&mp3) < 0) {
    mp3_close (&mp3);
    return -1;
  }

  mp3_close (&mp3);

  tihm->bitrate = mp3.bitrate;
  tihm->vbr     = mp3.vbr;
  tihm->samplerate = mp3.samplerate;
  tihm->time       = mp3.duration;
  tihm->size       = mp3.file_size;
  tihm->mod_date   = mp3.mod_date;
  tihm->creation_date = mp3.mod_date;
  tihm->type      = string_to_int ("MP3 ");
  tihm->is_video  = 0;

  return 0;
}
Пример #2
0
static int
mp3_open_fore(struct inode *inode, struct file *fp)
{

    int ret;
    printk("Hello! mp3_open_fore, backgroundUseFlag = %d, foregroundUseFlag = %d\n", backgroundUseFlag, foregroundUseFlag);

    if(backgroundUseFlag)
    {
        // Send command to the Epics to Stop
        pnx0106_epics_set_exit_decoder(1);


        // wait for global use flag to get set to 0
        while(backgroundUseFlag)
        {
            pnx0106_epics_sleep(10);
        }
    }
    foregroundUseFlag++;

    //return 0;

    ret = mp3_open(inode, fp);

    if(ret)
    {
        foregroundUseFlag--;
    }
    else
    {
        /*
         * 	Allocate  foreground buffer for decoder
         */
        mp3_bufsize = PAGE_ALIGN(sizeof(e7b_mp3_buffer)); /* size must be multiple of PAGE_SIZE for mmap */
        TRACE(1, "mp3_open: alloc %d(%d)\n", mp3_bufsize, sizeof(e7b_mp3_buffer));
        mp3_buff = pnx0106_epics_alloc_coherent(NULL, mp3_bufsize, &mp3_buff_bus, 0);

        if (!mp3_buff)
        {
	        pnx0106_epics_decoder_release();
	        return -ENOMEM;
        }

        printk("FORE : mp3_buff = 0x%x, mp3_bufsize = %d, \n",mp3_buff, mp3_bufsize);
    }

    return ret;

}
Пример #3
0
static int
mp3_open_back(struct inode *inode, struct file *fp)
{

    int ret;
    printk("Hello! mp3_open_back, backgroundUseFlag = %d, foregroundUseFlag = %d\n", backgroundUseFlag, foregroundUseFlag);

    while(foregroundUseFlag)
    {
        // wait for foreground use flag to get set to 0
        pnx0106_epics_sleep(10);

    }

    pnx0106_epics_alloc_backup_buffer();

    backgroundUseFlag++;

    ret = mp3_open(inode, fp);

    if(ret)
    {
        backgroundUseFlag--;
        if(!backgroundUseFlag)
        {
            pnx0106_epics_free_backup_buffer();
        }
    }
    else
    {
        /*
         * 	Allocate background buffer for decoder
         */
        mp3_bufsize = PAGE_ALIGN(sizeof(e7b_mp3_buffer)); /* size must be multiple of PAGE_SIZE for mmap */
        TRACE(1, "mp3_open: alloc %d(%d)\n", mp3_bufsize, sizeof(e7b_mp3_buffer));
        mp3_buff = pnx0106_epics_alloc_coherent(NULL, mp3_bufsize, &mp3_buff_bus, 0);

        if (!mp3_buff)
        {
	        pnx0106_epics_decoder_release();
	        return -ENOMEM;
        }

        printk("BACK : mp3_buff = 0x%x, mp3_bufsize = %d, \n",mp3_buff, mp3_bufsize);
    }

    return ret;

}
Пример #4
0
static void
mp3_decode(struct decoder *decoder, struct input_stream *input_stream)
{
	struct mp3_data data;
	GError *error = NULL;
	struct tag *tag = NULL;
	struct audio_format audio_format;

	if (!mp3_open(input_stream, &data, decoder, &tag)) {
		if (decoder_get_command(decoder) == DECODE_COMMAND_NONE)
			g_warning
			    ("Input does not appear to be a mp3 bit stream.\n");
		return;
	}

	if (!audio_format_init_checked(&audio_format,
				       data.frame.header.samplerate,
				       SAMPLE_FORMAT_S24_P32,
				       MAD_NCHANNELS(&data.frame.header),
				       &error)) {
		g_warning("%s", error->message);
		g_error_free(error);

		if (tag != NULL)
			tag_free(tag);
		mp3_data_finish(&data);
		return;
	}

	decoder_initialized(decoder, &audio_format,
			    data.input_stream->seekable, data.total_time);

	if (tag != NULL) {
		decoder_tag(decoder, input_stream, tag);
		tag_free(tag);
	}

	while (mp3_read(&data)) ;

	mp3_data_finish(&data);
}
Пример #5
0
static void
mp3_decode(struct decoder *decoder, struct input_stream *input_stream)
{
	struct mp3_data data;
	struct tag *tag = NULL;
	struct replay_gain_info *replay_gain_info = NULL;
	struct audio_format audio_format;

	if (!mp3_open(input_stream, &data, decoder, &tag, &replay_gain_info)) {
		if (decoder_get_command(decoder) == DECODE_COMMAND_NONE)
			g_warning
			    ("Input does not appear to be a mp3 bit stream.\n");
		return;
	}

	mp3_audio_format(&data, &audio_format);

	decoder_initialized(decoder, &audio_format,
			    data.input_stream->seekable, data.total_time);

	if (tag != NULL) {
		decoder_tag(decoder, input_stream, tag);
		tag_free(tag);
	}

	while (mp3_read(&data, &replay_gain_info)) ;

	if (replay_gain_info)
		replay_gain_info_free(replay_gain_info);

	if (decoder_get_command(decoder) == DECODE_COMMAND_SEEK &&
	    data.mute_frame == MUTEFRAME_SEEK)
		decoder_command_finished(decoder);

	mp3_data_finish(&data);
}