diff --git a/aegisub/FFmpegSource2/ffaudiosource.h b/aegisub/FFmpegSource2/ffaudiosource.h index c13e9d3f3..dc2d8ec2a 100644 --- a/aegisub/FFmpegSource2/ffaudiosource.h +++ b/aegisub/FFmpegSource2/ffaudiosource.h @@ -80,7 +80,7 @@ protected: public: FFAudio(); ~FFAudio(); - + FFTrack *GetFFTrack() { return &Frames; } const TAudioProperties& GetTAudioProperties() { return AP; } virtual int GetAudio(void *Buf, int64_t Start, int64_t Count, char *ErrorMsg, unsigned MsgSize) = 0; }; diff --git a/aegisub/FFmpegSource2/ffavisynth.cpp b/aegisub/FFmpegSource2/ffavisynth.cpp index 8fadd3e17..22eea8e63 100644 --- a/aegisub/FFmpegSource2/ffavisynth.cpp +++ b/aegisub/FFmpegSource2/ffavisynth.cpp @@ -33,7 +33,7 @@ AvisynthVideoSource::AvisynthVideoSource(const char *SourceFile, int Track, FFIn if (!V) Env->ThrowError(ErrorMsg); - const TVideoProperties VP = *FFMS_GetTVideoProperties(V); + const TVideoProperties VP = *FFMS_GetVideoProperties(V); VI.image_type = VideoInfo::IT_TFF; VI.width = VP.Width; @@ -143,7 +143,7 @@ PVideoFrame AvisynthVideoSource::GetFrame(int n, IScriptEnvironment *Env) { const TAVFrameLite *Frame; if (FPSNum > 0 && FPSDen > 0) - Frame = FFMS_GetFrameByTime(V, FFMS_GetTVideoProperties(V)->FirstTime + (double)(n * (int64_t)FPSDen) / FPSNum, ErrorMsg, MsgSize); + Frame = FFMS_GetFrameByTime(V, FFMS_GetVideoProperties(V)->FirstTime + (double)(n * (int64_t)FPSDen) / FPSNum, ErrorMsg, MsgSize); else Frame = FFMS_GetFrame(V, n, ErrorMsg, MsgSize); @@ -161,7 +161,7 @@ AvisynthAudioSource::AvisynthAudioSource(const char *SourceFile, int Track, FFIn if (!A) Env->ThrowError(ErrorMsg); - const TAudioProperties AP = *FFMS_GetTAudioProperties(A); + const TAudioProperties AP = *FFMS_GetAudioProperties(A); VI.nchannels = AP.Channels; VI.num_audio_samples = AP.NumSamples; diff --git a/aegisub/FFmpegSource2/ffavsfilters.cpp b/aegisub/FFmpegSource2/ffavsfilters.cpp index b172e5dcf..f3968e2d5 100644 --- a/aegisub/FFmpegSource2/ffavsfilters.cpp +++ b/aegisub/FFmpegSource2/ffavsfilters.cpp @@ -138,7 +138,7 @@ AVSValue __cdecl CreateFFVideoSource(AVSValue Args, void* UserData, IScriptEnvir Env->ThrowError("FFVideoSource: No video track found"); if (strcmp(Timecodes, "")) { - if (FFMS_WriteTimecodes(FFMS_GetTITrackIndex(Index, Track, ErrorMsg, MsgSize), Timecodes, ErrorMsg, MsgSize)) { + if (FFMS_WriteTimecodes(FFMS_GetTrackFromIndex(Index, Track, ErrorMsg, MsgSize), Timecodes, ErrorMsg, MsgSize)) { FFMS_DestroyFFIndex(Index); Env->ThrowError("FFVideoSource: %s", ErrorMsg); } diff --git a/aegisub/FFmpegSource2/ffms.cpp b/aegisub/FFmpegSource2/ffms.cpp index c28ea6e79..e54ea6c93 100644 --- a/aegisub/FFmpegSource2/ffms.cpp +++ b/aegisub/FFmpegSource2/ffms.cpp @@ -112,11 +112,11 @@ FFMS_API(void) FFMS_DestroyAudioSource(FFAudio *A) { delete A; } -FFMS_API(const TVideoProperties *) FFMS_GetTVideoProperties(FFVideo *V) { +FFMS_API(const TVideoProperties *) FFMS_GetVideoProperties(FFVideo *V) { return &V->GetTVideoProperties(); } -FFMS_API(const TAudioProperties *) FFMS_GetTAudioProperties(FFAudio *A) { +FFMS_API(const TAudioProperties *) FFMS_GetAudioProperties(FFAudio *A) { return &A->GetTAudioProperties(); } @@ -146,9 +146,9 @@ FFMS_API(void) FFMS_DestroyFFIndex(FFIndex *Index) { FFMS_API(int) FFMS_GetFirstTrackOfType(FFIndex *Index, int TrackType, char *ErrorMsg, unsigned MsgSize) { for (int i = 0; i < static_cast(Index->size()); i++) - if ((*Index)[i].TT == TrackType) + if ((*Index)[i].TT == TrackType && (*Index)[i].size() > 0) return i; - _snprintf(ErrorMsg, MsgSize, "No suitable track found"); + _snprintf(ErrorMsg, MsgSize, "No suitable, indexed track found"); return -1; } @@ -164,7 +164,7 @@ FFMS_API(int) FFMS_GetNumFrames(FFTrack *T) { return T->size(); } -FFMS_API(const TFrameInfo *) FFMS_GetTFrameInfo(FFTrack *T, int Frame, char *ErrorMsg, unsigned MsgSize) { +FFMS_API(const TFrameInfo *) FFMS_GetFrameInfo(FFTrack *T, int Frame, char *ErrorMsg, unsigned MsgSize) { if (Frame < 0 || Frame >= static_cast(T->size())) { _snprintf(ErrorMsg, MsgSize, "Invalid frame specified"); return NULL; @@ -173,7 +173,7 @@ FFMS_API(const TFrameInfo *) FFMS_GetTFrameInfo(FFTrack *T, int Frame, char *Err } } -FFMS_API(FFTrack *) FFMS_GetTITrackIndex(FFIndex *Index, int Track, char *ErrorMsg, unsigned MsgSize) { +FFMS_API(FFTrack *) FFMS_GetTrackFromIndex(FFIndex *Index, int Track, char *ErrorMsg, unsigned MsgSize) { if (Track < 0 || Track >= static_cast(Index->size())) { _snprintf(ErrorMsg, MsgSize, "Invalid track specified"); return NULL; @@ -182,10 +182,14 @@ FFMS_API(FFTrack *) FFMS_GetTITrackIndex(FFIndex *Index, int Track, char *ErrorM } } -FFMS_API(FFTrack *) FFMS_GetVSTrackIndex(FFVideo *V) { +FFMS_API(FFTrack *) FFMS_GetTrackFromVideo(FFVideo *V) { return V->GetFFTrack(); } +FFMS_API(FFTrack *) FFMS_GetTrackFromAudio(FFAudio *A) { + return A->GetFFTrack(); +} + FFMS_API(int) FFMS_FindClosestKeyFrame(FFTrack *T, int Frame, char *ErrorMsg, unsigned MsgSize) { if (Frame < 0 || Frame >= static_cast(T->size())) { _snprintf(ErrorMsg, MsgSize, "Out of range frame specified"); @@ -212,14 +216,9 @@ FFMS_API(FFIndex *) FFMS_ReadIndex(const char *IndexFile, char *ErrorMsg, unsign } FFMS_API(int) FFMS_WriteIndex(const char *IndexFile, FFIndex *Index, char *ErrorMsg, unsigned MsgSize) { - return WriteIndex(IndexFile, Index, ErrorMsg, MsgSize); + return Index->WriteIndex(IndexFile, ErrorMsg, MsgSize); } FFMS_API(int) FFMS_GetPixFmt(const char *Name) { return avcodec_get_pix_fmt(Name); } - -FFMS_API(int) FFMS_DefaultAudioName(const char *SourceFile, int Track, const TAudioProperties *AP, char *FileName, unsigned FNSize) { - - return 0; -} \ No newline at end of file diff --git a/aegisub/FFmpegSource2/ffms.h b/aegisub/FFmpegSource2/ffms.h index 9b0466815..c2c20970e 100644 --- a/aegisub/FFmpegSource2/ffms.h +++ b/aegisub/FFmpegSource2/ffms.h @@ -114,9 +114,10 @@ struct TAudioProperties { bool Float; int64_t NumSamples; double FirstTime; + double LastTime; }; -typedef int (FFMS_CC *TIndexCallback)(int State, int64_t Current, int64_t Total, void *Private); +typedef int (FFMS_CC *TIndexCallback)(int64_t Current, int64_t Total, void *Private); typedef int (FFMS_CC *TAudioNameCallback)(const char *SourceFile, int Track, const TAudioProperties *AP, char *FileName, unsigned FNSize); // Most functions return 0 on success @@ -128,8 +129,8 @@ FFMS_API(FFVideo *) FFMS_CreateVideoSource(const char *SourceFile, int Track, FF FFMS_API(FFAudio *) FFMS_CreateAudioSource(const char *SourceFile, int Track, FFIndex *Index, char *ErrorMsg, unsigned MsgSize); FFMS_API(void) FFMS_DestroyVideoSource(FFVideo *V); FFMS_API(void) FFMS_DestroyAudioSource(FFAudio *A); -FFMS_API(const TVideoProperties *) FFMS_GetTVideoProperties(FFVideo *V); -FFMS_API(const TAudioProperties *) FFMS_GetTAudioProperties(FFAudio *A); +FFMS_API(const TVideoProperties *) FFMS_GetVideoProperties(FFVideo *V); +FFMS_API(const TAudioProperties *) FFMS_GetAudioProperties(FFAudio *A); FFMS_API(const TAVFrameLite *) FFMS_GetFrame(FFVideo *V, int n, char *ErrorMsg, unsigned MsgSize); FFMS_API(const TAVFrameLite *) FFMS_GetFrameByTime(FFVideo *V, double Time, char *ErrorMsg, unsigned MsgSize); FFMS_API(int) FFMS_GetAudio(FFAudio *A, void *Buf, int64_t Start, int64_t Count, char *ErrorMsg, unsigned MsgSize); @@ -140,10 +141,10 @@ FFMS_API(int) FFMS_GetFirstTrackOfType(FFIndex *Index, int TrackType, char *Erro FFMS_API(int) FFMS_GetNumTracks(FFIndex *Index); FFMS_API(int) FFMS_GetTrackType(FFTrack *T); FFMS_API(int) FFMS_GetNumFrames(FFTrack *T); -FFMS_API(const TFrameInfo *) FFMS_GetTFrameInfo(FFTrack *T, int Frame, char *ErrorMsg, unsigned MsgSize); -FFMS_API(FFTrack *) FFMS_GetTITrackIndex(FFIndex *Index, int Track, char *ErrorMsg, unsigned MsgSize); -FFMS_API(FFTrack *) FFMS_GetVSTrackIndex(FFVideo *V); -FFMS_API(FFTrack *) FFMS_GetASTrackIndex(FFAudio *A); +FFMS_API(const TFrameInfo *) FFMS_GetFrameInfo(FFTrack *T, int Frame, char *ErrorMsg, unsigned MsgSize); +FFMS_API(FFTrack *) FFMS_GetTrackFromIndex(FFIndex *Index, int Track, char *ErrorMsg, unsigned MsgSize); +FFMS_API(FFTrack *) FFMS_GetTrackFromVideo(FFVideo *V); +FFMS_API(FFTrack *) FFMS_GetTrackFromAudio(FFAudio *A); FFMS_API(int) FFMS_FindClosestKeyFrame(FFTrack *T, int Frame, char *ErrorMsg, unsigned MsgSize); FFMS_API(const TTrackTimeBase *) FFMS_GetTimeBase(FFTrack *T); FFMS_API(int) FFMS_WriteTimecodes(FFTrack *T, const char *TimecodeFile, char *ErrorMsg, unsigned MsgSize); @@ -151,5 +152,4 @@ FFMS_API(FFIndex *) FFMS_MakeIndex(const char *SourceFile, int IndexMask, int Du FFMS_API(FFIndex *) FFMS_ReadIndex(const char *IndexFile, char *ErrorMsg, unsigned MsgSize); FFMS_API(int) FFMS_WriteIndex(const char *IndexFile, FFIndex *Index, char *ErrorMsg, unsigned MsgSize); FFMS_API(int) FFMS_GetPixFmt(const char *Name); -FFMS_API(int) FFMS_DefaultAudioName(const char *SourceFile, int Track, const TAudioProperties *AP, char *FileName, unsigned FNSize); #endif diff --git a/aegisub/FFmpegSource2/ffms2.html b/aegisub/FFmpegSource2/ffms2.html index 692b0abd4..9fd18b74d 100644 --- a/aegisub/FFmpegSource2/ffms2.html +++ b/aegisub/FFmpegSource2/ffms2.html @@ -224,11 +224,13 @@ tn:64:128:256

FFmpeg svn from http://ffmpeg.mplayerhq.hu/

+

pthreads only required for ffmpeg-mt compiles

+

Required FFmpeg Configuration: ./configure --enable-memalign-hack --enable-gpl --enable-postproc

Suggested Additional Options: ---enable-w32threads --disable-encoders --disable-muxers --disable-network --disable-debug

+--enable-pthreads --disable-encoders --disable-muxers --disable-network --disable-debug --enable-libfaad --disable-decoder=aac

Note that --enable-w32threads is required for multithreaded decoding to work. @@ -237,13 +239,14 @@ Note that --enable-w32threads is required for multithreaded decoding to work.

Changes

  • 2.00 beta 9
      +
    • Now has stricter index checking to detect when different FFmpeg versions were used to create an inded of the same version
    • Fixed an access violation occurring when unindexed or empty audio tracks in matroska files were opened
    • Less type conversion/signedness warnings
    • When audio track dumping is performed a custom callback can now be supplied to name the tracks
    • The audio track delay is now exposed in the API in the same way as video tracks
    • A big type and argument name cleanup in the API, many things have been renamed to be clearer and it should be completely C friendly now
    • Removed FFNoLog and replaced it with FFSetLogLevel and FFGetLogLevel, the default logging is now also set to quiet, the magical numbers to supply it can be found in avutil/log.h
    • -
    • Updated FFmpeg to rev X
    • +
    • Updated FFmpeg to rev X (now with pthreads and faad2 again by popular demand, updated to GCC 4.4.0 for compiling all libraries)
  • 2.00 beta 8
      diff --git a/aegisub/FFmpegSource2/ffms2rt.cpp b/aegisub/FFmpegSource2/ffms2rt.cpp index 08b41a37b..0076a502b 100644 --- a/aegisub/FFmpegSource2/ffms2rt.cpp +++ b/aegisub/FFmpegSource2/ffms2rt.cpp @@ -31,7 +31,7 @@ using namespace std; //#define VERBOSE -static int FFMS_CC UpdateProgress(int State, int64_t Current, int64_t Total, void *Private) { +static int FFMS_CC UpdateProgress(int64_t Current, int64_t Total, void *Private) { static int LastPercentage = -1; int Percentage = int((double(Current)/double(Total)) * 100); @@ -85,7 +85,7 @@ int main(int argc, char *argv[]) { return 3; } - const TVideoProperties *VP = FFMS_GetTVideoProperties(V); + const TVideoProperties *VP = FFMS_GetVideoProperties(V); for (int i = 0; i < VP->NumFrames; i++) { const TAVFrameLite *AVF = FFMS_GetFrame(V, i, ErrorMsg, sizeof(ErrorMsg)); if (!AVF) { diff --git a/aegisub/FFmpegSource2/ffmsindex.cpp b/aegisub/FFmpegSource2/ffmsindex.cpp index 3901ce42c..779ae9f9a 100644 --- a/aegisub/FFmpegSource2/ffmsindex.cpp +++ b/aegisub/FFmpegSource2/ffmsindex.cpp @@ -118,7 +118,7 @@ void ParseCMDLine (int argc, char *argv[]) { } -static int FFMS_CC UpdateProgress(int State, int64_t Current, int64_t Total, void *Private) { +static int FFMS_CC UpdateProgress(int64_t Current, int64_t Total, void *Private) { using namespace std; int *LastPercentage = (int *)Private; int Percentage = int((double(Current)/double(Total)) * 100); diff --git a/aegisub/FFmpegSource2/indexing.cpp b/aegisub/FFmpegSource2/indexing.cpp index 88fdc11d7..d22a69d4c 100644 --- a/aegisub/FFmpegSource2/indexing.cpp +++ b/aegisub/FFmpegSource2/indexing.cpp @@ -172,7 +172,7 @@ static void SortTrackIndices(FFIndex *Index) { std::sort(Cur->begin(), Cur->end(), DTSComparison); } -int WriteIndex(const char *IndexFile, FFIndex *Index, char *ErrorMsg, unsigned MsgSize) { +int FFIndex::WriteIndex(const char *IndexFile, char *ErrorMsg, unsigned MsgSize) { std::ofstream IndexStream(IndexFile, std::ios::out | std::ios::binary | std::ios::trunc); if (!IndexStream.is_open()) { @@ -184,22 +184,28 @@ int WriteIndex(const char *IndexFile, FFIndex *Index, char *ErrorMsg, unsigned M IndexHeader IH; IH.Id = INDEXID; IH.Version = INDEXVERSION; - IH.Tracks = Index->size(); - IH.Decoder = Index->Decoder; + IH.Tracks = size(); + IH.Decoder = Decoder; + IH.LAVUVersion = LIBAVUTIL_VERSION_INT; + IH.LAVFVersion = LIBAVFORMAT_VERSION_INT; + IH.LAVCVersion = LIBAVCODEC_VERSION_INT; + IH.LSWSVersion = LIBSWSCALE_VERSION_INT; + IH.LPPVersion = LIBPOSTPROC_VERSION_INT; + IndexStream.write(reinterpret_cast(&IH), sizeof(IH)); for (unsigned int i = 0; i < IH.Tracks; i++) { - int TT = (*Index)[i].TT; + int TT = at(i).TT; IndexStream.write(reinterpret_cast(&TT), sizeof(TT)); - int64_t Num = (*Index)[i].TB.Num; + int64_t Num = at(i).TB.Num; IndexStream.write(reinterpret_cast(&Num), sizeof(Num)); - int64_t Den = (*Index)[i].TB.Den; + int64_t Den = at(i).TB.Den; IndexStream.write(reinterpret_cast(&Den), sizeof(Den)); - size_t Frames = (*Index)[i].size(); + size_t Frames = at(i).size(); IndexStream.write(reinterpret_cast(&Frames), sizeof(Frames)); for (size_t j = 0; j < Frames; j++) - IndexStream.write(reinterpret_cast(&(Index->at(i)[j])), sizeof(TFrameInfo)); + IndexStream.write(reinterpret_cast(&(at(i)[j])), sizeof(TFrameInfo)); } return 0; @@ -336,7 +342,7 @@ static FFIndex *MakeHaaliIndex(const char *SourceFile, int IndexMask, int DumpMa for (;;) { if (IP) { - if ((*IP)(0, 0, 1, Private)) { + if ((*IP)(0, 1, Private)) { _snprintf(ErrorMsg, MsgSize, "Cancelled by user"); delete TrackIndices; return NULL; @@ -497,7 +503,7 @@ static FFIndex *MakeMatroskaIndex(const char *SourceFile, int IndexMask, int Dum while (mkv_ReadFrame(MF, 0, &Track, &StartTime, &EndTime, &FilePos, &FrameSize, &FrameFlags) == 0) { // Update progress if (IP) { - if ((*IP)(0, _ftelli64(MC.ST.fp), SourceSize, Private)) { + if ((*IP)(_ftelli64(MC.ST.fp), SourceSize, Private)) { _snprintf(ErrorMsg, MsgSize, "Cancelled by user"); delete TrackIndices; return NULL; @@ -637,7 +643,7 @@ FFIndex *MakeIndex(const char *SourceFile, int IndexMask, int DumpMask, const ch while (av_read_frame(FormatContext, &Packet) >= 0) { // Update progress if (IP) { - if ((*IP)(0, FormatContext->pb->pos, FormatContext->file_size, Private)) { + if ((*IP)(FormatContext->pb->pos, FormatContext->file_size, Private)) { _snprintf(ErrorMsg, MsgSize, "Cancelled by user"); delete TrackIndices; return NULL; @@ -723,6 +729,13 @@ FFIndex *ReadIndex(const char *IndexFile, char *ErrorMsg, unsigned MsgSize) { return NULL; } + if (IH.LAVUVersion != LIBAVUTIL_VERSION_INT || IH.LAVFVersion != LIBAVFORMAT_VERSION_INT || + IH.LAVCVersion != LIBAVCODEC_VERSION_INT || IH.LSWSVersion != LIBSWSCALE_VERSION_INT || + IH.LPPVersion != LIBPOSTPROC_VERSION_INT) { + _snprintf(ErrorMsg, MsgSize, "A different FFmpeg build was used to create this index", IndexFile); + return NULL; + } + FFIndex *TrackIndices = new FFIndex(); try { diff --git a/aegisub/FFmpegSource2/indexing.h b/aegisub/FFmpegSource2/indexing.h index e7d55df89..3ffada699 100644 --- a/aegisub/FFmpegSource2/indexing.h +++ b/aegisub/FFmpegSource2/indexing.h @@ -25,7 +25,7 @@ #include "utils.h" #include "ffms.h" -#define INDEXVERSION 20 +#define INDEXVERSION 21 #define INDEXID 0x53920873 struct IndexHeader { @@ -33,9 +33,15 @@ struct IndexHeader { uint32_t Version; uint32_t Tracks; uint32_t Decoder; + uint32_t LAVUVersion; + uint32_t LAVFVersion; + uint32_t LAVCVersion; + uint32_t LSWSVersion; + uint32_t LPPVersion; }; struct FFTrack : public std::vector { +public: int TT; TTrackTimeBase TB; @@ -49,11 +55,12 @@ struct FFTrack : public std::vector { }; struct FFIndex : public std::vector { +public: int Decoder; + int WriteIndex(const char *IndexFile, char *ErrorMsg, unsigned MsgSize); }; FFIndex *MakeIndex(const char *SourceFile, int IndexMask, int DumpMask, const char *AudioFile, bool IgnoreDecodeErrors, TIndexCallback IP, void *Private, char *ErrorMsg, unsigned MsgSize); FFIndex *ReadIndex(const char *IndexFile, char *ErrorMsg, unsigned MsgSize); -int WriteIndex(const char *IndexFile, FFIndex *Index, char *ErrorMsg, unsigned MsgSize); #endif diff --git a/aegisub/FFmpegSource2/utils.cpp b/aegisub/FFmpegSource2/utils.cpp index 16e9a742b..aa820c322 100644 --- a/aegisub/FFmpegSource2/utils.cpp +++ b/aegisub/FFmpegSource2/utils.cpp @@ -145,6 +145,7 @@ void FillAP(TAudioProperties &AP, AVCodecContext *CTX, FFTrack &Frames) { AP.SampleRate = CTX->sample_rate; AP.NumSamples = (Frames.back()).SampleStart; AP.FirstTime = ((Frames.front().DTS * Frames.TB.Num) / (double)Frames.TB.Den) / 1000; + AP.LastTime = ((Frames.back().DTS * Frames.TB.Num) / (double)Frames.TB.Den) / 1000; } #ifdef HAALISOURCE @@ -204,7 +205,7 @@ CodecID MatroskaToFFCodecID(char *Codec, void *CodecPrivate) { case MAKEFOURCC('D', 'I', 'V', 'X'): case MAKEFOURCC('D', 'X', '5', '0'): case MAKEFOURCC('M', 'P', '4', 'V'): - case MAKEFOURCC('m', 'p', '4', 'v'): // This one may be my fault + case MAKEFOURCC('m', 'p', '4', 'v'): case MAKEFOURCC('3', 'I', 'V', 'X'): case MAKEFOURCC('W', 'V', '1', 'F'): case MAKEFOURCC('F', 'M', 'P', '4'): @@ -268,7 +269,7 @@ CodecID MatroskaToFFCodecID(char *Codec, void *CodecPrivate) { case MAKEFOURCC('M', 'J', 'P', 'G'): case MAKEFOURCC('L', 'J', 'P', 'G'): case MAKEFOURCC('M', 'J', 'L', 'S'): - case MAKEFOURCC('J', 'P', 'E', 'G'): // questionable fourcc? + case MAKEFOURCC('J', 'P', 'E', 'G'): case MAKEFOURCC('A', 'V', 'R', 'N'): case MAKEFOURCC('M', 'J', 'P', 'A'): return CODEC_ID_MJPEG; @@ -312,10 +313,8 @@ CodecID MatroskaToFFCodecID(char *Codec, void *CodecPrivate) { return CODEC_ID_ZLIB; case MAKEFOURCC('F', 'L', 'V', '1'): return CODEC_ID_FLV1; -/* case MAKEFOURCC('P', 'N', 'G', '1'): - return CODEC_ID_COREPNG; -*/ + return CODEC_ID_PNG; case MAKEFOURCC('M', 'P', 'N', 'G'): return CODEC_ID_PNG; /* @@ -395,7 +394,7 @@ CodecID MatroskaToFFCodecID(char *Codec, void *CodecPrivate) { else if (!strcmp(Codec, "V_THEORA")) return CODEC_ID_THEORA; else if (!strcmp(Codec, "V_UNCOMPRESSED")) - return CODEC_ID_NONE; // bleh + return CODEC_ID_NONE; // FIXME: bleh else if (!strcmp(Codec, "V_QUICKTIME")) return CODEC_ID_SVQ3; // no idea if this is right else if (!strcmp(Codec, "V_CIPC")) @@ -449,7 +448,7 @@ CodecID MatroskaToFFCodecID(char *Codec, void *CodecPrivate) { */ return CODEC_ID_NONE; } else if (!strcmp(Codec, "A_PCM/FLOAT/IEEE")) - return CODEC_ID_PCM_F32LE; // only a most likely guess, may do bad things + return CODEC_ID_PCM_F32LE; // FIXME: only a most likely guess, may do bad things else if (!strcmp(Codec, "A_FLAC")) return CODEC_ID_FLAC; else if (!strcmp(Codec, "A_MPC")) @@ -467,7 +466,7 @@ CodecID MatroskaToFFCodecID(char *Codec, void *CodecPrivate) { else if (!strcmp(Codec, "A_REAL/COOK")) return CODEC_ID_COOK; else if (!strcmp(Codec, "A_REAL/SIPR")) - return CODEC_ID_NONE; // no sipr codec id? + return CODEC_ID_SIPR; else if (!strcmp(Codec, "A_REAL/ATRC")) return CODEC_ID_ATRAC3; else if (!strncmp(Codec, "A_AAC", 5))