Merge commit 'd4ae8ac92f619507aadd021bb67b517d39d3a36f'
authorMichael Niedermayer <michaelni@gmx.at>
Thu, 28 Aug 2014 21:40:31 +0000 (23:40 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 28 Aug 2014 21:48:23 +0000 (23:48 +0200)
* commit 'd4ae8ac92f619507aadd021bb67b517d39d3a36f':
  matroskadec: parse stereo mode on decoding

Conflicts:
Changelog
libavformat/matroska.c
libavformat/matroskadec.c

See: 4c509fe305bc79a913ef1b690df6c910c732f608 and others
Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
Changelog
libavformat/matroska.c
libavformat/matroska.h
libavformat/matroskadec.c
tests/ref/fate/vp8-alpha

diff --cc Changelog
+++ b/Changelog
@@@ -2,297 -2,147 +2,298 @@@ Entries are sorted chronologically fro
  releases are sorted from youngest to oldest.
  
  version <next>:
 -- libx265 encoder
 +- Icecast protocol
 +- ported lenscorrection filter from frei0r filter
 +- large optimizations in dctdnoiz to make it usable
 +- request icecast metadata by default
 +- support for using metadata in stream specifiers in fftools
 +- LZMA compression support in TIFF decoder
 +- support for H.261 RTP payload format (RFC 4587)
 +- added codecview filter to visualize information exported by some codecs
++- matroska 3d support thorugh side data
 +
 +
 +version 2.3:
 +- AC3 fixed-point decoding
  - shuffleplanes filter
 +- subfile protocol
 +- Phantom Cine demuxer
  - replaygain data export
 +- VP7 video decoder
  - Alias PIX image encoder and decoder
 -- BRender PIX image decoder
 -- Amazing Studio PAF playback support
 -- XBM decoder
 -- bmp standalone parser
 -- OpenEXR image decoder
 -- support encoding and decoding 4-channel SGI images
 +- Improvements to the BRender PIX image decoder
 +- Improvements to the XBM decoder
 +- QTKit input device
 +- improvements to OpenEXR image decoder
  - support decoding 16-bit RLE SGI images
 -- VP7 video decoder
 -- LucasArts SMUSH SANM video decoder
 -- LucasArts SMUSH VIMA audio decoder (ADPCM)
 -- LucasArts SMUSH demuxer
 -- MP2 encoding via TwoLAME
 -- asettb filter
 -- Silicon Graphics RLE 8-bit video decoder
 -- Silicon Graphics Motion Video Compressor 1 & 2 decoder
 -- Silicon Graphics Movie demuxer
 +- GDI screen grabbing for Windows
 +- alternative rendition support for HTTP Live Streaming
 +- AVFoundation input device
 +- Direct Stream Digital (DSD) decoder
 +- Magic Lantern Video (MLV) demuxer
  - On2 AVC (Audio for Video) decoder
 -- support for decoding through DXVA2 in avconv
 +- support for decoding through DXVA2 in ffmpeg
  - libbs2b-based stereo-to-binaural audio filter
 +- libx264 reference frames count limiting depending on level
  - native Opus decoder
  - display matrix export and rotation api
 -- drop avserver, it was unmaintained for years and largely broken
 -- Icecast protocol
 -- request icecast metadata by default
 -- support for using metadata in stream specifiers in avtools
 -- Aliases and defaults for Ogg subtypes (opus, spx)
 -- matroska 3d support
 +- WebVTT encoder
 +- showcqt multimedia filter
 +- zoompan filter
 +- signalstats filter
 +- hqx filter (hq2x, hq3x, hq4x)
 +- flanger filter
 +- Image format auto-detection
 +- LRC demuxer and muxer
 +- Samba protocol (via libsmbclient)
 +- WebM DASH Manifest muxer
 +- libfribidi support in drawtext
  
  
 -version 10:
 -- av_strnstr
 -- support ID3v2 tags in ASF files
 +version 2.2:
 +
 +- HNM version 4 demuxer and video decoder
 +- Live HDS muxer
 +- setsar/setdar filters now support variables in ratio expressions
 +- elbg filter
 +- string validation in ffprobe
 +- support for decoding through VDPAU in ffmpeg (the -hwaccel option)
 +- complete Voxware MetaSound decoder
 +- remove mp3_header_compress bitstream filter
 +- Windows resource files for shared libraries
 +- aeval filter
 +- stereoscopic 3d metadata handling
 +- WebP encoding via libwebp
 +- ATRAC3+ decoder
 +- VP8 in Ogg demuxing
 +- side & metadata support in NUT
 +- framepack filter
 +- XYZ12 rawvideo support in NUT
 +- Exif metadata support in WebP decoder
 +- OpenGL device
 +- Use metadata_header_padding to control padding in ID3 tags (currently used in
 +  MP3, AIFF, and OMA files), FLAC header, and the AVI "junk" block.
 +- Mirillis FIC video decoder
 +- Support DNx444
 +- libx265 encoder
 +- dejudder filter
 +- Autodetect VDA like all other hardware accelerations
 +
 +
 +version 2.1:
 +
 +- aecho filter
 +- perspective filter ported from libmpcodecs
 +- ffprobe -show_programs option
 +- compand filter
 +- RTMP seek support
 +- when transcoding with ffmpeg (i.e. not streamcopying), -ss is now accurate
 +  even when used as an input option. Previous behavior can be restored with
 +  the -noaccurate_seek option.
 +- ffmpeg -t option can now be used for inputs, to limit the duration of
 +  data read from an input file
 +- incomplete Voxware MetaSound decoder
 +- read EXIF metadata from JPEG
 +- DVB teletext decoder
 +- phase filter ported from libmpcodecs
 +- w3fdif filter
 +- Opus support in Matroska
 +- FFV1 version 1.3 is stable and no longer experimental
 +- FFV1: YUVA(444,422,420) 9, 10 and 16 bit support
 +- changed DTS stream id in lavf mpeg ps muxer from 0x8a to 0x88, to be
 +  more consistent with other muxers.
 +- adelay filter
 +- pullup filter ported from libmpcodecs
 +- ffprobe -read_intervals option
 +- Lossless and alpha support for WebP decoder
 +- Error Resilient AAC syntax (ER AAC LC) decoding
 +- Low Delay AAC (ER AAC LD) decoding
 +- mux chapters in ASF files
 +- SFTP protocol (via libssh)
 +- libx264: add ability to encode in YUVJ422P and YUVJ444P
 +- Fraps: use BT.709 colorspace by default for yuv, as reference fraps decoder does
 +- make decoding alpha optional for prores, ffv1 and vp6 by setting
 +  the skip_alpha flag.
 +- ladspa wrapper filter
 +- native VP9 decoder
 +- dpx parser
 +- max_error_rate parameter in ffmpeg
 +- PulseAudio output device
 +- ReplayGain scanner
 +- Enhanced Low Delay AAC (ER AAC ELD) decoding (no LD SBR support)
 +- Linux framebuffer output device
 +- HEVC decoder
 +- raw HEVC, HEVC in MOV/MP4, HEVC in Matroska, HEVC in MPEG-TS demuxing
 +- mergeplanes filter
 +
 +
 +version 2.0:
 +
 +- curves filter
  - reference-counting for AVFrame and AVPacket data
 -- avconv now fails when input options are used for output file
 +- ffmpeg now fails when input options are used for output file
    or vice versa
 -- avconv options -filter_script and -filter_complex_script, which allow a
 +- support for Monkey's Audio versions from 3.93
 +- perms and aperms filters
 +- audio filtering support in ffplay
 +- 10% faster aac encoding on x86 and MIPS
 +- sine audio filter source
 +- WebP demuxing and decoding support
 +- ffmpeg options -filter_script and -filter_complex_script, which allow a
    filtergraph description to be read from a file
 +- OpenCL support
 +- audio phaser filter
 +- separatefields filter
 +- libquvi demuxer
  - uniform options syntax across all filters
 +- telecine filter
  - interlace filter
 -- JPEG 2000 decoder
 -- asetpts filter (same as setpts, but for audio)
 +- smptehdbars source
 +- inverse telecine filters (fieldmatch and decimate)
 +- colorbalance filter
 +- colorchannelmixer filter
 +- The matroska demuxer can now output proper verbatim ASS packets. It will
 +  become the default at the next libavformat major bump.
 +- decent native animated GIF encoding
 +- asetrate filter
 +- interleave filter
 +- timeline editing with filters
 +- vidstabdetect and vidstabtransform filters for video stabilization using
 +  the vid.stab library
 +- astats filter
  - trim and atrim filters
 -- avconv -t and -ss (output-only) options are now sample-accurate when
 +- ffmpeg -t and -ss (output-only) options are now sample-accurate when
    transcoding audio
  - Matroska muxer can now put the index at the beginning of the file.
 -- avconv -deinterlace option removed, the yadif filter should be used instead
 +- extractplanes filter
 +- avectorscope filter
 +- ADPCM DTK decoder
 +- ADP demuxer
 +- RSD demuxer
 +- RedSpark demuxer
 +- ADPCM IMA Radical decoder
 +- zmq filters
 +- DCT denoiser filter (dctdnoiz)
 +- Wavelet denoiser filter ported from libmpcodecs as owdenoise (formerly "ow")
  - Apple Intermediate Codec decoder
  - Escape 130 video decoder
 +- FTP protocol support
 +- V4L2 output device
 +- 3D LUT filter (lut3d)
 +- SMPTE 302M audio encoder
  - support for slice multithreading in libavfilter
 +- Hald CLUT support (generation and filtering)
  - VC-1 interlaced B-frame support
  - support for WavPack muxing (raw and in Matroska)
 +- XVideo output device
 +- vignette filter
 +- True Audio (TTA) encoder
  - Go2Webinar decoder
 +- mcdeint filter ported from libmpcodecs
 +- sab filter ported from libmpcodecs
 +- ffprobe -show_chapters option
  - WavPack encoding through libwavpack
 -- Added the -n parameter to avconv
 -- RTMP seek support
 -- when transcoding with avconv (i.e. not streamcopying), -ss is now accurate
 -  even when used as an input option. Previous behavior can be restored with
 -  the -noaccurate_seek option.
 -- avconv -t option can now be used for inputs, to limit the duration of
 -  data read from an input file
 -- Voxware MetaSound decoder
 -- WebP decoder
 -- Error Resilient AAC syntax (ER AAC LC) decoding
 -- Low Delay AAC (ER AAC LD) decoding
 -- mux chapters in ASF files
 -- Opus in Ogg demuxing
 -- Enhanced Low Delay AAC (ER AAC ELD) decoding (no LD SBR support)
 -- F4V muxer
 -- HNM version 4 demuxer and video decoder
 -- HEVC decoder
 -- raw HEVC, HEVC in MOV/MP4, HEVC in Matroska, HEVC in MPEG-TS demuxing
 -- remove avplay -vismv option, which has not worked for a long time
 -- Live HDS muxer
 -- setsar/setdar filters now support variables in ratio expressions
 -- dar variable in the scale filter now returns the actual DAR (i.e. a * sar)
 -- VP9 decoder
 -- support for decoding through VDPAU in avconv (the -hwaccel option)
 -- remove mp3_header_(de)compress bitstream filters
 -- stereoscopic 3d metadata handling
 -- png standalone parser
 -- WebP encoding via libwebp
 -- ATRAC3+ decoder
 -- framepack filter
 -- Mirillis FIC video decoder
 -- Support DNx444
 -- compand audio filter
 +- rotate filter
 +- spp filter ported from libmpcodecs
 +- libgme support
 +- psnr filter
  
  
 -version 9:
 -- av_basename and av_dirname
 -- adobe and limelight publisher authentication in RTMP
 +version 1.2:
 +
  - VDPAU hardware acceleration through normal hwaccel
  - SRTP support
 +- Error diffusion dither in Swscale
 +- Chained Ogg support
 +- Theora Midstream reconfiguration support
 +- EVRC decoder
 +- audio fade filter
 +- filtering audio with unknown channel layout
 +- allpass, bass, bandpass, bandreject, biquad, equalizer, highpass, lowpass
 +  and treble audio filter
 +- improved showspectrum filter, with multichannel support and sox-like colors
 +- histogram filter
 +- tee muxer
 +- il filter ported from libmpcodecs
 +- support ID3v2 tags in ASF files
 +- encrypted TTA stream decoding support
 +- RF64 support in WAV muxer
 +- noise filter ported from libmpcodecs
 +- Subtitles character encoding conversion
 +- blend filter
 +- stereo3d filter ported from libmpcodecs
  
  
 -version 9_beta3:
 -- ashowinfo audio filter
 +version 1.1:
 +
 +- stream disposition information printing in ffprobe
 +- filter for loudness analysis following EBU R128
 +- Opus encoder using libopus
 +- ffprobe -select_streams option
 +- Pinnacle TARGA CineWave YUV16 decoder
 +- TAK demuxer, decoder and parser
 +- DTS-HD demuxer
 +- remove -same_quant, it hasn't worked for years
 +- FFM2 support
 +- X-Face image encoder and decoder
  - 24-bit FLAC encoding
 -- audio volume filter
 -- deprecated the avconv -vol option. the volume filter is to be used instead.
  - multi-channel ALAC encoding up to 7.1
 -- TAK demuxer, parser, and decoder
 -- adaptive frame-level multithreading for H.264
 -
 -
 -version 9_beta2:
  - metadata (INFO tag) support in WAV muxer
 +- subtitles raw text decoder
  - support for building DLLs using MSVC
 -- remove avserver daemon mode
 +- LVF demuxer
 +- ffescape tool
 +- metadata (info chunk) support in CAF muxer
 +- field filter ported from libmpcodecs
 +- AVR demuxer
 +- geq filter ported from libmpcodecs
 +- remove ffserver daemon mode
 +- AST muxer/demuxer
 +- new expansion syntax for drawtext
 +- BRender PIX image decoder
 +- ffprobe -show_entries option
 +- ffprobe -sections option
 +- ADPCM IMA Dialogic decoder
 +- BRSTM demuxer
 +- animated GIF decoder and demuxer
 +- PVF demuxer
 +- subtitles filter
 +- IRCAM muxer/demuxer
 +- Paris Audio File demuxer
 +- Virtual concatenation demuxer
 +- VobSub demuxer
 +- JSON captions for TED talks decoding support
 +- SOX Resampler support in libswresample
 +- aselect filter
 +- SGI RLE 8-bit / Silicon Graphics RLE 8-bit video decoder
 +- Silicon Graphics Motion Video Compressor 1 & 2 decoder
 +- Silicon Graphics Movie demuxer
 +- apad filter
 +- Resolution & pixel format change support with multithreading for H.264
 +- documentation split into per-component manuals
 +- pp (postproc) filter ported from MPlayer
 +- NIST Sphere demuxer
 +- MPL2, VPlayer, MPlayer, AQTitle, PJS and SubViewer v1 subtitles demuxers and decoders
 +- Sony Wave64 muxer
 +- adobe and limelight publisher authentication in RTMP
 +- data: URI scheme
  - support building on the Plan 9 operating system
 -- ffv1: support version 1.3
 +- kerndeint filter ported from MPlayer
 +- histeq filter ported from VirtualDub
 +- Megalux Frame demuxer
 +- 012v decoder
 +- Improved AVC Intra decoding support
  
  
 -version 9_beta1:
 +version 1.0:
  
 -- XWD encoder and decoder
 -- Support for fragmentation in the mov/mp4 muxer
 -- ISMV (Smooth Streaming) muxer
 -- CDXL demuxer and decoder
 -- Apple ProRes encoder
 -- Sun Rasterfile Encoder
 -- remove libpostproc
 -- ID3v2 attached pictures reading and writing
 -- WMA Lossless decoder
 -- XBM encoder
 -- RealAudio Lossless decoder
 -- ZeroCodec decoder
 -- drop support for avconv without libavfilter
 -- add libavresample audio conversion library
 -- audio filters support in libavfilter and avconv
 -- add fps filter
 -- audio split filter
 -- audio mix filter
 -- avprobe output is now standard INI or JSON. The old format can still
 -  be used with -of old.
 +- INI and flat output in ffprobe
 +- Scene detection in libavfilter
  - Indeo Audio decoder
  - channelsplit audio filter
 +- setnsamples audio filter
 +- atempo filter
 +- ffprobe -show_data option
  - RTMPT protocol support
  - iLBC encoding/decoding via libilbc
  - Microsoft Screen 1 decoder
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
   */
  
+ #include "libavutil/stereo3d.h"
  #include "matroska.h"
  
 +/* If you add a tag here that is not in ff_codec_bmp_tags[]
 +   or ff_codec_wav_tags[], add it also to additional_audio_tags[]
 +   or additional_video_tags[] in matroskaenc.c */
  const CodecTags ff_mkv_codec_tags[]={
      {"A_AAC"            , AV_CODEC_ID_AAC},
      {"A_AC3"            , AV_CODEC_ID_AC3},
@@@ -124,26 -106,64 +126,88 @@@ const AVMetadataConv ff_mkv_metadata_co
      { 0 }
  };
  
 +const char * const ff_matroska_video_stereo_mode[MATROSKA_VIDEO_STEREO_MODE_COUNT] = {
 +    "mono",
 +    "left_right",
 +    "bottom_top",
 +    "top_bottom",
 +    "checkerboard_rl",
 +    "checkerboard_lr",
 +    "row_interleaved_rl",
 +    "row_interleaved_lr",
 +    "col_interleaved_rl",
 +    "col_interleaved_lr",
 +    "anaglyph_cyan_red",
 +    "right_left",
 +    "anaglyph_green_magenta",
 +    "block_lr",
 +    "block_rl",
 +};
 +
 +const char * const ff_matroska_video_stereo_plane[MATROSKA_VIDEO_STEREO_PLANE_COUNT] = {
 +    "left",
 +    "right",
 +    "background",
 +};
++
+ int ff_mkv_stereo3d_conv(AVStream *st, MatroskaVideoStereoModeType stereo_mode)
+ {
+     AVPacketSideData *sd, *tmp;
+     AVStereo3D *stereo;
+     stereo = av_stereo3d_alloc();
+     if (!stereo)
+         return AVERROR(ENOMEM);
+     tmp = av_realloc_array(st->side_data, st->nb_side_data + 1, sizeof(*tmp));
+     if (!tmp) {
+         av_freep(&stereo);
+         return AVERROR(ENOMEM);
+     }
+     st->side_data = tmp;
+     st->nb_side_data++;
+     sd = &st->side_data[st->nb_side_data - 1];
+     sd->type = AV_PKT_DATA_STEREO3D;
+     sd->data = (uint8_t *)stereo;
+     sd->size = sizeof(*stereo);
+     // note: the missing breaks are intentional
+     switch (stereo_mode) {
+     case MATROSKA_VIDEO_STEREOMODE_TYPE_MONO:
+         stereo->type = AV_STEREO3D_2D;
+         break;
+     case MATROSKA_VIDEO_STEREOMODE_TYPE_RIGHT_LEFT:
+         stereo->flags |= AV_STEREO3D_FLAG_INVERT;
+     case MATROSKA_VIDEO_STEREOMODE_TYPE_LEFT_RIGHT:
+         stereo->type = AV_STEREO3D_SIDEBYSIDE;
+         break;
+     case MATROSKA_VIDEO_STEREOMODE_TYPE_BOTTOM_TOP:
+         stereo->flags |= AV_STEREO3D_FLAG_INVERT;
+     case MATROSKA_VIDEO_STEREOMODE_TYPE_TOP_BOTTOM:
+         stereo->type = AV_STEREO3D_TOPBOTTOM;
+         break;
+     case MATROSKA_VIDEO_STEREOMODE_TYPE_CHECKERBOARD_RL:
+         stereo->flags |= AV_STEREO3D_FLAG_INVERT;
+     case MATROSKA_VIDEO_STEREOMODE_TYPE_CHECKERBOARD_LR:
+         stereo->type = AV_STEREO3D_CHECKERBOARD;
+         break;
+     case MATROSKA_VIDEO_STEREOMODE_TYPE_ROW_INTERLEAVED_RL:
+         stereo->flags |= AV_STEREO3D_FLAG_INVERT;
+     case MATROSKA_VIDEO_STEREOMODE_TYPE_ROW_INTERLEAVED_LR:
+         stereo->type = AV_STEREO3D_LINES;
+         break;
+     case MATROSKA_VIDEO_STEREOMODE_TYPE_COL_INTERLEAVED_RL:
+         stereo->flags |= AV_STEREO3D_FLAG_INVERT;
+     case MATROSKA_VIDEO_STEREOMODE_TYPE_COL_INTERLEAVED_LR:
+         stereo->type = AV_STEREO3D_COLUMNS;
+         break;
+     case MATROSKA_VIDEO_STEREOMODE_TYPE_BOTH_EYES_BLOCK_RL:
+         stereo->flags |= AV_STEREO3D_FLAG_INVERT;
+     case MATROSKA_VIDEO_STEREOMODE_TYPE_BOTH_EYES_BLOCK_LR:
+         stereo->type = AV_STEREO3D_FRAMESEQUENCE;
+         break;
+     }
+     return 0;
+ }
@@@ -281,19 -255,7 +282,21 @@@ typedef struct CodecTags
  extern const CodecTags ff_mkv_codec_tags[];
  extern const CodecMime ff_mkv_mime_tags[];
  extern const AVMetadataConv ff_mkv_metadata_conv[];
 +extern const char * const ff_matroska_video_stereo_mode[MATROSKA_VIDEO_STEREO_MODE_COUNT];
 +extern const char * const ff_matroska_video_stereo_plane[MATROSKA_VIDEO_STEREO_PLANE_COUNT];
 +
 +/* AVStream Metadata tag keys for WebM Dash Manifest */
 +#define INITIALIZATION_RANGE "webm_dash_manifest_initialization_range"
 +#define CUES_START "webm_dash_manifest_cues_start"
 +#define CUES_END "webm_dash_manifest_cues_end"
 +#define FILENAME "webm_dash_manifest_file_name"
 +#define BANDWIDTH "webm_dash_manifest_bandwidth"
 +#define DURATION "webm_dash_manifest_duration"
 +#define CLUSTER_KEYFRAME "webm_dash_manifest_cluster_keyframe"
 +#define CUE_TIMESTAMPS "webm_dash_manifest_cue_timestamps"
 +#define TRACK_NUMBER "webm_dash_manifest_track_number"
 +#define CODEC_PRIVATE_SIZE "webm_dash_manifest_codec_priv_size"
  
+ int ff_mkv_stereo3d_conv(AVStream *st, MatroskaVideoStereoModeType stereo_mode);
  #endif /* AVFORMAT_MATROSKA_H */
@@@ -335,13 -309,11 +335,12 @@@ static EbmlSyntax matroska_info[] = 
  
  static EbmlSyntax matroska_track_video[] = {
      { MATROSKA_ID_VIDEOFRAMERATE,      EBML_FLOAT, 0, offsetof(MatroskaTrackVideo, frame_rate) },
 -    { MATROSKA_ID_VIDEODISPLAYWIDTH,   EBML_UINT,  0, offsetof(MatroskaTrackVideo, display_width) },
 -    { MATROSKA_ID_VIDEODISPLAYHEIGHT,  EBML_UINT,  0, offsetof(MatroskaTrackVideo, display_height) },
 +    { MATROSKA_ID_VIDEODISPLAYWIDTH,   EBML_UINT,  0, offsetof(MatroskaTrackVideo, display_width), { .u=-1 } },
 +    { MATROSKA_ID_VIDEODISPLAYHEIGHT,  EBML_UINT,  0, offsetof(MatroskaTrackVideo, display_height), { .u=-1 } },
      { MATROSKA_ID_VIDEOPIXELWIDTH,     EBML_UINT,  0, offsetof(MatroskaTrackVideo, pixel_width) },
      { MATROSKA_ID_VIDEOPIXELHEIGHT,    EBML_UINT,  0, offsetof(MatroskaTrackVideo, pixel_height) },
 -    { MATROSKA_ID_VIDEOCOLORSPACE,     EBML_UINT,  0, offsetof(MatroskaTrackVideo, fourcc) },
 +    { MATROSKA_ID_VIDEOCOLORSPACE,     EBML_BIN,   0, offsetof(MatroskaTrackVideo, color_space) },
-     { MATROSKA_ID_VIDEOSTEREOMODE,     EBML_UINT,  0, offsetof(MatroskaTrackVideo, stereo_mode) },
 +    { MATROSKA_ID_VIDEOALPHAMODE,      EBML_UINT,  0, offsetof(MatroskaTrackVideo, alpha_mode) },
      { MATROSKA_ID_VIDEOPIXELCROPB,     EBML_NONE },
      { MATROSKA_ID_VIDEOPIXELCROPT,     EBML_NONE },
      { MATROSKA_ID_VIDEOPIXELCROPL,     EBML_NONE },
@@@ -1978,34 -1786,14 +1978,41 @@@ static int matroska_parse_tracks(AVForm
              if (track->default_duration) {
                  av_reduce(&st->avg_frame_rate.num, &st->avg_frame_rate.den,
                            1000000000, track->default_duration, 30000);
 +#if FF_API_R_FRAME_RATE
 +                if (st->avg_frame_rate.num < st->avg_frame_rate.den * 1000L)
 +                    st->r_frame_rate = st->avg_frame_rate;
 +#endif
 +            }
 +
 +            /* export stereo mode flag as metadata tag */
 +            if (track->video.stereo_mode && track->video.stereo_mode < MATROSKA_VIDEO_STEREO_MODE_COUNT)
 +                av_dict_set(&st->metadata, "stereo_mode", ff_matroska_video_stereo_mode[track->video.stereo_mode], 0);
 +
 +            /* export alpha mode flag as metadata tag  */
 +            if (track->video.alpha_mode)
 +                av_dict_set(&st->metadata, "alpha_mode", "1", 0);
 +
 +            /* if we have virtual track, mark the real tracks */
 +            for (j=0; j < track->operation.combine_planes.nb_elem; j++) {
 +                char buf[32];
 +                if (planes[j].type >= MATROSKA_VIDEO_STEREO_PLANE_COUNT)
 +                    continue;
 +                snprintf(buf, sizeof(buf), "%s_%d",
 +                         ff_matroska_video_stereo_plane[planes[j].type], i);
 +                for (k=0; k < matroska->tracks.nb_elem; k++)
 +                    if (planes[j].uid == tracks[k].uid) {
 +                        av_dict_set(&s->streams[k]->metadata,
 +                                    "stereo_mode", buf, 0);
 +                        break;
 +                    }
              }
+             // add stream level stereo3d side data if it is a supported format
+             if (track->video.stereo_mode < MATROSKA_VIDEO_STEREOMODE_TYPE_NB &&
+                 track->video.stereo_mode != 10 && track->video.stereo_mode != 12) {
+                 int ret = ff_mkv_stereo3d_conv(st, track->video.stereo_mode);
+                 if (ret < 0)
+                     return ret;
+             }
          } else if (track->type == MATROSKA_TRACK_TYPE_AUDIO) {
              st->codec->codec_type  = AVMEDIA_TYPE_AUDIO;
              st->codec->sample_rate = track->audio.out_samplerate;
index 2b89817,0000000..e974bbc
mode 100644,000000..100644
--- /dev/null
@@@ -1,121 -1,0 +1,121 @@@
- 0,          0,          0,        0,     2108, 0x59b92a34, S=1,     1900, 0x8fb3adc5
 +#tb 0: 1/1000
++0,          0,          0,        0,     2108, 0x59b92a34, S=2,     1900, 0x8fb3adc5,        8, 0x00000000
 +0,         32,         32,        0,      142, 0x2f2a3fed, F=0x0, S=1,      160, 0xa13346af
 +0,         65,         65,        0,      157, 0x17804767, F=0x0, S=1,      209, 0x64115f15
 +0,         99,         99,        0,      206, 0x537262ca, F=0x0, S=1,      317, 0x44a09dd0
 +0,        132,        132,        0,      259, 0x73ff74b6, F=0x0, S=1,      384, 0x2ee2c588
 +0,        165,        165,        0,      320, 0x0fcf8ce4, F=0x0, S=1,      415, 0xff68c953
 +0,        199,        199,        0,      377, 0x8fffb5f5, F=0x0, S=1,      475, 0x4166f3eb
 +0,        232,        232,        0,      407, 0xe476c19e, F=0x0, S=1,      193, 0x3ff75489
 +0,        265,        265,        0,      539, 0x90202334, F=0x0, S=1,      681, 0x776656b0
 +0,        299,        299,        0,      560, 0xc6e2168d, F=0x0, S=1,      585, 0xddc81b8a
 +0,        332,        332,        0,      597, 0x201a32a7, F=0x0, S=1,      574, 0x8baa1d65
 +0,        365,        365,        0,      770, 0xab2b8891, F=0x0, S=1,      666, 0xcd8e51eb
 +0,        399,        399,        0,      708, 0xc2386711, F=0x0, S=1,      706, 0x046b6444
 +0,        432,        432,        0,      905, 0x7211c52d, F=0x0, S=1,      814, 0x5e288def
 +0,        465,        465,        0,      770, 0xda4f8574, F=0x0, S=1,      829, 0xa0e8a949
 +0,        499,        499,        0,      955, 0xf9a1d77a, F=0x0, S=1,      857, 0x9b63b955
 +0,        532,        532,        0,      970, 0xff4de39a, F=0x0, S=1,      153, 0x3b00416c
 +0,        565,        565,        0,      978, 0x12bcf81f, F=0x0, S=1,     1181, 0xce175555
 +0,        599,        599,        0,     1233, 0x2903744a, F=0x0, S=1,      860, 0x737eb566
 +0,        632,        632,        0,     1118, 0x7f274f50, F=0x0, S=1,      933, 0xb669c6b6
 +0,        665,        665,        0,      941, 0x6bffd4b1, F=0x0, S=1,     1058, 0x07581cee
 +0,        699,        699,        0,     1598, 0xc007219f, F=0x0, S=1,      939, 0x2c0bdc45
 +0,        732,        732,        0,     1218, 0x25d962b6, F=0x0, S=1,     1090, 0x96482341
 +0,        765,        765,        0,     1200, 0x86b85be3, F=0x0, S=1,      189, 0x3f085309
 +0,        799,        799,        0,     1329, 0x298a848a, F=0x0, S=1,     1426, 0x6ea3df12
 +0,        832,        832,        0,     1500, 0xe437edec, F=0x0, S=1,     1244, 0x32836b8d
 +0,        865,        865,        0,     1288, 0xc4447dd5, F=0x0, S=1,     1289, 0x06a57b0f
 +0,        899,        899,        0,     1281, 0xb5bf7e9f, F=0x0, S=1,     1227, 0xd96d5697
 +0,        932,        932,        0,     1372, 0x09be9014, F=0x0, S=1,     1556, 0x2630fbff
 +0,        965,        965,        0,     1238, 0x42ce6316, F=0x0, S=1,     1287, 0x1d3084f6
 +0,        999,        999,        0,     1655, 0xb94b45c2, F=0x0, S=1,     1494, 0x34dbd1a4
 +0,       1032,       1032,        0,     1164, 0xf6b93ad0, F=0x0, S=1,     1337, 0xba6d9673
 +0,       1065,       1065,        0,     1084, 0x58c50fb5, F=0x0, S=1,     1384, 0x3fabb82b
 +0,       1099,       1099,        0,     1151, 0x0b3f3359, F=0x0, S=1,     1353, 0x08e2a1d7
 +0,       1132,       1132,        0,     1277, 0xa3ae77e1, F=0x0, S=1,     1409, 0xf65cb9f7
 +0,       1165,       1165,        0,      782, 0xdcf671ff, F=0x0, S=1,     1408, 0x01e2ac53
 +0,       1199,       1199,        0,      926, 0xe913c286, F=0x0, S=1,     1320, 0x32e38e42
 +0,       1232,       1232,        0,      970, 0x3d86e5ae, F=0x0, S=1,     1608, 0x40b52618
 +0,       1265,       1265,        0,     1353, 0xe4f197b2, F=0x0, S=1,     1272, 0xf1d272a5
 +0,       1299,       1299,        0,      685, 0x629b4ce4, F=0x0, S=1,     1257, 0x14845de9
 +0,       1332,       1332,        0,      743, 0x6f1172a3, F=0x0, S=1,     1260, 0xa6c66fda
 +0,       1365,       1365,        0,      789, 0x94fc84cd, F=0x0, S=1,     1009, 0x7daaf2b0
 +0,       1399,       1399,        0,     1460, 0x668adb82, F=0x0, S=1,      944, 0x44b6ccf5
 +0,       1432,       1432,        0,      766, 0x49c884ef, F=0x0, S=1,      996, 0x8646e6dd
 +0,       1465,       1465,        0,     1037, 0x24831498, F=0x0, S=1,      983, 0x14a9e7a6
 +0,       1499,       1499,        0,      943, 0x1f53d180, F=0x0, S=1,     1107, 0x02f72acb
 +0,       1532,       1532,        0,     1152, 0xbf6a35ae, F=0x0, S=1,     1026, 0xd57afda0
 +0,       1565,       1565,        0,      730, 0x42806abf, F=0x0, S=1,     1029, 0xfb0402d5
 +0,       1599,       1599,        0,      975, 0xa5ffec57, F=0x0, S=1,     1081, 0xe2890cea
 +0,       1632,       1632,        0,      970, 0xbe8ee224, F=0x0, S=1,     1151, 0x7b0d3b20
 +0,       1665,       1665,        0,     1012, 0x20c6f0d8, F=0x0, S=1,      979, 0xc25cd69c
 +0,       1699,       1699,        0,      874, 0x1a2fb4da, F=0x0, S=1,      943, 0xdb2dc9f8
 +0,       1732,       1732,        0,      869, 0xab0caf3d, F=0x0, S=1,      934, 0x48b9bfcc
 +0,       1765,       1765,        0,      863, 0xd8caa2e5, F=0x0, S=1,      874, 0x0b34b026
 +0,       1799,       1799,        0,     1246, 0x47866cdc, F=0x0, S=1,      818, 0x0c908eeb
 +0,       1832,       1832,        0,      742, 0xa6296ac1, F=0x0, S=1,      921, 0x97b6b053
 +0,       1865,       1865,        0,      828, 0x0b568d7a, F=0x0, S=1,      969, 0x3314dbfa
 +0,       1899,       1899,        0,      825, 0x6d329394, F=0x0, S=1,      982, 0x5f66e68c
 +0,       1932,       1932,        0,      836, 0x8ace8dfb, F=0x0, S=1,      929, 0x9ffdc2fd
 +0,       1965,       1965,        0,     1774, 0xd4686726, F=0x0, S=1,      909, 0x11a9c07a
 +0,       1999,       1999,        0,     1803, 0x08c879ce, F=0x0, S=1,     1525, 0x1e11f02f
 +0,       2032,       2032,        0,      518, 0x7c32fc72, F=0x0, S=1,      785, 0xfc1f792a
 +0,       2065,       2065,        0,      790, 0x3dac8aa0, F=0x0, S=1,      876, 0x0918c88d
 +0,       2099,       2099,        0,      927, 0x4feccb24, F=0x0, S=1,     1059, 0xbcaa05c7
 +0,       2132,       2132,        0,      835, 0x29d39266, F=0x0, S=1,      980, 0x4913e409
 +0,       2165,       2165,        0,      951, 0xc1dddd12, F=0x0, S=1,     1041, 0x0541047e
 +0,       2199,       2199,        0,      876, 0x2f6eb89d, F=0x0, S=1,      949, 0x2d56c53b
 +0,       2232,       2232,        0,      959, 0xf0dedabd, F=0x0, S=1,     1022, 0x8d33f5fa
 +0,       2265,       2265,        0,      860, 0x9274ab39, F=0x0, S=1,     1061, 0x289c0132
 +0,       2299,       2299,        0,      863, 0x7058ba30, F=0x0, S=1,      940, 0x1f32d4a3
 +0,       2332,       2332,        0,     1021, 0xcabdf84f, F=0x0, S=1,      887, 0xda8ab95e
 +0,       2365,       2365,        0,      897, 0x9867c8e8, F=0x0, S=1,      840, 0xd93eaaf5
 +0,       2399,       2399,        0,      897, 0x6a16b5db, F=0x0, S=1,      977, 0x7b77dc9b
 +0,       2432,       2432,        0,      953, 0xe9b4cf1f, F=0x0, S=1,      921, 0x75a8ca45
 +0,       2465,       2465,        0,      847, 0x0335ad37, F=0x0, S=1,     1000, 0x2691f3bd
 +0,       2499,       2499,        0,      902, 0x3360b315, F=0x0, S=1,     1008, 0xd5e1deb6
 +0,       2532,       2532,        0,      881, 0xf5309d59, F=0x0, S=1,     1113, 0xdbef3065
 +0,       2565,       2565,        0,      974, 0x7c2de3ce, F=0x0, S=1,     1086, 0x365626bb
 +0,       2599,       2599,        0,      974, 0xf42bd9f5, F=0x0, S=1,     1039, 0xa7e9060d
 +0,       2632,       2632,        0,     1029, 0x7c33f4d0, F=0x0, S=1,     1041, 0xf4affa59
 +0,       2665,       2665,        0,      881, 0x9021a565, F=0x0, S=1,     1039, 0xc1e00521
 +0,       2699,       2699,        0,     1157, 0xe1c136f7, F=0x0, S=1,      917, 0x357ac7d3
 +0,       2732,       2732,        0,      649, 0xdffb3cb7, F=0x0, S=1,      976, 0xa386e05e
 +0,       2765,       2765,        0,      758, 0xb67875f3, F=0x0, S=1,     1041, 0xae4e0a63
 +0,       2799,       2799,        0,     1105, 0x8ffb1a26, F=0x0, S=1,      962, 0x211ddc5e
 +0,       2832,       2832,        0,      866, 0xa60eb2d9, F=0x0, S=1,      929, 0xe9e4c84b
 +0,       2865,       2865,        0,      912, 0xcd34bf9b, F=0x0, S=1,      946, 0xfce9d359
 +0,       2899,       2899,        0,      868, 0x5651a343, F=0x0, S=1,      809, 0x624a8ef9
 +0,       2932,       2932,        0,      997, 0xfa66eaeb, F=0x0, S=1,      992, 0xc913e5e2
 +0,       2965,       2965,        0,     1111, 0x3f272497, F=0x0, S=1,     1007, 0xf78ee6a7
 +0,       2999,       2999,        0,      842, 0xe442999f, F=0x0, S=1,      972, 0x25a0d25c
 +0,       3032,       3032,        0,     1030, 0x6f97ffad, F=0x0, S=1,      993, 0x4059fd6b
 +0,       3065,       3065,        0,     1176, 0x66e64926, F=0x0, S=1,      951, 0x2762cdf1
 +0,       3099,       3099,        0,      803, 0xfd1699cb, F=0x0, S=1,      959, 0x5cf9d56c
 +0,       3132,       3132,        0,      972, 0x1cdff00e, F=0x0, S=1,     1023, 0xeaf20900
 +0,       3165,       3165,        0,      907, 0x17f8acca, F=0x0, S=1,     1054, 0xeb010c4d
 +0,       3199,       3199,        0,      915, 0x3569b545, F=0x0, S=1,      987, 0x73b2e159
 +0,       3232,       3232,        0,     1021, 0x14c5076a, F=0x0, S=1,     1007, 0x6c4bf7f0
 +0,       3265,       3265,        0,      837, 0xbf86b0ef, F=0x0, S=1,      963, 0xf472d31a
 +0,       3299,       3299,        0,      885, 0x1caac123, F=0x0, S=1,     1052, 0x2b7bfd20
 +0,       3332,       3332,        0,     1355, 0x299e8d3c, F=0x0, S=1,      858, 0x2bbca3f0
 +0,       3365,       3365,        0,      784, 0xb0bd7e9d, F=0x0, S=1,      969, 0xc865dc00
 +0,       3399,       3399,        0,      991, 0xbc7ddda9, F=0x0, S=1,     1028, 0x801b00a6
 +0,       3432,       3432,        0,      986, 0xb356f6b1, F=0x0, S=1,     1056, 0x8b840add
 +0,       3465,       3465,        0,      978, 0x94a3e87e, F=0x0, S=1,     1018, 0xe766fa52
 +0,       3499,       3499,        0,      976, 0x55ddd14a, F=0x0, S=1,      992, 0x58a9ddfe
 +0,       3532,       3532,        0,     1241, 0x1ec867f7, F=0x0, S=1,      966, 0xa329e84f
 +0,       3565,       3565,        0,      975, 0xecf5dbb3, F=0x0, S=1,      899, 0xa7539f4d
 +0,       3599,       3599,        0,     1129, 0xb7243037, F=0x0, S=1,     1057, 0xbd0d10bd
 +0,       3632,       3632,        0,      913, 0xe5f1d03d, F=0x0, S=1,     1092, 0xeb9621f8
 +0,       3665,       3665,        0,      943, 0x87d0ed78, F=0x0, S=1,     1057, 0x079c1054
 +0,       3699,       3699,        0,      917, 0x536cc3fd, F=0x0, S=1,      946, 0xd2b9d0e2
 +0,       3732,       3732,        0,      892, 0x4dffb1e2, F=0x0, S=1,      930, 0x70c9cc40
 +0,       3765,       3765,        0,      957, 0x1a98e71c, F=0x0, S=1,      719, 0x6fec614a
 +0,       3799,       3799,        0,      893, 0xf405b2c3, F=0x0, S=1,      821, 0x63529cab
 +0,       3832,       3832,        0,      978, 0xa0a8d5f6, F=0x0, S=1,      745, 0x3c616219
 +0,       3865,       3865,        0,      887, 0xfa7cb65d, F=0x0, S=1,      768, 0xb8f07885
 +0,       3899,       3899,        0,      867, 0xd808ade7, F=0x0, S=1,      783, 0xf82b6b9a
 +0,       3932,       3932,        0,     1068, 0x6f8b135a, F=0x0, S=1,      807, 0x52028d50
 +0,       3965,       3965,        0,     2010, 0x536fe0b6, F=0x0, S=1,     1512, 0x690aeb55