static struct demuxer *demux_open_stream(struct MPOpts *opts, struct stream *stream, int file_format, bool force, int audio_id, int video_id, int sub_id, char *filename, struct demuxer_params *params) { struct demuxer *demuxer = NULL; const struct demuxer_desc *desc; // If somebody requested a demuxer check it if (file_format) { desc = get_demuxer_desc_from_type(file_format); if (!desc) // should only happen with obsolete -demuxer 99 numeric format return NULL; return open_given_type(opts, desc, stream, force, audio_id, video_id, sub_id, filename, params); } // Test demuxers with safe file checks for (int i = 0; (desc = demuxer_list[i]); i++) { if (desc->safe_check) { demuxer = open_given_type(opts, desc, stream, false, audio_id, video_id, sub_id, filename, params); if (demuxer) return demuxer; } } // Ok. We're over the stable detectable fileformats, the next ones are // a bit fuzzy. So by default (extension_parsing==1) try extension-based // detection first: if (filename && opts->extension_parsing == 1) { desc = get_demuxer_desc_from_type(demuxer_type_by_filename(filename)); if (desc) demuxer = open_given_type(opts, desc, stream, false, audio_id, video_id, sub_id, filename, params); if (demuxer) return demuxer; } // Finally try detection for demuxers with unsafe checks for (int i = 0; (desc = demuxer_list[i]); i++) { if (!desc->safe_check && desc->check_file) { demuxer = open_given_type(opts, desc, stream, false, audio_id, video_id, sub_id, filename, params); if (demuxer) return demuxer; } } return NULL; }
static struct demuxer *demux_open_stream(struct MPOpts *opts, struct stream *stream, int file_format, bool force, int audio_id, int video_id, int sub_id, char *filename, struct demuxer_params *params) { struct demuxer *demuxer = NULL; const struct demuxer_desc *desc; // If somebody requested a demuxer check it if (file_format) { desc = get_demuxer_desc_from_type(file_format); if (!desc) // should only happen with obsolete -demuxer 99 numeric format return NULL; demuxer = open_given_type(opts, desc, stream, force, audio_id, video_id, sub_id, filename, params); if (demuxer) goto dmx_open; return NULL; } // Test demuxers with safe file checks for (int i = 0; (desc = demuxer_list[i]); i++) { if (desc->safe_check) { demuxer = open_given_type(opts, desc, stream, false, audio_id, video_id, sub_id, filename, params); if (demuxer) goto dmx_open; } } // Ok. We're over the stable detectable fileformats, the next ones are // a bit fuzzy. So by default (extension_parsing==1) try extension-based // detection first: if (filename && opts->extension_parsing == 1) { desc = get_demuxer_desc_from_type(demuxer_type_by_filename(filename)); if (desc) demuxer = open_given_type(opts, desc, stream, false, audio_id, video_id, sub_id, filename, params); if (demuxer) goto dmx_open; } // Finally try detection for demuxers with unsafe checks for (int i = 0; (desc = demuxer_list[i]); i++) { if (!desc->safe_check && desc->check_file) { demuxer = open_given_type(opts, desc, stream, false, audio_id, video_id, sub_id, filename, params); if (demuxer) goto dmx_open; } } return NULL; dmx_open: if (demuxer->type == DEMUXER_TYPE_PLAYLIST) return demuxer; struct sh_video *sh_video = demuxer->video->sh; if (sh_video && sh_video->bih) { int biComp = le2me_32(sh_video->bih->biCompression); mp_msg(MSGT_DEMUX, MSGL_INFO, "VIDEO: [%.4s] %dx%d %dbpp %5.3f fps %5.1f kbps (%4.1f kbyte/s)\n", (char *) &biComp, sh_video->bih->biWidth, sh_video->bih->biHeight, sh_video->bih->biBitCount, sh_video->fps, sh_video->i_bps * 0.008f, sh_video->i_bps / 1024.0f); } return demuxer; }