From 8e2a950b297b97605e97c454363f2f8555b004f0 Mon Sep 17 00:00:00 2001
From: Derek Buitenhuis <derek.buitenhuis@gmail.com>
Date: Tue, 18 Sep 2012 16:09:46 -0400
Subject: [PATCH] ffprobe: Add a few common disposition cases

This info is crucial in knowing which stream to pick in an
automated setup.

Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
---
 doc/ffprobe.xsd | 3 +++
 ffprobe.c       | 6 ++++++
 2 files changed, 9 insertions(+)

diff --git a/doc/ffprobe.xsd b/doc/ffprobe.xsd
index c9213debb3..b4887aed37 100644
--- a/doc/ffprobe.xsd
+++ b/doc/ffprobe.xsd
@@ -100,6 +100,8 @@
       <xsd:attribute name="codec_tag"        type="xsd:string" use="required"/>
       <xsd:attribute name="codec_tag_string" type="xsd:string" use="required"/>
       <xsd:attribute name="extradata"        type="xsd:string" />
+      <xsd:attribute name="default"          type="xsd:int" use="required"/>
+      <xsd:attribute name="forced"           type="xsd:int" use="required"/>
 
       <!-- video attributes -->
       <xsd:attribute name="width"                type="xsd:int"/>
@@ -110,6 +112,7 @@
       <xsd:attribute name="pix_fmt"              type="xsd:string"/>
       <xsd:attribute name="level"                type="xsd:int"/>
       <xsd:attribute name="timecode"             type="xsd:string"/>
+      <xsd:attribute name="attached_pic"         type="xsd:int"/>
 
       <!-- audio attributes -->
       <xsd:attribute name="sample_fmt"       type="xsd:string"/>
diff --git a/ffprobe.c b/ffprobe.c
index a0aee8352d..771c11d43c 100644
--- a/ffprobe.c
+++ b/ffprobe.c
@@ -1665,6 +1665,10 @@ static void show_stream(WriterContext *w, AVFormatContext *fmt_ctx, int stream_i
         print_str("codec_tag_string",    val_str);
         print_fmt("codec_tag", "0x%04x", dec_ctx->codec_tag);
 
+        /* Print useful disposition */
+        print_int("default", !!(stream->disposition & AV_DISPOSITION_DEFAULT));
+        print_int("forced", !!(stream->disposition & AV_DISPOSITION_FORCED));
+
         switch (dec_ctx->codec_type) {
         case AVMEDIA_TYPE_VIDEO:
             print_int("width",        dec_ctx->width);
@@ -1693,6 +1697,8 @@ static void show_stream(WriterContext *w, AVFormatContext *fmt_ctx, int stream_i
             } else {
                 print_str_opt("timecode", "N/A");
             }
+            print_int("attached_pic",
+                      !!(stream->disposition & AV_DISPOSITION_ATTACHED_PIC));
             break;
 
         case AVMEDIA_TYPE_AUDIO: