frame count in raw mpeg-2 file?

  • Zitat

    Reicht es alle Vorkommnisse von "00 00 01 00" zu zählen


    Reicht leider nicht. Wurde im Fieldmode kodiert hat jedes Field einen eigenen Picture Header.
    In der Picture Coding Extension (00 00 01 B5 und Byte >=80) steht dann der Field Mode (BF oder TF).
    zb 00 00 01 B5 82 1F FA
    im dritten Byte nach 85 musst du die beiden ls Bits auswerten
    FA = 1111 1010
    01 - Top Field
    10 - Bottom Field
    11 - Frame Picture
    Leider können Frames und Fields im Stream bunt gemischt vorhanden sein - du musst alle auswerten.

  • Danke schon mal für die Info :)

    Was ich also machen müsste ist nach 00 00 01 suchen und ist da nächste Byte ...

    • B5 handelt es sich um Fieldmode:

      • checken ob der nächste Wert >= 80 ist, falls nicht zurück zum Start
      • checken das als nächstes 1F 1111 10 kommt, falls nicht zurück zum Start
      • jetzt den FieldTyp angucken

        • steht als nächstes 11 hab ich ein ganzes Frame
        • steht als nächstes 10 oder 01 hab ich ein 'halbes Frame'
        • steht als nächstes irgend was anderes, zurück zum Start
      • zurück zum Start
    • 00, hab ich ein ganzes Frame und zurück zum Start
    • irgendwas anderes, zurück zum Start


    Richtig verstanden?

    Cu Selur

  • Vorsicht, nicht hexadezimal mit binär verwechseln. FieldTyp sind 2 bit, "irgend was anderes" kann also nur noch 00 sein, und das wäre eigentlich ein Hinweis auf einen Datenfehler im Bitstrom (reservierter Wert).

    Und wenn nach einem ($)B5h dann mehrfach ($)00 kommt, dann folgt darauf jedes Mal je ein Frame oder Field, je nach dem, was bei ($)B5h herausgekommen ist. Das Ergebnis aus ($)B5h setzt also den Status für alle folgenden ($)00h.

    ($) = MPEG Sync pattern = 000001h

  • Dem "Picture Header" folgt die "Picture Coding Extension"
    Eine Extension (es gibt mehrere) hat den Startcode 00 00 01 B5 und die 4 msfBits des nächsten Bytes definieren um welche Extension es sich handelt.
    Sequence_Extension 0001
    Sequence_Display_Extension 0010
    Picture_Display_Extension 0111
    Picture_Coding_Extension 1000
    Die Picture_Coding_Extension hat also den Startcode 00 00 01 B5 8x
    Diese Picture_Coding_Extension musst du auswerten.
    Du nimmst das dritte Byte nach B5 und wertest die letzten 2 Bits aus.
    Im obigen Beispiel:
    00 00 01 B5 82 1F FA

    0xFA ist binär 11111010 -> Bottom Field

    00 - reserviert
    01 - Top Field
    10 - Bottom Field
    11 - Frame Picture

  • Heißt dann also:

    • suche nach "00 00 01 B5" (= start code prefix + extension)
    • checke das nächstes Byte >= 80 ist, dann hätte ich eine Picture_Coding_Extension (ansonsten zurück zum Start)
    • ignoriere das nächste Byte
    • lies das nun folgende Byte (also das 3te nach 'B5'), sind die letzten zwei Bits dieses Bytes 01 (top field) oder 10 (bottom field) hab ich ein halbes Frame, sind sie 00 hab ich ein ganzes Frame (ansonsten zurück zum Start)


    richtig?

    Cu Selur

  • okay, also:

    • suche nach "00 00 01 B5" (= start code prefix + extension)
    • checke das nächstes Byte >= 80 ist, dann hätte ich eine Picture_Coding_Extension (ansonsten zurück zum Start)
    • ignoriere das nächste Byte
    • lies das nun folgende Byte (also das 3te nach 'B5'), sind die letzten zwei Bits dieses Bytes 01 (top field) oder 10 (bottom field) hab ich ein halbes Frame, sind sie 11 hab ich ein ganzes Frame (ansonsten zurück zum Start)

Jetzt mitmachen!

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