现在的位置: 首页 > 综合 > 正文

stream_component_open的主要步骤

2014年02月05日 ⁄ 综合 ⁄ 共 783字 ⁄ 字号 评论关闭
static int stream_component_open(VideoState *is, int stream_index)
{
	//依照编解码上下文的codec_id,遍历编解码器链表,找到相应的解码器
    codec = avcodec_find_decoder(enc->codec_id);

	//打开编解码器,初始化具体编解码器的运行环境。
    if (!codec || avcodec_open(enc, codec) < 0)
        return -1;

    switch(enc->codec_type) 
	{
	/* prepare audio  */
    case CODEC_TYPE_AUDIO:
		//初始化音频队列
        packet_queue_init(&is->audioq);

		//启动广义的音频解码线程。
		wanted_spec.callback = sdl_audio_callback;
		wanted_spec.userdata = is;
		if (SDL_OpenAudio(&wanted_spec, &spec) < 0) {
			fprintf(stderr, "SDL_OpenAudio: %s\n", SDL_GetError());
			return -1;
		}
		SDL_PauseAudio(0);
        break;

    case CODEC_TYPE_VIDEO:
		//初始化视频队列
        packet_queue_init(&is->videoq);
		 //启动视频解码线程
        is->video_tid = SDL_CreateThread(video_thread, is);
        break;

    case CODEC_TYPE_SUBTITLE:
        packet_queue_init(&is->subtitleq);
        is->subtitle_tid = SDL_CreateThread(subtitle_thread, is);
        break;
    default:
        break;
    }
    return 0;
}

抱歉!评论已关闭.