bool OMXPlayerUnsuitable(bool m_HasVideo, bool m_HasAudio, CDVDDemux* m_pDemuxer, CDVDInputStream* m_pInputStream, CSelectionStreams &m_SelectionStreams) { // if no MMAL acceleration stick with omxplayer regardless if (!CSettings::Get().GetBool("videoplayer.usemmal")) return false; // omxplayer only handles Pi sink if (CSettings::Get().GetString("audiooutput.audiodevice") != "PI:Analogue" && CSettings::Get().GetString("audiooutput.audiodevice") != "PI:HDMI" && CSettings::Get().GetString("audiooutput.audiodevice") != "PI:Both") { CLog::Log(LOGNOTICE, "%s OMXPlayer unsuitable due to audio sink", __func__); return true; } // omxplayer doesn't handle ac3 transcode if (CSettings::Get().GetBool("audiooutput.ac3transcode")) { CLog::Log(LOGNOTICE, "%s OMXPlayer unsuitable due to ac3transcode", __func__); return true; } if (m_pDemuxer) { // find video stream int num_supported = 0, num_unsupported = 0; AVCodecID codec = AV_CODEC_ID_NONE; SelectionStreams streams = m_SelectionStreams.Get(STREAM_VIDEO, PredicateVideoPriority); for(SelectionStreams::iterator it = streams.begin(); it != streams.end(); ++it) { int iStream = it->id; CDemuxStream *stream = m_pDemuxer->GetStream(iStream); if(!stream || stream->disabled) continue; CDVDStreamInfo hint(*stream, true); bool supported = false; if ((hint.codec == AV_CODEC_ID_MPEG1VIDEO || hint.codec == AV_CODEC_ID_MPEG2VIDEO) && g_RBP.GetCodecMpg2()) supported = true; else if ((hint.codec == AV_CODEC_ID_VC1 || hint.codec == AV_CODEC_ID_WMV3) && g_RBP.GetCodecWvc1()) supported = true; else if (hint.codec == AV_CODEC_ID_H264 || hint.codec == AV_CODEC_ID_MPEG4 || hint.codec == AV_CODEC_ID_H263 || hint.codec == AV_CODEC_ID_VP6 || hint.codec == AV_CODEC_ID_VP6F || hint.codec == AV_CODEC_ID_VP6A || hint.codec == AV_CODEC_ID_VP8 || hint.codec == AV_CODEC_ID_THEORA || hint.codec == AV_CODEC_ID_MJPEG || hint.codec == AV_CODEC_ID_MJPEGB) supported = true; codec = hint.codec; if (supported) num_supported++; else num_unsupported++; } if (num_unsupported > 0 && num_supported == 0) { CLog::Log(LOGNOTICE, "%s OMXPlayer unsuitable due to video codec (%x:%d/%d)", __func__, codec, num_supported, num_unsupported); return true; } } if (m_pInputStream && m_pInputStream->IsStreamType(DVDSTREAM_TYPE_DVD)) { CLog::Log(LOGNOTICE, "%s OMXPlayer unsuitable due to dvd menus", __func__); return true; } return false; }
bool OMXPlayerUnsuitable(bool m_HasVideo, bool m_HasAudio, CDVDDemux* m_pDemuxer, CDVDInputStream* m_pInputStream, CSelectionStreams &m_SelectionStreams) { // if no OMXPlayer acceleration then it is not suitable if (!CSettings::GetInstance().GetBool(CSettings::SETTING_VIDEOPLAYER_USEOMXPLAYER)) return true; // if no MMAL acceleration stick with omxplayer regardless if (!CSettings::GetInstance().GetBool(CSettings::SETTING_VIDEOPLAYER_USEMMAL)) return false; // omxplayer only handles Pi sink if (CSettings::GetInstance().GetString(CSettings::SETTING_AUDIOOUTPUT_AUDIODEVICE) != "PI:Analogue" && CSettings::GetInstance().GetString(CSettings::SETTING_AUDIOOUTPUT_AUDIODEVICE) != "PI:HDMI" && CSettings::GetInstance().GetString(CSettings::SETTING_AUDIOOUTPUT_AUDIODEVICE) != "PI:Both") { CLog::Log(LOGNOTICE, "%s OMXPlayer unsuitable due to audio sink", __func__); return true; } // omxplayer doesn't handle ac3 transcode if (CSettings::GetInstance().GetBool(CSettings::SETTING_AUDIOOUTPUT_AC3TRANSCODE)) { CLog::Log(LOGNOTICE, "%s OMXPlayer unsuitable due to ac3transcode", __func__); return true; } if (m_pDemuxer) { // find video stream int num_supported = 0, num_unsupported = 0; AVCodecID codec = AV_CODEC_ID_NONE; SelectionStreams streams = m_SelectionStreams.Get(STREAM_VIDEO, PredicateVideoPriority); for(SelectionStreams::iterator it = streams.begin(); it != streams.end(); ++it) { int iStream = it->id; CDemuxStream *stream = m_pDemuxer->GetStream(iStream); if(!stream || stream->disabled || stream->flags & AV_DISPOSITION_ATTACHED_PIC) continue; CDVDStreamInfo hint(*stream, true); bool supported = false; if (hint.workaround_bugs & FF_BUG_GMC_UNSUPPORTED) ; else if ((hint.codec == AV_CODEC_ID_MPEG1VIDEO || hint.codec == AV_CODEC_ID_MPEG2VIDEO) && g_RBP.GetCodecMpg2()) supported = true; else if ((hint.codec == AV_CODEC_ID_VC1 || hint.codec == AV_CODEC_ID_WMV3) && g_RBP.GetCodecWvc1()) supported = true; else if (hint.codec == AV_CODEC_ID_H264 || hint.codec == AV_CODEC_ID_MPEG4 || hint.codec == AV_CODEC_ID_H263 || hint.codec == AV_CODEC_ID_VP6 || hint.codec == AV_CODEC_ID_VP6F || hint.codec == AV_CODEC_ID_VP6A || hint.codec == AV_CODEC_ID_VP8 || hint.codec == AV_CODEC_ID_THEORA || hint.codec == AV_CODEC_ID_MJPEG || hint.codec == AV_CODEC_ID_MJPEGB) supported = true; codec = hint.codec; if (supported) num_supported++; else num_unsupported++; } if (num_unsupported > 0 && num_supported == 0) { CLog::Log(LOGNOTICE, "%s OMXPlayer unsuitable due to video codec (%x:%d/%d)", __func__, codec, num_supported, num_unsupported); return true; } } if (m_pInputStream && m_pInputStream->IsStreamType(DVDSTREAM_TYPE_DVD)) { CLog::Log(LOGNOTICE, "%s OMXPlayer unsuitable due to dvd menus", __func__); return true; } return false; }