Return the correct codec/format type for all the supported file types.

This commit is contained in:
codestation
2013-09-14 17:30:10 -04:30
parent 339b08704a
commit 6bff6b9831
6 changed files with 90 additions and 35 deletions

View File

@@ -18,7 +18,9 @@
*/
#include "avdecoder.h"
#include "cmaobject.h"
#include <QDebug>
#include <QBuffer>
#include <QFile>
#include <QSettings>
@@ -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;
}
}
}

View File

@@ -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)

View File

@@ -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());
}

View File

@@ -25,7 +25,27 @@
#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
{
@@ -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;

View File

@@ -18,6 +18,7 @@
*/
#include "database.h"
#include "cmaobject.h"
#include <QDir>
#include <QDirIterator>
@@ -26,12 +27,6 @@
#include <QThread>
#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() :
mutex(QMutex::Recursive)
{
@@ -162,6 +157,7 @@ CMAObject *Database::getParent(CMAObject *last_dir, const QString &current_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)) {
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;
}

View File

@@ -74,7 +74,7 @@ private:
CMAObject *getParent(CMAObject *last_dir, const QString &current_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();