• Hallo,

    ich habe folgendes zu I-Frames in AVC gefunden:

    Zitat von english-doom9

    [Quelle]

    Frage:
    Kann man die Situation [IDR][P][I][P][IDR] irgendwie künstlich nachstellen? Ich habe noch nie "gesehen" dass x264 ein I-Frame setzt. Oder gibt es ein Sample von dem jemand weiß, dass x264 an einer bestimmten Stelle mit Sicherheit ein I-Frame setzt?

    greets
    LTJ

    Einmal editiert, zuletzt von LessThanJake (27. Januar 2009 um 02:08)

  • Ich will nur ein paar Teststreams generieren. ;)

    ---------

    Puh jetzt kommt ein schwieriges Thema: AVC und Referenzframes.
    Ich lese immer und immer wieder die Passagen im Standard, aber irgendwie will es nicht so ganz "Klick" machen.
    Bleiben wir erstmal bei progressiven Streams die x264 erzeugt.

    Referenzframes identifizieren

    x264 verankert im SPS:
    gaps_in_frame_num_value_allowed_flag=0

    dann gilt

    nal_ref_idc != 0 -> Frame ist Ref-Frame
    nal_ref_idc = 0 -> Frame ist kein Ref-Frame

    Identifizierung IDR / I / P / B -> Slice-Header (SH), NALU-Type etc.

    -> OK

    --------------

    Decoding-Order / Display Order bestimmen

    Weiter gilt für x264 -> Storage Order = Decoding Order, denn
    SPS: pic_order_cnt_type = 0
    -> jeder SH enthält pic_order_cnt_lsb xx
    -> Decoding-order = pic_order_cnt_lsb / 2
    -> Display-Order = pic_order_cnt_lsb / 2 (aufsteigend sortiert)

    -> OK

    -------------

    Referenzframelisten

    Weiter:

    Ref-Frames werden in einem Decoded Picture Buffer (DPB) gespeichert, dessen Größe abhängig von der maximal zulässigen Anzahl an Ref-Frames ist (z.B. 3 Ref-Frames)

    Jetzt kommen ein paar Dinge, die ich nicht verstehe:
    Dokument-> Punkt 4
    Ref-Frames werden als "Short term reference pictures" oder als "Long term reference pictures" markiert. Wie genau wird das gemacht? (Ich weiß -> ITU-T-H264-8.2.4. aber das verstehe ich nicht).

    Danach werden Listen erstellt.
    P-Ref-Frames -> 1 Liste
    B-Ref-Frames -> 2 Listen

    Ich verstehe auch den Aufbau und die Aktualisierung (FirstIn-FirstOut oder so ähnlich) dieser Listen nicht.

    Und das, was mich am Ende eigentlich interessiert:
    Woher weiß ich bzw. der Decoder auf welches der Frames in der Liste (1. 2. 3. 4. oder sogar mehrere aus der Liste?) ein noch nicht decodiertes Frame referenziert um dekodiert werden zu können?

    Puh, schwere Kost.
    Wer kanns und macht sich die Mühe? :D
    Oder muss ich wieder mein schlechtes Englisch auspacken und rüber ins andere Forum? ;)

    greets
    LTJ

    3 Mal editiert, zuletzt von LessThanJake (27. Januar 2009 um 02:15)

  • Ich meine mal gelesen zu haben, dass x264 nur "Short term reference pictures" benutzt.

    Soweit ich das verstehe, werden also einfach die n vorangegangenen Frames als Referenz-Bilder für den aktuellen Frame im Speicher gehalten.

    Mit "Long term reference pictures" könnte man wohl noch länger zurückliegende Frames im als Referenz vorhalten. Mir würde hier in den Sinn kommen, das letzte Bild der vorangegangenen Szene vorzuhalten, falls noch einmal auf diese Szene zurück geblendet wird. Keine Ahnung, ob sowas in der Praxis gemacht wird oder sich überhaupt als sinnvoll erweisen würde...

    Nochwas: Bei h.264 kann theoretisch sogar jeder einzelne Macroblock eines Frames auf ein anderes Referenz-Bild referenzieren (das entspricht "--mixed-refs" bei x264)


    [EDIT]

    Hier ist der Thread zu dem Thema:
    http://forum.doom9.org/showthread.php?t=134106

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!