void bg_avdec_set_callbacks(void * priv, bg_input_callbacks_t * callbacks) { bgav_options_t * opt; avdec_priv * avdec = priv; avdec->bg_callbacks = callbacks; if(!callbacks) return; bgav_options_set_buffer_callback(avdec->opt, avdec->bg_callbacks->buffer_notify, avdec->bg_callbacks->data); bgav_options_set_user_pass_callback(avdec->opt, avdec->bg_callbacks->user_pass, avdec->bg_callbacks->data); bgav_options_set_aspect_callback(avdec->opt, avdec->bg_callbacks->aspect_changed, avdec->bg_callbacks->data); if(avdec->bg_callbacks->metadata_changed) { bgav_options_set_metadata_change_callback(avdec->opt, metadata_change_callback, priv); } if(avdec->dec) { opt = bgav_get_options(avdec->dec); bgav_options_copy(opt, avdec->opt); } }
// NOT PUBLIC // Clears the bgav_t struct, destroying and then creating it // NO NEED TO DO AV LOCK, only called in the opener thread void ReadMedia::clearFile() { if (m_file != NULL) bgav_close( m_file ); m_file = bgav_create(); bgav_options_copy( bgav_get_options( m_file ) , m_opt); m_aeof = true; m_veof = true; m_pcm_seek = SEEK_NOTHING; m_frame_seek = SEEK_NOTHING; }
static int open_avdec(void * priv, const char * location) { bgav_options_t * opt; avdec_priv * avdec = priv; avdec->dec = bgav_create(); opt = bgav_get_options(avdec->dec); bgav_options_copy(opt, avdec->opt); if(!bgav_open(avdec->dec, location)) return 0; return open_common(avdec); }
static int open_io_avdec(void * priv, gavf_io_t * io) { bgav_options_t * opt; avdec_priv * avdec = priv; avdec->dec = bgav_create(); opt = bgav_get_options(avdec->dec); bgav_options_copy(opt, avdec->opt); if(!bgav_open_callbacks(avdec->dec, read_callback, gavf_io_can_seek(io) ? seek_callback : 0, io, gavf_io_filename(io), gavf_io_mimetype(io), gavf_io_total_bytes(io))) return 0; return open_common(avdec); }