Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
ca239e1c
F
Ffmpeg
项目概览
小白菜888
/
Ffmpeg
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
Ffmpeg
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
ca239e1c
编写于
10月 20, 2011
作者:
J
Jordi Ortiz
提交者:
Michael Niedermayer
10月 30, 2011
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Dirac: Doxygen comments and some formatting enhancements
Signed-off-by:
N
Michael Niedermayer
<
michaelni@gmx.at
>
上级
4c150e3f
变更
3
展开全部
隐藏空白更改
内联
并排
Showing
3 changed file
with
369 addition
and
313 deletion
+369
-313
libavcodec/dirac.c
libavcodec/dirac.c
+81
-63
libavcodec/dirac.h
libavcodec/dirac.h
+3
-0
libavcodec/diracdec.c
libavcodec/diracdec.c
+285
-250
未找到文件。
libavcodec/dirac.c
浏览文件 @
ca239e1c
/*
* Copyright (C) 2007 Marco Gerards <marco@gnu.org>
* Copyright (C) 2009 David Conrad
* Copyright (C) 2011 Jordi Ortiz
*
* This file is part of FFmpeg.
*
...
...
@@ -22,7 +23,7 @@
/**
* @file
* Dirac Decoder
* @author Marco Gerards <marco@gnu.org>
* @author Marco Gerards <marco@gnu.org>
, David Conrad, Jordi Ortiz <nenjordi@gmail.com>
*/
#include "libavutil/imgutils.h"
...
...
@@ -31,7 +32,7 @@
#include "golomb.h"
#include "mpeg12data.h"
/
/ defaults for source parameters
/
* defaults for source parameters */
static
const
dirac_source_params
dirac_source_parameters_defaults
[]
=
{
{
640
,
480
,
2
,
0
,
0
,
1
,
1
,
640
,
480
,
0
,
0
,
1
,
0
},
{
176
,
120
,
2
,
0
,
0
,
9
,
2
,
176
,
120
,
0
,
0
,
1
,
1
},
...
...
@@ -42,7 +43,6 @@ static const dirac_source_params dirac_source_parameters_defaults[] = {
{
704
,
576
,
2
,
0
,
1
,
10
,
3
,
704
,
576
,
0
,
0
,
1
,
2
},
{
720
,
480
,
1
,
1
,
0
,
4
,
2
,
704
,
480
,
8
,
0
,
3
,
1
},
{
720
,
576
,
1
,
1
,
1
,
3
,
3
,
704
,
576
,
8
,
0
,
3
,
2
},
{
1280
,
720
,
1
,
0
,
1
,
7
,
1
,
1280
,
720
,
0
,
0
,
3
,
3
},
{
1280
,
720
,
1
,
0
,
1
,
6
,
1
,
1280
,
720
,
0
,
0
,
3
,
3
},
{
1920
,
1080
,
1
,
1
,
1
,
4
,
1
,
1920
,
1080
,
0
,
0
,
3
,
3
},
...
...
@@ -51,14 +51,16 @@ static const dirac_source_params dirac_source_parameters_defaults[] = {
{
1920
,
1080
,
1
,
0
,
1
,
6
,
1
,
1920
,
1080
,
0
,
0
,
3
,
3
},
{
2048
,
1080
,
0
,
0
,
1
,
2
,
1
,
2048
,
1080
,
0
,
0
,
4
,
4
},
{
4096
,
2160
,
0
,
0
,
1
,
2
,
1
,
4096
,
2160
,
0
,
0
,
4
,
4
},
{
3840
,
2160
,
1
,
0
,
1
,
7
,
1
,
3840
,
2160
,
0
,
0
,
3
,
3
},
{
3840
,
2160
,
1
,
0
,
1
,
6
,
1
,
3840
,
2160
,
0
,
0
,
3
,
3
},
{
7680
,
4320
,
1
,
0
,
1
,
7
,
1
,
3840
,
2160
,
0
,
0
,
3
,
3
},
{
7680
,
4320
,
1
,
0
,
1
,
6
,
1
,
3840
,
2160
,
0
,
0
,
3
,
3
},
};
//[DIRAC_STD] Table 10.4 Available preset pixel aspect ratio values
/**
* Dirac Specification ->
* Table 10.4 - Available preset pixel aspect ratio values
*/
static
const
AVRational
dirac_preset_aspect_ratios
[]
=
{
{
1
,
1
},
{
10
,
11
},
...
...
@@ -68,13 +70,19 @@ static const AVRational dirac_preset_aspect_ratios[] = {
{
4
,
3
},
};
//[DIRAC_STD] Values 9,10 of 10.3.5 Frame Rate. Table 10.3 Available preset frame rate values
/**
* Dirac Specification ->
* Values 9,10 of 10.3.5 Frame Rate. Table 10.3 Available preset frame rate values
*/
static
const
AVRational
dirac_frame_rate
[]
=
{
{
15000
,
1001
},
{
25
,
2
},
};
//[DIRAC_STD] This should be equivalent to Table 10.5 Available signal range presets
/**
* Dirac Specification ->
* This should be equivalent to Table 10.5 Available signal range presets
*/
static
const
struct
{
uint8_t
bitdepth
;
enum
AVColorRange
color_range
;
...
...
@@ -103,13 +111,19 @@ static const struct {
{
AVCOL_PRI_BT709
,
AVCOL_SPC_BT709
,
AVCOL_TRC_UNSPECIFIED
/* DCinema */
},
};
//[DIRAC_STD] Table 10.2 Supported chroma sampling formats + Luma Offset
/**
* Dirac Specification ->
* Table 10.2 Supported chroma sampling formats + Luma Offset
*/
static
const
enum
PixelFormat
dirac_pix_fmt
[
2
][
3
]
=
{
{
PIX_FMT_YUV444P
,
PIX_FMT_YUV422P
,
PIX_FMT_YUV420P
},
{
PIX_FMT_YUVJ444P
,
PIX_FMT_YUVJ422P
,
PIX_FMT_YUVJ420P
},
};
// [DIRAC_STD] 10.3 Parse Source Parameters. source_parameters(base_video_format)
/**
* Dirac Specification ->
* 10.3 Parse Source Parameters. source_parameters(base_video_format)
*/
static
int
parse_source_parameters
(
AVCodecContext
*
avctx
,
GetBitContext
*
gb
,
dirac_source_params
*
source
)
{
...
...
@@ -117,51 +131,52 @@ static int parse_source_parameters(AVCodecContext *avctx, GetBitContext *gb,
unsigned
luma_depth
=
8
,
luma_offset
=
16
;
int
idx
;
/
/[DIRAC_STD] 10.3.2 Frame size. frame_size(video_params)
if
(
get_bits1
(
gb
))
{
//[DIRAC_STD] custom_dimensions_flag
source
->
width
=
svq3_get_ue_golomb
(
gb
);
//[DIRAC_STD] FRAME_WIDTH
source
->
height
=
svq3_get_ue_golomb
(
gb
);
//[DIRAC_STD] FRAME_HEIGHT
/
* [DIRAC_STD] 10.3.2 Frame size. frame_size(video_params) */
if
(
get_bits1
(
gb
))
{
/* [DIRAC_STD] custom_dimensions_flag */
source
->
width
=
svq3_get_ue_golomb
(
gb
);
/* [DIRAC_STD] FRAME_WIDTH */
source
->
height
=
svq3_get_ue_golomb
(
gb
);
/* [DIRAC_STD] FRAME_HEIGHT */
}
//[DIRAC_STD] 10.3.3 Chroma Sampling Format. chroma_sampling_format(video_params)
if
(
get_bits1
(
gb
))
//[DIRAC_STD] custom_chroma_format_flag
source
->
chroma_format
=
svq3_get_ue_golomb
(
gb
);
//[DIRAC_STD] CHROMA_FORMAT_INDEX
/* [DIRAC_STD] 10.3.3 Chroma Sampling Format.
chroma_sampling_format(video_params) */
if
(
get_bits1
(
gb
))
/* [DIRAC_STD] custom_chroma_format_flag */
source
->
chroma_format
=
svq3_get_ue_golomb
(
gb
);
/*[DIRAC_STD] CHROMA_FORMAT_INDEX */
if
(
source
->
chroma_format
>
2U
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Unknown chroma format %d
\n
"
,
source
->
chroma_format
);
return
-
1
;
}
/
/[DIRAC_STD] 10.3.4 Scan Format. scan_format(video_params)
if
(
get_bits1
(
gb
))
//[DIRAC_STD] custom_scan_format_flag
source
->
interlaced
=
svq3_get_ue_golomb
(
gb
);
//[DIRAC_STD] SOURCE_SAMPLING
/
* [DIRAC_STD] 10.3.4 Scan Format. scan_format(video_params) */
if
(
get_bits1
(
gb
))
/* [DIRAC_STD] custom_scan_format_flag */
source
->
interlaced
=
svq3_get_ue_golomb
(
gb
);
/* [DIRAC_STD] SOURCE_SAMPLING */
if
(
source
->
interlaced
>
1U
)
return
-
1
;
/
/[DIRAC_STD] 10.3.5 Frame Rate. frame_rate(video_params)
if
(
get_bits1
(
gb
))
{
/
/[DIRAC_STD] custom_frame_rate_flag
source
->
frame_rate_index
=
svq3_get_ue_golomb
(
gb
);
/
* [DIRAC_STD] 10.3.5 Frame Rate. frame_rate(video_params) */
if
(
get_bits1
(
gb
))
{
/
* [DIRAC_STD] custom_frame_rate_flag */
source
->
frame_rate_index
=
svq3_get_ue_golomb
(
gb
);
if
(
source
->
frame_rate_index
>
10U
)
return
-
1
;
if
(
!
source
->
frame_rate_index
)
{
frame_rate
.
num
=
svq3_get_ue_golomb
(
gb
);
//[DIRAC_STD] FRAME_RATE_NUMER
frame_rate
.
den
=
svq3_get_ue_golomb
(
gb
);
//[DIRAC_STD] FRAME_RATE_DENOM
if
(
!
source
->
frame_rate_index
){
frame_rate
.
num
=
svq3_get_ue_golomb
(
gb
);
/* [DIRAC_STD] FRAME_RATE_NUMER */
frame_rate
.
den
=
svq3_get_ue_golomb
(
gb
);
/* [DIRAC_STD] FRAME_RATE_DENOM */
}
}
if
(
source
->
frame_rate_index
>
0
)
{
/
/[DIRAC_STD] preset_frame_rate(video_params,index)
if
(
source
->
frame_rate_index
>
0
)
{
/
* [DIRAC_STD] preset_frame_rate(video_params,index) */
if
(
source
->
frame_rate_index
<=
8
)
frame_rate
=
avpriv_frame_rate_tab
[
source
->
frame_rate_index
];
//[DIRAC_STD] Table 10.3 values 1-8
frame_rate
=
avpriv_frame_rate_tab
[
source
->
frame_rate_index
];
/* [DIRAC_STD] Table 10.3 values 1-8 */
else
frame_rate
=
dirac_frame_rate
[
source
->
frame_rate_index
-
9
];
//[DIRAC_STD] Table 10.3 values 9-10
frame_rate
=
dirac_frame_rate
[
source
->
frame_rate_index
-
9
];
/* [DIRAC_STD] Table 10.3 values 9-10 */
}
av_reduce
(
&
avctx
->
time_base
.
num
,
&
avctx
->
time_base
.
den
,
frame_rate
.
den
,
frame_rate
.
num
,
1
<<
30
);
/
/[DIRAC_STD] 10.3.6 Pixel Aspect Ratio. pixel_aspect_ratio(video_params)
if
(
get_bits1
(
gb
))
{
/
/[DIRAC_STD] custom_pixel_aspect_ratio_flag
source
->
aspect_ratio_index
=
svq3_get_ue_golomb
(
gb
);
//[DIRAC_STD] index
/
* [DIRAC_STD] 10.3.6 Pixel Aspect Ratio. pixel_aspect_ratio(video_params) */
if
(
get_bits1
(
gb
))
{
/
* [DIRAC_STD] custom_pixel_aspect_ratio_flag */
source
->
aspect_ratio_index
=
svq3_get_ue_golomb
(
gb
);
/* [DIRAC_STD] index */
if
(
source
->
aspect_ratio_index
>
6U
)
return
-
1
;
...
...
@@ -171,37 +186,37 @@ static int parse_source_parameters(AVCodecContext *avctx, GetBitContext *gb,
avctx
->
sample_aspect_ratio
.
den
=
svq3_get_ue_golomb
(
gb
);
}
}
if
(
source
->
aspect_ratio_index
>
0
)
/
/[DIRAC_STD] Take value from Table 10.4 Available preset pixel aspect ratio values
if
(
source
->
aspect_ratio_index
>
0
)
/
* [DIRAC_STD] Take value from Table 10.4 Available preset pixel aspect ratio values */
avctx
->
sample_aspect_ratio
=
dirac_preset_aspect_ratios
[
source
->
aspect_ratio_index
-
1
];
/
/[DIRAC_STD] 10.3.7 Clean area. clean_area(video_params)
if
(
get_bits1
(
gb
))
{
/
/[DIRAC_STD] custom_clean_area_flag
source
->
clean_width
=
svq3_get_ue_golomb
(
gb
);
//[DIRAC_STD] CLEAN_WIDTH
source
->
clean_height
=
svq3_get_ue_golomb
(
gb
);
//[DIRAC_STD] CLEAN_HEIGHT
source
->
clean_left_offset
=
svq3_get_ue_golomb
(
gb
);
//[DIRAC_STD] CLEAN_LEFT_OFFSET
source
->
clean_right_offset
=
svq3_get_ue_golomb
(
gb
);
//[DIRAC_STD] CLEAN_RIGHT_OFFSET
dirac_preset_aspect_ratios
[
source
->
aspect_ratio_index
-
1
];
/
* [DIRAC_STD] 10.3.7 Clean area. clean_area(video_params) */
if
(
get_bits1
(
gb
))
{
/
* [DIRAC_STD] custom_clean_area_flag */
source
->
clean_width
=
svq3_get_ue_golomb
(
gb
);
/* [DIRAC_STD] CLEAN_WIDTH */
source
->
clean_height
=
svq3_get_ue_golomb
(
gb
);
/* [DIRAC_STD] CLEAN_HEIGHT */
source
->
clean_left_offset
=
svq3_get_ue_golomb
(
gb
);
/* [DIRAC_STD] CLEAN_LEFT_OFFSET */
source
->
clean_right_offset
=
svq3_get_ue_golomb
(
gb
);
/* [DIRAC_STD] CLEAN_RIGHT_OFFSET */
}
/
/
[DIRAC_STD] 10.3.8 Signal range. signal_range(video_params)
//[DIRAC_STD] WARNING: Some adaptation seemed to be done using the AVCOL_RANGE_MPEG/JPEG values
if
(
get_bits1
(
gb
))
{
//[DIRAC_STD] custom_signal_range_flag
source
->
pixel_range_index
=
svq3_get_ue_golomb
(
gb
);
//[DIRAC_STD] index
/
*
[DIRAC_STD] 10.3.8 Signal range. signal_range(video_params)
WARNING: Some adaptation seemed to be done using the AVCOL_RANGE_MPEG/JPEG values */
if
(
get_bits1
(
gb
))
{
/*[DIRAC_STD] custom_signal_range_flag */
source
->
pixel_range_index
=
svq3_get_ue_golomb
(
gb
);
/*[DIRAC_STD] index */
if
(
source
->
pixel_range_index
>
4U
)
return
-
1
;
/
/ This assumes either fullrange or MPEG levels only
/
* This assumes either fullrange or MPEG levels only */
if
(
!
source
->
pixel_range_index
)
{
luma_offset
=
svq3_get_ue_golomb
(
gb
);
luma_depth
=
av_log2
(
svq3_get_ue_golomb
(
gb
))
+
1
;
svq3_get_ue_golomb
(
gb
);
/
/ chroma offset //@Jordi: Why are these two ignored?
svq3_get_ue_golomb
(
gb
);
/
/ chroma excursion
svq3_get_ue_golomb
(
gb
);
/
* chroma offset @Jordi: Why are these two ignored? */
svq3_get_ue_golomb
(
gb
);
/
* chroma excursion */
avctx
->
color_range
=
luma_offset
?
AVCOL_RANGE_MPEG
:
AVCOL_RANGE_JPEG
;
}
}
if
(
source
->
pixel_range_index
>
0
)
{
/
/[DIRAC_STD] Take values from Table 10.5 Available signal range presets
if
(
source
->
pixel_range_index
>
0
)
{
/
*[DIRAC_STD] Take values from Table 10.5 Available signal range presets */
idx
=
source
->
pixel_range_index
-
1
;
luma_depth
=
pixel_range_presets
[
idx
].
bitdepth
;
avctx
->
color_range
=
pixel_range_presets
[
idx
].
color_range
;
...
...
@@ -212,9 +227,9 @@ static int parse_source_parameters(AVCodecContext *avctx, GetBitContext *gb,
avctx
->
pix_fmt
=
dirac_pix_fmt
[
!
luma_offset
][
source
->
chroma_format
];
/
/[DIRAC_STD] 10.3.9 Colour specification. colour_spec(video_params)
if
(
get_bits1
(
gb
))
{
/
/[DIRAC_STD] custom_colour_spec_flag
idx
=
source
->
color_spec_index
=
svq3_get_ue_golomb
(
gb
);
//[DIRAC_STD] index
/
* [DIRAC_STD] 10.3.9 Colour specification. colour_spec(video_params) */
if
(
get_bits1
(
gb
))
{
/
* [DIRAC_STD] custom_colour_spec_flag */
idx
=
source
->
color_spec_index
=
svq3_get_ue_golomb
(
gb
);
/* [DIRAC_STD] index */
if
(
source
->
color_spec_index
>
4U
)
return
-
1
;
...
...
@@ -224,13 +239,13 @@ static int parse_source_parameters(AVCodecContext *avctx, GetBitContext *gb,
avctx
->
color_trc
=
dirac_color_presets
[
idx
].
color_trc
;
if
(
!
source
->
color_spec_index
)
{
//[DIRAC_STD] 10.3.9.1 Color primaries
/* [DIRAC_STD] 10.3.9.1 Color primaries */
if
(
get_bits1
(
gb
))
{
idx
=
svq3_get_ue_golomb
(
gb
);
if
(
idx
<
3U
)
avctx
->
color_primaries
=
dirac_primaries
[
idx
];
}
/
/[DIRAC_STD] 10.3.9.2 Color matrix
/
* [DIRAC_STD] 10.3.9.2 Color matrix */
if
(
get_bits1
(
gb
))
{
idx
=
svq3_get_ue_golomb
(
gb
);
if
(
!
idx
)
...
...
@@ -238,7 +253,7 @@ static int parse_source_parameters(AVCodecContext *avctx, GetBitContext *gb,
else
if
(
idx
==
1
)
avctx
->
colorspace
=
AVCOL_SPC_BT470BG
;
}
/
/[DIRAC_STD] 10.3.9.3 Transfer function
/
* [DIRAC_STD] 10.3.9.3 Transfer function */
if
(
get_bits1
(
gb
)
&&
!
svq3_get_ue_golomb
(
gb
))
avctx
->
color_trc
=
AVCOL_TRC_BT709
;
}
...
...
@@ -252,20 +267,23 @@ static int parse_source_parameters(AVCodecContext *avctx, GetBitContext *gb,
return
0
;
}
//[DIRAC_SPEC] 10. Sequence Header. sequence_header()
/**
* Dirac Specification ->
* 10. Sequence Header. sequence_header()
*/
int
avpriv_dirac_parse_sequence_header
(
AVCodecContext
*
avctx
,
GetBitContext
*
gb
,
dirac_source_params
*
source
)
{
unsigned
version_major
;
unsigned
video_format
,
picture_coding_mode
;
/
/[DIRAC_SPEC] 10.1 Parse Parameters. parse_parameters()
/
* [DIRAC_SPEC] 10.1 Parse Parameters. parse_parameters() */
version_major
=
svq3_get_ue_golomb
(
gb
);
svq3_get_ue_golomb
(
gb
);
/* version_minor */
avctx
->
profile
=
svq3_get_ue_golomb
(
gb
);
avctx
->
level
=
svq3_get_ue_golomb
(
gb
);
/
/[DIRAC_SPEC] sequence_header() -> base_video_format as defined in...
// ... 10.2 Base Video Format, table 10.1 Dirac predefined video formats
/
* [DIRAC_SPEC] sequence_header() -> base_video_format as defined in
10.2 Base Video Format, table 10.1 Dirac predefined video formats */
video_format
=
svq3_get_ue_golomb
(
gb
);
if
(
version_major
<
2
)
...
...
@@ -276,11 +294,11 @@ int avpriv_dirac_parse_sequence_header(AVCodecContext *avctx, GetBitContext *gb,
if
(
video_format
>
20U
)
return
-
1
;
/
/ Fill in defaults for the source parameters.
/
* Fill in defaults for the source parameters. */
*
source
=
dirac_source_parameters_defaults
[
video_format
];
/
/
[DIRAC_STD] 10.3 Source Parameters
// Override the defaults.
/
*
[DIRAC_STD] 10.3 Source Parameters
Override the defaults. */
if
(
parse_source_parameters
(
avctx
,
gb
,
source
))
return
-
1
;
...
...
@@ -289,8 +307,8 @@ int avpriv_dirac_parse_sequence_header(AVCodecContext *avctx, GetBitContext *gb,
avcodec_set_dimensions
(
avctx
,
source
->
width
,
source
->
height
);
/
/
[DIRAC_STD] picture_coding_mode shall be 0 for fields and 1 for frames
// currently only used to signal field coding
/
*
[DIRAC_STD] picture_coding_mode shall be 0 for fields and 1 for frames
currently only used to signal field coding */
picture_coding_mode
=
svq3_get_ue_golomb
(
gb
);
if
(
picture_coding_mode
!=
0
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Unsupported picture coding mode %d"
,
...
...
libavcodec/dirac.h
浏览文件 @
ca239e1c
/*
* Copyright (C) 2007 Marco Gerards <marco@gnu.org>
* Copyright (C) 2009 David Conrad
* Copyright (C) 2011 Jordi Ortiz
*
* This file is part of FFmpeg.
*
...
...
@@ -26,6 +27,8 @@
* @file
* Interface to Dirac Decoder/Encoder
* @author Marco Gerards <marco@gnu.org>
* @author David Conrad
* @author Jordi Ortiz
*/
#include "avcodec.h"
...
...
libavcodec/diracdec.c
浏览文件 @
ca239e1c
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录