
<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://kb.speeddemosarchive.com/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://kb.speeddemosarchive.com/index.php?action=history&amp;feed=atom&amp;title=Anri-chan%2FSource%2Ffieldorder.cpp</id>
		<title>Anri-chan/Source/fieldorder.cpp - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://kb.speeddemosarchive.com/index.php?action=history&amp;feed=atom&amp;title=Anri-chan%2FSource%2Ffieldorder.cpp"/>
		<link rel="alternate" type="text/html" href="https://kb.speeddemosarchive.com/index.php?title=Anri-chan/Source/fieldorder.cpp&amp;action=history"/>
		<updated>2026-04-18T19:59:48Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.23.9</generator>

	<entry>
		<id>https://kb.speeddemosarchive.com/index.php?title=Anri-chan/Source/fieldorder.cpp&amp;diff=2099&amp;oldid=prev</id>
		<title>Ballofsnow: New page: &lt;pre&gt;&lt;nowiki&gt; /*    find field order by reading vob file      start code: 00 00 01 B5   picture coding extension id: 8   field order in fourth byte after start code, first bit. tff=1, bff=...</title>
		<link rel="alternate" type="text/html" href="https://kb.speeddemosarchive.com/index.php?title=Anri-chan/Source/fieldorder.cpp&amp;diff=2099&amp;oldid=prev"/>
				<updated>2007-08-02T07:33:42Z</updated>
		
		<summary type="html">&lt;p&gt;New page: &amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt; /*    find field order by reading vob file      start code: 00 00 01 B5   picture coding extension id: 8   field order in fourth byte after start code, first bit. tff=1, bff=...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
&lt;br /&gt;
  find field order by reading vob file&lt;br /&gt;
  &lt;br /&gt;
  start code: 00 00 01 B5&lt;br /&gt;
  picture coding extension id: 8&lt;br /&gt;
  field order in fourth byte after start code, first bit. tff=1, bff=0&lt;br /&gt;
&lt;br /&gt;
  author: ballofsnow&lt;br /&gt;
  date: 2 August 2007&lt;br /&gt;
  license: none (public domain)&lt;br /&gt;
  target: win32 (MINGW), recommend using the free IDE from bloodshed.net&lt;br /&gt;
  version: beta 0.1&lt;br /&gt;
&lt;br /&gt;
  big thanks to DJ Grenola&lt;br /&gt;
  &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
#define LARGE_FILE_SUPPORT&lt;br /&gt;
#ifdef LARGE_FILE_SUPPORT&lt;br /&gt;
  /* not necessary for mingw/win32 but will probably become so if we start&lt;br /&gt;
     trying to compile it on linux and friends */&lt;br /&gt;
  #define _FILE_OFFSET_BITS 64&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;bitset&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
/* #define VERBOSE */&lt;br /&gt;
#define BUFSIZE        1024*1024&lt;br /&gt;
#define STARTCODE_LEN  4&lt;br /&gt;
#define STARTCODE      { 0x00, 0x00, 0x01, 0xB5 }&lt;br /&gt;
&lt;br /&gt;
#ifdef LARGE_FILE_SUPPORT&lt;br /&gt;
  #define FOPEN fopen64&lt;br /&gt;
  #define FSEEK fseeko64&lt;br /&gt;
  #define FTELL ftello64&lt;br /&gt;
  #define OFF_T off64_t&lt;br /&gt;
#else&lt;br /&gt;
  #define FOPEN fopen&lt;br /&gt;
  #define FSEEK fseek&lt;br /&gt;
  #define FTELL ftell&lt;br /&gt;
  #define OFF_T int&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
typedef long long int s64;&lt;br /&gt;
&lt;br /&gt;
void usage(char *argv0);&lt;br /&gt;
unsigned char startcode[STARTCODE_LEN]=STARTCODE;&lt;br /&gt;
unsigned char buffer[BUFSIZE];&lt;br /&gt;
&lt;br /&gt;
int main (int argc, char **argv) {&lt;br /&gt;
  FILE *vob;&lt;br /&gt;
  unsigned int bufstart=0;&lt;br /&gt;
  unsigned int bytes_to_read;&lt;br /&gt;
  unsigned int error=0;&lt;br /&gt;
  unsigned char idlo[1]= { 0x80 };&lt;br /&gt;
  unsigned char idhi[1]= { 0x8F };&lt;br /&gt;
    &lt;br /&gt;
  s64 br;&lt;br /&gt;
  OFF_T pos=0,tmp64;&lt;br /&gt;
  char *vobname=NULL;&lt;br /&gt;
  printf (&amp;quot;Determine field order\n&amp;quot;);&lt;br /&gt;
  printf (&amp;quot;beta 0.1, ballofsnow\n&amp;quot;);&lt;br /&gt;
  printf (&amp;quot;This software comes with no warranty.\n&amp;quot;);&lt;br /&gt;
  printf (&amp;quot;Returns 1 for TFF, 0 for BFF.\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  if (argc!=2) {&lt;br /&gt;
    usage(argv[0]);&lt;br /&gt;
    return -1;&lt;br /&gt;
  } &lt;br /&gt;
  &lt;br /&gt;
  vobname=argv[1];&lt;br /&gt;
  if ((vob=FOPEN(vobname,&amp;quot;rb&amp;quot;))==NULL) {&lt;br /&gt;
    printf (&amp;quot;[-] Failed to open file \&amp;quot;%s\&amp;quot;.\n&amp;quot;, vobname);&lt;br /&gt;
    return -1;&lt;br /&gt;
  }&lt;br /&gt;
  printf (&amp;quot;[+] Using %u KiB chunks.\n&amp;quot;, BUFSIZE/1024);&lt;br /&gt;
  printf (&amp;quot;[+] Scanning file \&amp;quot;%s\&amp;quot;.\n&amp;quot;, vobname);&lt;br /&gt;
  while (~0) {&lt;br /&gt;
    int i;&lt;br /&gt;
    bytes_to_read=BUFSIZE-bufstart;&lt;br /&gt;
    br=fread(buffer+bufstart,1,bytes_to_read,vob);&lt;br /&gt;
    pos+=br;&lt;br /&gt;
#ifdef VERBOSE&lt;br /&gt;
    printf (&amp;quot;[+] Read %llu bytes.\n&amp;quot;, pos);&lt;br /&gt;
#endif&lt;br /&gt;
    for (i=0;i&amp;lt;br+bufstart;i++) {&lt;br /&gt;
      if (!memcmp(startcode,buffer+i,STARTCODE_LEN)) {        &lt;br /&gt;
        if ( memcmp(buffer+i+4,idlo,1)&amp;gt;=0 &amp;amp;&amp;amp; memcmp(buffer+i+4,idhi,1)&amp;lt;=0 ) {&lt;br /&gt;
          /* MASK THE BYTE TO GET THE RELEVANT BITS */&lt;br /&gt;
          bitset&amp;lt;CHAR_BIT&amp;gt; fo (buffer[i+7]); &lt;br /&gt;
          fo &amp;amp;= 0x80;&lt;br /&gt;
          if (fo == 0x00) {&lt;br /&gt;
            printf (&amp;quot;BFF\n&amp;quot;);&lt;br /&gt;
            free(buffer);&lt;br /&gt;
            fclose(vob);&lt;br /&gt;
            return 0;&lt;br /&gt;
          }&lt;br /&gt;
          else if (fo == 0x80) {&lt;br /&gt;
            printf (&amp;quot;TFF\n&amp;quot;);&lt;br /&gt;
            free(buffer);&lt;br /&gt;
            fclose(vob);&lt;br /&gt;
            return 1;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    bufstart=STARTCODE_LEN-1;&lt;br /&gt;
    memmove(buffer,buffer+(BUFSIZE-(STARTCODE_LEN-1)),STARTCODE_LEN-1);&lt;br /&gt;
    if (br!=bytes_to_read)&lt;br /&gt;
      break;&lt;br /&gt;
  }  &lt;br /&gt;
  printf(&amp;quot;Didn't find TFF flag!&amp;quot;);&lt;br /&gt;
  free(buffer);&lt;br /&gt;
  fclose(vob);&lt;br /&gt;
  return -1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void usage(char *argv0) {&lt;br /&gt;
  printf (&amp;quot;Usage: %s &amp;lt;VOB file&amp;gt;\n\n&amp;quot;, argv0);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ballofsnow</name></author>	</entry>

	</feed>