static GstStateChangeReturn change_state(GstElement *element, GstStateChange transition) { GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS; GstDspDummy *self; self = GST_DSP_DUMMY(element); switch (transition) { case GST_STATE_CHANGE_NULL_TO_READY: if (!dsp_init(self)) { GST_ERROR("dsp init failed"); return GST_STATE_CHANGE_FAILURE; } break; case GST_STATE_CHANGE_READY_TO_PAUSED: if (!dsp_start(self)) { GST_ERROR("dsp start failed"); return GST_STATE_CHANGE_FAILURE; } break; default: break; } ret = parent_class->change_state(element, transition); if (ret == GST_STATE_CHANGE_FAILURE) return ret; switch (transition) { case GST_STATE_CHANGE_PAUSED_TO_READY: if (!dsp_stop(self)) { GST_ERROR("dsp stop failed"); return GST_STATE_CHANGE_FAILURE; } break; case GST_STATE_CHANGE_READY_TO_NULL: if (!dsp_deinit(self)) { GST_ERROR("dsp deinit failed"); return GST_STATE_CHANGE_FAILURE; } break; default: break; } return ret; }
void irc_listen() { enum net_status status; char msg[READ_BUF]; /* Register shutdown signals */ signal(SIGHUP, shutdown_handler); signal(SIGTERM, shutdown_handler); signal(SIGINT, shutdown_handler); printf("Starting %s %s...\n Git: %s\n Build: %s\n Platform: %s\n", lib_name, lib_version, git_revision, build_date, build_platform); dsp_start(); /* Start the event dispatcher thread */ while (shutdown_requested == 0) { status = net_listen(); switch(status) { case NET_ERROR: perror("Error listening for messages"); exit(EXIT_FAILURE); break; case NET_CLOSE: _shutdown(); break; case NET_READY: net_recv(msg); lst_handle(msg); break; case NET_TIMEOUT: /* Do nothing. The loop should continue and try again. */ break; default: break; } } }
int audiodsp_start(void) { struct audiodsp_priv *priv=audiodsp_privdata(); struct audiodsp_microcode *pmcode; struct audio_info *audio_info; int ret,i; priv->frame_format.valid=0; priv->decode_error_count=0; priv->last_valid_pts=0; priv->out_len_after_last_valid_pts = 0; priv->decode_fatal_err = 0; priv->first_lookup_over = 0; pmcode=audiodsp_find_supoort_mcode(priv,priv->stream_fmt); if(pmcode==NULL) { DSP_PRNT("have not find a valid mcode for fmt(0x%x)\n",priv->stream_fmt); return -1; } stop_audiodsp_monitor(priv); dsp_stop(priv); ret=dsp_start(priv,pmcode); if(ret==0){ start_audiodsp_monitor(priv); #ifdef CONFIG_AM_VDEC_REAL if((pmcode->fmt == MCODEC_FMT_COOK) || (pmcode->fmt == MCODEC_FMT_RAAC) || (pmcode->fmt == MCODEC_FMT_AMR) || (pmcode->fmt == MCODEC_FMT_WMA) || (pmcode->fmt == MCODEC_FMT_ADPCM)|| (pmcode->fmt == MCODEC_FMT_PCM) || (pmcode->fmt == MCODEC_FMT_WMAPRO)|| (pmcode->fmt == MCODEC_FMT_ALAC)|| (pmcode->fmt & MCODEC_FMT_AC3) || (pmcode->fmt & MCODEC_FMT_EAC3) || (pmcode->fmt == MCODEC_FMT_APE) || (pmcode->fmt == MCODEC_FMT_FLAC)) { DSP_PRNT("dsp send audio info\n"); for(i = 0; i< 2000;i++){ if(DSP_RD(DSP_AUDIOINFO_STATUS) == DSP_AUDIOINFO_READY)//maybe at audiodsp side,INT not enabled yet,so wait a while break; msleep(1); } if(i == 2000) DSP_PRNT("audiodsp not ready for info \n"); DSP_WD(DSP_AUDIOINFO_STATUS,0); audio_info = get_audio_info(); DSP_PRNT("kernel sent info first 4 byte[0x%x],[0x%x],[0x%x],[0x%x]\n\t",audio_info->extradata[0],\ audio_info->extradata[1],audio_info->extradata[2],audio_info->extradata[3]); DSP_WD(DSP_GET_EXTRA_INFO_FINISH, 0); while(1){ dsp_mailbox_send(priv, 1, M2B_IRQ4_AUDIO_INFO, 0, (const char*)audio_info, sizeof(struct audio_info)); msleep(100); if(DSP_RD(DSP_GET_EXTRA_INFO_FINISH) == 0x12345678) break; } } #endif } return ret; }
int main(int argc, const char **argv) { int ret = 0; int dsp_handle; void *proc; char *cmd[1]; if (argc != 2) { pr_err("Wrong arguments: %s <dsp_program>", argv[0]); return -1; } dsp_handle = dsp_open(); if (dsp_handle < 0) { pr_err("dsp open failed"); return -1; } if (!dsp_attach(dsp_handle, 0, NULL, &proc)) { pr_err("dsp attach failed"); ret = -1; goto leave; } if (!dsp_stop(dsp_handle, proc)) { pr_err("dsp stop failed"); ret = -1; goto leave; } cmd[0] = (char *) argv[1]; if (!dsp_load(dsp_handle, proc, 1, cmd, NULL)) { pr_err("dsp load failed"); ret = -1; goto leave; } if (!dsp_start(dsp_handle, proc)) { pr_err("dsp start failed"); ret = -1; } leave: if (proc) { if (!dsp_detach(dsp_handle, proc)) { pr_err("dsp detach failed"); ret = -1; } proc = NULL; } if (dsp_handle > 0) { if (dsp_close(dsp_handle) < 0) { pr_err("dsp close failed"); return -1; } } return ret; }