Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
F
ffmpeg
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
ffmpeg
Commits
7fa00653
Commit
7fa00653
authored
Mar 09, 2013
by
Anton Khirnov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
h264: add a parameter to the FIELD_PICTURE macro.
This way it does not look like a constant.
parent
7bece9b2
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
25 additions
and
25 deletions
+25
-25
h264.c
libavcodec/h264.c
+12
-12
h264.h
libavcodec/h264.h
+3
-3
h264_cabac.c
libavcodec/h264_cabac.c
+1
-1
h264_loopfilter.c
libavcodec/h264_loopfilter.c
+3
-3
h264_refs.c
libavcodec/h264_refs.c
+6
-6
No files found.
libavcodec/h264.c
View file @
7fa00653
...
...
@@ -751,7 +751,7 @@ static void await_references(H264Context *h)
row
<<=
MB_MBAFF
(
h
);
nrefs
[
list
]
--
;
if
(
!
FIELD_PICTURE
&&
ref_field_picture
)
{
// frame referencing two fields
if
(
!
FIELD_PICTURE
(
h
)
&&
ref_field_picture
)
{
// frame referencing two fields
ff_thread_await_progress
(
&
ref_pic
->
tf
,
FFMIN
((
row
>>
1
)
-
!
(
row
&
1
),
pic_height
-
1
),
...
...
@@ -759,12 +759,12 @@ static void await_references(H264Context *h)
ff_thread_await_progress
(
&
ref_pic
->
tf
,
FFMIN
((
row
>>
1
),
pic_height
-
1
),
0
);
}
else
if
(
FIELD_PICTURE
&&
!
ref_field_picture
)
{
// field referencing one field of a frame
}
else
if
(
FIELD_PICTURE
(
h
)
&&
!
ref_field_picture
)
{
// field referencing one field of a frame
ff_thread_await_progress
(
&
ref_pic
->
tf
,
FFMIN
(
row
*
2
+
ref_field
,
pic_height
-
1
),
0
);
}
else
if
(
FIELD_PICTURE
)
{
}
else
if
(
FIELD_PICTURE
(
h
)
)
{
ff_thread_await_progress
(
&
ref_pic
->
tf
,
FFMIN
(
row
,
pic_height
-
1
),
ref_field
);
...
...
@@ -2801,7 +2801,7 @@ static int field_end(H264Context *h, int in_setup)
* past end by one (callers fault) and resync_mb_y != 0
* causes problems for the first MB line, too.
*/
if
(
!
FIELD_PICTURE
)
{
if
(
!
FIELD_PICTURE
(
h
)
)
{
h
->
er
.
cur_pic
=
h
->
cur_pic_ptr
;
h
->
er
.
last_pic
=
h
->
ref_count
[
0
]
?
&
h
->
ref_list
[
0
][
0
]
:
NULL
;
h
->
er
.
next_pic
=
h
->
ref_count
[
1
]
?
&
h
->
ref_list
[
1
][
0
]
:
NULL
;
...
...
@@ -3098,7 +3098,7 @@ static int decode_slice_header(H264Context *h, H264Context *h0)
first_mb_in_slice
=
get_ue_golomb
(
&
h
->
gb
);
if
(
first_mb_in_slice
==
0
)
{
// FIXME better field boundary detection
if
(
h0
->
current_slice
&&
FIELD_PICTURE
)
{
if
(
h0
->
current_slice
&&
FIELD_PICTURE
(
h
)
)
{
field_end
(
h
,
1
);
}
...
...
@@ -3327,7 +3327,7 @@ static int decode_slice_header(H264Context *h, H264Context *h0)
assert
(
h0
->
cur_pic_ptr
->
reference
!=
DELAYED_PIC_REF
);
/* figure out if we have a complementary field pair */
if
(
!
FIELD_PICTURE
||
h
->
picture_structure
==
last_pic_structure
)
{
if
(
!
FIELD_PICTURE
(
h
)
||
h
->
picture_structure
==
last_pic_structure
)
{
/* Previous field is unmatched. Don't display it, but let it
* remain for reference if marked as such. */
if
(
!
last_pic_droppable
&&
last_pic_structure
!=
PICT_FRAME
)
{
...
...
@@ -3411,11 +3411,11 @@ static int decode_slice_header(H264Context *h, H264Context *h0)
assert
(
h0
->
cur_pic_ptr
->
reference
!=
DELAYED_PIC_REF
);
/* figure out if we have a complementary field pair */
if
(
!
FIELD_PICTURE
||
h
->
picture_structure
==
last_pic_structure
)
{
if
(
!
FIELD_PICTURE
(
h
)
||
h
->
picture_structure
==
last_pic_structure
)
{
/* Previous field is unmatched. Don't display it, but let it
* remain for reference if marked as such. */
h0
->
cur_pic_ptr
=
NULL
;
h0
->
first_field
=
FIELD_PICTURE
;
h0
->
first_field
=
FIELD_PICTURE
(
h
)
;
}
else
{
if
(
h0
->
cur_pic_ptr
->
frame_num
!=
h
->
frame_num
)
{
/* This and the previous field had different frame_nums.
...
...
@@ -3430,10 +3430,10 @@ static int decode_slice_header(H264Context *h, H264Context *h0)
}
}
else
{
/* Frame or first field in a potentially complementary pair */
h0
->
first_field
=
FIELD_PICTURE
;
h0
->
first_field
=
FIELD_PICTURE
(
h
)
;
}
if
(
!
FIELD_PICTURE
||
h0
->
first_field
)
{
if
(
!
FIELD_PICTURE
(
h
)
||
h0
->
first_field
)
{
if
(
h264_frame_start
(
h
)
<
0
)
{
h0
->
first_field
=
0
;
return
-
1
;
...
...
@@ -4058,8 +4058,8 @@ static void predict_field_decoding_flag(H264Context *h)
*/
static
void
decode_finish_row
(
H264Context
*
h
)
{
int
top
=
16
*
(
h
->
mb_y
>>
FIELD_PICTURE
);
int
pic_height
=
16
*
h
->
mb_height
>>
FIELD_PICTURE
;
int
top
=
16
*
(
h
->
mb_y
>>
FIELD_PICTURE
(
h
)
);
int
pic_height
=
16
*
h
->
mb_height
>>
FIELD_PICTURE
(
h
)
;
int
height
=
16
<<
FRAME_MBAFF
(
h
);
int
deblock_border
=
(
16
+
4
)
<<
FRAME_MBAFF
(
h
);
...
...
libavcodec/h264.h
View file @
7fa00653
...
...
@@ -62,7 +62,7 @@
#define MB_MBAFF(h) h->mb_mbaff
#define MB_FIELD(h) h->mb_field_decoding_flag
#define FRAME_MBAFF(h) h->mb_aff_frame
#define FIELD_PICTURE (h->picture_structure != PICT_FRAME)
#define FIELD_PICTURE
(h)
(h->picture_structure != PICT_FRAME)
#define LEFT_MBS 2
#define LTOP 0
#define LBOT 1
...
...
@@ -71,7 +71,7 @@
#define MB_MBAFF(h) 0
#define MB_FIELD(h) 0
#define FRAME_MBAFF(h) 0
#define FIELD_PICTURE 0
#define FIELD_PICTURE
(h)
0
#undef IS_INTERLACED
#define IS_INTERLACED(mb_type) 0
#define LEFT_MBS 1
...
...
@@ -79,7 +79,7 @@
#define LBOT 0
#define LEFT(i) 0
#endif
#define FIELD_OR_MBAFF_PICTURE (FRAME_MBAFF(h) || FIELD_PICTURE)
#define FIELD_OR_MBAFF_PICTURE (FRAME_MBAFF(h) || FIELD_PICTURE
(h)
)
#ifndef CABAC
#define CABAC h->pps.cabac
...
...
libavcodec/h264_cabac.c
View file @
7fa00653
...
...
@@ -1341,7 +1341,7 @@ static int decode_cabac_mb_skip( H264Context *h, int mb_x, int mb_y ) {
}
else
{
int
mb_xy
=
h
->
mb_xy
;
mba_xy
=
mb_xy
-
1
;
mbb_xy
=
mb_xy
-
(
h
->
mb_stride
<<
FIELD_PICTURE
);
mbb_xy
=
mb_xy
-
(
h
->
mb_stride
<<
FIELD_PICTURE
(
h
)
);
}
if
(
h
->
slice_table
[
mba_xy
]
==
h
->
slice_num
&&
!
IS_SKIP
(
h
->
cur_pic
.
mb_type
[
mba_xy
]
))
...
...
libavcodec/h264_loopfilter.c
View file @
7fa00653
...
...
@@ -271,7 +271,7 @@ static av_always_inline void h264_filter_mb_fast_internal(H264Context *h,
if
(
IS_INTRA
(
mb_type
)
)
{
static
const
int16_t
bS4
[
4
]
=
{
4
,
4
,
4
,
4
};
static
const
int16_t
bS3
[
4
]
=
{
3
,
3
,
3
,
3
};
const
int16_t
*
bSH
=
FIELD_PICTURE
?
bS3
:
bS4
;
const
int16_t
*
bSH
=
FIELD_PICTURE
(
h
)
?
bS3
:
bS4
;
if
(
left_type
)
filter_mb_edgev
(
&
img_y
[
4
*
0
<<
pixel_shift
],
linesize
,
bS4
,
qp0
,
a
,
b
,
h
,
1
);
if
(
IS_8x8DCT
(
mb_type
)
)
{
...
...
@@ -372,12 +372,12 @@ static av_always_inline void h264_filter_mb_fast_internal(H264Context *h,
int
step
=
1
+
(
mb_type
>>
24
);
//IS_8x8DCT(mb_type) ? 2 : 1;
edges
=
4
-
3
*
((
mb_type
>>
3
)
&
!
(
h
->
cbp
&
15
));
//(mb_type & MB_TYPE_16x16) && !(h->cbp & 15) ? 1 : 4;
h
->
h264dsp
.
h264_loop_filter_strength
(
bS
,
h
->
non_zero_count_cache
,
h
->
ref_cache
,
h
->
mv_cache
,
h
->
list_count
==
2
,
edges
,
step
,
mask_edge0
,
mask_edge1
,
FIELD_PICTURE
);
h
->
list_count
==
2
,
edges
,
step
,
mask_edge0
,
mask_edge1
,
FIELD_PICTURE
(
h
)
);
}
if
(
IS_INTRA
(
left_type
)
)
AV_WN64A
(
bS
[
0
][
0
],
0x0004000400040004ULL
);
if
(
IS_INTRA
(
top_type
)
)
AV_WN64A
(
bS
[
1
][
0
],
FIELD_PICTURE
?
0x0003000300030003ULL
:
0x0004000400040004ULL
);
AV_WN64A
(
bS
[
1
][
0
],
FIELD_PICTURE
(
h
)
?
0x0003000300030003ULL
:
0x0004000400040004ULL
);
#define FILTER(hv,dir,edge,intra)\
if(AV_RN64A(bS[dir][edge])) { \
...
...
libavcodec/h264_refs.c
View file @
7fa00653
...
...
@@ -122,7 +122,7 @@ int ff_h264_fill_default_ref_list(H264Context *h)
int
cur_poc
,
list
;
int
lens
[
2
];
if
(
FIELD_PICTURE
)
if
(
FIELD_PICTURE
(
h
)
)
cur_poc
=
h
->
cur_pic_ptr
->
field_poc
[
h
->
picture_structure
==
PICT_BOTTOM_FIELD
];
else
cur_poc
=
h
->
cur_pic_ptr
->
poc
;
...
...
@@ -191,7 +191,7 @@ static void print_long_term(H264Context *h);
static
int
pic_num_extract
(
H264Context
*
h
,
int
pic_num
,
int
*
structure
)
{
*
structure
=
h
->
picture_structure
;
if
(
FIELD_PICTURE
)
{
if
(
FIELD_PICTURE
(
h
)
)
{
if
(
!
(
pic_num
&
1
))
/* opposite field */
*
structure
^=
PICT_FRAME
;
...
...
@@ -291,7 +291,7 @@ int ff_h264_decode_ref_pic_list_reordering(H264Context *h)
COPY_PICTURE
(
&
h
->
ref_list
[
list
][
i
],
&
h
->
ref_list
[
list
][
i
-
1
]);
}
COPY_PICTURE
(
&
h
->
ref_list
[
list
][
index
],
ref
);
if
(
FIELD_PICTURE
)
{
if
(
FIELD_PICTURE
(
h
)
)
{
pic_as_field
(
&
h
->
ref_list
[
list
][
index
],
pic_structure
);
}
}
...
...
@@ -524,11 +524,11 @@ int ff_generate_sliding_window_mmcos(H264Context *h, int first_slice)
if
(
h
->
short_ref_count
&&
h
->
long_ref_count
+
h
->
short_ref_count
==
h
->
sps
.
ref_frame_count
&&
!
(
FIELD_PICTURE
&&
!
h
->
first_field
&&
h
->
cur_pic_ptr
->
reference
))
{
!
(
FIELD_PICTURE
(
h
)
&&
!
h
->
first_field
&&
h
->
cur_pic_ptr
->
reference
))
{
mmco
[
0
].
opcode
=
MMCO_SHORT2UNUSED
;
mmco
[
0
].
short_pic_num
=
h
->
short_ref
[
h
->
short_ref_count
-
1
]
->
frame_num
;
mmco_index
=
1
;
if
(
FIELD_PICTURE
)
{
if
(
FIELD_PICTURE
(
h
)
)
{
mmco
[
0
].
short_pic_num
*=
2
;
mmco
[
1
].
opcode
=
MMCO_SHORT2UNUSED
;
mmco
[
1
].
short_pic_num
=
mmco
[
0
].
short_pic_num
+
1
;
...
...
@@ -751,7 +751,7 @@ int ff_h264_decode_ref_pic_marking(H264Context *h, GetBitContext *gb,
if
(
long_arg
>=
32
||
(
long_arg
>=
16
&&
!
(
opcode
==
MMCO_SET_MAX_LONG
&&
long_arg
==
16
)
&&
!
(
opcode
==
MMCO_LONG2UNUSED
&&
FIELD_PICTURE
)))
{
!
(
opcode
==
MMCO_LONG2UNUSED
&&
FIELD_PICTURE
(
h
)
)))
{
av_log
(
h
->
avctx
,
AV_LOG_ERROR
,
"illegal long ref in memory management control "
"operation %d
\n
"
,
opcode
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment