public static IFrameStream OpenFile(string fileName, out AdvFileMetadataInfo fileMetadataInfo, out GeoLocationInfo geoLocation) { fileMetadataInfo = new AdvFileMetadataInfo(); geoLocation = new GeoLocationInfo(); try { int version = TangraCore.ADV2GetFormatVersion(fileName); IFrameStream rv; if (version == 1) { var adv1 = new AstroDigitalVideoStream(fileName, ref fileMetadataInfo, ref geoLocation); if (adv1.IsStatusChannelOnly) { TangraContext.Current.CustomRenderer = new AavStatusChannelOnlyRenderer(adv1); return(null); } rv = adv1; } else { rv = AstroDigitalVideoStreamV2.OpenFile(fileName, out fileMetadataInfo, out geoLocation); } TangraContext.Current.RenderingEngine = fileMetadataInfo.Engine == "AAV" ? "AstroAnalogueVideo" : "AstroDigitalVideo"; if (fileMetadataInfo.Engine == "AAV") { UsageStats.Instance.ProcessedAavFiles++; } else { UsageStats.Instance.ProcessedAdvFiles++; } UsageStats.Instance.Save(); return(rv); } catch (ADVFormatException ex) { MessageBox.Show(ex.Message, "Error opening ADV/AAV file", MessageBoxButtons.OK, MessageBoxIcon.Error); } return(null); }
public void StepBackward(int secondsBackward) { if (m_VideoStream != null) { if (m_IsRunning) { // No single frame movement or refresh when the video is 'playing' return; } AstroDigitalVideoStream advStream = m_VideoStream as AstroDigitalVideoStream; if (advStream != null) { AdvFrameInfo currStatusChannel = advStream.GetStatusChannel(CurrentDirectionAwareFrameIndex); if (currStatusChannel.HasTimeStamp) { int targetFrame = m_CurrentFrameIndex - 1; while (targetFrame >= m_VideoStream.FirstFrame) { AdvFrameInfo statusChannel = advStream.GetStatusChannel(targetFrame); if (statusChannel.HasTimeStamp) { TimeSpan ts = new TimeSpan(currStatusChannel.MiddleExposureTimeStamp.Ticks - statusChannel.MiddleExposureTimeStamp.Ticks); if (ts.TotalSeconds >= secondsBackward) { m_CurrentFrameIndex = targetFrame; break; } } else if (targetFrame == m_VideoStream.FirstFrame) { // We have reached the beginning of the video m_CurrentFrameIndex = targetFrame; break; } targetFrame--; } } else if (advStream.FrameRate > 0) { m_CurrentFrameIndex -= (int)Math.Round(secondsBackward * advStream.FrameRate); } else { m_CurrentFrameIndex--; } } else { m_CurrentFrameIndex -= (int)Math.Round(secondsBackward * m_VideoStream.FrameRate); } if (m_CurrentFrameIndex < m_VideoStream.FirstFrame) { m_CurrentFrameIndex = m_VideoStream.FirstFrame; } DisplayCurrentFrame(MovementType.Jump); } }
public static IFrameStream OpenFile(string fileName, out AdvFileMetadataInfo fileMetadataInfo, out GeoLocationInfo geoLocation) { fileMetadataInfo = new AdvFileMetadataInfo(); geoLocation = new GeoLocationInfo(); try { int version = TangraCore.ADV2GetFormatVersion(fileName); IFrameStream rv; if (version == 1) rv = new AstroDigitalVideoStream(fileName, ref fileMetadataInfo, ref geoLocation); else rv = AstroDigitalVideoStreamV2.OpenFile(fileName, out fileMetadataInfo, out geoLocation); TangraContext.Current.RenderingEngine = fileMetadataInfo.Engine == "AAV" ? "AstroAnalogueVideo" : "AstroDigitalVideo"; if (fileMetadataInfo.Engine == "AAV") UsageStats.Instance.ProcessedAavFiles++; else UsageStats.Instance.ProcessedAdvFiles++; UsageStats.Instance.Save(); return rv; } catch(ADVFormatException ex) { MessageBox.Show(ex.Message, "Error opening ADV/AAV file", MessageBoxButtons.OK, MessageBoxIcon.Error); } return null; }