public bool Open(string path) { Reset(); int ret; ret = FFmpeg.av_open_input_file(out pFormatContext, path, IntPtr.Zero, 0, IntPtr.Zero); if (ret < 0) { Console.WriteLine("couldn't opne input file"); return(false); } ret = FFmpeg.av_find_stream_info(pFormatContext); if (ret < 0) { Console.WriteLine("couldnt find stream informaion"); return(false); } formatContext = (FFmpeg.AVFormatContext) Marshal.PtrToStructure(pFormatContext, typeof(FFmpeg.AVFormatContext)); for (int i = 0; i < formatContext.nb_streams; ++i) { FFmpeg.AVStream stream = (FFmpeg.AVStream) Marshal.PtrToStructure(formatContext.streams[i], typeof(FFmpeg.AVStream)); FFmpeg.AVCodecContext codec = (FFmpeg.AVCodecContext) Marshal.PtrToStructure(stream.codec, typeof(FFmpeg.AVCodecContext)); if (codec.codec_type == FFmpeg.CodecType.CODEC_TYPE_AUDIO && audioStartIndex == -1) { //this.pAudioCodecContext = stream.codec; //this.pAudioStream = formatContext.streams[i]; this.audioCodecContext = codec; this.audioStartIndex = i; this.timebase = stream.time_base; pAudioCodec = FFmpeg.avcodec_find_decoder(this.audioCodecContext.codec_id); if (pAudioCodec == IntPtr.Zero) { Console.WriteLine("couldn't find codec"); return(false); } FFmpeg.avcodec_open(stream.codec, pAudioCodec); } } if (audioStartIndex == -1) { Console.WriteLine("Couldn't find audio streamn"); return(false); } audioSampleRate = audioCodecContext.sample_rate; if (audioCodecContext.channels == 1) { //format = Al.AL_FORMAT_MONO16; } else { //format = Al.AL_FORMAT_STEREO16; } return(true); }
private static double av_q2d(FFmpeg.AVRational a) { return((double)a.num / (double)a.den); }