mirror of https://github.com/odrling/Aegisub
FFMS2: The usual small fixes
Originally committed to SVN as r2979.
This commit is contained in:
parent
3220a2301a
commit
f1fbef752c
|
@ -158,7 +158,7 @@ FFMS_API(int) FFMS_GetNumTracks(FFIndex *Index) {
|
||||||
return Index->size();
|
return Index->size();
|
||||||
}
|
}
|
||||||
|
|
||||||
FFMS_API(int) FFMS_GetNumTracksI(FFIndexer *Indexer, int Track) {
|
FFMS_API(int) FFMS_GetNumTracksI(FFIndexer *Indexer) {
|
||||||
return Indexer->GetNumberOfTracks();
|
return Indexer->GetNumberOfTracks();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -170,6 +170,10 @@ FFMS_API(FFMS_TrackType) FFMS_GetTrackTypeI(FFIndexer *Indexer, int Track) {
|
||||||
return Indexer->GetTrackType(Track);
|
return Indexer->GetTrackType(Track);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FFMS_API(const char *) FFMS_GetCodecNameI(FFIndexer *Indexer, int Track) {
|
||||||
|
return Indexer->GetTrackCodec(Track);
|
||||||
|
}
|
||||||
|
|
||||||
FFMS_API(int) FFMS_GetNumFrames(FFTrack *T) {
|
FFMS_API(int) FFMS_GetNumFrames(FFTrack *T) {
|
||||||
return T->size();
|
return T->size();
|
||||||
}
|
}
|
||||||
|
|
|
@ -141,10 +141,10 @@ FFMS_API(void) FFMS_DestroyFFIndex(FFIndex *Index);
|
||||||
FFMS_API(int) FFMS_GetFirstTrackOfType(FFIndex *Index, int TrackType, char *ErrorMsg, unsigned MsgSize);
|
FFMS_API(int) FFMS_GetFirstTrackOfType(FFIndex *Index, int TrackType, char *ErrorMsg, unsigned MsgSize);
|
||||||
FFMS_API(int) FFMS_GetFirstIndexedTrackOfType(FFIndex *Index, int TrackType, char *ErrorMsg, unsigned MsgSize);
|
FFMS_API(int) FFMS_GetFirstIndexedTrackOfType(FFIndex *Index, int TrackType, char *ErrorMsg, unsigned MsgSize);
|
||||||
FFMS_API(int) FFMS_GetNumTracks(FFIndex *Index);
|
FFMS_API(int) FFMS_GetNumTracks(FFIndex *Index);
|
||||||
FFMS_API(int) FFMS_GetNumTracksI(FFIndexer *Indexer, int Track);
|
FFMS_API(int) FFMS_GetNumTracksI(FFIndexer *Indexer);
|
||||||
FFMS_API(FFMS_TrackType) FFMS_GetTrackType(FFTrack *T);
|
FFMS_API(FFMS_TrackType) FFMS_GetTrackType(FFTrack *T);
|
||||||
FFMS_API(FFMS_TrackType) FFMS_GetTrackTypeI(FFIndexer *Indexer, int Track);
|
FFMS_API(FFMS_TrackType) FFMS_GetTrackTypeI(FFIndexer *Indexer, int Track);
|
||||||
FFMS_API(const char *) FFMS_CodecName(FFIndexer *Indexer, int Track);
|
FFMS_API(const char *) FFMS_GetCodecNameI(FFIndexer *Indexer, int Track);
|
||||||
FFMS_API(int) FFMS_GetNumFrames(FFTrack *T);
|
FFMS_API(int) FFMS_GetNumFrames(FFTrack *T);
|
||||||
FFMS_API(const FFFrameInfo *) FFMS_GetFrameInfo(FFTrack *T, int Frame);
|
FFMS_API(const FFFrameInfo *) FFMS_GetFrameInfo(FFTrack *T, int Frame);
|
||||||
FFMS_API(FFTrack *) FFMS_GetTrackFromIndex(FFIndex *Index, int Track);
|
FFMS_API(FFTrack *) FFMS_GetTrackFromIndex(FFIndex *Index, int Track);
|
||||||
|
|
|
@ -346,6 +346,7 @@ FFIndex *FFHaaliIndexer::DoIndexing(char *ErrorMsg, unsigned MsgSize) {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
FFMatroskaIndexer::FFMatroskaIndexer(const char *Filename, char *ErrorMsg, unsigned MsgSize) {
|
FFMatroskaIndexer::FFMatroskaIndexer(const char *Filename, char *ErrorMsg, unsigned MsgSize) {
|
||||||
|
memset(Codec, 0, sizeof(Codec));
|
||||||
SourceFile = Filename;
|
SourceFile = Filename;
|
||||||
char ErrorMessage[256];
|
char ErrorMessage[256];
|
||||||
|
|
||||||
|
@ -364,6 +365,11 @@ FFMatroskaIndexer::FFMatroskaIndexer(const char *Filename, char *ErrorMsg, unsig
|
||||||
_snprintf(ErrorMsg, MsgSize, "Can't parse Matroska file: %s", ErrorMessage);
|
_snprintf(ErrorMsg, MsgSize, "Can't parse Matroska file: %s", ErrorMessage);
|
||||||
throw ErrorMsg;
|
throw ErrorMsg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (unsigned int i = 0; i < mkv_GetNumTracks(MF); i++) {
|
||||||
|
TrackInfo *TI = mkv_GetTrackInfo(MF, i);
|
||||||
|
Codec[i] = avcodec_find_decoder(MatroskaToFFCodecID(TI->CodecID, TI->CodecPrivate));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FFIndex *FFMatroskaIndexer::DoIndexing(char *ErrorMsg, unsigned MsgSize) {
|
FFIndex *FFMatroskaIndexer::DoIndexing(char *ErrorMsg, unsigned MsgSize) {
|
||||||
|
@ -391,7 +397,7 @@ FFIndex *FFMatroskaIndexer::DoIndexing(char *ErrorMsg, unsigned MsgSize) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AVCodec *AudioCodec = avcodec_find_decoder(MatroskaToFFCodecID(TI->CodecID, TI->CodecPrivate));
|
AVCodec *AudioCodec = Codec[i];
|
||||||
if (AudioCodec == NULL) {
|
if (AudioCodec == NULL) {
|
||||||
av_free(AudioCodecContext);
|
av_free(AudioCodecContext);
|
||||||
AudioContexts[i].CTX = NULL;
|
AudioContexts[i].CTX = NULL;
|
||||||
|
|
|
@ -94,19 +94,22 @@ public:
|
||||||
FFIndex *DoIndexing(char *ErrorMsg, unsigned MsgSize);
|
FFIndex *DoIndexing(char *ErrorMsg, unsigned MsgSize);
|
||||||
int GetNumberOfTracks() { return FormatContext->nb_streams; }
|
int GetNumberOfTracks() { return FormatContext->nb_streams; }
|
||||||
FFMS_TrackType GetTrackType(int Track) { return static_cast<FFMS_TrackType>(FormatContext->streams[Track]->codec->codec_type); }
|
FFMS_TrackType GetTrackType(int Track) { return static_cast<FFMS_TrackType>(FormatContext->streams[Track]->codec->codec_type); }
|
||||||
const char *GetTrackCodec(int Track) { return FormatContext->streams[Track]->codec->codec_name; }
|
const char *GetTrackCodec(int Track) {
|
||||||
|
return (avcodec_find_decoder(FormatContext->streams[Track]->codec->codec_id))->long_name;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class FFMatroskaIndexer : public FFIndexer {
|
class FFMatroskaIndexer : public FFIndexer {
|
||||||
private:
|
private:
|
||||||
MatroskaFile *MF;
|
MatroskaFile *MF;
|
||||||
MatroskaReaderContext MC;
|
MatroskaReaderContext MC;
|
||||||
|
AVCodec *Codec[32];
|
||||||
public:
|
public:
|
||||||
FFMatroskaIndexer(const char *Filename, char *ErrorMsg, unsigned MsgSize);
|
FFMatroskaIndexer(const char *Filename, char *ErrorMsg, unsigned MsgSize);
|
||||||
FFIndex *DoIndexing(char *ErrorMsg, unsigned MsgSize);
|
FFIndex *DoIndexing(char *ErrorMsg, unsigned MsgSize);
|
||||||
int GetNumberOfTracks() { return mkv_GetNumTracks(MF); }
|
int GetNumberOfTracks() { return mkv_GetNumTracks(MF); }
|
||||||
FFMS_TrackType GetTrackType(int Track) { return HaaliTrackTypeToFFTrackType(mkv_GetTrackInfo(MF, Track)->Type); }
|
FFMS_TrackType GetTrackType(int Track) { return HaaliTrackTypeToFFTrackType(mkv_GetTrackInfo(MF, Track)->Type); }
|
||||||
const char *GetTrackCodec(int Track) { return mkv_GetTrackInfo(MF, Track)->CodecID; }
|
const char *GetTrackCodec(int Track) { if (Codec[Track]) return Codec[Track]->long_name; else return "Unsupported codec/Unknown codec name"; }
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef HAALISOURCE
|
#ifdef HAALISOURCE
|
||||||
|
@ -126,7 +129,7 @@ public:
|
||||||
FFIndex *DoIndexing(char *ErrorMsg, unsigned MsgSize);
|
FFIndex *DoIndexing(char *ErrorMsg, unsigned MsgSize);
|
||||||
int GetNumberOfTracks() { return NumTracks; }
|
int GetNumberOfTracks() { return NumTracks; }
|
||||||
FFMS_TrackType GetTrackType(int Track) { return TrackType[Track]; }
|
FFMS_TrackType GetTrackType(int Track) { return TrackType[Track]; }
|
||||||
const char *GetTrackCodec(int Track) { if (Codec[Track]) return Codec[Track]->name; else return "Unsupported codec/Unknown codec name"; }
|
const char *GetTrackCodec(int Track) { if (Codec[Track]) return Codec[Track]->long_name; else return "Unsupported codec/Unknown codec name"; }
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // HAALISOURCE
|
#endif // HAALISOURCE
|
||||||
|
|
Loading…
Reference in New Issue