Exemple #1
0
        void AddEntry(KeyValuePairXCol <string, string> trg, XElement src, XName attrName, string propName)
        {
            string vl = src.GetAttributeValue(attrName);

            if (!string.IsNullOrEmpty(vl))
            {
                trg.Add(propName, vl);
            }
        }
Exemple #2
0
        public KeyValuePairXCol <string, string> GetMetadataShell(MediaFile source)
        {
            KeyValuePairXCol <string, string> rz = new KeyValuePairXCol <string, string>();

            Shell32.Shell  shell = new Shell32.Shell();
            Shell32.Folder objFolder;
            var            srcFolder = Path.GetDirectoryName(source.FullName);
            string         val;

            objFolder = shell.NameSpace(srcFolder);
            List <string> arrHeaders = new List <string>();

            for (int i = 0; i < short.MaxValue; i++)
            {
                string header = objFolder.GetDetailsOf(null, i);
                if (String.IsNullOrEmpty(header))
                {
                    break;
                }
                arrHeaders.Add(header);
            }

            foreach (Shell32.FolderItem2 item in objFolder.Items())
            {
                if (string.Compare(item.Name, source.Title, true) == 0)
                {
                    rz.AddRange(GetXProp(item, "Bitrate", "Frame rate", "Duration"));
                    for (int i = 0; i < arrHeaders.Count; i++)
                    {
                        val = objFolder.GetDetailsOf(item, i);
                        if (!string.IsNullOrWhiteSpace(val))
                        {
                            rz.Add(arrHeaders[i], val);
                        }
                        //System.Diagnostics.Debug.WriteLine("{0}\t{1}: {2}", i, arrHeaders[i], objFolder.GetDetailsOf(item, i));
                    }
                    break;
                }
            }
            return(rz);
        }
Exemple #3
0
        public static KeyValuePairXCol <string, string> GetMetadata(ExifReader xfr, ImageFile mf = null)
        {
            KeyValuePairXCol <string, string> rz = new KeyValuePairXCol <string, string>();
            object        tmp;
            string        ts;
            UInt32        tw, th;
            DateTime      dt;
            StringBuilder sb;
            UInt16        un16;
            double        td;
            object        otm;

            //CodeValueList mats = (mf==null) ? null : mf.MediaAttributesSafe;
            try {
                sb = new StringBuilder();
                if (xfr.GetTagValue(ExifTags.Make, out ts))
                {
                    sb.Append(ts);
                }
                if (xfr.GetTagValue(ExifTags.Model, out ts))
                {
                    if (sb.Length > 0)
                    {
                        sb.Append(' ');
                    }
                    sb.Append(ts);
                }
                if (sb.Length > 0)
                {
                    rz.Add("Camera", ts = sb.ToString());
                    if (mf != null)
                    {
                        mf.Camera = ts;
                    }
                }

                if (xfr.GetTagValue(ExifTags.LensModel, out ts))
                {
                    rz.Add("Lens", ts);
                    if (mf != null)
                    {
                        mf.Lens = ts;
                    }
                }

                if (xfr.GetTagValue(ExifTags.XPSubject, out ts))
                {
                    rz.Add("Subject", ts);
                }

                if (xfr.GetTagValue(ExifTags.XPTitle, out ts))
                {
                    rz.Add("Title", ts);
                }

                if (xfr.GetTagValue(ExifTags.ImageDescription, out ts))
                {
                    rz.Add("Description", ts);
                }

                if (xfr.GetTagValue(ExifTags.XPKeywords, out otm))
                {
                    byte[] bsrc = otm as byte[];
                    if (bsrc != null)
                    {
                        //Should be Unicode
                        rz.Add("Keywords", Encoding.Unicode.GetString(bsrc));
                    }
                    else
                    {
                        rz.Add("Keywords", otm.ToString());
                    }
                }

                if (xfr.GetTagValue(ExifTags.ImageRating, out otm))
                {
                    rz.Add("Rating", otm.ToString());
                }

                if (xfr.GetTagValue(ExifTags.ImageRatingPct, out otm))
                {
                    rz.Add("Rating [%]", otm.ToString());
                }

                //if (xfr.GetTagValue(Constants.ExifTagId.SonyLens, out ts)) {
                //    rz.Add("Lens", ts);
                //}

                ImageDim dm = GetImgDim(xfr);
                if (dm != null)
                {
                    if (mf != null)
                    {
                        mf.Dimensions = dm;
                    }
                    rz.Add("Dimension [px]", dm.ToString());
                }
                //if (xfr.GetTagValue(ExifTags.ImageWidth, out tw)&& xfr.GetTagValue(ExifTags.ImageLength, out th)) {
                //    ImageDim dm = new ImageDim() { Width = tw, Height = th };
                //    rz.Add("Dimension [px]", dm.ToString());
                //}
                //else if (xfr.GetTagValue(Constants.ExifTagId.WidthPix, out tw) && xfr.GetTagValue(Constants.ExifTagId.HeightPix, out th)) {
                //    ImageDim dm = new ImageDim() { Width = tw, Height = th };
                //    rz.Add("Dimension [px]", dm.ToString());
                //}

                if (xfr.GetTagValue(ExifTags.Orientation, out un16))
                {
                    rz.Add("Orientation", un16.ToString());
                }

                if (xfr.GetTagValue(ExifTags.DateTimeDigitized, out dt))
                {
                    rz.Add("Date taken", dt.ToString("yyyy-MM-dd HH:mm:ss"));
                    if (mf != null)
                    {
                        mf.Timestamp = dt;
                    }
                }

                if (xfr.GetTagValue(ExifTags.FNumber, out td))
                {
                    rz.Add("FNumber", td.ToString());
                    if (mf != null)
                    {
                        mf.FNumber = td;
                    }
                }

                if (xfr.GetTagValue(ExifTags.ApertureValue, out otm))
                {
                    rz.Add("Apperture", otm.ToString());
                }

                if (xfr.GetTagValue(ExifTags.ExposureTime, out otm))
                {
                    rz.Add("Exposure", ts = otm.ToString());
                    if (mf != null)
                    {
                        mf.Exposure = ToDblN(ts);
                    }
                }

                if (xfr.GetTagValue(ExifTags.ISOSpeed, out otm))
                {
                    rz.Add("ISO Speed", otm.ToString());
                    if (mf != null)
                    {
                        mf.Iso = ToIntN(otm);
                    }
                }
                else if (xfr.GetTagValue(ExifTags.PhotographicSensitivity, out otm))
                {
                    rz.Add("ISO Speed", ts = otm.ToString());
                    if (mf != null)
                    {
                        mf.Iso = ToIntN(otm);
                    }
                }


                if (xfr.GetTagValue(ExifTags.FocalLength, out otm))
                {
                    rz.Add("Focal length", otm.ToString());
                }

                if (xfr.GetTagValue(ExifTags.WhiteBalance, out otm))
                {
                    rz.Add("White Balance", otm.ToString());
                }

                if (xfr.GetTagValue(ExifTags.WhitePoint, out otm))
                {
                    rz.Add("White Point", otm.ToString());
                }

                //BitmapMetadata mData = imgData as BitmapMetadata;
                //if (mData != null) {

                //    rz.Add("Application", mData.ApplicationName);
                //    rz.Add("Date taken", mData.DateTaken);
                //    rz.Add("Format", mData.Format);
                //    rz.Add("Title", mData.Title);
                //    rz.Add("Subject", mData.Subject);
                //    rz.Add("Location", mData.Location);
                //    rz.Add("Rating", mData.Rating.ToString());
                //    if (mData.Keywords != null) {
                //        rz.Add("Keywords", string.Join(", ", mData.Keywords));
                //    }
                //    rz.Add("Comment", mData.Comment);
                //    //foreach (var ms in mData) {
                //    //    rz.Add("", ms);
                //    //}
                //    //object tmp= mData.GetQuery("/app1/ifd/exif/{ushort=37378}") ?? mData.GetQuery("/xmp/exif:ApertureValue");
                //    //object tmp = mData.GetQuery("System.Photo.Aperture");
                //    //if (null != (tmp = mData.GetQuery("System.Photo.FNumber")))
                //    //    rz.Add("FNumber", tmp.ToString());
                //    //if (null != (tmp = mData.GetQuery("System.Photo.Aperture")))
                //    //    rz.Add("Apperture", tmp.ToString());
                //    //if (null!=(tmp= mData.GetQuery("/app1/ifd/exif/{ushort=33434}") ?? mData.GetQuery("/xmp/exif:ExposureTime")))
                //    //if (null != (tmp = mData.GetQuery("System.Photo.ExposureTime")))
                //    //    rz.Add("Exposure", tmp.ToString());
                //    if (null != (tmp = mData.GetQuery("System.Photo.SubjectDistance")))
                //        rz.Add("Distance", tmp.ToString());
                //    if (null != (tmp = mData.GetQuery("System.Photo.WhiteBalance")))
                //        rz.Add("White balance", tmp.ToString());
                //    //if (null != (tmp = mData.GetQuery("System.Photo.Orientation")))
                //    //    rz.Add("Orientation", tmp.ToString());
                //    //if (null != (tmp = mData.GetQuery("System.Photo.ISOSpeed")))
                //    //    rz.Add("ISO Speed", tmp.ToString());
                //    //if (null != (tmp = mData.GetQuery("System.Photo.FocalLength")))
                //    //    rz.Add("Focal Length", tmp.ToString());
                //    //if (null != (tmp = mData.GetQuery("System.Photo.FocalLengthInFilm")))
                //    //    rz.Add("35mm Focal Length", tmp.ToString());
                //    //DumpMeta(mData);
                //}
            }
            catch (Exception x) {
                throw new BizException(string.Format("Failed to extract properties. {0}: {1}", x.GetType().Name, x.Message));
            }
            return(rz);
        }
Exemple #4
0
        /// <summary>
        /// Gets the metadata.
        /// </summary>
        /// <param name="sourcePath">The source path.</param>
        /// <returns></returns>
        /// <exception cref="Ops.NetCoe.LightFrame.BizException"></exception>
        public KeyValuePairXCol <string, string> GetMetadata(string sourcePath)
        {
            KeyValuePairXCol <string, string> rz = new KeyValuePairXCol <string, string>();
            //StringBuilder sout = new StringBuilder(1024), serr = new StringBuilder(512);
            //string args = string.Format("-i \"{0}\" -print_format xml -sexagesimal -show_error -show_format -show_streams", sourcePath);
            string action = null;
            string xtmp   = null;

            try {
                XElement xff = GetFFProbeXml(sourcePath);
                XElement xe  = xff.Element("format");

                //XAttribute xa;
                if (xe != null)
                {
                    AddEntry(rz, xe, "format_name", cnMediaFormat);
                    AddEntry(rz, xe, "duration", cnDuration);
                    AddEntry(rz, xe, "bit_rate", cnBitrate);
                    AddEntry(rz, xe, "size", "Size");
                }
                string codecType = null; //, pfx=null;
                foreach (var xs in xff.XPathSelectElements("streams/stream"))
                {
                    codecType = xs.GetAttributeValue("codec_type");
                    //pfx = null;
                    switch (codecType)
                    {
                    case "video": {
                        //pfx = "Video";
                        AddEntry(rz, xs, "codec_name", "Video Codec");
                        AddEntry(rz, xs, "height", "Height");
                        AddEntry(rz, xs, "width", "Width");
                        AddEntry(rz, xs, "display_aspect_ratio", "Aspect Ratio");
                        AddEntry(rz, xs, "pix_fmt", "Pixel Format");
                        AddEntry(rz, xs, "r_frame_rate", "Frame Rate");
                        //AddEntry(rz, xs, "duration", "Duration");
                    }
                    break;

                    case "audio": {
                        //pfx = "Audio";
                        AddEntry(rz, xs, "codec_name", "Audio Codec");
                        AddEntry(rz, xs, "bit_rate", "Audio Bit Rate");
                        AddEntry(rz, xs, "channels", "Channels");
                    }
                    break;

                        //case "subtitle": {
                        //        pfx = "Subtitle";
                        //    }
                        //    break;

                        //default:
                        //    AppContext.Current.LogTechError(string.Format("Failed to recognise stream type '{0}' in the file \"{1}\"", this.FfProbePath, args), null);
                        //    break;
                    }
                }
                action = string.Format("Get FileInfo for \"{0}\"", sourcePath);
                var fi = new FileInfo(sourcePath);
                if (fi != null)
                {
                    rz.Add("Size", fi.Length.ToString("##,#"));
                    rz.Add("Created", fi.CreationTime.ToString("yyyy-MM-dd HH:mm:ss"));
                    rz.Add("Type", fi.Extension);
                }
                else
                {
                    rz.Add("Type", Path.GetExtension(sourcePath));
                }
            }
            catch (BizException x) {
                throw;
            }
            catch (Exception x) {
                AppContext.Current.LogTechError(string.Format("Failed to {0}", action), x);
                System.Diagnostics.Debug.WriteLine(xtmp);
                throw new BizException(x.ToShortMsg(action));
            }
            return(rz);
        }