08abe0fd |
/* |
b061d892 |
* Matroska common data |
41ed7ab4 |
* Copyright (c) 2003-2004 The FFmpeg project |
08abe0fd |
* |
b78e7197 |
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or |
08abe0fd |
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either |
b78e7197 |
* version 2.1 of the License, or (at your option) any later version. |
08abe0fd |
* |
b78e7197 |
* FFmpeg is distributed in the hope that it will be useful, |
08abe0fd |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public |
b78e7197 |
* License along with FFmpeg; if not, write to the Free Software |
5509bffa |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
08abe0fd |
*/
|
d4ae8ac9 |
#include "libavutil/stereo3d.h"
|
b061d892 |
#include "matroska.h" |
08abe0fd |
|
df39c3ce |
/* 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 */ |
73a727f3 |
const CodecTags ff_mkv_codec_tags[]={ |
36ef5369 |
{"A_AAC" , AV_CODEC_ID_AAC},
{"A_AC3" , AV_CODEC_ID_AC3}, |
7a72695c |
{"A_ALAC" , AV_CODEC_ID_ALAC}, |
36ef5369 |
{"A_DTS" , AV_CODEC_ID_DTS},
{"A_EAC3" , AV_CODEC_ID_EAC3},
{"A_FLAC" , AV_CODEC_ID_FLAC},
{"A_MLP" , AV_CODEC_ID_MLP},
{"A_MPEG/L2" , AV_CODEC_ID_MP2}, |
38e4bcae |
{"A_MPEG/L1" , AV_CODEC_ID_MP1}, |
36ef5369 |
{"A_MPEG/L3" , AV_CODEC_ID_MP3}, |
141fdc76 |
{"A_OPUS" , AV_CODEC_ID_OPUS}, |
b7bd6885 |
{"A_OPUS/EXPERIMENTAL",AV_CODEC_ID_OPUS}, |
36ef5369 |
{"A_PCM/FLOAT/IEEE" , AV_CODEC_ID_PCM_F32LE},
{"A_PCM/FLOAT/IEEE" , AV_CODEC_ID_PCM_F64LE},
{"A_PCM/INT/BIG" , AV_CODEC_ID_PCM_S16BE},
{"A_PCM/INT/BIG" , AV_CODEC_ID_PCM_S24BE},
{"A_PCM/INT/BIG" , AV_CODEC_ID_PCM_S32BE},
{"A_PCM/INT/LIT" , AV_CODEC_ID_PCM_S16LE},
{"A_PCM/INT/LIT" , AV_CODEC_ID_PCM_S24LE},
{"A_PCM/INT/LIT" , AV_CODEC_ID_PCM_S32LE},
{"A_PCM/INT/LIT" , AV_CODEC_ID_PCM_U8}, |
1638d956 |
{"A_QUICKTIME/QDMC" , AV_CODEC_ID_QDMC}, |
36ef5369 |
{"A_QUICKTIME/QDM2" , AV_CODEC_ID_QDM2},
{"A_REAL/14_4" , AV_CODEC_ID_RA_144},
{"A_REAL/28_8" , AV_CODEC_ID_RA_288},
{"A_REAL/ATRC" , AV_CODEC_ID_ATRAC3},
{"A_REAL/COOK" , AV_CODEC_ID_COOK},
{"A_REAL/SIPR" , AV_CODEC_ID_SIPR},
{"A_TRUEHD" , AV_CODEC_ID_TRUEHD},
{"A_TTA1" , AV_CODEC_ID_TTA},
{"A_VORBIS" , AV_CODEC_ID_VORBIS},
{"A_WAVPACK4" , AV_CODEC_ID_WAVPACK}, |
f7e97aaf |
|
818ebe93 |
{"D_WEBVTT/SUBTITLES" , AV_CODEC_ID_WEBVTT},
{"D_WEBVTT/CAPTIONS" , AV_CODEC_ID_WEBVTT},
{"D_WEBVTT/DESCRIPTIONS", AV_CODEC_ID_WEBVTT},
{"D_WEBVTT/METADATA" , AV_CODEC_ID_WEBVTT},
|
2626cc45 |
{"S_TEXT/UTF8" , AV_CODEC_ID_SUBRIP}, |
36ef5369 |
{"S_TEXT/UTF8" , AV_CODEC_ID_TEXT},
{"S_TEXT/ASCII" , AV_CODEC_ID_TEXT}, |
7c1a002c |
{"S_TEXT/ASS" , AV_CODEC_ID_ASS},
{"S_TEXT/SSA" , AV_CODEC_ID_ASS},
{"S_ASS" , AV_CODEC_ID_ASS},
{"S_SSA" , AV_CODEC_ID_ASS}, |
36ef5369 |
{"S_VOBSUB" , AV_CODEC_ID_DVD_SUBTITLE}, |
4789c25d |
{"S_DVBSUB" , AV_CODEC_ID_DVB_SUBTITLE}, |
36ef5369 |
{"S_HDMV/PGS" , AV_CODEC_ID_HDMV_PGS_SUBTITLE}, |
dface534 |
{"S_HDMV/TEXTST" , AV_CODEC_ID_HDMV_TEXT_SUBTITLE}, |
f7e97aaf |
|
d42809f9 |
{"V_AV1" , AV_CODEC_ID_AV1}, |
36ef5369 |
{"V_DIRAC" , AV_CODEC_ID_DIRAC}, |
9ae762da |
{"V_FFV1" , AV_CODEC_ID_FFV1}, |
36ef5369 |
{"V_MJPEG" , AV_CODEC_ID_MJPEG},
{"V_MPEG1" , AV_CODEC_ID_MPEG1VIDEO},
{"V_MPEG2" , AV_CODEC_ID_MPEG2VIDEO},
{"V_MPEG4/ISO/ASP" , AV_CODEC_ID_MPEG4},
{"V_MPEG4/ISO/AP" , AV_CODEC_ID_MPEG4},
{"V_MPEG4/ISO/SP" , AV_CODEC_ID_MPEG4},
{"V_MPEG4/ISO/AVC" , AV_CODEC_ID_H264}, |
16b6839d |
{"V_MPEGH/ISO/HEVC" , AV_CODEC_ID_HEVC}, |
36ef5369 |
{"V_MPEG4/MS/V3" , AV_CODEC_ID_MSMPEG4V3}, |
117d8c6d |
{"V_PRORES" , AV_CODEC_ID_PRORES}, |
36ef5369 |
{"V_REAL/RV10" , AV_CODEC_ID_RV10},
{"V_REAL/RV20" , AV_CODEC_ID_RV20},
{"V_REAL/RV30" , AV_CODEC_ID_RV30},
{"V_REAL/RV40" , AV_CODEC_ID_RV40},
{"V_SNOW" , AV_CODEC_ID_SNOW},
{"V_THEORA" , AV_CODEC_ID_THEORA},
{"V_UNCOMPRESSED" , AV_CODEC_ID_RAWVIDEO},
{"V_VP8" , AV_CODEC_ID_VP8}, |
66aabd76 |
{"V_VP9" , AV_CODEC_ID_VP9}, |
737dccfc |
|
36ef5369 |
{"" , AV_CODEC_ID_NONE} |
70596d04 |
}; |
f8d7c9d3 |
|
794079e8 |
const CodecTags ff_webm_codec_tags[] = {
{"V_VP8" , AV_CODEC_ID_VP8},
{"V_VP9" , AV_CODEC_ID_VP9},
{"V_AV1" , AV_CODEC_ID_AV1},
{"A_VORBIS" , AV_CODEC_ID_VORBIS},
{"A_OPUS" , AV_CODEC_ID_OPUS},
{"D_WEBVTT/SUBTITLES" , AV_CODEC_ID_WEBVTT},
{"D_WEBVTT/CAPTIONS" , AV_CODEC_ID_WEBVTT},
{"D_WEBVTT/DESCRIPTIONS", AV_CODEC_ID_WEBVTT},
{"D_WEBVTT/METADATA" , AV_CODEC_ID_WEBVTT},
{"" , AV_CODEC_ID_NONE}
};
|
719e721a |
const AVMetadataConv ff_mkv_metadata_conv[] = { |
ca76a119 |
{ "LEAD_PERFORMER", "performer" }, |
719e721a |
{ "PART_NUMBER" , "track" },
{ 0 }
}; |
4c509fe3 |
|
37520a91 |
const char * const ff_matroska_video_stereo_mode[MATROSKA_VIDEO_STEREOMODE_TYPE_NB] = { |
4c509fe3 |
"mono",
"left_right",
"bottom_top",
"top_bottom",
"checkerboard_rl", |
8d8c5948 |
"checkerboard_lr", |
4c509fe3 |
"row_interleaved_rl",
"row_interleaved_lr",
"col_interleaved_rl",
"col_interleaved_lr",
"anaglyph_cyan_red",
"right_left",
"anaglyph_green_magenta",
"block_lr",
"block_rl",
};
|
ca81e3b6 |
const char * const ff_matroska_video_stereo_plane[MATROSKA_VIDEO_STEREO_PLANE_COUNT] = { |
4c509fe3 |
"left",
"right",
"background",
}; |
fcc39099 |
|
d4ae8ac9 |
int ff_mkv_stereo3d_conv(AVStream *st, MatroskaVideoStereoModeType stereo_mode)
{
AVStereo3D *stereo; |
2343f23e |
int ret; |
d4ae8ac9 |
stereo = av_stereo3d_alloc();
if (!stereo)
return AVERROR(ENOMEM);
// 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;
}
|
2343f23e |
ret = av_stream_add_side_data(st, AV_PKT_DATA_STEREO3D, (uint8_t *)stereo,
sizeof(*stereo));
if (ret < 0) {
av_freep(&stereo);
return ret;
}
|
d4ae8ac9 |
return 0;
} |