コード例 #1
0
        private FrameStateData AdvFrameInfoToFrameStateData(AdvFrameInfo frameInfo, int frameIndex)
        {
            if (frameInfo != null)
            {
                var rv = new FrameStateData();
                rv.VideoCameraFrameId     = frameInfo.VideoCameraFrameId;
                rv.CentralExposureTime    = frameInfo.MiddleExposureTimeStamp;
                rv.SystemTime             = frameInfo.SystemTime;
                rv.EndFrameNtpTime        = frameInfo.EndExposureNtpTimeStamp;
                rv.NtpTimeStampError      = frameInfo.NtpTimeStampError;
                rv.ExposureInMilliseconds = frameInfo.Exposure10thMs / 10.0f;

                rv.NumberIntegratedFrames = (int)frameInfo.IntegratedFrames;

                int almanacStatus = frameInfo.GPSAlmanacStatus;
                int almanacOffset = frameInfo.GetSignedAlamancOffset();

                if (!frameInfo.AlmanacStatusIsGood && frameInfo.AlmanacStatusIsGood)
                {
                    // When the current almanac is not good, but last frame is, then apply the known almanac offset automatically
                    almanacOffset          = frameInfo.GPSAlmanacOffset;
                    rv.CentralExposureTime = rv.CentralExposureTime.AddSeconds(frameInfo.GPSAlmanacOffset);
                    almanacStatus          = 2;            // Certain
                }


                rv.Gain        = frameInfo.Gain;
                rv.Gamma       = frameInfo.Gamma;
                rv.Temperature = frameInfo.Temperature;
                rv.Offset      = frameInfo.Offset;

                rv.NumberSatellites = frameInfo.GPSTrackedSattelites;

                rv.AlmanacStatus = AdvStatusValuesHelper.TranslateGpsAlmanacStatus(almanacStatus);

                rv.AlmanacOffset = AdvStatusValuesHelper.TranslateGpsAlmanacOffset(almanacStatus, almanacOffset, almanacStatus > 0);

                rv.GPSFixStatus = frameInfo.GPSFixStatus.ToString("#");

                rv.Messages = string.Empty;
                if (frameInfo.SystemErrorString != null)
                {
                    rv.Messages = string.Concat(rv.Messages, frameInfo.SystemErrorString, "\r\n");
                }
                if (frameInfo.UserCommandString != null)
                {
                    rv.Messages = string.Concat(rv.Messages, frameInfo.UserCommandString, "\r\n");
                }
                if (frameInfo.GPSFixString != null)
                {
                    rv.Messages = string.Concat(rv.Messages, frameInfo.GPSFixString, "\r\n");
                }

                if (m_UseNtpTimeAsCentralExposureTime)
                {
                    rv.CentralExposureTime = ComputeCentralExposureTimeFromNtpTime(frameIndex, frameInfo.EndExposureNtpTimeStamp);
                }

                if (m_FrameRate > 0)
                {
                    rv.ExposureInMilliseconds = (float)(1000 / m_FrameRate);
                }

                if (m_UsesNtpTimestamps && !OcrDataAvailable && m_UseNtpTimeAsCentralExposureTime)
                {
                    AddExtraNtpDebugTimes(ref rv, frameInfo);
                }

                return(rv);
            }
            else
            {
                return(new FrameStateData());
            }
        }
コード例 #2
0
        private AstroDigitalVideoStream(string fileName, ref AdvFileMetadataInfo fileMetadataInfo, ref GeoLocationInfo geoLocation)
        {
            CheckAdvFileFormat(fileName, ref fileMetadataInfo, ref geoLocation);

            m_FileName = fileName;
            var fileInfo = new AdvFileInfo();

            TangraCore.ADVOpenFile(fileName, ref fileInfo);

            m_FirstFrame  = 0;
            m_CountFrames = fileInfo.CountFrames;

            m_BitPix       = fileInfo.Bpp;
            m_Width        = fileInfo.Width;
            m_Height       = fileInfo.Height;
            m_Aav16NormVal = fileInfo.Aav16NormVal;

            m_FrameRate = fileInfo.FrameRate;


            // Get the last frame in the video and read the Almanac Offset and Almanac Status so they are applied
            // to the frames that didn't have Almanac Status = Updated
            if (m_CountFrames > 0)
            {
                GetPixelmap(m_FirstFrame + m_CountFrames - 1);

                m_AlamanacOffsetLastFrameIsGood = m_CurrentFrameInfo.AlmanacStatusIsGood;
                m_AlmanacOffsetLastFrame        = m_CurrentFrameInfo.GetSignedAlamancOffset();
            }
            else
            {
                m_AlamanacOffsetLastFrameIsGood = false;
                m_AlmanacOffsetLastFrame        = 0;
            }

            m_Engine            = fileMetadataInfo.Engine;
            m_CameraModel       = fileMetadataInfo.Camera;
            m_UsesNtpTimestamps = fileMetadataInfo.HasNTPTimeStamps;

            if (m_Engine == "AAV")
            {
                m_VideoStandard = GetFileTag("NATIVE-VIDEO-STANDARD");
                double.TryParse(GetFileTag("NATIVE-FRAME-RATE"), out m_NativeFrameRate);

                int.TryParse(GetFileTag("OSD-FIRST-LINE"), out m_OsdFirstLine);
                int.TryParse(GetFileTag("OSD-LAST-LINE"), out m_OsdLastLine);

                if (m_OsdLastLine > m_Height)
                {
                    m_OsdLastLine = m_Height;
                }
                if (m_OsdFirstLine < 0)
                {
                    m_OsdFirstLine = 0;
                }

                m_IntegratedAAVFrames = -1;

                if (double.TryParse(GetFileTag("EFFECTIVE-FRAME-RATE"), out m_EffectiveFrameRate) && m_NativeFrameRate != 0)
                {
                    m_IntegratedAAVFrames = (int)Math.Round(m_NativeFrameRate / m_EffectiveFrameRate);
                }

                int.TryParse(GetFileTag("FRAME-STACKING-RATE"), out m_StackingRate);
                if (m_StackingRate == 1)
                {
                    m_StackingRate = 0;                                  // Video stacked at x1 is a non-stacked video
                }
            }
            else
            {
                m_OsdFirstLine = 0;
                m_OsdLastLine  = 0;
            }

            m_OcrDataAvailable = null;
        }