From: minje.ahn Date: Thu, 14 Jul 2022 00:41:01 +0000 (+0900) Subject: Add MP4 coverart list X-Git-Tag: submit/tizen/20220718.050845^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=73101e34ab520007f71060892b29bc9394cde10e;p=platform%2Fcore%2Fapi%2Fmetadata-editor.git Add MP4 coverart list Change-Id: If59d435e289728c47fd490a77e64f6082d001f7c Signed-off-by: minje.ahn --- diff --git a/packaging/capi-media-metadata-editor.spec b/packaging/capi-media-metadata-editor.spec index 5fe2f97..7443aae 100755 --- a/packaging/capi-media-metadata-editor.spec +++ b/packaging/capi-media-metadata-editor.spec @@ -1,6 +1,6 @@ Name: capi-media-metadata-editor Summary: A metadata editor library in Tizen Native API -Version: 0.2.6 +Version: 0.2.7 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/metadata_editor.cpp b/src/metadata_editor.cpp index 42dac80..c950c3d 100755 --- a/src/metadata_editor.cpp +++ b/src/metadata_editor.cpp @@ -63,19 +63,19 @@ class PictureFrame { public: explicit PictureFrame(const char *path) - : stream(path, true) {} + : __stream(path, true) {} virtual ~PictureFrame() = default; ByteVector data() { - return stream.readBlock(stream.length()); + return __stream.readBlock(__stream.length()); } String mime() const { - return __get_picture_type(stream.name()); + return __get_picture_type(__stream.name()); } bool opened() const { - return stream.isOpen(); + return __stream.isOpen(); } MP4::CoverArt::Format mp4format() const { @@ -87,7 +87,7 @@ public: } private: - FileStream stream; + FileStream __stream; }; template @@ -174,13 +174,9 @@ static int __remove_APIC(ID3v2::Tag *tag, int index) static int __remove_ogg_picture(Ogg::XiphComment *xtag, int index) { ME_RETVM_IF(!xtag, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "Invalid XiphComment"); + ME_RETV_IF(!__is_valid_index(xtag->pictureList(), index), METADATA_EDITOR_ERROR_INVALID_PARAMETER); - auto lst = xtag->pictureList(); - ME_RETV_IF(!__is_valid_index(lst, index), METADATA_EDITOR_ERROR_INVALID_PARAMETER); - - List::Iterator it = lst.begin(); - std::advance(it, index); - + auto it = std::next(xtag->pictureList().begin(), index); xtag->removePicture(*it, true); return METADATA_EDITOR_ERROR_NONE; @@ -200,69 +196,58 @@ public: class Mp3AlbumArt : public IAlbumArt { public: explicit Mp3AlbumArt(FileRef *fileref) - : file(dynamic_cast(fileref->file())) {} + : __file(dynamic_cast(fileref->file())) {} ~Mp3AlbumArt() override = default; int append(PictureFrame &pic) override { - return __append_APIC(file->ID3v2Tag(true), pic); + return __append_APIC(__file->ID3v2Tag(true), pic); } int remove(int index) override { - return __remove_APIC(file->ID3v2Tag(), index); + return __remove_APIC(__file->ID3v2Tag(), index); } int read(int index, void **picture, int *size, char **mime_type) override { - return __get_APIC(file->ID3v2Tag(), index, picture, size, mime_type); + return __get_APIC(__file->ID3v2Tag(), index, picture, size, mime_type); } uint count() override { - return file->ID3v2Tag() ? file->ID3v2Tag()->frameListMap()["APIC"].size() : 0; + return __file->ID3v2Tag() ? __file->ID3v2Tag()->frameListMap()["APIC"].size() : 0; } private: - MPEG::File *file; + MPEG::File *__file; }; class Mp4AlbumArt : public IAlbumArt { public: explicit Mp4AlbumArt(FileRef *fileref) - : file(dynamic_cast(fileref->file())) {} + : __file(dynamic_cast(fileref->file())) { + if (__file && __file->tag()->contains("covr")) + __coverList = __file->tag()->item("covr").toCoverArtList(); + } ~Mp4AlbumArt() override = default; int append(PictureFrame &pic) override { - MP4::CoverArtList lst; - - if (file->tag()->contains("covr")) { - ME_INFO("The item exists. Adding picture"); - lst = file->tag()->item("covr").toCoverArtList(); - } - - lst.append(MP4::CoverArt(pic.mp4format(), pic.data())); - file->tag()->setItem("covr", lst); + __coverList.append(MP4::CoverArt(pic.mp4format(), pic.data())); + __file->tag()->setItem("covr", __coverList); return METADATA_EDITOR_ERROR_NONE; } int remove(int index) override { - ME_RETVM_IF(!(file->tag()->contains("covr")), METADATA_EDITOR_ERROR_INVALID_PARAMETER, "No picture"); - auto lst = file->tag()->item("covr").toCoverArtList(); - ME_RETV_IF(!__is_valid_index(lst, index), METADATA_EDITOR_ERROR_INVALID_PARAMETER); + ME_RETV_IF(!__is_valid_index(__coverList, index), METADATA_EDITOR_ERROR_INVALID_PARAMETER); - auto picIt = lst.begin(); - std::advance(picIt, index); - lst.erase(picIt); - - file->tag()->setItem("covr", lst); //?? FIX ME! + __coverList.erase(std::next(__coverList.begin(), index)); + __file->tag()->setItem("covr", __coverList); return METADATA_EDITOR_ERROR_NONE; } int read(int index, void **picture, int *size, char **mime_type) override { - ME_RETVM_IF(!(file->tag()->contains("covr")), METADATA_EDITOR_ERROR_INVALID_PARAMETER, "No picture"); - auto lst = file->tag()->item("covr").toCoverArtList(); - ME_RETV_IF(!__is_valid_index(lst, index), METADATA_EDITOR_ERROR_INVALID_PARAMETER); + ME_RETV_IF(!__is_valid_index(__coverList, index), METADATA_EDITOR_ERROR_INVALID_PARAMETER); - auto coverArt = static_cast(lst[index]); + auto coverArt = static_cast(__coverList[index]); int coverArtSize = coverArt.data().size(); ME_RETVM_IF(coverArtSize == 0, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Size of picture is 0"); @@ -277,125 +262,126 @@ public: } uint count() override { - return (file->tag() && file->tag()->contains("covr")) ? file->tag()->item("covr").toCoverArtList().size() : 0; + return __coverList.size(); } private: - MP4::File *file; + MP4::File *__file; + MP4::CoverArtList __coverList; }; class FlacAlbumArt : public IAlbumArt { public: explicit FlacAlbumArt(FileRef *fileref) - : file(dynamic_cast(fileref->file())) {} + : __file(dynamic_cast(fileref->file())) {} ~FlacAlbumArt() override = default; int append(PictureFrame &pic) override { auto frontCover = new FLAC::Picture; frontCover->setData(pic.data()); frontCover->setMimeType(pic.mime()); - file->addPicture(frontCover); + __file->addPicture(frontCover); return METADATA_EDITOR_ERROR_NONE; } int remove(int index) override { - auto lst = file->pictureList(); + auto lst = __file->pictureList(); ME_RETV_IF(!__is_valid_index(lst, index), METADATA_EDITOR_ERROR_INVALID_PARAMETER); - file->removePicture(lst[index], true); + __file->removePicture(lst[index], true); return METADATA_EDITOR_ERROR_NONE; } int read(int index, void **picture, int *size, char **mime_type) override { - return __get_flac_picture(file->pictureList(), index, picture, size, mime_type); + return __get_flac_picture(__file->pictureList(), index, picture, size, mime_type); } uint count() override { - return file->pictureList().size(); + return __file->pictureList().size(); } private: - FLAC::File *file; + FLAC::File *__file; }; class OggVorbisAlbumArt : public IAlbumArt { public: explicit OggVorbisAlbumArt(FileRef *fileref) - : file(dynamic_cast(fileref->file())) {} + : __file(dynamic_cast(fileref->file())) {} ~OggVorbisAlbumArt() override = default; int append(PictureFrame &pic) override { - return __append_ogg_picture(file->tag(), pic); + return __append_ogg_picture(__file->tag(), pic); } int remove(int index) override { - return __remove_ogg_picture(file->tag(), index); + return __remove_ogg_picture(__file->tag(), index); } int read(int index, void **picture, int *size, char **mime_type) override { - ME_RETVM_IF(!file->tag(), METADATA_EDITOR_ERROR_INVALID_PARAMETER, "Invalid XiphComment"); - return __get_flac_picture(file->tag()->pictureList(), index, picture, size, mime_type); + ME_RETVM_IF(!__file->tag(), METADATA_EDITOR_ERROR_INVALID_PARAMETER, "Invalid XiphComment"); + return __get_flac_picture(__file->tag()->pictureList(), index, picture, size, mime_type); } uint count() override { - return file->tag() ? file->tag()->pictureList().size() : 0; + return __file->tag() ? __file->tag()->pictureList().size() : 0; } private: - Ogg::Vorbis::File *file; + Ogg::Vorbis::File *__file; }; class OggFlacAlbumArt : public IAlbumArt { public: explicit OggFlacAlbumArt(FileRef *fileref) - : file(dynamic_cast(fileref->file())) {} + : __file(dynamic_cast(fileref->file())) {} ~OggFlacAlbumArt() override = default; int append(PictureFrame &pic) override { - return __append_ogg_picture(file->tag(), pic); + return __append_ogg_picture(__file->tag(), pic); } int remove(int index) override { - return __remove_ogg_picture(file->tag(), index); + return __remove_ogg_picture(__file->tag(), index); } int read(int index, void **picture, int *size, char **mime_type) override { - ME_RETVM_IF(!file->tag(), METADATA_EDITOR_ERROR_INVALID_PARAMETER, "Invalid XiphComment"); - return __get_flac_picture(file->tag()->pictureList(), index, picture, size, mime_type); + ME_RETVM_IF(!__file->tag(), METADATA_EDITOR_ERROR_INVALID_PARAMETER, "Invalid XiphComment"); + return __get_flac_picture(__file->tag()->pictureList(), index, picture, size, mime_type); } uint count() override { - return file->tag() ? file->tag()->pictureList().size() : 0; + return __file->tag() ? __file->tag()->pictureList().size() : 0; } private: - Ogg::FLAC::File *file; + Ogg::FLAC::File *__file; }; class WavAlbumArt : public IAlbumArt { public: explicit WavAlbumArt(FileRef *fileref) - : file(dynamic_cast(fileref->file())) {} + : __file(dynamic_cast(fileref->file())) {} ~WavAlbumArt() override = default; int append(PictureFrame &pic) override { - return __append_APIC(file->tag(), pic); + return __append_APIC(__file->tag(), pic); } int remove(int index) override { - return __remove_APIC(file->tag(), index); + return __remove_APIC(__file->tag(), index); } int read(int index, void **picture, int *size, char **mime_type) override { - return __get_APIC(file->tag(), index, picture, size, mime_type); + return __get_APIC(__file->tag(), index, picture, size, mime_type); } uint count() override { - return file->tag() ? file->tag()->frameListMap()["APIC"].size() : 0; + return __file->tag() ? __file->tag()->frameListMap()["APIC"].size() : 0; } private: - RIFF::WAV::File *file; + RIFF::WAV::File *__file; }; class AlbumArtFactory { @@ -535,8 +521,7 @@ extern "C" int metadata_editor_set_path(metadata_editor_h metadata, const char * if (_metadata->fref) { ME_INFO("file free [%p]", _metadata->fref); delete _metadata->fref; - if (_metadata->ifart) - delete _metadata->ifart; + delete _metadata->ifart; } try {