gusucode.com > audiovideo工具箱matlab源码程序 > audiovideo/+audiovideo/FileFormatInfo.m

    classdef FileFormatInfo < hgsetget
    %FILEFORMATINFO A description of an audiovideo file format
    %   
    %   FORMAT = FILEFORMATINFO(EXTENSION, DESCRIPTION, CONTAINSVIDEO, CONTAINSAUDIO)
    %   returns a FileFormatInfo object.  EXTENSION is the file extension
    %   for the file format.  DESCRIPTION is a description of the file
    %   format. CONTAINSAUDIO is a boolean which specifies if the file
    %   format can hold audio daa.  CONTAINSVIDEO is a boolean which
    %   specifies if the file format can hold VIDEO data.
    %
    %   See also VIDEOREADER.GETFILEFORMATS
    %
    %   Authors: NH
    %   Copyright 2009-2013 The MathWorks, Inc.
    
    properties(GetAccess='public', SetAccess='private')
        Extension      % The file extension for this file format
        Description    % A text description of the file format
        ContainsAudio  % The File Format can hold video data
        ContainsVideo  % The File Format can hold audio data
    end
    
    %------------------------------------------------------------------
    % Documented methods
    %------------------------------------------------------------------
    methods(Access='public')
        
        %------------------------------------------------------------------
        % Lifetime
        %------------------------------------------------------------------
        function obj = FileFormatInfo(Extension, Description, ContainsVideo, ContainsAudio)
            if (~ContainsVideo && ~ContainsAudio)
                error(message('MATLAB:audiovideo:audiovideo:invalidArguments'));
            end
            
            obj.Extension = Extension;
            obj.Description = Description;
            obj.ContainsVideo = ContainsVideo;
            obj.ContainsAudio = ContainsAudio;
        end
 
        %------------------------------------------------------------------
        % Operations
        %------------------------------------------------------------------
      
        function filterSpec = getFilterSpec( obj, varargin )
            %GETFILTERSPEC Return a cell array for use in file dialogs
            %
            %   FILTERSPEC = GETFILTERSPEC( OBJ ) returns a cell array of
            %   fileformats from an AUDIOVIDEO.FILEFORMATINFO object, formatted in 
            %   a FILTERSPEC for use in the uigetfile and uiputfile functions.
            %
            %   FILTERSPEC = GETFILTERSPEC( OBJ, MEDIATYPE ) returns a FILTERSPEC
            %   containing only the specified MEDIATYPE.  MEDIATYPE is a
            %   string with the following possible values
            %      'video' - Return video file formats
            %      'audio' - Return audio file formats
            %      'all'   - Return all file formats
            %
            %   See also AUDIOVIDEO.FILEFORMATINFO, UIGETFILE, UIPUTFILE
            
            narginchk(1,2);
            
            mediaType = 'all';
            if nargin == 2
                mediaType = varargin{1};
            end
            
            videoSpec = {};
            if (strcmpi(mediaType, 'video') || strcmpi(mediaType, 'all'))
                videoSpec = getFilterSpecWithLabel(getVideoFormats(obj), getString(message('MATLAB:audiovideo:audiovideo:AllVideoFiles')));
            end
            
            audioSpec = {};
            if (strcmpi(mediaType, 'audio') || strcmpi(mediaType, 'all'))
                audioSpec = getFilterSpecWithLabel(getAudioFormats(obj),  getString(message('MATLAB:audiovideo:audiovideo:AllAudioFiles')));
            end
            
            allTypesSpec = {};
            if ~isempty(videoSpec) && ~isempty(audioSpec)
                allTypesSpec = getFilterSpecWithLabel(obj, getString(message('MATLAB:audiovideo:audiovideo:AllVideoAudioFiles')));
            end
                
            switch lower(mediaType)
                case 'video'
                    formats = getVideoFormats(obj);
                case 'audio'
                    formats = getAudioFormats(obj);
                case 'all'
                    formats = obj;
                otherwise
                    error(message('MATLAB:audiovideo:audiovideo:invalidMediaType')); 
            end
            
            
            filterSpec = cell(length(formats), 2);
            for ii = 1:length(formats)
                filterSpec{ii, 1} = sprintf('*.%s', formats(ii).Extension);
                filterSpec{ii, 2} = sprintf('%s (*.%s)',formats(ii).Description, formats(ii).Extension);
            end
            
            allFilesSpec = {'*.*', 'All Files (*.*)'};
            
            filterSpec = [allTypesSpec; videoSpec; audioSpec; filterSpec; allFilesSpec];
        end
        
        
        function disp(obj)
            display(obj);
        end
        
        function display(obj)
            printFormatsWithLabel(getVideoFormats(obj), getString(message('MATLAB:audiovideo:audiovideo:VideoFileFormats')));
            printFormatsWithLabel(getAudioFormats(obj), ...
                                  getString(message('MATLAB:audiovideo:audiovideo:AudioFileFormats')));
        end
    end
    
    methods(Access='private', Hidden)
        
        function printFormats(obj)
            % PRINTFORMATS print a list of file formats for display
            for ii = 1:length(obj)
                fprintf('%8s - %s\n', ...
                    sprintf('%s%s','.',obj(ii).Extension), ...
                    obj(ii).Description);
            end
        end
        
        function printFormatsWithLabel(obj, formatLabel)
            %PRINTFORMATSWITHLABEL print a labeled list of file formats
            %
            %  PRINTFORMATSWITHLABEL(FORMATS, FORMATLABEL) prints a
            %  formatted list file FORMATS with the FORMATLABEL at the top.
            
            if ~isempty(obj)
                fprintf('%s:\n', formatLabel);
                printFormats(obj);
            end
        end
        
        function filterSpec = getFilterSpecWithLabel( obj, formatLabel )
            %GETFILTERSPECWITHLABEL create a single labeled filterspec
            %   
            %   FILTERSPEC = GETFILTERSPECWITHLABEL( FORMATS, FORMATLABEL) 
            %   Given a list of FORMATS and a FORMATLABEL, this function
            %   creates a single FILTERSPEC entry with a discription of
            %   FORMATLABEL.
            
            if isempty(obj)
                filterSpec = {};
                return;
            end
            
            % Build up a filterspec for each file format provided
            % see uigetfile/uiputfile help for more info on filterspec
            % formatting.
            filterSpec = cell(1, 2);
            for ii = 1:length(obj)
                filterSpec{1, 1} = [filterSpec{1, 1} '*.' obj(ii).Extension ';'];
            end
            filterSpec{1, 2} = formatLabel;
        end
        
        function formats = getVideoFormats(obj)
            % GETVIDEOFORMATS return only formats that have video
            
            formats = obj([obj.ContainsVideo]);
        end
        
        function formats = getAudioFormats(obj)
            % GETAUDIOFORMATS return only fileformats that have audio and
            % no video
            formats = obj([obj.ContainsAudio] & ~[obj.ContainsVideo]);
        end
    end
    
end