TagLib API Documentation
Public Member Functions | List of all members
TagLib::FileRef::StreamTypeResolver Class Referenceabstract

A class for pluggable stream type resolution. More...

#include <fileref.h>

Inheritance diagram for TagLib::FileRef::StreamTypeResolver:
[legend]
Collaboration diagram for TagLib::FileRef::StreamTypeResolver:
[legend]

Public Member Functions

 StreamTypeResolver ()
 
virtual ~StreamTypeResolver () override=0
 
 StreamTypeResolver (const StreamTypeResolver &)=delete
 
StreamTypeResolveroperator= (const StreamTypeResolver &)=delete
 
virtual FilecreateFileFromStream (IOStream *stream, bool readAudioProperties=true, AudioProperties::ReadStyle audioPropertiesStyle=AudioProperties::Average) const =0
 
- Public Member Functions inherited from TagLib::FileRef::FileTypeResolver
 FileTypeResolver ()
 
virtual ~FileTypeResolver ()=0
 
 FileTypeResolver (const FileTypeResolver &)=delete
 
FileTypeResolveroperator= (const FileTypeResolver &)=delete
 
virtual FilecreateFile (FileName fileName, bool readAudioProperties=true, AudioProperties::ReadStyle audioPropertiesStyle=AudioProperties::Average) const =0
 

Detailed Description

A class for pluggable stream type resolution.

This class is used to extend TagLib's very basic file name based file type resolution.

This can be accomplished with:

class MyStreamTypeResolver : StreamTypeResolver
{
TagLib::File *createFile(TagLib::FileName *fileName, bool readProps,
AudioProperties::ReadStyle readStyle) const override
{
if(someCheckForAnMP3File(fileName))
return new TagLib::MPEG::File(fileName, readProps, readStyle);
return nullptr;
}
AudioProperties::ReadStyle readStyle) const override
{
if(someCheckForAnMP3Stream(s))
return new TagLib::MPEG::File(s, readProps, readStyle);
return nullptr;
}
}
FileRef::addFileTypeResolver(new MyStreamTypeResolver);
ReadStyle
Definition: audioproperties.h:56
virtual File * createFile(FileName fileName, bool readAudioProperties=true, AudioProperties::ReadStyle audioPropertiesStyle=AudioProperties::Average) const =0
A class for pluggable stream type resolution.
Definition: fileref.h:140
virtual File * createFileFromStream(IOStream *stream, bool readAudioProperties=true, AudioProperties::ReadStyle audioPropertiesStyle=AudioProperties::Average) const =0
static const FileTypeResolver * addFileTypeResolver(const FileTypeResolver *resolver)
A file class with some useful methods for tag manipulation.
Definition: tfile.h:51
An abstract class that provides operations on a sequence of bytes.
Definition: tiostream.h:65
An MPEG file class with some useful methods specific to MPEG.
Definition: mpegfile.h:54
const char * FileName
Definition: tiostream.h:59

Naturally a less contrived example would be slightly more complex. This can be used to plug in mime-type detection systems or to add new file types to TagLib.

Constructor & Destructor Documentation

◆ StreamTypeResolver() [1/2]

TagLib::FileRef::StreamTypeResolver::StreamTypeResolver ( )

◆ ~StreamTypeResolver()

virtual TagLib::FileRef::StreamTypeResolver::~StreamTypeResolver ( )
overridepure virtual

Destroys this StreamTypeResolver instance.

◆ StreamTypeResolver() [2/2]

TagLib::FileRef::StreamTypeResolver::StreamTypeResolver ( const StreamTypeResolver )
delete

Member Function Documentation

◆ createFileFromStream()

virtual File * TagLib::FileRef::StreamTypeResolver::createFileFromStream ( IOStream stream,
bool  readAudioProperties = true,
AudioProperties::ReadStyle  audioPropertiesStyle = AudioProperties::Average 
) const
pure virtual

This method must be overridden to provide an additional stream type resolver. If the resolver is able to determine the file type it should return a valid File object; if not it should return nullptr.

Note
The created file is then owned by the FileRef and should not be deleted. Deletion will happen automatically when the FileRef passes out of scope.
See also
createFile()

◆ operator=()

StreamTypeResolver & TagLib::FileRef::StreamTypeResolver::operator= ( const StreamTypeResolver )
delete

The documentation for this class was generated from the following file: