2017-12-13 5 views
2

Ich bin auf Port h264 Codec in einem eingebetteten Gerät. Der ffmpeg-Quellcode verwendet den folgenden Aufbau:Warum muss eine Quelldatei enthalten sein?

#undef CHROMA_IDC 
#define CHROMA_IDC 3 
#include "h264_mc_template.c" 

static av_noinline void FUNC(hl_decode_mb_444)(const H264Context *h, H264SliceContext *sl) 
{ 
    ... 
} 

Warum muss ich eine solche Quelldatei hinzufügen? Wird das nicht nur für den Header verwendet?

+2

Also ist die Frage, warum eine C-Datei enthalten ist? Die Frage ist für mich etwas schwer zu verstehen, fürchte ich. – unwind

+0

'h264_mc_template.c' muss von' CHROMA_IDC' abhängen, daher muss der korrekte Code mit einbezogen werden. –

+0

Heißt du, warum eine Quelldatei enthalten ist? –

Antwort

4

Das Suffix "Vorlage" weist darauf hin, dass der Code von einigen Präprozessordirektiven abhängt.

überprüfte ich die source und am Anfang ist es

#if CHROMA_IDC == 1 
    # define MCFUNC(n) FUNC(n ## _420) 
    #elif CHROMA_IDC == 2 
    # define MCFUNC(n) FUNC(n ## _422) 
    #elif CHROMA_IDC == 3 
    # define MCFUNC(n) FUNC(n ## _444) 
    #endif 

beachten Sie, dass Sie #define CHROMA_IDC 3vor einschließlich dieser Datei haben.

Dies weist den Präprozessor an, define MCFUNC(n) FUNC(n ## _444) in der enthaltenen Datei zu verwenden.

die Quelle könnte haben in der Make-Datei allein gelassen worden, aber mit einer -DCHROMA_IDC=3 Richtlinie, und in diesem Fall kann die Vorlage nicht wegen mehrere Neudefinition für andere Quelldateien wiederverwendet wird (die Funktionen in dieser Quelldatei sind static zu Vermeiden Sie mehrfache Neudefinitionen, wenn die Vorlage mehr als einmal installiert ist)

Warum eine Vorlage verwenden? wahrscheinlich für Leistungsprobleme, um eine Aufrufkette zu vermeiden und einige Tests, um das erforderliche Verhalten zu verzweigen. ffmpeg kann es sich nicht leisten, bei den Kodierungsfunktionen langsam zu sein.

Verwandte Themen