func (a *app) OnInit() { var err error a.r, err = os.Open(*in) if err != nil { log.Fatalf("Unable to open file '%s': %s", *in, err) } var wm webm.WebM a.reader, err = webm.Parse(a.r, &wm) if err != nil { log.Fatal("Unable to parse file: ", err) } a.duration = wm.GetDuration() var vtrack *webm.TrackEntry if !*justaudio { vtrack = wm.FindFirstVideoTrack() } var vstream *webm.Stream if vtrack != nil { vstream = webm.NewStream(vtrack) a.fduration = vtrack.GetDefaultDuration() a.vchan = vstream.VideoChannel() } var atrack *webm.TrackEntry if !*justvideo { atrack = wm.FindFirstAudioTrack() } var astream *webm.Stream if atrack != nil { astream = webm.NewStream(atrack) } splitter := webm.NewSplitter(a.reader.Chan) splitter.Split(astream, vstream) a.steps = uint(0xffffffff) a.img = <-a.vchan a.pimg = a.img chk := func(err error) { if err != nil { panic(err) } } if atrack != nil { channels := int(atrack.Audio.Channels) a.aw = &AudioWriter{ch: astream.AudioChannel(), channels: channels, active: true} a.pastream, err = portaudio.OpenDefaultStream(0, channels, atrack.Audio.SamplingFrequency, 0, a.aw) chk(err) chk(a.pastream.Start()) } }