+ if( m->look_for_iframe && ( m->info->display_picture->flags &
+ PIC_MASK_CODING_TYPE ) == PIC_FLAG_CODING_TYPE_I )
+ {
+ // we were waiting for an iframe to insert a chapter mark
+ // and we have one.
+ buf->new_chap = m->look_for_iframe;
+ m->look_for_iframe = 0;
+ const char *chap_name = "";
+ if ( m->job && buf->new_chap > 0 &&
+ hb_list_item( m->job->title->list_chapter,
+ buf->new_chap - 1 ) )
+ {
+ hb_chapter_t * c = hb_list_item( m->job->title->list_chapter,
+ buf->new_chap - 1 );
+ chap_name = c->title;
+ }
+ hb_log( "mpeg2: \"%s\" (%d) at frame %u time %lld",
+ chap_name, buf->new_chap, m->nframes, buf->start );
+ } else if ( m->nframes == 0 && m->job &&
+ hb_list_item( m->job->title->list_chapter,
+ m->job->chapter_start - 1 ) )
+ {
+ hb_chapter_t * c = hb_list_item( m->job->title->list_chapter,
+ m->job->chapter_start - 1 );
+ hb_log( "mpeg2: \"%s\" (%d) at frame %u time %lld", c->title,
+ m->job->chapter_start, m->nframes, buf->start );
+ }
+ ++m->nframes;
+
+ flag = m->info->display_picture->flags;
+
+/* Uncomment this block to see frame-by-frame picture flags, as the video encodes.
+ hb_log("***** MPEG 2 Picture Info for PTS %lld *****", buf->start);
+ if( flag & TOP_FIRST )
+ hb_log("MPEG2 Flag: Top field first");
+ if( flag & PROGRESSIVE )
+ hb_log("MPEG2 Flag: Progressive");
+ if( flag & COMPOSITE )
+ hb_log("MPEG2 Flag: Composite");
+ if( flag & SKIP )
+ hb_log("MPEG2 Flag: Skip!");
+ if( flag & TAGS )
+ hb_log("MPEG2 Flag: TAGS");
+ if(flag & REPEAT_FIRST )
+ hb_log("MPEG2 Flag: Repeat first field");
+ if( flag & COMPOSITE_MASK )
+ hb_log("MPEG2 Flag: Composite mask");
+ hb_log("fields: %d", m->info->display_picture->nb_fields);
+*/
+ /* Rotate the cadence tracking. */
+ int i = 0;
+ for(i=11; i > 0; i--)
+ {
+ cadence[i] = cadence[i-1];
+ }
+
+ if ( !(flag & PROGRESSIVE) && !(flag & TOP_FIRST) )
+ {
+ /* Not progressive, not top first...
+ That means it's probably bottom
+ first, 2 fields displayed.
+ */
+ //hb_log("MPEG2 Flag: Bottom field first, 2 fields displayed.");
+ cadence[0] = BT;
+ }
+ else if ( !(flag & PROGRESSIVE) && (flag & TOP_FIRST) )
+ {
+ /* Not progressive, top is first,
+ Two fields displayed.
+ */
+ //hb_log("MPEG2 Flag: Top field first, 2 fields displayed.");
+ cadence[0] = TB;
+ }
+ else if ( (flag & PROGRESSIVE) && !(flag & TOP_FIRST) && !( flag & REPEAT_FIRST ) )
+ {
+ /* Progressive, but noting else.
+ That means Bottom first,
+ 2 fields displayed.
+ */
+ //hb_log("MPEG2 Flag: Progressive. Bottom field first, 2 fields displayed.");
+ cadence[0] = BT_PROG;
+ }
+ else if ( (flag & PROGRESSIVE) && !(flag & TOP_FIRST) && ( flag & REPEAT_FIRST ) )
+ {
+ /* Progressive, and repeat. .
+ That means Bottom first,
+ 3 fields displayed.
+ */
+ //hb_log("MPEG2 Flag: Progressive repeat. Bottom field first, 3 fields displayed.");
+ cadence[0] = BTB_PROG;
+ }
+ else if ( (flag & PROGRESSIVE) && (flag & TOP_FIRST) && !( flag & REPEAT_FIRST ) )
+ {
+ /* Progressive, top first.
+ That means top first,
+ 2 fields displayed.
+ */
+ //hb_log("MPEG2 Flag: Progressive. Top field first, 2 fields displayed.");
+ cadence[0] = TB_PROG;
+ }
+ else if ( (flag & PROGRESSIVE) && (flag & TOP_FIRST) && ( flag & REPEAT_FIRST ) )
+ {
+ /* Progressive, top, repeat.
+ That means top first,
+ 3 fields displayed.
+ */
+ //hb_log("MPEG2 Flag: Progressive repeat. Top field first, 3 fields displayed.");
+ cadence[0] = TBT_PROG;
+ }
+
+ if ( (cadence[2] <= TB) && (cadence[1] <= TB) && (cadence[0] > TB) && (cadence[11]) )
+ hb_log("%fs: Video -> Film", (float)buf->start / 90000);
+ if ( (cadence[2] > TB) && (cadence[1] <= TB) && (cadence[0] <= TB) && (cadence[11]) )
+ hb_log("%fs: Film -> Video", (float)buf->start / 90000);
+
+ /* Store picture flags for later use by filters */
+ buf->flags = m->info->display_picture->flags;
+