From 6bff6b9831ddbcbfe15e3d5a7fcc468d2ee88e9c Mon Sep 17 00:00:00 2001 From: codestation Date: Sat, 14 Sep 2013 17:30:10 -0430 Subject: [PATCH] Return the correct codec/format type for all the supported file types. --- avdecoder.cpp | 9 +++++++++ cmaevent.cpp | 2 +- cmaobject.cpp | 31 ++++++++++++++++++++++++------- cmaobject.h | 34 ++++++++++++++++++++++++++++++++-- database.cpp | 47 +++++++++++++++++++++++------------------------ database.h | 2 +- 6 files changed, 90 insertions(+), 35 deletions(-) diff --git a/avdecoder.cpp b/avdecoder.cpp index a8826d7..2560063 100644 --- a/avdecoder.cpp +++ b/avdecoder.cpp @@ -18,7 +18,9 @@ */ #include "avdecoder.h" +#include "cmaobject.h" +#include #include #include #include @@ -110,6 +112,13 @@ void AVDecoder::getVideoMetadata(metadata_t &metadata) AVCodecContext *pCodecCtx = pFormatCtx->streams[stream_index]->codec; metadata.data.video.tracks->data.track_video.width = pCodecCtx->width; metadata.data.video.tracks->data.track_video.height = pCodecCtx->height; + if(strcmp(codec->name, "h264") == 0) { + metadata.data.video.tracks->data.track_video.codecType = CODEC_TYPE_AVC; + } else if(strcmp(codec->name, "mpeg4") == 0) { + metadata.data.video.tracks->data.track_video.codecType = CODEC_TYPE_MPEG4; + } else { + metadata.data.video.tracks->data.track_video.codecType = 0; + } } } diff --git a/cmaevent.cpp b/cmaevent.cpp index afe642e..7c55340 100644 --- a/cmaevent.cpp +++ b/cmaevent.cpp @@ -31,7 +31,7 @@ Database *CmaEvent::db = NULL; -metadata_t CmaEvent::g_thumbmeta = {0, 0, 0, NULL, NULL, 0, 0, 0, Thumbnail, {{18, 144, 80, 0, 1, 1.0f, 2}}, NULL}; +metadata_t CmaEvent::g_thumbmeta = {0, 0, 0, NULL, NULL, 0, 0, 0, Thumbnail, {{17, 144, 80, 0, 1, 1.0f, 2}}, NULL}; CmaEvent::CmaEvent(vita_device_t *s_device) : device(s_device), is_active(true) diff --git a/cmaobject.cpp b/cmaobject.cpp index 9bde3c7..c8ecfb5 100644 --- a/cmaobject.cpp +++ b/cmaobject.cpp @@ -28,6 +28,24 @@ int CMAObject::ohfi_count = OHFI_OFFSET; +const CMAObject::file_type CMAObject::audio_list[] = { + {"mp3", FILE_FORMAT_MP3, CODEC_TYPE_MP3}, + {"mp4", FILE_FORMAT_MP4, CODEC_TYPE_AAC}, + {"wav", FILE_FORMAT_WAV, CODEC_TYPE_PCM} +}; + +const CMAObject::file_type CMAObject::photo_list[] = { + {"jpg", FILE_FORMAT_JPG, CODEC_TYPE_JPG}, + {"jpeg", FILE_FORMAT_JPG, CODEC_TYPE_JPG}, + {"png", FILE_FORMAT_PNG, CODEC_TYPE_PNG}, + {"tif", FILE_FORMAT_TIF, CODEC_TYPE_TIF}, + {"tiff", FILE_FORMAT_TIF, CODEC_TYPE_TIF}, + {"bmp", FILE_FORMAT_BMP, CODEC_TYPE_BMP}, + {"gif", FILE_FORMAT_GIF, CODEC_TYPE_GIF}, +}; + +const char *CMAObject::video_list[] = {"mp4"}; + CMAObject::CMAObject(CMAObject *obj_parent) : parent(obj_parent), metadata() { @@ -114,7 +132,7 @@ void CMAObject::loadPhotoMetadata(const QString &path) } } -void CMAObject::initObject(const QFileInfo &file) +void CMAObject::initObject(const QFileInfo &file, int file_type) { metadata.name = strdup(file.fileName().toUtf8().data()); metadata.ohfiParent = parent->metadata.ohfi; @@ -133,33 +151,32 @@ void CMAObject::initObject(const QFileInfo &file) loadSfoMetadata(file.absoluteFilePath()); } else if(MASK_SET(metadata.dataType, Music | File)) { metadata.data.music.fileName = strdup(metadata.name); - metadata.data.music.fileFormatType = 20; + metadata.data.music.fileFormatType = audio_list[file_type].file_format; metadata.data.music.statusType = 1; metadata.data.music.numTracks = 1; metadata.data.music.tracks = new media_track(); metadata.data.music.tracks->type = VITA_TRACK_TYPE_AUDIO; - metadata.data.music.tracks->data.track_photo.codecType = 12; // MP3? + metadata.data.music.tracks->data.track_photo.codecType = audio_list[file_type].file_codec; loadMusicMetadata(file.absoluteFilePath()); } else if(MASK_SET(metadata.dataType, Video | File)) { metadata.data.video.fileName = strdup(metadata.name); metadata.data.video.dateTimeUpdated = file.created().toTime_t(); metadata.data.video.statusType = 1; - metadata.data.video.fileFormatType = 1; + metadata.data.video.fileFormatType = FILE_FORMAT_MP4; metadata.data.video.parentalLevel = 0; metadata.data.video.numTracks = 1; metadata.data.video.tracks = new media_track(); metadata.data.video.tracks->type = VITA_TRACK_TYPE_VIDEO; - metadata.data.video.tracks->data.track_video.codecType = 3; // this codec is working loadVideoMetadata(file.absoluteFilePath()); } else if(MASK_SET(metadata.dataType, Photo | File)) { metadata.data.photo.fileName = strdup(metadata.name); - metadata.data.photo.fileFormatType = 28; // working + metadata.data.photo.fileFormatType = photo_list[file_type].file_format; metadata.data.photo.statusType = 1; metadata.data.photo.dateTimeOriginal = file.created().toTime_t(); metadata.data.photo.numTracks = 1; metadata.data.photo.tracks = new media_track(); metadata.data.photo.tracks->type = VITA_TRACK_TYPE_PHOTO; - metadata.data.photo.tracks->data.track_photo.codecType = 17; // JPEG? + metadata.data.photo.tracks->data.track_photo.codecType = photo_list[file_type].file_codec; loadPhotoMetadata(file.absoluteFilePath()); } diff --git a/cmaobject.h b/cmaobject.h index 2d99123..eb49b8c 100644 --- a/cmaobject.h +++ b/cmaobject.h @@ -25,7 +25,27 @@ #include -#define OHFI_OFFSET 1000 +#define OHFI_OFFSET 256 + +#define FILE_FORMAT_MP4 1 +#define FILE_FORMAT_WAV 2 +#define FILE_FORMAT_MP3 3 +#define FILE_FORMAT_JPG 4 +#define FILE_FORMAT_PNG 5 +#define FILE_FORMAT_GIF 6 +#define FILE_FORMAT_BMP 7 +#define FILE_FORMAT_TIF 8 + +#define CODEC_TYPE_MPEG4 2 +#define CODEC_TYPE_AVC 3 +#define CODEC_TYPE_MP3 12 +#define CODEC_TYPE_AAC 13 +#define CODEC_TYPE_PCM 15 +#define CODEC_TYPE_JPG 17 +#define CODEC_TYPE_PNG 18 +#define CODEC_TYPE_TIF 19 +#define CODEC_TYPE_BMP 20 +#define CODEC_TYPE_GIF 21 class CMAObject { @@ -38,7 +58,7 @@ public: void rename(const QString &name); void updateObjectSize(qint64 size); bool hasParent(const CMAObject *obj); - void initObject(const QFileInfo &file); + void initObject(const QFileInfo &file, int file_type = -1); bool operator==(const CMAObject &obj); bool operator!=(const CMAObject &obj); @@ -52,6 +72,16 @@ public: ohfi_count = OHFI_OFFSET; } + typedef struct { + const char *file_ext; + int file_format; + int file_codec; + } file_type; + + static const file_type audio_list[3]; + static const file_type photo_list[7]; + static const char *video_list[1]; + QString path; CMAObject *parent; metadata_t metadata; diff --git a/database.cpp b/database.cpp index 2700621..1233a25 100644 --- a/database.cpp +++ b/database.cpp @@ -18,6 +18,7 @@ */ #include "database.h" +#include "cmaobject.h" #include #include @@ -26,12 +27,6 @@ #include #include -#define OHFI_OFFSET 1000 - -const QStringList Database::image_types = QStringList() << "jpg" << "jpeg" << "png" << "tif" << "tiff" << "bmp" << "gif" << "mpo"; -const QStringList Database::audio_types = QStringList() << "mp3" << "mp4" << "wav"; -const QStringList Database::video_types = QStringList() << "mp4"; - Database::Database() : mutex(QMutex::Recursive) { @@ -162,6 +157,7 @@ CMAObject *Database::getParent(CMAObject *last_dir, const QString ¤t_path) int Database::scanRootDirectory(root_list &list, int ohfi_type) { + int file_type; int total_objects = 0; CMAObject *last_dir = list.first(); QDir dir(last_dir->path); @@ -177,13 +173,15 @@ int Database::scanRootDirectory(root_list &list, int ohfi_type) it.next(); QFileInfo info = it.fileInfo(); - if(info.isFile() && !checkFileType(info.absoluteFilePath(), ohfi_type)) { - //qDebug("Excluding %s from database", info.absoluteFilePath().toStdString().c_str()); - continue; + if(info.isFile()) { + if((file_type = checkFileType(info.absoluteFilePath(), ohfi_type)) < 0) { + //qDebug("Excluding %s from database", info.absoluteFilePath().toStdString().c_str()); + continue; + } } CMAObject *obj = new CMAObject(getParent(last_dir, info.path())); - obj->initObject(info); + obj->initObject(info, file_type); //qDebug("Added %s to database with OHFI %d", obj->metadata.name, obj->metadata.ohfi); list << obj; @@ -198,6 +196,7 @@ int Database::scanRootDirectory(root_list &list, int ohfi_type) int Database::recursiveScanRootDirectory(root_list &list, CMAObject *parent, int ohfi_type) { + int file_type; int total_objects = 0; QDir dir(parent->path); @@ -210,11 +209,11 @@ int Database::recursiveScanRootDirectory(root_list &list, CMAObject *parent, int return -1; } - if(info.isFile() && !checkFileType(info.absoluteFilePath(), ohfi_type)) { + if(info.isFile() && (file_type = checkFileType(info.absoluteFilePath(), ohfi_type)) < 0) { //qDebug("Excluding %s from database", info.absoluteFilePath().toStdString().c_str());> } else { CMAObject *obj = new CMAObject(parent); - obj->initObject(info); + obj->initObject(info, file_type); emit fileAdded(obj->metadata.name); //qDebug("Added %s to database with OHFI %d", obj->metadata.name, obj->metadata.ohfi); list << obj; @@ -474,32 +473,32 @@ int Database::filterObjects(int ohfiParent, metadata_t **p_head, int index, int return numObjects; } -bool Database::checkFileType(const QString path, int ohfi_root) +int Database::checkFileType(const QString path, int ohfi_root) { switch(ohfi_root) { case VITA_OHFI_MUSIC: - foreach(const QString &ext, audio_types) { - if(path.endsWith(ext, Qt::CaseInsensitive)) { - return true; + for(int i = 0, max = sizeof(CMAObject::audio_list) / sizeof(CMAObject::file_type); i < max; i++) { + if(path.endsWith(CMAObject::audio_list[i].file_ext, Qt::CaseInsensitive)) { + return i; } } break; case VITA_OHFI_PHOTO: - foreach(const QString &ext, image_types) { - if(path.endsWith(ext, Qt::CaseInsensitive)) { - return true; + for(int i = 0, max = sizeof(CMAObject::photo_list) / sizeof(CMAObject::file_type); i < max; i++) { + if(path.endsWith(CMAObject::photo_list[i].file_ext, Qt::CaseInsensitive)) { + return i; } } break; case VITA_OHFI_VIDEO: - foreach(const QString &ext, video_types) { - if(path.endsWith(ext, Qt::CaseInsensitive)) { - return true; + for(int i = 0, max = sizeof(CMAObject::video_list) / sizeof(const char *); i < max; i++) { + if(path.endsWith(CMAObject::video_list[i], Qt::CaseInsensitive)) { + return i; } } break; default: - return true; + return 0; } - return false; + return -1; } diff --git a/database.h b/database.h index f2bc4f4..5b3ae82 100644 --- a/database.h +++ b/database.h @@ -74,7 +74,7 @@ private: CMAObject *getParent(CMAObject *last_dir, const QString ¤t_path); CMAObject *pathToObjectInternal(const root_list &list, const char *path); static bool lessThanComparator(const CMAObject *a, const CMAObject *b); - bool checkFileType(const QString path, int ohfi_root); + int checkFileType(const QString path, int ohfi_root); void dumpMetadataList(const metadata_t *p_head); bool continueOperation();