Return the correct codec/format type for all the supported file types.
This commit is contained in:
@@ -18,7 +18,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "avdecoder.h"
|
#include "avdecoder.h"
|
||||||
|
#include "cmaobject.h"
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
#include <QBuffer>
|
#include <QBuffer>
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
@@ -110,6 +112,13 @@ void AVDecoder::getVideoMetadata(metadata_t &metadata)
|
|||||||
AVCodecContext *pCodecCtx = pFormatCtx->streams[stream_index]->codec;
|
AVCodecContext *pCodecCtx = pFormatCtx->streams[stream_index]->codec;
|
||||||
metadata.data.video.tracks->data.track_video.width = pCodecCtx->width;
|
metadata.data.video.tracks->data.track_video.width = pCodecCtx->width;
|
||||||
metadata.data.video.tracks->data.track_video.height = pCodecCtx->height;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -31,7 +31,7 @@
|
|||||||
|
|
||||||
Database *CmaEvent::db = NULL;
|
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) :
|
CmaEvent::CmaEvent(vita_device_t *s_device) :
|
||||||
device(s_device), is_active(true)
|
device(s_device), is_active(true)
|
||||||
|
@@ -28,6 +28,24 @@
|
|||||||
|
|
||||||
int CMAObject::ohfi_count = OHFI_OFFSET;
|
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) :
|
CMAObject::CMAObject(CMAObject *obj_parent) :
|
||||||
parent(obj_parent), metadata()
|
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.name = strdup(file.fileName().toUtf8().data());
|
||||||
metadata.ohfiParent = parent->metadata.ohfi;
|
metadata.ohfiParent = parent->metadata.ohfi;
|
||||||
@@ -133,33 +151,32 @@ void CMAObject::initObject(const QFileInfo &file)
|
|||||||
loadSfoMetadata(file.absoluteFilePath());
|
loadSfoMetadata(file.absoluteFilePath());
|
||||||
} else if(MASK_SET(metadata.dataType, Music | File)) {
|
} else if(MASK_SET(metadata.dataType, Music | File)) {
|
||||||
metadata.data.music.fileName = strdup(metadata.name);
|
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.statusType = 1;
|
||||||
metadata.data.music.numTracks = 1;
|
metadata.data.music.numTracks = 1;
|
||||||
metadata.data.music.tracks = new media_track();
|
metadata.data.music.tracks = new media_track();
|
||||||
metadata.data.music.tracks->type = VITA_TRACK_TYPE_AUDIO;
|
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());
|
loadMusicMetadata(file.absoluteFilePath());
|
||||||
} else if(MASK_SET(metadata.dataType, Video | File)) {
|
} else if(MASK_SET(metadata.dataType, Video | File)) {
|
||||||
metadata.data.video.fileName = strdup(metadata.name);
|
metadata.data.video.fileName = strdup(metadata.name);
|
||||||
metadata.data.video.dateTimeUpdated = file.created().toTime_t();
|
metadata.data.video.dateTimeUpdated = file.created().toTime_t();
|
||||||
metadata.data.video.statusType = 1;
|
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.parentalLevel = 0;
|
||||||
metadata.data.video.numTracks = 1;
|
metadata.data.video.numTracks = 1;
|
||||||
metadata.data.video.tracks = new media_track();
|
metadata.data.video.tracks = new media_track();
|
||||||
metadata.data.video.tracks->type = VITA_TRACK_TYPE_VIDEO;
|
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());
|
loadVideoMetadata(file.absoluteFilePath());
|
||||||
} else if(MASK_SET(metadata.dataType, Photo | File)) {
|
} else if(MASK_SET(metadata.dataType, Photo | File)) {
|
||||||
metadata.data.photo.fileName = strdup(metadata.name);
|
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.statusType = 1;
|
||||||
metadata.data.photo.dateTimeOriginal = file.created().toTime_t();
|
metadata.data.photo.dateTimeOriginal = file.created().toTime_t();
|
||||||
metadata.data.photo.numTracks = 1;
|
metadata.data.photo.numTracks = 1;
|
||||||
metadata.data.photo.tracks = new media_track();
|
metadata.data.photo.tracks = new media_track();
|
||||||
metadata.data.photo.tracks->type = VITA_TRACK_TYPE_PHOTO;
|
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());
|
loadPhotoMetadata(file.absoluteFilePath());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
34
cmaobject.h
34
cmaobject.h
@@ -25,7 +25,27 @@
|
|||||||
|
|
||||||
#include <vitamtp.h>
|
#include <vitamtp.h>
|
||||||
|
|
||||||
#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
|
class CMAObject
|
||||||
{
|
{
|
||||||
@@ -38,7 +58,7 @@ public:
|
|||||||
void rename(const QString &name);
|
void rename(const QString &name);
|
||||||
void updateObjectSize(qint64 size);
|
void updateObjectSize(qint64 size);
|
||||||
bool hasParent(const CMAObject *obj);
|
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);
|
||||||
bool operator!=(const CMAObject &obj);
|
bool operator!=(const CMAObject &obj);
|
||||||
@@ -52,6 +72,16 @@ public:
|
|||||||
ohfi_count = OHFI_OFFSET;
|
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;
|
QString path;
|
||||||
CMAObject *parent;
|
CMAObject *parent;
|
||||||
metadata_t metadata;
|
metadata_t metadata;
|
||||||
|
47
database.cpp
47
database.cpp
@@ -18,6 +18,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "database.h"
|
#include "database.h"
|
||||||
|
#include "cmaobject.h"
|
||||||
|
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QDirIterator>
|
#include <QDirIterator>
|
||||||
@@ -26,12 +27,6 @@
|
|||||||
#include <QThread>
|
#include <QThread>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
#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() :
|
Database::Database() :
|
||||||
mutex(QMutex::Recursive)
|
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 Database::scanRootDirectory(root_list &list, int ohfi_type)
|
||||||
{
|
{
|
||||||
|
int file_type;
|
||||||
int total_objects = 0;
|
int total_objects = 0;
|
||||||
CMAObject *last_dir = list.first();
|
CMAObject *last_dir = list.first();
|
||||||
QDir dir(last_dir->path);
|
QDir dir(last_dir->path);
|
||||||
@@ -177,13 +173,15 @@ int Database::scanRootDirectory(root_list &list, int ohfi_type)
|
|||||||
it.next();
|
it.next();
|
||||||
QFileInfo info = it.fileInfo();
|
QFileInfo info = it.fileInfo();
|
||||||
|
|
||||||
if(info.isFile() && !checkFileType(info.absoluteFilePath(), ohfi_type)) {
|
if(info.isFile()) {
|
||||||
//qDebug("Excluding %s from database", info.absoluteFilePath().toStdString().c_str());
|
if((file_type = checkFileType(info.absoluteFilePath(), ohfi_type)) < 0) {
|
||||||
continue;
|
//qDebug("Excluding %s from database", info.absoluteFilePath().toStdString().c_str());
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CMAObject *obj = new CMAObject(getParent(last_dir, info.path()));
|
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);
|
//qDebug("Added %s to database with OHFI %d", obj->metadata.name, obj->metadata.ohfi);
|
||||||
list << obj;
|
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 Database::recursiveScanRootDirectory(root_list &list, CMAObject *parent, int ohfi_type)
|
||||||
{
|
{
|
||||||
|
int file_type;
|
||||||
int total_objects = 0;
|
int total_objects = 0;
|
||||||
|
|
||||||
QDir dir(parent->path);
|
QDir dir(parent->path);
|
||||||
@@ -210,11 +209,11 @@ int Database::recursiveScanRootDirectory(root_list &list, CMAObject *parent, int
|
|||||||
return -1;
|
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());>
|
//qDebug("Excluding %s from database", info.absoluteFilePath().toStdString().c_str());>
|
||||||
} else {
|
} else {
|
||||||
CMAObject *obj = new CMAObject(parent);
|
CMAObject *obj = new CMAObject(parent);
|
||||||
obj->initObject(info);
|
obj->initObject(info, file_type);
|
||||||
emit fileAdded(obj->metadata.name);
|
emit fileAdded(obj->metadata.name);
|
||||||
//qDebug("Added %s to database with OHFI %d", obj->metadata.name, obj->metadata.ohfi);
|
//qDebug("Added %s to database with OHFI %d", obj->metadata.name, obj->metadata.ohfi);
|
||||||
list << obj;
|
list << obj;
|
||||||
@@ -474,32 +473,32 @@ int Database::filterObjects(int ohfiParent, metadata_t **p_head, int index, int
|
|||||||
return numObjects;
|
return numObjects;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Database::checkFileType(const QString path, int ohfi_root)
|
int Database::checkFileType(const QString path, int ohfi_root)
|
||||||
{
|
{
|
||||||
switch(ohfi_root) {
|
switch(ohfi_root) {
|
||||||
case VITA_OHFI_MUSIC:
|
case VITA_OHFI_MUSIC:
|
||||||
foreach(const QString &ext, audio_types) {
|
for(int i = 0, max = sizeof(CMAObject::audio_list) / sizeof(CMAObject::file_type); i < max; i++) {
|
||||||
if(path.endsWith(ext, Qt::CaseInsensitive)) {
|
if(path.endsWith(CMAObject::audio_list[i].file_ext, Qt::CaseInsensitive)) {
|
||||||
return true;
|
return i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case VITA_OHFI_PHOTO:
|
case VITA_OHFI_PHOTO:
|
||||||
foreach(const QString &ext, image_types) {
|
for(int i = 0, max = sizeof(CMAObject::photo_list) / sizeof(CMAObject::file_type); i < max; i++) {
|
||||||
if(path.endsWith(ext, Qt::CaseInsensitive)) {
|
if(path.endsWith(CMAObject::photo_list[i].file_ext, Qt::CaseInsensitive)) {
|
||||||
return true;
|
return i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case VITA_OHFI_VIDEO:
|
case VITA_OHFI_VIDEO:
|
||||||
foreach(const QString &ext, video_types) {
|
for(int i = 0, max = sizeof(CMAObject::video_list) / sizeof(const char *); i < max; i++) {
|
||||||
if(path.endsWith(ext, Qt::CaseInsensitive)) {
|
if(path.endsWith(CMAObject::video_list[i], Qt::CaseInsensitive)) {
|
||||||
return true;
|
return i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return true;
|
return 0;
|
||||||
}
|
}
|
||||||
return false;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@@ -74,7 +74,7 @@ private:
|
|||||||
CMAObject *getParent(CMAObject *last_dir, const QString ¤t_path);
|
CMAObject *getParent(CMAObject *last_dir, const QString ¤t_path);
|
||||||
CMAObject *pathToObjectInternal(const root_list &list, const char *path);
|
CMAObject *pathToObjectInternal(const root_list &list, const char *path);
|
||||||
static bool lessThanComparator(const CMAObject *a, const CMAObject *b);
|
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);
|
void dumpMetadataList(const metadata_t *p_head);
|
||||||
bool continueOperation();
|
bool continueOperation();
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user