diff --git a/QuickLook.Plugin/QuickLook.Plugin.VideoViewer/MediaInfo-x64/MediaInfo.dll b/QuickLook.Plugin/QuickLook.Plugin.VideoViewer/MediaInfo-x64/MediaInfo.dll new file mode 100644 index 0000000..171477a Binary files /dev/null and b/QuickLook.Plugin/QuickLook.Plugin.VideoViewer/MediaInfo-x64/MediaInfo.dll differ diff --git a/QuickLook.Plugin/QuickLook.Plugin.VideoViewer/MediaInfo-x86/MediaInfo.dll b/QuickLook.Plugin/QuickLook.Plugin.VideoViewer/MediaInfo-x86/MediaInfo.dll new file mode 100644 index 0000000..cd847dd Binary files /dev/null and b/QuickLook.Plugin/QuickLook.Plugin.VideoViewer/MediaInfo-x86/MediaInfo.dll differ diff --git a/QuickLook.Plugin/QuickLook.Plugin.VideoViewer/MediaInfo.Wrapper.dll b/QuickLook.Plugin/QuickLook.Plugin.VideoViewer/MediaInfo.Wrapper.dll new file mode 100644 index 0000000..7c5f31d Binary files /dev/null and b/QuickLook.Plugin/QuickLook.Plugin.VideoViewer/MediaInfo.Wrapper.dll differ diff --git a/QuickLook.Plugin/QuickLook.Plugin.VideoViewer/MediaInfo.Wrapper.xml b/QuickLook.Plugin/QuickLook.Plugin.VideoViewer/MediaInfo.Wrapper.xml new file mode 100644 index 0000000..f085e0f --- /dev/null +++ b/QuickLook.Plugin/QuickLook.Plugin.VideoViewer/MediaInfo.Wrapper.xml @@ -0,0 +1,3634 @@ + + + + MediaInfo.Wrapper + + + + + Describes method to build audio stream. + + + + + + + + + + + Describes method to build chapter stream. + + + + + + + + + + + Describes media builder interface + + The type of the stream. + + + + Builds media stream. + + + + + + Describes base methods to build media stream with language + + The type of the stream. + + + + Initializes a new instance of the class. + + The media info object. + The stream number. + The stream position. + + + + + + + Describes base methods to build media stream + + The type of the stream. + + + + Converts the string representation of a value to specified type + + + The source value. + The result. + true if s was converted successfully; otherwise, false. + + + + Initializes a new instance of the class. + + The media info object. + The stream number. + The stream position. + + + + Gets the stream position. + + + The stream position. + + + + + Gets the logical stream number. + + + The logical stream number. + + + + + Gets the kind of media stream. + + + The kind of media stream. + + + + + Gets the kind of the stream. + + + The kind of the stream. + + + + + Gets the media info object to access to low-level functions. + + + The media info object. + + + + + + + + Gets the property value by the property name. + + The stream parameter name. + + The manual extract result function. + Returns property value of specified stream property name. + + + + Gets the property value by the property index. + + The stream property index. + The kind of property value + + The manual extract result function. + Returns property value of specified stream property index. + + + + Gets the specified property value by property name. + + The parameter. + The extract result. + Returns property value by name. If property does not defined will return . + + + + Gets the specified property value by the property index. + + The property index. + The kind of property value + The extract result. + Returns property value by name. If property does not defined will return . + + + + Describes method to build menu stream. + + + + + + + + + + + + + + Describes base methods to build subtitle stream. + + + + + Initializes a new instance of the class. + + The media info object. + The stream number. + The stream position. + + + + + + + + + + + + + Converts the string representation of a value to specified type + + + The source value. + The result. + true if s was converted successfully; otherwise, false. + + + + Describes base methods to build video stream. + + + + + Initializes a new instance of the class. + + The media info object. + The stream number. + The stream position. + + + + + + + + + + Describes video aspect ratio + + + + + The opaque (1:1) + + + + + The high end data graphics (5:4) + + + + + The full screen (4:3) + + + + + The standard slides (3:3) + + + + + The digital SLR cameras (3:2) + + + + + The High Definition TV (16:9) + + + + + The wide screen display (16:10) + + + + + The wide screen (1.85:1) + + + + + The cinema scope (21:9) + + + + + Defines constants for different kind of audio codecs. + + + + + The undefined audio codec + + + + + MPEG Layer 1 + + + + + MPEG Layer 2 + + + + + MPEG Layer 3 + + + + + PCM big-endian int + + + + + PCM little-endian int + + + + + PCM float IEEE + + + + + Dolby Digital + + + + + Dolby Digital Atmos + + + + + DolbyNet + + + + + DolbyNet + + + + + Dolby Digital Plus + + + + + Dolby Digital Plus Atmos + + + + + Dolby TrueHD + + + + + Dolby TrueHD Atmos + + + + + DTS + + + + + DTS-HD + + + + + Free Lossless Audio Codec + + + + + OPUS + + + + + True Audio + + + + + VORBIS + + + + + WavPack v4 + + + + + WavPack + + + + + Waveform Audio + + + + + Waveform Audio + + + + + The Real Audio + + + + + The Real Audio + + + + + The Real Audio + + + + + The Real Audio + + + + + The Real Audio + + + + + The Real Audio + + + + + Meridian Lossless + + + + + Advanced Audio Coding + + + + + Advanced Audio Coding + + + + + Advanced Audio Coding + + + + + Advanced Audio Coding + + + + + Advanced Audio Coding + + + + + Advanced Audio Coding + + + + + Advanced Audio Coding + + + + + Advanced Audio Coding + + + + + Advanced Audio Coding + + + + + Advanced Audio Coding + + + + + Advanced Audio Coding + + + + + Apple Lossless + + + + + Monkey's Audio + + + + + Windows Media Audio + + + + + Windows Media Audio v2 + + + + + Windows Media Audio 9 + + + + + Adaptive differential pulse-code modulation + + + + + Adaptive multi rate + + + + + Adaptive Transform Acoustic Coding (SDDS) + + + + + Adaptive Transform Acoustic Coding 3 + + + + + ATRAC3plus + + + + + ATRAC Advanced Lossless + + + + + ATRAC9 + + + + + Provides properties and overridden methods for the analyze audio stream + and contains information about audio stream. + + + + + + + + + + + + Gets the audio codec. + + + The audio codec. + + + + + Gets the codec friendly name. + + + The codec friendly name. + + + + + Gets the stream duration. + + + The stream duration. + + + + + Gets the audio bitrate. + + + The audio bitrate. + + + + + Gets the audio channel amount. + + + The audio channel amount. + + + + + Gets the audio sampling rate. + + + The audio sampling rate. + + + + + Gets the bit depth of stream. + + + The bit depth of stream. + + + + + Gets the audio format. + + + The audio format. + + + + + Gets the audio codec name. + + + The audio codec name. + + + + + Gets the audio channels friendly. + + + The audio channels friendly. + + + + + Gets the stream tags. + + + The stream tags. + + + + + Describes properties of the audio tags + + + + + + Gets the title of the album. + + + The title of the album. + + + + + Gets the title of the track. + + + The title of the track. + + + + + Gets the title of the subtrack. + + + The title of the subtrack. + + + + + Gets the original album name (in case of a remake/remix). + + + The original album name (in case of a remake/remix). + + + + + Gets the original track name (in case of a remake/remix). + + + The original track name (in case of a remake/remix). + + + + + Gets the number of the current track. + + + The number of the current track. + + + + + Gets the number of all tracks. + + + The number of all tracks. + + + + + Gets the number of the current part in a multi-disc album. + + + The number of the current part in a multi-disc album. + + + + + Gets the number of all parts in a multi-disc album. + + + The number of all parts in a multi-disc album. + + + + + Gets a person or band/collective generally considered responsible for the work : Singer, Implementor. + + + A person or band/collective generally considered responsible for the work : Singer, Implementor. + + + + + Gets the album artist. + + + The album artist. + + + + + Gets the official artist/performer web page. + + + The official artist/performer web page. + + + + + Gets the accompaniment name. + + + The accompaniment name. + + + + + Gets the composer name. + + + The composer name. + + + + + Gets the composer nationality. + + + The composer nationality. + + + + + Gets the arranger name. + + + The arranger name. + + + + + Gets the lyricist name. + + + The lyricist name. + + + + + Gets the conductor name. + + + The conductor name. + + + + + Gets the sound engineer name. + + + The sound engineer name. + + + + + Gets who mastered track. + + + Who mastered track. + + + + + Gets who remixed track. + + + Who remixed track. + + + + + Gets the label name. + + + The label name. + + + + + Gets the recorded date. + + + The recorded date. + + + + + Gets the genre. + + + The genre. + + + + + Gets the mood. + + + The mood. + + + + + Gets the encoded original. + + + The encoded original. + + + + + Gets the track gain. + + + The track gain. + + + + + Gets the track peak. + + + The track peak. + + + + + Gets the track ISRC. + + + The track ISRC. + + + + + Gets the track MSDI. + + + The track MSDI. + + + + + Gets the bar code. + + + The bar code. + + + + + Gets the LCCN. + + + The LCCN. + + + + + Gets the catalog number. + + + The catalog number. + + + + + Gets the label code. + + + The label code. + + + + + Gets the name of the person or organisation that encoded/ripped the audio file. + + + The name of the person or organisation that encoded/ripped the audio file. + + + + + Base class to read tags from stream + + + + + Gets or sets the tags. + + + The tags. + + + + + Gets the title of the media. + + + The title of the media. + + + + + Gets a short description of the contents, such as "Two birds flying". + + + A short description of the contents, such as "Two birds flying". + + + + + Gets the keywords to the item separated by a comma, used for searching. + + + The keywords to the item separated by a comma, used for searching. + + + + + Gets the country. + + + The country. + + + + + Gets the time that the item was originally released. + + + The time that the item was originally released. + + + + + Gets the time that the encoding of this item was completed began. + + + The time that the encoding of this item was completed began. + + + + + Gets the time that the tags were done for this item. + + + The time that the tags were done for this item. + + + + + Gets any comment related to the content. + + + Any comment related to the content. + + + + + Gets a numeric value defining how much a person likes the song/movie. The number is between 0 and 5 with decimal values possible (e.g. 2.7), 5(.0) being the highest possible rating. + + + a numeric value defining how much a person likes the song/movie. The number is between 0 and 5 with decimal values possible (e.g. 2.7), 5(.0) being the highest possible rating. + + + + + Gets the copyright attribution. + + + The copyright attribution. + + + + + Gets the name of the organization producing the track (i.e. the 'record label'). + + + The name of the organization producing the track (i.e. the 'record label'). + + + + + Gets the publishers official web page. + + + The publishers official web page. + + + + + Gets the name of the organization distributing track. + + + The name of the organization distributing track. + + + + + Gets the average number of beats per minute in the complete target. + + + The average number of beats per minute in the complete target. + + + + + Gets the cover media. + + + The cover media. + + + + + Describes properties of the cover tags + + + + + Gets a value indicating whether this is exists. + + + true if exists; otherwise, false. + + + + + Gets the description of the cover. + + + The description of the cover. + + + + + Gets the type of the cover. + + + The type of the cover. + + + + + Gets the MIME of the cover. + + + The MIME of the cover. + + + + + Gets the cover data. + + + The cover data. + + + + + Provides properties and overridden methods for the analyze chapter in media + and contains information about chapter. + + + + + + + + + + + + Gets the chapter offset. + + + The chapter offset. + + + + + Gets the chapter description. + + + The chapter description. + + + + + Static extensions for file paths + + + + + Determines whether path is live TV. + + The path. + + true if the specified path is live TV; otherwise, false. + + + + + Determines whether this instance is RTSP. + + The path. + + true if the specified path is RTSP; otherwise, false. + + + + + Determines whether path is network video. + + The path. + + true if the specified path is network video; otherwise, false. + + + + + Determines whether the specified path is video. + + The path. + + true if the specified path is video; otherwise, false. + + + + + Determines whether this instance is picture. + + The path. + + true if the specified path is picture; otherwise, false. + + + + + Determines whether is LastFM stream. + + The path. + + true if the specified path is LastFM stream; otherwise, false. + + + + + Determines whether specified path is network path. + + The path. + + true if the specified path is network path; otherwise, false. + + + + + Gets the type of the drive. + + The drive. + Returns drive type. + 0 - undefined + 2 - removable drive (Flash, Floppy) + 3 - fixed drive (HDD) + 4 - remote drive (network share) + 5 - CD/DVD drive + 6 - RAM disk drive + + + + + Determines whether the specified string path is UNC network. + + The string path. + + true if the specified string path is UNC network; otherwise, false. + + + + + Determines whether the specified string path is A/V stream. + + The string path. + + true if the specified string path is A/V stream; otherwise, false. + + + + + Determines whether the specified string path is remote URL. + + The string path. + + true if the specified string path is remote URL; otherwise, false. + + + + + Determines whether specified path is audio. + + The path. + + true if the specified path is audio; otherwise, false. + + + + + Describes methods to work with unmanaged Global memory block + + + + + + Initializes a new instance of the class. + + The handle. + + + + Finalizes an instance of the class. + + + + + Gets the handle. + + + The handle. + + + + + Releases unmanaged and - optionally - managed resources. + + + + + Strings to global ANSI string. + + The source. + + + + + Describes methods to manipulate language data + + + + + Gets the language by LCID. + + The LCID. + Returns language name + + + + Gets language by the short language name. + + The short language name. + Returns language name. + + + + Gets LCID by short language name. + + The short language. + Returns LCID. + + + + Provides properties and overridden methods for the analyze stream + and contains information about media stream. + + + + + + Gets the media stream language. + + + The media stream language. + + + + + Gets the media stream LCID. + + + The media stream LCID. + + + + + Gets a value indicating whether this is default. + + + true if default; otherwise, false. + + + + + Gets a value indicating whether this is forced. + + + true if forced; otherwise, false. + + + + + Describes kind of streams + + + + + The general (container, disk info) + + + + + The video + + + + + The audio + + + + + The subtitles and text information + + + + + The other (chapters) + + + + + The image + + + + + The menu + + + + + Describes low-level functions to access to media information + + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The path to mediainfo.dll. + + + + Finalizes an instance of the class. + + + + + Opens the specified file name. + + Name of the file. + Return internal handle to access to low-level functions. + + + + Opens the buffer initialize. + + Size of the file. + The file offset. + + + + + Opens the buffer continue. + + The buffer. + Size of the buffer. + + + + + Opens the buffer continue go to get. + + + + + + Opens the buffer finalize. + + + + + + Closes this instance. + + + + + Informs media stream data. + + + + + + Gets property value by specified stream kind and name. + + Kind of the stream. + The stream number. + The parameter. + The kind of information. + The kind of search. + Returns property value + + + + Sets value to specified option name. + + The option name. + The option value. + + + + + Gets the state. + + + + + + Gets count items of the specified stream. + + Kind of the stream. + The stream number. + + + + + Gets the specified parameter value in the stream by parameter name. + + Kind of the stream. + The stream number. + The parameter. + + + + + Gets the specified parameter value in the stream by parameter index. + + Kind of the stream. + The stream number. + The parameter. + + + + + Gets options value by the specified option name. + + The option. + + + + + Gets count of specified kind of streams. + + Kind of the streams. + + + + + Releases unmanaged and - optionally - managed resources. + + + + + Describes low-level function to access to mediaInfo lists + + + + + + Initializes a new instance of the class. + + + + + Finalizes an instance of the class. + + + + + Opens the specified file name. + + Name of the file. + The options. + + + + + Closes the specified file position. + + The file position. + + + + Informs the specified file position. + + The file position. + + + + + Gets the property value in specified file position by stream and property name. + + The file position. + Kind of the stream. + The stream number. + The property name. + The kind of information. + The kind of search. + + + + + Gets the property value in specified file position by stream and property index. + + The file position. + Kind of the stream. + The stream number. + The property index. + The kind of information. + + + + + Sets options value by the specified option name. + + The option name. + The option value. + + + + + Gets current state. + + + + + + Gets count of items in file position and stream. + + The file position. + Kind of the stream. + The stream number. + + + + + Opens the specified file name. + + Name of the file. + + + + Closes this instance. + + + + + Gets the specified file position. + + The file position. + Kind of the stream. + The stream number. + The parameter. + The kind of information. + + + + + Gets the specified file position. + + The file position. + Kind of the stream. + The stream number. + The parameter. + + + + + Gets the specified file position. + + The file position. + Kind of the stream. + The stream number. + The parameter. + + + + + Gets options value by the specified option name. + + The option name. + + + + + Gets count of specified kind of stream in th file position. + + The file position. + Kind of the streams. + + + + + Releases unmanaged and - optionally - managed resources. + + + + + Describes method and properties to retrieve information from media source + + + + + Initializes a new instance of the class. + + The file path. + + + + Initializes a new instance of the class. + + The file path. + The path to DLL. + + + + Checks if mediaInfo.dll file exist. + + The path to mediaInfo.dll + Returns true if mediaInfo.dll is exists; elsewhere false. + + + + Gets a value indicating whether this instance has video. + + + true if this instance has video; otherwise, false. + + + + + Gets a value indicating whether media has at least one video stream with stereoscopic effect. + + + true if is3d; otherwise, false. + + + + + Gets the video streams. + + + The video streams. + + + + + Gets the best video stream. + + + The best video stream. + + + + + Gets the video codec. + + + The video codec. + + + + + Gets the video frame rate. + + + The video frame rate. + + + + + Gets the video width. + + + The video width. + + + + + Gets the video height. + + + The video height. + + + + + Gets the video aspect ratio. + + + The video aspect ratio. + + + + + Gets the type of the scan. + + + The type of the scan. + + + + + Gets a value indicating whether video is interlaced. + + + true if video is interlaced; otherwise, false. + + + + + Gets the video resolution. + + + The video resolution. + + + + + Gets the video bitrate. + + + The video bitrate. + + + + + Gets the audio streams. + + + The audio streams. + + + + + Gets the best audio stream. + + + The best audio stream. + + + + + Gets the audio codec. + + + The audio codec. + + + + + Gets the audio bitrate. + + + The audio bitrate. + + + + + Gets the audio sample rate. + + + The audio sample rate. + + + + + Gets the count of audio channels. + + + The count of audio channels. + + + + + Gets the audio channels friendly name. + + + The audio channels friendly name. + + + + + Gets the list of media subtitles. + + + The media subtitles. + + + + + Gets a value indicating whether media has internal or external subtitles. + + + true if media has subtitles; otherwise, false. + + + + + Gets a value indicating whether this instance has external subtitles. + + + true if this instance has external subtitles; otherwise, false. + + + + + Gets the media chapters. + + + The media chapters. + + + + + Gets a value indicating whether media has chapters. + + + true if media has chapters; otherwise, false. + + + + + Gets the menu streams from media. + + + The menu streams. + + + + + Gets a value indicating whether media has menu. + + + true if media has menu; otherwise, false. + + + + + Gets a value indicating whether media is DVD. + + + true if media is DVD; otherwise, false. + + + + + Gets a value indicating whether media is BluRay. + + + true if media is BluRay; otherwise, false. + + + + + Gets a value indicating whether media information was not loaded. + + + true if media information was not loaded; otherwise, false. + + + + + Gets the duration of the media. + + + The duration of the media. + + + + + Gets the mediainfo.dll version. + + + The mediainfo.dll version. + + + + + Gets the media size. + + + The media size. + + + + + Gets the tags. + + + The tags. + + + + + Defines constants for media stream kinds. + + + + + The video stream + + + + + The audio stream + + + + + The subtitle stream + + + + + The image stream + + + + + Menu + + + + + Provides basic properties and instance methods for the analyze stream + and contains information about media stream. + + + + + + Gets or sets the media steam id. + + + The media steam id. + + + + + Gets or sets the name of stream. + + + The name of stream. + + + + + Gets the kind of media stream. + + + The kind of media stream. + + + + + Gets the kind of the stream. + + + The kind of the stream. + + + + + Gets the stream position. + + + The stream position. + + + + + Gets the logical stream number. + + + The logical stream number. + + + + + Describes properties of the menu + + + + + + Initializes a new instance of the class. + + + + + Gets or sets the menu duration. + + + The menu duration. + + + + + Gets the chapters. + + + The chapters. + + + + + + + + + + + Describes properties of the menu chapter + + + + + Gets or sets the menu position. + + + The menu position. + + + + + Gets or sets the menu chapter name. + + + The menu chapter name. + + + + + Describes 3D stereo mode + + + + + No 3D (mono) + + + + + The side by side left eye is first + + + + + The top bottom right eye is first + + + + + The top bottom left eye is first + + + + + The checkerboard right eye is first + + + + + The checkerboard left eye is first + + + + + The row interleaved right eye is first + + + + + The row interleaved left eye is first + + + + + The column interleaved right eye is first + + + + + The column interleaved left eye is first + + + + + The anaglyph cyan-red + + + + + The side by side right eye is first + + + + + The anaglyph green-magenta + + + + + The both eyes laced left eye is first + + + + + The both eyes laced right eye is first + + + + + Defines constants for different kind of subtitles. + + + + + The undefined type. + + + + + The Advanced SubStation Alpha subtitles. + + + + + The BMP image subtitles. + + + + + The SubStation Alpha subtitles. + + + + + The Advanced SubStation Alpha text subtitles. + + + + + The SubStation Alpha text subtitles. + + + + + The Universal Subtitle Format text subtitles. + + + + + The Unicode text subtitles. + + + + + The Universal Subtitle Format subtitles. + + + + + The Unicode subtitles. + + + + + The VOB SUB subtitles (DVD subtitles). + + + + + The Presentation Grapic Stream Subtitle Format subtitles + + + + + The HDMV Text Subtitle Format subtitles + + + + + Describes type of video codecs + + + + + The undefined + + + + + The uncompressed + + + + + Dirac + + + + + MPEG4 + + + + + MPEG4 Simple Profile + + + + + MPEG4 Advanced Simple Profile + + + + + MPEG4 Advanced Profile + + + + + MPEG4 AVC + + + + + MPEG4 ISO Simple Profile + + + + + MPEG4 ISO Advanced Simple Profile + + + + + MPEG4 ISO Advanced Profile + + + + + MPEG4 ISO AVC + + + + + MPEG4 ISO HEVC + + + + + The Windows Media MPEG4 V1 + + + + + The Windows Media MPEG4 V2 + + + + + The Windows Media MPEG4 V3 + + + + + VC1 + + + + + The MPEG1 + + + + + The MPEG2 + + + + + The ProRes + + + + + Real Video v1 + + + + + Real Video v2 + + + + + Real Video v3 + + + + + Real Video v4 + + + + + Theora + + + + + TrueMotion VP6 + + + + + VP8 + + + + + VP9 + + + + + DivX v1 + + + + + DivX v2 + + + + + DivX v3.x + + + + + DivX v4 + + + + + DivX v5 + + + + + The XVid + + + + + Sorenson Video v1 + + + + + Sorenson Video v2 + + + + + Sorenson Video v3 + + + + + The Sorenson Spark + + + + + H.260 + + + + + H.261 + + + + + H.263 + + + + + AVdv + + + + + Autodesk Digital Video v1 + + + + + FF video codec 1 + + + + + FF video codec 2 + + + + + IV21 + + + + + IV30 + + + + + IV40 + + + + + IV50 + + + + + The FFDShow MPEG-4 Video + + + + + The FFDShow MPEG-4 Video + + + + + HuffYUV 2.2 + + + + + Motion JPEG + + + + + Digital Video + + + + + Digital Video HD + + + + + DVCPRO50 + + + + + DVCPRO HD + + + + + Windows Media Video V7 + + + + + Windows Media Video V8 + + + + + Windows Media Video V9 + + + + + QuickTime 8BPS + + + + + Bink video + + + + + Describes properties of the video tags + + + + + + Gets the title of the collection. + + + The title of the collection. + + + + + Gets the title of the season. + + + The title of the season. + + + + + Gets the title of part. + + + The title of part. + + + + + Gets the title of the file for a video file. + + + The title of the file for a video file. + + + + + Gets the title of chapter. + + + The title of chapter. + + + + + Gets the original movie. + + + The original movie. + + + + + Gets the track position. + + + The track position. + + + + + Gets the composer name. + + + The composer name. + + + + + Gets the composer nationality. + + + The composer nationality. + + + + + Gets the arranger name. + + + The arranger name. + + + + + Gets the lyricist name. + + + The lyricist name. + + + + + Gets the conductor name. + + + The conductor name. + + + + + Gets the sound engineer name. + + + The sound engineer name. + + + + + Gets the real name of actor. + + + The real name of actor. + + + + + Gets the name of the character an actor or actress plays in this movie. + + + The name of the character an actor or actress plays in this movie. + + + + + Gets the author of the story or script. + + + The author of the story or script. + + + + + Gets the author of the screenplay or scenario (used for movies and TV shows). + + + The author of the screenplay or scenario (used for movies and TV shows). + + + + + Gets the name of the director. + + + The name of the director. + + + + + Gets the name of assistant director. + + + The name of assistant director. + + + + + Gets the name of the director of photography, also known as cinematographer. + + + The name of the director of photography, also known as cinematographer. + + + + + Gets the person who oversees the artists and craftspeople who build the sets. + + + The person who oversees the artists and craftspeople who build the sets. + + + + + Gets the editor name. + + + The editor name. + + + + + Gets the name of producer the movie. + + + The name of producer the movie. + + + + + Gets the name of co-producer. + + + The name of co-producer. + + + + + Gets the name of executive producer. + + + The name of executive producer. + + + + + Gets the artist responsible for designing the overall visual appearance of a movie. + + + The artist responsible for designing the overall visual appearance of a movie. + + + + + Gets the name of the costume designer. + + + The name of the costume designer. + + + + + Gets the name of the choreographer. + + + The name of the choreographer. + + + + + Gets the name of production studio. + + + The name of production studio. + + + + + Gets the time that the composition of the music/script began. + + + The time that the composition of the music/script began. + + + + + Gets the main genre of the audio or video; e.g. "classical", "ambient-house", "synthpop", "sci-fi", "drama", etc. + + + The main genre of the audio or video; e.g. "classical", "ambient-house", "synthpop", "sci-fi", "drama", etc. + + + + + Gets intended to reflect the mood of the item with a few keywords, e.g. "Romantic", "Sad", "Uplifting", etc. + + + Intended to reflect the mood of the item with a few keywords, e.g. "Romantic", "Sad", "Uplifting", etc. + + + + + Gets the name of the software package used to create the file, such as "Microsoft WaveEdit." + + + The name of the software package used to create the file, such as "Microsoft WaveEdit." + + + + + Gets the software or hardware used to encode this item; e.g. "LAME" or "XviD" + + + The software or hardware used to encode this item; e.g. "LAME" or "XviD". + + + + + Gets a list of the settings used for encoding this item. No specific format. + + + A list of the settings used for encoding this item. No specific format. + + + + + Gets a plot outline or a summary of the story. + + + A plot outline or a summary of the story. + + + + + Provides properties and overridden methods for the analyze subtitle stream + and contains information about subtitle. + + + + + + Gets the subtitle format. + + + The subtitle format. + + + + + Gets the subtitle codec. + + + The subtitle codec. + + + + + + + + + + + Describes properties of the video stream and method to analyze stream + + + + + + + + + + + + Gets or sets the video frame rate. + + + The video frame rate. + + + + + Gets or sets the video width. + + + The video width. + + + + + Gets or sets the video height. + + + The video height. + + + + + Gets or sets the video bitrate. + + + The video bitrate. + + + + + Gets or sets the video aspect ratio. + + + The video aspect ratio. + + + + + Gets or sets a value indicating whether this is interlaced. + + + true if interlaced; otherwise, false. + + + + + Gets or sets the video stereoscopic mode. + + + The video stereoscopic mode. + + + + + Gets or sets the video format. + + + The video format. + + + + + Gets or sets the video codec. + + + The video codec. + + + + + Gets or sets the stream duration. + + + The stream duration. + + + + + Gets or sets the video bit depth. + + + The video bit depth. + + + + + Gets or sets the name of the video codec. + + + The name of the video codec. + + + + + Gets the video resolution. + + + The video resolution. + + + + + Gets the video size. + + + The vidoe size. + + + + + Gets the video stream tags. + + + The video stream tags. + + + + + Indicates that the value of the marked element could be null sometimes, + so the check for null is necessary before its usage. + + + [CanBeNull] object Test() => null; + + void UseTest() { + var p = Test(); + var s = p.ToString(); // Warning: Possible 'System.NullReferenceException' + } + + + + + Indicates that the value of the marked element could never be null. + + + [NotNull] object Foo() { + return null; // Warning: Possible 'null' assignment + } + + + + + Can be appplied to symbols of types derived from IEnumerable as well as to symbols of Task + and Lazy classes to indicate that the value of a collection item, of the Task.Result property + or of the Lazy.Value property can never be null. + + + + + Can be appplied to symbols of types derived from IEnumerable as well as to symbols of Task + and Lazy classes to indicate that the value of a collection item, of the Task.Result property + or of the Lazy.Value property can be null. + + + + + Indicates that the marked method builds string by format pattern and (optional) arguments. + Parameter, which contains format string, should be given in constructor. The format string + should be in -like form. + + + [StringFormatMethod("message")] + void ShowError(string message, params object[] args) { /* do something */ } + + void Foo() { + ShowError("Failed: {0}"); // Warning: Non-existing argument in format string + } + + + + + Specifies which parameter of an annotated method should be treated as format-string + + + + + For a parameter that is expected to be one of the limited set of values. + Specify fields of which type should be used as values for this parameter. + + + + + Indicates that the function argument should be string literal and match one + of the parameters of the caller function. For example, ReSharper annotates + the parameter of . + + + void Foo(string param) { + if (param == null) + throw new ArgumentNullException("par"); // Warning: Cannot resolve symbol + } + + + + + Indicates that the method is contained in a type that implements + System.ComponentModel.INotifyPropertyChanged interface and this method + is used to notify that some property value changed. + + + The method should be non-static and conform to one of the supported signatures: + + NotifyChanged(string) + NotifyChanged(params string[]) + NotifyChanged{T}(Expression{Func{T}}) + NotifyChanged{T,U}(Expression{Func{T,U}}) + SetProperty{T}(ref T, T, string) + + + + public class Foo : INotifyPropertyChanged { + public event PropertyChangedEventHandler PropertyChanged; + + [NotifyPropertyChangedInvocator] + protected virtual void NotifyChanged(string propertyName) { ... } + + string _name; + + public string Name { + get { return _name; } + set { _name = value; NotifyChanged("LastName"); /* Warning */ } + } + } + + Examples of generated notifications: + + NotifyChanged("Property") + NotifyChanged(() => Property) + NotifyChanged((VM x) => x.Property) + SetProperty(ref myField, value, "Property") + + + + + + Describes dependency between method input and output. + + +

Function Definition Table syntax:

+ + FDT ::= FDTRow [;FDTRow]* + FDTRow ::= Input => Output | Output <= Input + Input ::= ParameterName: Value [, Input]* + Output ::= [ParameterName: Value]* {halt|stop|void|nothing|Value} + Value ::= true | false | null | notnull | canbenull + + If method has single input parameter, it's name could be omitted.
+ Using halt (or void/nothing, which is the same) for method output + means that the methos doesn't return normally (throws or terminates the process).
+ Value canbenull is only applicable for output parameters.
+ You can use multiple [ContractAnnotation] for each FDT row, or use single attribute + with rows separated by semicolon. There is no notion of order rows, all rows are checked + for applicability and applied per each program state tracked by R# analysis.
+
+ + + [ContractAnnotation("=> halt")] + public void TerminationMethod() + + + [ContractAnnotation("halt <= condition: false")] + public void Assert(bool condition, string text) // regular assertion method + + + [ContractAnnotation("s:null => true")] + public bool IsNullOrEmpty(string s) // string.IsNullOrEmpty() + + + // A method that returns null if the parameter is null, + // and not null if the parameter is not null + [ContractAnnotation("null => null; notnull => notnull")] + public object Transform(object data) + + + [ContractAnnotation("=> true, result: notnull; => false, result: null")] + public bool TryParse(string s, out Person result) + + +
+ + + Indicates that marked element should be localized or not. + + + [LocalizationRequiredAttribute(true)] + class Foo { + string str = "my string"; // Warning: Localizable string + } + + + + + Indicates that the value of the marked type (or its derivatives) + cannot be compared using '==' or '!=' operators and Equals() + should be used instead. However, using '==' or '!=' for comparison + with null is always permitted. + + + [CannotApplyEqualityOperator] + class NoEquality { } + + class UsesNoEquality { + void Test() { + var ca1 = new NoEquality(); + var ca2 = new NoEquality(); + if (ca1 != null) { // OK + bool condition = ca1 == ca2; // Warning + } + } + } + + + + + When applied to a target attribute, specifies a requirement for any type marked + with the target attribute to implement or inherit specific type or types. + + + [BaseTypeRequired(typeof(IComponent)] // Specify requirement + class ComponentAttribute : Attribute { } + + [Component] // ComponentAttribute requires implementing IComponent interface + class MyComponent : IComponent { } + + + + + Indicates that the marked symbol is used implicitly (e.g. via reflection, in external library), + so this symbol will not be marked as unused (as well as by other usage inspections). + + + + + Should be used on attributes and causes ReSharper to not mark symbols marked with such attributes + as unused (as well as by other usage inspections) + + + + Only entity marked with attribute considered used. + + + Indicates implicit assignment to a member. + + + + Indicates implicit instantiation of a type with fixed constructor signature. + That means any unused constructor parameters won't be reported as such. + + + + Indicates implicit instantiation of a type. + + + + Specify what is considered used implicitly when marked + with or . + + + + Members of entity marked with attribute are considered used. + + + Entity marked with attribute and all its members considered used. + + + + This attribute is intended to mark publicly available API + which should not be removed and so is treated as used. + + + + + Tells code analysis engine if the parameter is completely handled when the invoked method is on stack. + If the parameter is a delegate, indicates that delegate is executed while the method is executed. + If the parameter is an enumerable, indicates that it is enumerated while the method is executed. + + + + + Indicates that a method does not make any observable state changes. + The same as System.Diagnostics.Contracts.PureAttribute. + + + [Pure] int Multiply(int x, int y) => x * y; + + void M() { + Multiply(123, 42); // Waring: Return value of pure method is not used + } + + + + + Indicates that the return value of method invocation must be used. + + + + + Indicates the type member or parameter of some type, that should be used instead of all other ways + to get the value that type. This annotation is useful when you have some "context" value evaluated + and stored somewhere, meaning that all other ways to get this value must be consolidated with existing one. + + + class Foo { + [ProvidesContext] IBarService _barService = ...; + + void ProcessNode(INode node) { + DoSomething(node, node.GetGlobalServices().Bar); + // ^ Warning: use value of '_barService' field + } + } + + + + + Indicates that a parameter is a path to a file or a folder within a web project. + Path can be relative or absolute, starting from web root (~). + + + + + An extension method marked with this attribute is processed by ReSharper code completion + as a 'Source Template'. When extension method is completed over some expression, it's source code + is automatically expanded like a template at call site. + + + Template method body can contain valid source code and/or special comments starting with '$'. + Text inside these comments is added as source code when the template is applied. Template parameters + can be used either as additional method parameters or as identifiers wrapped in two '$' signs. + Use the attribute to specify macros for parameters. + + + In this example, the 'forEach' method is a source template available over all values + of enumerable types, producing ordinary C# 'foreach' statement and placing caret inside block: + + [SourceTemplate] + public static void forEach<T>(this IEnumerable<T> xs) { + foreach (var x in xs) { + //$ $END$ + } + } + + + + + + Allows specifying a macro for a parameter of a source template. + + + You can apply the attribute on the whole method or on any of its additional parameters. The macro expression + is defined in the property. When applied on a method, the target + template parameter is defined in the property. To apply the macro silently + for the parameter, set the property value = -1. + + + Applying the attribute on a source template method: + + [SourceTemplate, Macro(Target = "item", Expression = "suggestVariableName()")] + public static void forEach<T>(this IEnumerable<T> collection) { + foreach (var item in collection) { + //$ $END$ + } + } + + Applying the attribute on a template method parameter: + + [SourceTemplate] + public static void something(this Entity x, [Macro(Expression = "guid()", Editable = -1)] string newguid) { + /*$ var $x$Id = "$newguid$" + x.ToString(); + x.DoSomething($x$Id); */ + } + + + + + + Allows specifying a macro that will be executed for a source template + parameter when the template is expanded. + + + + + Allows specifying which occurrence of the target parameter becomes editable when the template is deployed. + + + If the target parameter is used several times in the template, only one occurrence becomes editable; + other occurrences are changed synchronously. To specify the zero-based index of the editable occurrence, + use values >= 0. To make the parameter non-editable when the template is expanded, use -1. + > + + + + Identifies the target parameter of a source template if the + is applied on a template method. + + + + + ASP.NET MVC attribute. If applied to a parameter, indicates that the parameter + is an MVC action. If applied to a method, the MVC action name is calculated + implicitly from the context. Use this attribute for custom wrappers similar to + System.Web.Mvc.Html.ChildActionExtensions.RenderAction(HtmlHelper, String). + + + + + ASP.NET MVC attribute. Indicates that a parameter is an MVC area. + Use this attribute for custom wrappers similar to + System.Web.Mvc.Html.ChildActionExtensions.RenderAction(HtmlHelper, String). + + + + + ASP.NET MVC attribute. If applied to a parameter, indicates that the parameter is + an MVC controller. If applied to a method, the MVC controller name is calculated + implicitly from the context. Use this attribute for custom wrappers similar to + System.Web.Mvc.Html.ChildActionExtensions.RenderAction(HtmlHelper, String, String). + + + + + ASP.NET MVC attribute. Indicates that a parameter is an MVC Master. Use this attribute + for custom wrappers similar to System.Web.Mvc.Controller.View(String, String). + + + + + ASP.NET MVC attribute. Indicates that a parameter is an MVC model type. Use this attribute + for custom wrappers similar to System.Web.Mvc.Controller.View(String, Object). + + + + + ASP.NET MVC attribute. If applied to a parameter, indicates that the parameter is an MVC + partial view. If applied to a method, the MVC partial view name is calculated implicitly + from the context. Use this attribute for custom wrappers similar to + System.Web.Mvc.Html.RenderPartialExtensions.RenderPartial(HtmlHelper, String). + + + + + ASP.NET MVC attribute. Allows disabling inspections for MVC views within a class or a method. + + + + + ASP.NET MVC attribute. Indicates that a parameter is an MVC display template. + Use this attribute for custom wrappers similar to + System.Web.Mvc.Html.DisplayExtensions.DisplayForModel(HtmlHelper, String). + + + + + ASP.NET MVC attribute. Indicates that a parameter is an MVC editor template. + Use this attribute for custom wrappers similar to + System.Web.Mvc.Html.EditorExtensions.EditorForModel(HtmlHelper, String). + + + + + ASP.NET MVC attribute. Indicates that a parameter is an MVC template. + Use this attribute for custom wrappers similar to + System.ComponentModel.DataAnnotations.UIHintAttribute(System.String). + + + + + ASP.NET MVC attribute. If applied to a parameter, indicates that the parameter + is an MVC view component. If applied to a method, the MVC view name is calculated implicitly + from the context. Use this attribute for custom wrappers similar to + System.Web.Mvc.Controller.View(Object). + + + + + ASP.NET MVC attribute. If applied to a parameter, indicates that the parameter + is an MVC view component name. + + + + + ASP.NET MVC attribute. If applied to a parameter, indicates that the parameter + is an MVC view component view. If applied to a method, the MVC view component view name is default. + + + + + ASP.NET MVC attribute. When applied to a parameter of an attribute, + indicates that this parameter is an MVC action name. + + + [ActionName("Foo")] + public ActionResult Login(string returnUrl) { + ViewBag.ReturnUrl = Url.Action("Foo"); // OK + return RedirectToAction("Bar"); // Error: Cannot resolve action + } + + + + + Razor attribute. Indicates that a parameter or a method is a Razor section. + Use this attribute for custom wrappers similar to + System.Web.WebPages.WebPageBase.RenderSection(String). + + + + + Indicates how method, constructor invocation or property access + over collection type affects content of the collection. + + + + Method does not use or modify content of the collection. + + + Method only reads content of the collection but does not modify it. + + + Method can change content of the collection but does not add new elements. + + + Method can add new elements to the collection. + + + + Indicates that the marked method is assertion method, i.e. it halts control flow if + one of the conditions is satisfied. To set the condition, mark one of the parameters with + attribute. + + + + + Indicates the condition parameter of the assertion method. The method itself should be + marked by attribute. The mandatory argument of + the attribute is the assertion type. + + + + + Specifies assertion type. If the assertion method argument satisfies the condition, + then the execution continues. Otherwise, execution is assumed to be halted. + + + + Marked parameter should be evaluated to true. + + + Marked parameter should be evaluated to false. + + + Marked parameter should be evaluated to null value. + + + Marked parameter should be evaluated to not null value. + + + + Indicates that the marked method unconditionally terminates control flow execution. + For example, it could unconditionally throw exception. + + + + + Indicates that method is pure LINQ method, with postponed enumeration (like Enumerable.Select, + .Where). This annotation allows inference of [InstantHandle] annotation for parameters + of delegate type by analyzing LINQ method chains. + + + + + Indicates that IEnumerable, passed as parameter, is not enumerated. + + + + + Indicates that parameter is regular expression pattern. + + + + + Prevents the Member Reordering feature from tossing members of the marked class. + + + The attribute must be mentioned in your member reordering patterns + + + + + XAML attribute. Indicates the type that has ItemsSource property and should be treated + as ItemsControl-derived type, to enable inner items DataContext type resolve. + + + + + XAML attribute. Indicates the property of some BindingBase-derived type, that + is used to bind some item of ItemsControl-derived type. This annotation will + enable the DataContext type resolve for XAML bindings for such properties. + + + Property should have the tree ancestor of the ItemsControl type or + marked with the attribute. + + +
+
diff --git a/QuickLook.Plugin/QuickLook.Plugin.VideoViewer/Plugin.cs b/QuickLook.Plugin/QuickLook.Plugin.VideoViewer/Plugin.cs index 985af8d..559e401 100644 --- a/QuickLook.Plugin/QuickLook.Plugin.VideoViewer/Plugin.cs +++ b/QuickLook.Plugin/QuickLook.Plugin.VideoViewer/Plugin.cs @@ -18,10 +18,10 @@ using System; using System.IO; using System.Linq; +using System.Reflection; using System.Windows; +using MediaInfo; using QuickLook.Common.Plugin; -using TagLib; -using File = TagLib.File; namespace QuickLook.Plugin.VideoViewer { @@ -39,7 +39,7 @@ namespace QuickLook.Plugin.VideoViewer }; private ContextObject _context; - private File _det; + private MediaInfo.MediaInfo _mediaInfo; private ViewerPanel _vp; @@ -61,22 +61,38 @@ namespace QuickLook.Plugin.VideoViewer try { - _det = File.Create(path); + _mediaInfo = new MediaInfo.MediaInfo(Path.Combine( + Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), + Environment.Is64BitProcess ? "MediaInfo-x64\\" : "MediaInfo-x86\\")); + _mediaInfo.Option("Cover_Data", "base64"); + + _mediaInfo.Open(path); + } catch (Exception) { - // ignored + _mediaInfo?.Dispose(); + _mediaInfo = null; } context.TitlebarOverlap = true; - if ((_det?.Properties.MediaTypes ?? MediaTypes.Video).HasFlag(MediaTypes.Video)) // video + if (_mediaInfo == null || + !string.IsNullOrEmpty(_mediaInfo.Get(StreamKind.General, 0, "VideoCount"))) // video { + int.TryParse(_mediaInfo?.Get(StreamKind.Audio, 0, "Width"), out var width); + int.TryParse(_mediaInfo?.Get(StreamKind.Audio, 0, "Height"), out var height); + double.TryParse(_mediaInfo?.Get(StreamKind.Video, 0, "Rotation"), out var rotation); + var windowSize = new Size { - Width = Math.Max(1366, _det?.Properties.VideoWidth ?? 1366), - Height = Math.Max(768, _det?.Properties.VideoHeight ?? 768) + Width = Math.Max(1366, width == 0 ? 1366 : width), + Height = Math.Max(768, height == 0 ? 768 : height) }; + + if (rotation % 180 != 0) + windowSize = new Size(windowSize.Height, windowSize.Width); + context.SetPreferredSizeFit(windowSize, 0.8); context.TitlebarAutoHide = true; @@ -102,7 +118,7 @@ namespace QuickLook.Plugin.VideoViewer context.Title = $"{Path.GetFileName(path)}"; - _vp.LoadAndPlay(path, _det); + _vp.LoadAndPlay(path, _mediaInfo); } public void Cleanup() @@ -110,8 +126,8 @@ namespace QuickLook.Plugin.VideoViewer _vp?.Dispose(); _vp = null; - _det?.Dispose(); - _det = null; + _mediaInfo?.Dispose(); + _mediaInfo = null; _context = null; } diff --git a/QuickLook.Plugin/QuickLook.Plugin.VideoViewer/QuickLook.Plugin.VideoViewer.csproj b/QuickLook.Plugin/QuickLook.Plugin.VideoViewer/QuickLook.Plugin.VideoViewer.csproj index 296d9a6..80b4bd2 100644 --- a/QuickLook.Plugin/QuickLook.Plugin.VideoViewer/QuickLook.Plugin.VideoViewer.csproj +++ b/QuickLook.Plugin/QuickLook.Plugin.VideoViewer/QuickLook.Plugin.VideoViewer.csproj @@ -60,8 +60,8 @@ - - ..\..\packages\taglib.2.1.0.0\lib\policy.2.0.taglib-sharp.dll + + .\MediaInfo.Wrapper.dll @@ -70,9 +70,6 @@ 4.0 - - ..\..\packages\taglib.2.1.0.0\lib\taglib-sharp.dll - @@ -148,6 +145,12 @@ PreserveNewest + + PreserveNewest + + + PreserveNewest + PreserveNewest @@ -247,7 +250,6 @@ PreserveNewest - diff --git a/QuickLook.Plugin/QuickLook.Plugin.VideoViewer/ViewerPanel.xaml.cs b/QuickLook.Plugin/QuickLook.Plugin.VideoViewer/ViewerPanel.xaml.cs index 62e5c1d..6ae636c 100644 --- a/QuickLook.Plugin/QuickLook.Plugin.VideoViewer/ViewerPanel.xaml.cs +++ b/QuickLook.Plugin/QuickLook.Plugin.VideoViewer/ViewerPanel.xaml.cs @@ -25,15 +25,15 @@ using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Input; +using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Media.Imaging; +using MediaInfo; using QuickLook.Common.Annotations; using QuickLook.Common.Helpers; using QuickLook.Common.Plugin; -using TagLib; using WPFMediaKit.DirectShow.Controls; using WPFMediaKit.DirectShow.MediaPlayers; -using File = TagLib.File; namespace QuickLook.Plugin.VideoViewer { @@ -204,24 +204,27 @@ namespace QuickLook.Plugin.VideoViewer } } - private void UpdateMeta(string path, File det) + private void UpdateMeta(string path, MediaInfo.MediaInfo info) { if (HasVideo) return; try { - if (det == null) + if (info == null) throw new NullReferenceException(); - metaTitle.Text = !string.IsNullOrWhiteSpace(det.Tag.Title) ? det.Tag.Title : Path.GetFileName(path); - metaArtists.Text = det.Tag.FirstPerformer; - metaAlbum.Text = det.Tag.Album; + var title = info.Get(StreamKind.General, 0, "Title"); + var artist = info.Get(StreamKind.General, 0, "Performer"); + var album = info.Get(StreamKind.General, 0, "Album"); - //var cs = h.Tag.Pictures.FirstOrDefault(p => p.Type == TagLib.PictureType.FrontCover); - var cs = det.Tag.Pictures.FirstOrDefault(); - if (cs != default(IPicture)) - using (var ms = new MemoryStream(cs.Data.Data)) + metaTitle.Text = !string.IsNullOrWhiteSpace(title) ? title : Path.GetFileName(path); + metaArtists.Text = artist; + metaAlbum.Text = album; + + var cs = info.Get(StreamKind.General, 0, "Cover_Data"); + if (!string.IsNullOrEmpty(cs)) + using (var ms = new MemoryStream(Convert.FromBase64String(cs))) { CoverArt = BitmapFrame.Create(ms, BitmapCreateOptions.None, BitmapCacheOption.OnLoad); } @@ -257,9 +260,14 @@ namespace QuickLook.Plugin.VideoViewer mediaElement.Play(); } - public void LoadAndPlay(string path, File det) + public void LoadAndPlay(string path, MediaInfo.MediaInfo info) { - UpdateMeta(path, det); + UpdateMeta(path, info); + + // detect rotation + double.TryParse(info?.Get(StreamKind.Video, 0, "Rotation"), out var rotation); + if (Math.Abs(rotation) > 0.1) + mediaElement.LayoutTransform = new RotateTransform(rotation, 0.5, 0.5); mediaElement.Source = new Uri(path); mediaElement.Volume = SettingHelper.Get("VolumeDouble", 0.7); diff --git a/QuickLook.Plugin/QuickLook.Plugin.VideoViewer/packages.config b/QuickLook.Plugin/QuickLook.Plugin.VideoViewer/packages.config deleted file mode 100644 index 025807e..0000000 --- a/QuickLook.Plugin/QuickLook.Plugin.VideoViewer/packages.config +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file