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; }
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; }
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; }
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); }
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); }