mirror of
https://github.com/ElvishArtisan/rivendell.git
synced 2025-04-07 01:13:50 +02:00
* Removed all CVS tags. * Removed 'const char *name' parameter from all QObject contructors.
99 lines
3.6 KiB
C
99 lines
3.6 KiB
C
// rdmp4.h
|
|
//
|
|
// Helpers for dealing with MP4 files.
|
|
//
|
|
// (C) Copyright 2014 Christopher Smowton <chris@smowton.net>
|
|
//
|
|
// This program is free software; you can redistribute it and/or modify
|
|
// it under the terms of the GNU Library General Public License
|
|
// version 2 as published by the Free Software Foundation.
|
|
//
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public
|
|
// License along with this program; if not, write to the Free Software
|
|
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
//
|
|
//
|
|
|
|
#ifndef RDMP4_H
|
|
#define RDMP4_H
|
|
|
|
#ifdef HAVE_MP4_LIBS
|
|
|
|
#include <mp4v2/mp4v2.h>
|
|
#include <neaacdec.h>
|
|
// neaacdec.h defines "LC", as in "low-complexity AAC", which clashes with a Rivendell Command.
|
|
#undef LC
|
|
|
|
struct DLMP4 {
|
|
|
|
DLMP4() : loadSuccess(false) {}
|
|
|
|
void *neaac_handle;
|
|
void *mp4_handle;
|
|
bool loadSuccess;
|
|
|
|
// MP4v2 Functions
|
|
MP4FileHandle (*MP4Read) (const char* fileName);
|
|
MP4SampleId (*MP4GetTrackNumberOfSamples) (MP4FileHandle hFile, MP4TrackId trackId);
|
|
MP4SampleId (*MP4GetSampleIdFromTime) (MP4FileHandle hFile, MP4TrackId trackId, MP4Timestamp when, bool wantSyncSample);
|
|
uint32_t (*MP4GetTrackMaxSampleSize) (MP4FileHandle hFile, MP4TrackId trackId);
|
|
bool (*MP4GetTrackESConfiguration) (MP4FileHandle hFile, MP4TrackId trackId, uint8_t** ppConfig, uint32_t* pConfigSize);
|
|
bool (*MP4ReadSample) (
|
|
MP4FileHandle hFile,
|
|
MP4TrackId trackId,
|
|
MP4SampleId sampleId,
|
|
uint8_t** ppBytes,
|
|
uint32_t* pNumBytes,
|
|
MP4Timestamp* pStartTime,
|
|
MP4Duration* pDuration,
|
|
MP4Duration* pRenderingOffset,
|
|
bool* pIsSyncSample);
|
|
uint32_t (*MP4GetTrackBitRate) (MP4FileHandle hFile, MP4TrackId trackId);
|
|
int (*MP4GetTrackAudioChannels) (MP4FileHandle hFile, MP4TrackId trackId);
|
|
MP4Duration (*MP4GetTrackDuration) (MP4FileHandle hFile, MP4TrackId trackId);
|
|
uint64_t (*MP4ConvertFromTrackDuration) (
|
|
MP4FileHandle hFile,
|
|
MP4TrackId trackId,
|
|
MP4Duration duration,
|
|
uint32_t timeScale);
|
|
uint32_t (*MP4GetTrackTimeScale) (MP4FileHandle hFile, MP4TrackId trackId);
|
|
uint32_t (*MP4GetNumberOfTracks) (MP4FileHandle hFile, const char* type, uint8_t subType);
|
|
MP4TrackId (*MP4FindTrackId) (MP4FileHandle hFile, uint32_t trackIdx);
|
|
const char* (*MP4GetTrackType) (MP4FileHandle hFile, MP4TrackId);
|
|
const char* (*MP4GetTrackMediaDataName) (MP4FileHandle hFile, MP4TrackId);
|
|
uint8_t (*MP4GetTrackEsdsObjectTypeId) (MP4FileHandle hFile, MP4TrackId);
|
|
const MP4Tags* (*MP4TagsAlloc) (void);
|
|
bool (*MP4TagsFetch) (const MP4Tags* tags, MP4FileHandle hFile);
|
|
void (*MP4TagsFree) (const MP4Tags* tags);
|
|
void (*MP4Close) (MP4FileHandle hFile, uint32_t flags);
|
|
|
|
// libfaad / NeAACDec functions
|
|
NeAACDecHandle (*NeAACDecOpen) (void);
|
|
NeAACDecConfigurationPtr (*NeAACDecGetCurrentConfiguration) (NeAACDecHandle hDecoder);
|
|
unsigned char (*NeAACDecSetConfiguration) (NeAACDecHandle hDecoder, NeAACDecConfigurationPtr config);
|
|
char (*NeAACDecInit2)(NeAACDecHandle hDecoder,
|
|
unsigned char *pBuffer,
|
|
unsigned long SizeOfDecoderSpecificInfo,
|
|
unsigned long *samplerate,
|
|
unsigned char *channels);
|
|
void* (*NeAACDecDecode) (NeAACDecHandle hDecoder,
|
|
NeAACDecFrameInfo *hInfo,
|
|
unsigned char *buffer,
|
|
unsigned long buffer_size);
|
|
void (*NeAACDecClose) (NeAACDecHandle hDecoder);
|
|
|
|
// Helper functions:
|
|
MP4TrackId getMP4AACTrack(MP4FileHandle f);
|
|
|
|
bool load();
|
|
|
|
};
|
|
|
|
#endif // HAVE_MP4_LIBS
|
|
#endif // RDMP4_H
|