aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Downs <heydowns@borg.com>2007-10-04 06:33:26 +0000
committerAndreas Ă–man <andreas@lonelycoder.com>2007-10-04 06:33:26 +0000
commitbbb3edb827de21a7c91e38b4ee741f1bbd9062a6 (patch)
treefc04326e6407bb05e537822d24223a7da2381153
parent330194b9cec1b31cd61a80d1914bc8cfc73ad45d (diff)
downloadffmpeg-bbb3edb827de21a7c91e38b4ee741f1bbd9062a6.tar.gz
Partial PAFF implementation at macroblock level.
PAFF support disabled until implementation complete. patch by Jeff Downs, heydowns a borg d com original thread: Subject: [FFmpeg-devel] [PATCH] Implement PAFF in H.264 Date: 18/09/07 20:30 Originally committed as revision 10658 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--libavcodec/h264.c8
-rw-r--r--libavcodec/h264.h2
2 files changed, 6 insertions, 4 deletions
diff --git a/libavcodec/h264.c b/libavcodec/h264.c
index e6a9d55476..fbfb6a1f90 100644
--- a/libavcodec/h264.c
+++ b/libavcodec/h264.c
@@ -1703,7 +1703,7 @@ static inline void mc_dir_part(H264Context *h, Picture *pic, int n, int square,
const int full_mx= mx>>2;
const int full_my= my>>2;
const int pic_width = 16*s->mb_width;
- const int pic_height = 16*s->mb_height >> MB_MBAFF;
+ const int pic_height = 16*s->mb_height >> (MB_MBAFF || FIELD_PICTURE);
if(!pic->data[0]) //FIXME this is unacceptable, some senseable error concealment must be done for missing reference frames
return;
@@ -1727,7 +1727,7 @@ static inline void mc_dir_part(H264Context *h, Picture *pic, int n, int square,
if(ENABLE_GRAY && s->flags&CODEC_FLAG_GRAY) return;
- if(MB_MBAFF){
+ if(MB_MBAFF || FIELD_PICTURE){
// chroma offset when predicting from a field of opposite parity
my += 2 * ((s->mb_y & 1) - (h->ref_cache[list][scan8[n]] & 1));
emu |= (my>>3) < 0 || (my>>3) + 8 >= (pic_height>>1);
@@ -1762,7 +1762,7 @@ static inline void mc_part_std(H264Context *h, int n, int square, int chroma_hei
dest_cb += x_offset + y_offset*h->mb_uvlinesize;
dest_cr += x_offset + y_offset*h->mb_uvlinesize;
x_offset += 8*s->mb_x;
- y_offset += 8*(s->mb_y >> MB_MBAFF);
+ y_offset += 8*(s->mb_y >> (MB_MBAFF || FIELD_PICTURE));
if(list0){
Picture *ref= &h->ref_list[0][ h->ref_cache[0][ scan8[n] ] ];
@@ -1795,7 +1795,7 @@ static inline void mc_part_weighted(H264Context *h, int n, int square, int chrom
dest_cb += x_offset + y_offset*h->mb_uvlinesize;
dest_cr += x_offset + y_offset*h->mb_uvlinesize;
x_offset += 8*s->mb_x;
- y_offset += 8*(s->mb_y >> MB_MBAFF);
+ y_offset += 8*(s->mb_y >> (MB_MBAFF || FIELD_PICTURE));
if(list0 && list1){
/* don't optimize for luma-only case, since B-frames usually
diff --git a/libavcodec/h264.h b/libavcodec/h264.h
index 0081e7392e..d9a668c7b1 100644
--- a/libavcodec/h264.h
+++ b/libavcodec/h264.h
@@ -59,10 +59,12 @@
#define MB_MBAFF h->mb_mbaff
#define MB_FIELD h->mb_field_decoding_flag
#define FRAME_MBAFF h->mb_aff_frame
+#define FIELD_PICTURE 0
#else
#define MB_MBAFF 0
#define MB_FIELD 0
#define FRAME_MBAFF 0
+#define FIELD_PICTURE 0
#undef IS_INTERLACED
#define IS_INTERLACED(mb_type) 0
#endif