change log for logging branch

$Revision: 453 $
$Date: 2011-02-03 16:46:27 -0500 (Thu, 03 Feb 2011) $

-------------------

(31-jan-11, dbyron)

- fix ASSERTs in win32 implementation of
StandardFileProvider to check against _INVALID_FILE_HANDLE
instead of NULL since that's what the constructor and close
method use

- merge r440, r441, r442, r443, r444 from trunk

- fix return value of win32 implementation of
StandardFileProvider::close

- merge r439 from trunk

(18-jan-11, dbyron)

- add __FUNCTION__, filename to warning messages

- add warning to MP4File::Modify when failing because the
file has no moov atom

- add __FUNCTION__, filename to error messages

- add filename to verbose log messages in mp4descriptor.cpp

- remove __FUNCTION__ from verbose log messages in
mp4atom.cpp since it makes the dump output hard to read

- add filename to descriptions passed to Log::dump

- change log messages with Warning: to use Log::warningf

- fix Log::hexdump to make sure output begins with format
string/varargs instead of overwriting with ascii-hex

(17-jan-11, dbyron)

- change the MP4RtpData, MP4RtpNullData,
MP4RtpImmediateData, MP4RtpSampleData,
MP4RtpSampleDescriptionData, MP4RtpPacket, MP4RtpHint and
MP4Track to take references instead of pointers, with
accessors changed appropriately.

(14-jan-11, dbyron)

- change the MP4Descriptor constructor (and the constructors
of all its child classes) to take a (MP4Atom &) and remove
MP4Descriptor::SetParentAtom to remove the chance to
dereference a NULL pointer.  Similarly for MP4Property and
all its children.  Declare default and copy constructors and
assignment operator private to prevent using
compiler-generated routines.

- change all Read and Write methods that took (MP4File *) to
take a (MP4File &).

- change the MP4Track, MP4RtpHintTrack constructors to take a
(MP4File &).  Corresponding changes to MP4Track::GetFile.

(13-jan-11, dbyron)

- change the MP4Atom constructor to take an (MP4File &), remove
MP4Atom::SetFile and change MP4Atom::GetFile to return an
(MP4File &).  Change the internal member variable to an
(MP4File &) as well.  Corresponding changes to
MP4Atom::ReadAtom, CreateAtom, factory and child class
constructors.  This makes it impossible to dereference a
NULL pointer by accident.

- convert messages with warning in the text to use
Log::warningf

- include __FUNCTION__ and filename in log messages in
mp4atom.cpp

(11-jan-11, dbyron)

- declare Log copy constructor and assignment operator
private but don't implement them to prohibit copies

(6-jan-11, dbyron)

- add mp4subtitle.vcproj to build on windows

(3-jan-11, dbyron)

- declare MP4File copy constructor and assignment operator
private but don't implement them to prohibit copies

- remove MP4HexDump and Indent from mp4util since they're
not used anymore

- change Log::hexDump to dump printable bytes as well as the
hex values

- remove error_msg_func_t, lib_message_func_t and
MP4SetLibFunc from general.h since they're not used and
don't really make sense now that MP4SetLogCallback exists

- add MP4TagsHasMetadata to indicate whether a file contains
any metadata at all

(31-dec-10, dbyron)

- add MP4GetFilename so the filename associated with a
MP4FileHandle is available.  Add MP4File::GetFilename to
support it.

(27-dec-10, dbyron)

- remove m_tempFileName from MP4File since it's not used

- throw an exception from the win32 implementation of
FileSystem::exists, FileSystem::isDirectory and
FileSystem::isFile if there's an error

- add logging to win32 FileSystem

- add Utf8ToFilename::GetUTF8 to get the UTF-8
representation of the filename actually used

- add Utf8ToFilename::IsUTF16Valid so users of the class can
detect errors

- rename Utf8ToWideChar to Utf8ToFilename to more accurately
reflect what the class does

- replace MultiByteToWideChar with custom code to remove
differences across versions of windows and for improved
error detection and illegal character handling

- add long filename support to Utf8ToWideChar

(21-dec-10, dbyron)

- add logging to win32 StandardFileProvider

(20-dec-10, dbyron)

- make try/catch blocks more granular in MP4Read,
MP4ReadProvider, MP4Create, MP4CreateEx, MP4Modify,
MP4Optimize, MP4Make3GPCompliant, MP4MakeIsmaCompliant,
MP4MakeIsmaSdpIod so it's easier to figure out the cause of
failure based on the log message.

- log more specific messages, clean up leak if there's an
error adding the IpodUUID atom in MP4AddIPodUUID

- remove MP4_DETAILS_* as it was only used in a few internal
places where an MP4_LOG_* replacement is fine until the
verbosity-altering code disappears.  For some reason
MP4File::MakeIsmaCompliant alters the verbosity before
calling MP4GetVideoProfileLevel, MP4IsIsmaCrypMediaTrack
does the same before calling MP4File::IsIsmaCrypMediaTrack,
as does MP4CloneTrack before calling
MP4GetTrackESConfiguration.

- change command line programs to map debug levels as
follows:
  0: MP4_LOG_NONE
  1: MP4_LOG_ERROR
  2, 3: MP4_LOG_VERBOSE2
  4: MP4_LOG_VERBOSE4

- change MP4NormalizeTrackType (an internal function) to
always use MP4_LOG_VERBOSE1.

- another fix to Log::hexDump so that it now actually dumps
all the bytes it was asked to dump

- MP4File is no longer a child of Log.  Use the global log
object everywhere.

- remove the verbosity argument to MP4Read, MP4ReadProvider,
MP4Create and MP4CreateEx, MP4Modify, MP4Optimize,
MP4MakeIsmaCompliant, MP4MakeIsmaSdpIod, MP4Make3GPCompliant
and MP4NormalizeTrackType.  Remove MP4GetVerbosity,
MP4SetVerbosity and MP4Atom::GetVerbosity.  Use
MP4LogSetLevel to change the global log level instead.
There is no more file-specific verbosity since it is more
complicated than one global log level and it's not clear
anyone needs the added complexity.

- remove the MP4FileHandle argument to MP4LogSetLevel and
MP4LogGetLevel and move them to general.h/log.cpp since
they're no longer file-specific.  The default log level is
MP4_LOG_WARNING without any call to MP4LogSetLevel.

- change MP4BytesProperty::Dump to use Log::hexDump for
large (> 16) byte hex output

- remove the FILE* argument from MP4Dump, the internal Dump
methods (e.g. MP4File::Dump, MP4Atom::Dump,
MP4Property::Dump, etc.).  Use Log::dump instead.

- remove Indent from mp4util since it may pollute
stdout/stderr

- add Log::dump, Log::vdump to support dumping with a
particular indent

- fix Log::hexDump to print the correct ascii-hex info

(17-dec-10, dbyron)

- remove C_ASSERT from mp4util.h since it's not used

- remove MP4Printf to keep from writing to stdout when
logging

(7-jun-09, dbyron)

- add MP4LogGetLevel, MP4LogSetLevel

(5-jun-09, dbyron)

- change return value of MP4DeleteTrack,
MP4SetTrackTimeScale, MP4GetTrackH264SeqPictHeaders from
void to bool

- change MP4AddIPodUUID to return bool, check for valid
hFile and catch exceptions

- check for NULL existingFileName, newFileName in
MP4Optimize

- check for NULL fileName in MP4ReadProvider, MP4CreateEx,
MP4Modify, MP4Make3GPCompliant, MP4MakeIsmaCompliant

- properly handle NULL pFile when catching Exception

- check for NULL parameters in genericAddItem,
genericSetItem, genericRemoveItem

- change signature of C wrappers to return bool and check
for NULL parameters:
  - MP4TagsAddArtwork
  - MP4TagsFetch
  - MP4TagsRemoveArtwork
  - MP4TagsSetArtwork
  - MP4TagsStore
  - MP4TagsSetName
  - MP4TagsSetArtist
  - MP4TagsSetAlbumArtist
  - MP4TagsSetAlbum
  - MP4TagsSetGrouping
  - MP4TagsSetComposer(
  - MP4TagsSetComments
  - MP4TagsSetGenre
  - MP4TagsSetGenreType
  - MP4TagsSetReleaseDate
  - MP4TagsSetTrack
  - MP4TagsSetDisk
  - MP4TagsSetTempo
  - MP4TagsSetCompilation
  - MP4TagsSetTVShow
  - MP4TagsSetTVNetwork
  - MP4TagsSetTVEpisodeID
  - MP4TagsSetTVSeason
  - MP4TagsSetTVEpisode
  - MP4TagsSetSortName
  - MP4TagsSetSortArtist
  - MP4TagsSetSortAlbumArtist
  - MP4TagsSetSortAlbum
  - MP4TagsSetSortComposer
  - MP4TagsSetSortTVShow
  - MP4TagsSetDescription
  - MP4TagsSetLongDescription
  - MP4TagsSetLyrics
  - MP4TagsSetCopyright
  - MP4TagsSetEncodingTool
  - MP4TagsSetEncodedBy
  - MP4TagsSetPurchaseDate
  - MP4TagsSetPodcast
  - MP4TagsSetKeywords
  - MP4TagsSetCategory
  - MP4TagsSetHDVideo
  - MP4TagsSetMediaType
  - MP4TagsSetContentRating
  - MP4TagsSetGapless
  - MP4TagsSetITunesAccount
  - MP4TagsSetITunesAccountType
  - MP4TagsSetITunesCountry
  - MP4TagsSetCNID
  - MP4TagsSetATID
  - MP4TagsSetPLID
  - MP4TagsSetGEID

- add catch( ... ) blocks to C wrapper functions

- add static void errorf ( Log            *olog,
                           const char     *format,
                           ... ) MP4V2_WFORMAT_PRINTF(3,4);

- add static void errorf ( Log                    *olog,
                           const Exception        &x );
- remove MP4Exception, replace with Exception

- change MP4File::ProtectWriteOperation to take file, line,
function instead of one "where" string.

- change exception catching code to call Log::errorf();

- remove VERBOSE, VERBOSE_ERROR from mp4util.h

- remove MP4Error, replace with Exception, PlatformException
as appropriate

- add Exception class and Log::errorf( const Exception &x );

(16-feb-09, dbyron)

- First pass of actually using the Log class:

  - MP4LogNone --> MP4_LOG_NONE
  - add global log object (log, declared in log.h)
  - change MP4File to inherit from Log
    - remove m_verbosity member variable
    - remove MP4File::GetVerbosity, SetVerbosity methods
  - change MP4NormalizeTrackType to take MP4LogLevel
  - replace VERBOSE_* with corresponding Log method calls
  (VERBOSE_ERROR remains until exception handling gets
  revisited)
  - change WARNING macro to take a Log object as the first
  argument
  - add Log::hexDump to mostly replace MP4HexDump (though
  MP4HexDump is still called if there's no logging callback)
  - fix MP4_DETAILS_ALL handling in Log::detailsToLevel
  - add uint32_t Log::getVerbosity() const
  - add Log::hexDump
  - add uint32_t Log::getVerbosity
  - add Log::verbose3f, verbose4f
