LCOV - code coverage report
Current view: top level - libavformat - matroska.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 10 43 23.3 %
Date: 2017-12-18 06:23:41 Functions: 1 1 100.0 %

          Line data    Source code
       1             : /*
       2             :  * Matroska common data
       3             :  * Copyright (c) 2003-2004 The FFmpeg project
       4             :  *
       5             :  * This file is part of FFmpeg.
       6             :  *
       7             :  * FFmpeg is free software; you can redistribute it and/or
       8             :  * modify it under the terms of the GNU Lesser General Public
       9             :  * License as published by the Free Software Foundation; either
      10             :  * version 2.1 of the License, or (at your option) any later version.
      11             :  *
      12             :  * FFmpeg is distributed in the hope that it will be useful,
      13             :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      14             :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      15             :  * Lesser General Public License for more details.
      16             :  *
      17             :  * You should have received a copy of the GNU Lesser General Public
      18             :  * License along with FFmpeg; if not, write to the Free Software
      19             :  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
      20             :  */
      21             : 
      22             : #include "libavutil/stereo3d.h"
      23             : 
      24             : #include "matroska.h"
      25             : 
      26             : /* If you add a tag here that is not in ff_codec_bmp_tags[]
      27             :    or ff_codec_wav_tags[], add it also to additional_audio_tags[]
      28             :    or additional_video_tags[] in matroskaenc.c */
      29             : const CodecTags ff_mkv_codec_tags[]={
      30             :     {"A_AAC"            , AV_CODEC_ID_AAC},
      31             :     {"A_AC3"            , AV_CODEC_ID_AC3},
      32             :     {"A_ALAC"           , AV_CODEC_ID_ALAC},
      33             :     {"A_DTS"            , AV_CODEC_ID_DTS},
      34             :     {"A_EAC3"           , AV_CODEC_ID_EAC3},
      35             :     {"A_FLAC"           , AV_CODEC_ID_FLAC},
      36             :     {"A_MLP"            , AV_CODEC_ID_MLP},
      37             :     {"A_MPEG/L2"        , AV_CODEC_ID_MP2},
      38             :     {"A_MPEG/L1"        , AV_CODEC_ID_MP1},
      39             :     {"A_MPEG/L3"        , AV_CODEC_ID_MP3},
      40             :     {"A_OPUS"           , AV_CODEC_ID_OPUS},
      41             :     {"A_OPUS/EXPERIMENTAL",AV_CODEC_ID_OPUS},
      42             :     {"A_PCM/FLOAT/IEEE" , AV_CODEC_ID_PCM_F32LE},
      43             :     {"A_PCM/FLOAT/IEEE" , AV_CODEC_ID_PCM_F64LE},
      44             :     {"A_PCM/INT/BIG"    , AV_CODEC_ID_PCM_S16BE},
      45             :     {"A_PCM/INT/BIG"    , AV_CODEC_ID_PCM_S24BE},
      46             :     {"A_PCM/INT/BIG"    , AV_CODEC_ID_PCM_S32BE},
      47             :     {"A_PCM/INT/LIT"    , AV_CODEC_ID_PCM_S16LE},
      48             :     {"A_PCM/INT/LIT"    , AV_CODEC_ID_PCM_S24LE},
      49             :     {"A_PCM/INT/LIT"    , AV_CODEC_ID_PCM_S32LE},
      50             :     {"A_PCM/INT/LIT"    , AV_CODEC_ID_PCM_U8},
      51             :     {"A_QUICKTIME/QDMC" , AV_CODEC_ID_QDMC},
      52             :     {"A_QUICKTIME/QDM2" , AV_CODEC_ID_QDM2},
      53             :     {"A_REAL/14_4"      , AV_CODEC_ID_RA_144},
      54             :     {"A_REAL/28_8"      , AV_CODEC_ID_RA_288},
      55             :     {"A_REAL/ATRC"      , AV_CODEC_ID_ATRAC3},
      56             :     {"A_REAL/COOK"      , AV_CODEC_ID_COOK},
      57             :     {"A_REAL/SIPR"      , AV_CODEC_ID_SIPR},
      58             :     {"A_TRUEHD"         , AV_CODEC_ID_TRUEHD},
      59             :     {"A_TTA1"           , AV_CODEC_ID_TTA},
      60             :     {"A_VORBIS"         , AV_CODEC_ID_VORBIS},
      61             :     {"A_WAVPACK4"       , AV_CODEC_ID_WAVPACK},
      62             : 
      63             :     {"D_WEBVTT/SUBTITLES"   , AV_CODEC_ID_WEBVTT},
      64             :     {"D_WEBVTT/CAPTIONS"    , AV_CODEC_ID_WEBVTT},
      65             :     {"D_WEBVTT/DESCRIPTIONS", AV_CODEC_ID_WEBVTT},
      66             :     {"D_WEBVTT/METADATA"    , AV_CODEC_ID_WEBVTT},
      67             : 
      68             :     {"S_TEXT/UTF8"      , AV_CODEC_ID_SUBRIP},
      69             :     {"S_TEXT/UTF8"      , AV_CODEC_ID_TEXT},
      70             :     {"S_TEXT/ASCII"     , AV_CODEC_ID_TEXT},
      71             :     {"S_TEXT/ASS"       , AV_CODEC_ID_ASS},
      72             :     {"S_TEXT/SSA"       , AV_CODEC_ID_ASS},
      73             :     {"S_ASS"            , AV_CODEC_ID_ASS},
      74             :     {"S_SSA"            , AV_CODEC_ID_ASS},
      75             :     {"S_VOBSUB"         , AV_CODEC_ID_DVD_SUBTITLE},
      76             :     {"S_DVBSUB"         , AV_CODEC_ID_DVB_SUBTITLE},
      77             :     {"S_HDMV/PGS"       , AV_CODEC_ID_HDMV_PGS_SUBTITLE},
      78             :     {"S_HDMV/TEXTST"    , AV_CODEC_ID_HDMV_TEXT_SUBTITLE},
      79             : 
      80             :     {"V_AV1"            , AV_CODEC_ID_AV1},
      81             :     {"V_DIRAC"          , AV_CODEC_ID_DIRAC},
      82             :     {"V_FFV1"           , AV_CODEC_ID_FFV1},
      83             :     {"V_MJPEG"          , AV_CODEC_ID_MJPEG},
      84             :     {"V_MPEG1"          , AV_CODEC_ID_MPEG1VIDEO},
      85             :     {"V_MPEG2"          , AV_CODEC_ID_MPEG2VIDEO},
      86             :     {"V_MPEG4/ISO/ASP"  , AV_CODEC_ID_MPEG4},
      87             :     {"V_MPEG4/ISO/AP"   , AV_CODEC_ID_MPEG4},
      88             :     {"V_MPEG4/ISO/SP"   , AV_CODEC_ID_MPEG4},
      89             :     {"V_MPEG4/ISO/AVC"  , AV_CODEC_ID_H264},
      90             :     {"V_MPEGH/ISO/HEVC" , AV_CODEC_ID_HEVC},
      91             :     {"V_MPEG4/MS/V3"    , AV_CODEC_ID_MSMPEG4V3},
      92             :     {"V_PRORES"         , AV_CODEC_ID_PRORES},
      93             :     {"V_REAL/RV10"      , AV_CODEC_ID_RV10},
      94             :     {"V_REAL/RV20"      , AV_CODEC_ID_RV20},
      95             :     {"V_REAL/RV30"      , AV_CODEC_ID_RV30},
      96             :     {"V_REAL/RV40"      , AV_CODEC_ID_RV40},
      97             :     {"V_SNOW"           , AV_CODEC_ID_SNOW},
      98             :     {"V_THEORA"         , AV_CODEC_ID_THEORA},
      99             :     {"V_UNCOMPRESSED"   , AV_CODEC_ID_RAWVIDEO},
     100             :     {"V_VP8"            , AV_CODEC_ID_VP8},
     101             :     {"V_VP9"            , AV_CODEC_ID_VP9},
     102             : 
     103             :     {""                 , AV_CODEC_ID_NONE}
     104             : };
     105             : 
     106             : const CodecMime ff_mkv_image_mime_tags[] = {
     107             :     {"image/gif"                  , AV_CODEC_ID_GIF},
     108             :     {"image/jpeg"                 , AV_CODEC_ID_MJPEG},
     109             :     {"image/png"                  , AV_CODEC_ID_PNG},
     110             :     {"image/tiff"                 , AV_CODEC_ID_TIFF},
     111             : 
     112             :     {""                           , AV_CODEC_ID_NONE}
     113             : };
     114             : 
     115             : const CodecMime ff_mkv_mime_tags[] = {
     116             :     {"text/plain"                 , AV_CODEC_ID_TEXT},
     117             :     {"application/x-truetype-font", AV_CODEC_ID_TTF},
     118             :     {"application/x-font"         , AV_CODEC_ID_TTF},
     119             :     {"application/vnd.ms-opentype", AV_CODEC_ID_OTF},
     120             :     {"binary"                     , AV_CODEC_ID_BIN_DATA},
     121             : 
     122             :     {""                           , AV_CODEC_ID_NONE}
     123             : };
     124             : 
     125             : const AVMetadataConv ff_mkv_metadata_conv[] = {
     126             :     { "LEAD_PERFORMER", "performer" },
     127             :     { "PART_NUMBER"   , "track"  },
     128             :     { 0 }
     129             : };
     130             : 
     131             : const char * const ff_matroska_video_stereo_mode[MATROSKA_VIDEO_STEREOMODE_TYPE_NB] = {
     132             :     "mono",
     133             :     "left_right",
     134             :     "bottom_top",
     135             :     "top_bottom",
     136             :     "checkerboard_rl",
     137             :     "checkerboard_lr",
     138             :     "row_interleaved_rl",
     139             :     "row_interleaved_lr",
     140             :     "col_interleaved_rl",
     141             :     "col_interleaved_lr",
     142             :     "anaglyph_cyan_red",
     143             :     "right_left",
     144             :     "anaglyph_green_magenta",
     145             :     "block_lr",
     146             :     "block_rl",
     147             : };
     148             : 
     149             : const char * const ff_matroska_video_stereo_plane[MATROSKA_VIDEO_STEREO_PLANE_COUNT] = {
     150             :     "left",
     151             :     "right",
     152             :     "background",
     153             : };
     154             : 
     155         212 : int ff_mkv_stereo3d_conv(AVStream *st, MatroskaVideoStereoModeType stereo_mode)
     156             : {
     157             :     AVStereo3D *stereo;
     158             :     int ret;
     159             : 
     160         212 :     stereo = av_stereo3d_alloc();
     161         212 :     if (!stereo)
     162           0 :         return AVERROR(ENOMEM);
     163             : 
     164             :     // note: the missing breaks are intentional
     165         212 :     switch (stereo_mode) {
     166         212 :     case MATROSKA_VIDEO_STEREOMODE_TYPE_MONO:
     167         212 :         stereo->type = AV_STEREO3D_2D;
     168         212 :         break;
     169           0 :     case MATROSKA_VIDEO_STEREOMODE_TYPE_RIGHT_LEFT:
     170           0 :         stereo->flags |= AV_STEREO3D_FLAG_INVERT;
     171           0 :     case MATROSKA_VIDEO_STEREOMODE_TYPE_LEFT_RIGHT:
     172           0 :         stereo->type = AV_STEREO3D_SIDEBYSIDE;
     173           0 :         break;
     174           0 :     case MATROSKA_VIDEO_STEREOMODE_TYPE_BOTTOM_TOP:
     175           0 :         stereo->flags |= AV_STEREO3D_FLAG_INVERT;
     176           0 :     case MATROSKA_VIDEO_STEREOMODE_TYPE_TOP_BOTTOM:
     177           0 :         stereo->type = AV_STEREO3D_TOPBOTTOM;
     178           0 :         break;
     179           0 :     case MATROSKA_VIDEO_STEREOMODE_TYPE_CHECKERBOARD_RL:
     180           0 :         stereo->flags |= AV_STEREO3D_FLAG_INVERT;
     181           0 :     case MATROSKA_VIDEO_STEREOMODE_TYPE_CHECKERBOARD_LR:
     182           0 :         stereo->type = AV_STEREO3D_CHECKERBOARD;
     183           0 :         break;
     184           0 :     case MATROSKA_VIDEO_STEREOMODE_TYPE_ROW_INTERLEAVED_RL:
     185           0 :         stereo->flags |= AV_STEREO3D_FLAG_INVERT;
     186           0 :     case MATROSKA_VIDEO_STEREOMODE_TYPE_ROW_INTERLEAVED_LR:
     187           0 :         stereo->type = AV_STEREO3D_LINES;
     188           0 :         break;
     189           0 :     case MATROSKA_VIDEO_STEREOMODE_TYPE_COL_INTERLEAVED_RL:
     190           0 :         stereo->flags |= AV_STEREO3D_FLAG_INVERT;
     191           0 :     case MATROSKA_VIDEO_STEREOMODE_TYPE_COL_INTERLEAVED_LR:
     192           0 :         stereo->type = AV_STEREO3D_COLUMNS;
     193           0 :         break;
     194           0 :     case MATROSKA_VIDEO_STEREOMODE_TYPE_BOTH_EYES_BLOCK_RL:
     195           0 :         stereo->flags |= AV_STEREO3D_FLAG_INVERT;
     196           0 :     case MATROSKA_VIDEO_STEREOMODE_TYPE_BOTH_EYES_BLOCK_LR:
     197           0 :         stereo->type = AV_STEREO3D_FRAMESEQUENCE;
     198           0 :         break;
     199             :     }
     200             : 
     201         212 :     ret = av_stream_add_side_data(st, AV_PKT_DATA_STEREO3D, (uint8_t *)stereo,
     202             :                                   sizeof(*stereo));
     203         212 :     if (ret < 0) {
     204           0 :         av_freep(&stereo);
     205           0 :         return ret;
     206             :     }
     207             : 
     208         212 :     return 0;
     209             : }

Generated by: LCOV version 1.13