Commit 76ba894e authored by Michael Niedermayer's avatar Michael Niedermayer

Merge commit 'f593628e'

* commit 'f593628e':
  avconv: Replace raw picture frame swapping hack.
  RV40: reuse some H.264 motion compensation functions in RV40.
Merged-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parents a9424d27 f593628e
...@@ -1148,11 +1148,10 @@ static void do_video_out(AVFormatContext *s, ...@@ -1148,11 +1148,10 @@ static void do_video_out(AVFormatContext *s,
{ {
int nb_frames, i, ret, format_video_sync; int nb_frames, i, ret, format_video_sync;
AVFrame *final_picture; AVFrame *final_picture;
AVCodecContext *enc, *dec; AVCodecContext *enc;
double sync_ipts; double sync_ipts;
enc = ost->st->codec; enc = ost->st->codec;
dec = ist->st->codec;
sync_ipts = get_sync_ipts(ost) / av_q2d(enc->time_base); sync_ipts = get_sync_ipts(ost) / av_q2d(enc->time_base);
...@@ -1206,15 +1205,14 @@ static void do_video_out(AVFormatContext *s, ...@@ -1206,15 +1205,14 @@ static void do_video_out(AVFormatContext *s,
/* raw pictures are written as AVPicture structure to /* raw pictures are written as AVPicture structure to
avoid any copies. We support temporarily the older avoid any copies. We support temporarily the older
method. */ method. */
AVFrame* old_frame = enc->coded_frame; enc->coded_frame->interlaced_frame = in_picture->interlaced_frame;
enc->coded_frame = dec->coded_frame; //FIXME/XXX remove this hack enc->coded_frame->top_field_first = in_picture->top_field_first;
pkt.data= (uint8_t *)final_picture; pkt.data= (uint8_t *)final_picture;
pkt.size= sizeof(AVPicture); pkt.size= sizeof(AVPicture);
pkt.pts= av_rescale_q(ost->sync_opts, enc->time_base, ost->st->time_base); pkt.pts= av_rescale_q(ost->sync_opts, enc->time_base, ost->st->time_base);
pkt.flags |= AV_PKT_FLAG_KEY; pkt.flags |= AV_PKT_FLAG_KEY;
write_frame(s, &pkt, ost->st->codec, ost->bitstream_filters); write_frame(s, &pkt, ost->st->codec, ost->bitstream_filters);
enc->coded_frame = old_frame;
} else { } else {
AVFrame big_picture; AVFrame big_picture;
......
...@@ -1137,11 +1137,10 @@ static void do_video_out(AVFormatContext *s, ...@@ -1137,11 +1137,10 @@ static void do_video_out(AVFormatContext *s,
{ {
int nb_frames, i, ret, format_video_sync; int nb_frames, i, ret, format_video_sync;
AVFrame *final_picture; AVFrame *final_picture;
AVCodecContext *enc, *dec; AVCodecContext *enc;
double sync_ipts; double sync_ipts;
enc = ost->st->codec; enc = ost->st->codec;
dec = ist->st->codec;
sync_ipts = get_sync_ipts(ost) / av_q2d(enc->time_base); sync_ipts = get_sync_ipts(ost) / av_q2d(enc->time_base);
...@@ -1195,15 +1194,14 @@ static void do_video_out(AVFormatContext *s, ...@@ -1195,15 +1194,14 @@ static void do_video_out(AVFormatContext *s,
/* raw pictures are written as AVPicture structure to /* raw pictures are written as AVPicture structure to
avoid any copies. We support temporarily the older avoid any copies. We support temporarily the older
method. */ method. */
AVFrame* old_frame = enc->coded_frame; enc->coded_frame->interlaced_frame = in_picture->interlaced_frame;
enc->coded_frame = dec->coded_frame; //FIXME/XXX remove this hack enc->coded_frame->top_field_first = in_picture->top_field_first;
pkt.data= (uint8_t *)final_picture; pkt.data= (uint8_t *)final_picture;
pkt.size= sizeof(AVPicture); pkt.size= sizeof(AVPicture);
pkt.pts= av_rescale_q(ost->sync_opts, enc->time_base, ost->st->time_base); pkt.pts= av_rescale_q(ost->sync_opts, enc->time_base, ost->st->time_base);
pkt.flags |= AV_PKT_FLAG_KEY; pkt.flags |= AV_PKT_FLAG_KEY;
write_frame(s, &pkt, ost->st->codec, ost->bitstream_filters); write_frame(s, &pkt, ost->st->codec, ost->bitstream_filters);
enc->coded_frame = old_frame;
} else { } else {
AVFrame big_picture; AVFrame big_picture;
......
...@@ -106,10 +106,6 @@ static void OPNAME ## rv40_qpel ## SIZE ## _mc10_c(uint8_t *dst, uint8_t *src, i ...@@ -106,10 +106,6 @@ static void OPNAME ## rv40_qpel ## SIZE ## _mc10_c(uint8_t *dst, uint8_t *src, i
OPNAME ## rv40_qpel ## SIZE ## _h_lowpass(dst, src, stride, stride, SIZE, 52, 20, 6);\ OPNAME ## rv40_qpel ## SIZE ## _h_lowpass(dst, src, stride, stride, SIZE, 52, 20, 6);\
}\ }\
\ \
static void OPNAME ## rv40_qpel ## SIZE ## _mc20_c(uint8_t *dst, uint8_t *src, int stride){\
OPNAME ## rv40_qpel ## SIZE ## _h_lowpass(dst, src, stride, stride, SIZE, 20, 20, 5);\
}\
\
static void OPNAME ## rv40_qpel ## SIZE ## _mc30_c(uint8_t *dst, uint8_t *src, int stride){\ static void OPNAME ## rv40_qpel ## SIZE ## _mc30_c(uint8_t *dst, uint8_t *src, int stride){\
OPNAME ## rv40_qpel ## SIZE ## _h_lowpass(dst, src, stride, stride, SIZE, 20, 52, 6);\ OPNAME ## rv40_qpel ## SIZE ## _h_lowpass(dst, src, stride, stride, SIZE, 20, 52, 6);\
}\ }\
...@@ -139,10 +135,6 @@ static void OPNAME ## rv40_qpel ## SIZE ## _mc31_c(uint8_t *dst, uint8_t *src, i ...@@ -139,10 +135,6 @@ static void OPNAME ## rv40_qpel ## SIZE ## _mc31_c(uint8_t *dst, uint8_t *src, i
OPNAME ## rv40_qpel ## SIZE ## _v_lowpass(dst, full_mid, stride, SIZE, SIZE, 52, 20, 6);\ OPNAME ## rv40_qpel ## SIZE ## _v_lowpass(dst, full_mid, stride, SIZE, SIZE, 52, 20, 6);\
}\ }\
\ \
static void OPNAME ## rv40_qpel ## SIZE ## _mc02_c(uint8_t *dst, uint8_t *src, int stride){\
OPNAME ## rv40_qpel ## SIZE ## _v_lowpass(dst, src, stride, stride, SIZE, 20, 20, 5);\
}\
\
static void OPNAME ## rv40_qpel ## SIZE ## _mc12_c(uint8_t *dst, uint8_t *src, int stride){\ static void OPNAME ## rv40_qpel ## SIZE ## _mc12_c(uint8_t *dst, uint8_t *src, int stride){\
uint8_t full[SIZE*(SIZE+5)];\ uint8_t full[SIZE*(SIZE+5)];\
uint8_t * const full_mid = full + SIZE*2;\ uint8_t * const full_mid = full + SIZE*2;\
...@@ -305,13 +297,13 @@ RV40_WEIGHT_FUNC(8) ...@@ -305,13 +297,13 @@ RV40_WEIGHT_FUNC(8)
av_cold void ff_rv40dsp_init(RV34DSPContext *c, DSPContext* dsp) { av_cold void ff_rv40dsp_init(RV34DSPContext *c, DSPContext* dsp) {
c->put_pixels_tab[0][ 0] = dsp->put_h264_qpel_pixels_tab[0][0]; c->put_pixels_tab[0][ 0] = dsp->put_h264_qpel_pixels_tab[0][0];
c->put_pixels_tab[0][ 1] = put_rv40_qpel16_mc10_c; c->put_pixels_tab[0][ 1] = put_rv40_qpel16_mc10_c;
c->put_pixels_tab[0][ 2] = put_rv40_qpel16_mc20_c; c->put_pixels_tab[0][ 2] = dsp->put_h264_qpel_pixels_tab[0][2];
c->put_pixels_tab[0][ 3] = put_rv40_qpel16_mc30_c; c->put_pixels_tab[0][ 3] = put_rv40_qpel16_mc30_c;
c->put_pixels_tab[0][ 4] = put_rv40_qpel16_mc01_c; c->put_pixels_tab[0][ 4] = put_rv40_qpel16_mc01_c;
c->put_pixels_tab[0][ 5] = put_rv40_qpel16_mc11_c; c->put_pixels_tab[0][ 5] = put_rv40_qpel16_mc11_c;
c->put_pixels_tab[0][ 6] = put_rv40_qpel16_mc21_c; c->put_pixels_tab[0][ 6] = put_rv40_qpel16_mc21_c;
c->put_pixels_tab[0][ 7] = put_rv40_qpel16_mc31_c; c->put_pixels_tab[0][ 7] = put_rv40_qpel16_mc31_c;
c->put_pixels_tab[0][ 8] = put_rv40_qpel16_mc02_c; c->put_pixels_tab[0][ 8] = dsp->put_h264_qpel_pixels_tab[0][8];
c->put_pixels_tab[0][ 9] = put_rv40_qpel16_mc12_c; c->put_pixels_tab[0][ 9] = put_rv40_qpel16_mc12_c;
c->put_pixels_tab[0][10] = put_rv40_qpel16_mc22_c; c->put_pixels_tab[0][10] = put_rv40_qpel16_mc22_c;
c->put_pixels_tab[0][11] = put_rv40_qpel16_mc32_c; c->put_pixels_tab[0][11] = put_rv40_qpel16_mc32_c;
...@@ -321,13 +313,13 @@ av_cold void ff_rv40dsp_init(RV34DSPContext *c, DSPContext* dsp) { ...@@ -321,13 +313,13 @@ av_cold void ff_rv40dsp_init(RV34DSPContext *c, DSPContext* dsp) {
c->put_pixels_tab[0][15] = ff_put_rv40_qpel16_mc33_c; c->put_pixels_tab[0][15] = ff_put_rv40_qpel16_mc33_c;
c->avg_pixels_tab[0][ 0] = dsp->avg_h264_qpel_pixels_tab[0][0]; c->avg_pixels_tab[0][ 0] = dsp->avg_h264_qpel_pixels_tab[0][0];
c->avg_pixels_tab[0][ 1] = avg_rv40_qpel16_mc10_c; c->avg_pixels_tab[0][ 1] = avg_rv40_qpel16_mc10_c;
c->avg_pixels_tab[0][ 2] = avg_rv40_qpel16_mc20_c; c->avg_pixels_tab[0][ 2] = dsp->avg_h264_qpel_pixels_tab[0][2];
c->avg_pixels_tab[0][ 3] = avg_rv40_qpel16_mc30_c; c->avg_pixels_tab[0][ 3] = avg_rv40_qpel16_mc30_c;
c->avg_pixels_tab[0][ 4] = avg_rv40_qpel16_mc01_c; c->avg_pixels_tab[0][ 4] = avg_rv40_qpel16_mc01_c;
c->avg_pixels_tab[0][ 5] = avg_rv40_qpel16_mc11_c; c->avg_pixels_tab[0][ 5] = avg_rv40_qpel16_mc11_c;
c->avg_pixels_tab[0][ 6] = avg_rv40_qpel16_mc21_c; c->avg_pixels_tab[0][ 6] = avg_rv40_qpel16_mc21_c;
c->avg_pixels_tab[0][ 7] = avg_rv40_qpel16_mc31_c; c->avg_pixels_tab[0][ 7] = avg_rv40_qpel16_mc31_c;
c->avg_pixels_tab[0][ 8] = avg_rv40_qpel16_mc02_c; c->avg_pixels_tab[0][ 8] = dsp->avg_h264_qpel_pixels_tab[0][8];
c->avg_pixels_tab[0][ 9] = avg_rv40_qpel16_mc12_c; c->avg_pixels_tab[0][ 9] = avg_rv40_qpel16_mc12_c;
c->avg_pixels_tab[0][10] = avg_rv40_qpel16_mc22_c; c->avg_pixels_tab[0][10] = avg_rv40_qpel16_mc22_c;
c->avg_pixels_tab[0][11] = avg_rv40_qpel16_mc32_c; c->avg_pixels_tab[0][11] = avg_rv40_qpel16_mc32_c;
...@@ -337,13 +329,13 @@ av_cold void ff_rv40dsp_init(RV34DSPContext *c, DSPContext* dsp) { ...@@ -337,13 +329,13 @@ av_cold void ff_rv40dsp_init(RV34DSPContext *c, DSPContext* dsp) {
c->avg_pixels_tab[0][15] = ff_avg_rv40_qpel16_mc33_c; c->avg_pixels_tab[0][15] = ff_avg_rv40_qpel16_mc33_c;
c->put_pixels_tab[1][ 0] = dsp->put_h264_qpel_pixels_tab[1][0]; c->put_pixels_tab[1][ 0] = dsp->put_h264_qpel_pixels_tab[1][0];
c->put_pixels_tab[1][ 1] = put_rv40_qpel8_mc10_c; c->put_pixels_tab[1][ 1] = put_rv40_qpel8_mc10_c;
c->put_pixels_tab[1][ 2] = put_rv40_qpel8_mc20_c; c->put_pixels_tab[1][ 2] = dsp->put_h264_qpel_pixels_tab[1][2];
c->put_pixels_tab[1][ 3] = put_rv40_qpel8_mc30_c; c->put_pixels_tab[1][ 3] = put_rv40_qpel8_mc30_c;
c->put_pixels_tab[1][ 4] = put_rv40_qpel8_mc01_c; c->put_pixels_tab[1][ 4] = put_rv40_qpel8_mc01_c;
c->put_pixels_tab[1][ 5] = put_rv40_qpel8_mc11_c; c->put_pixels_tab[1][ 5] = put_rv40_qpel8_mc11_c;
c->put_pixels_tab[1][ 6] = put_rv40_qpel8_mc21_c; c->put_pixels_tab[1][ 6] = put_rv40_qpel8_mc21_c;
c->put_pixels_tab[1][ 7] = put_rv40_qpel8_mc31_c; c->put_pixels_tab[1][ 7] = put_rv40_qpel8_mc31_c;
c->put_pixels_tab[1][ 8] = put_rv40_qpel8_mc02_c; c->put_pixels_tab[1][ 8] = dsp->put_h264_qpel_pixels_tab[1][8];
c->put_pixels_tab[1][ 9] = put_rv40_qpel8_mc12_c; c->put_pixels_tab[1][ 9] = put_rv40_qpel8_mc12_c;
c->put_pixels_tab[1][10] = put_rv40_qpel8_mc22_c; c->put_pixels_tab[1][10] = put_rv40_qpel8_mc22_c;
c->put_pixels_tab[1][11] = put_rv40_qpel8_mc32_c; c->put_pixels_tab[1][11] = put_rv40_qpel8_mc32_c;
...@@ -353,13 +345,13 @@ av_cold void ff_rv40dsp_init(RV34DSPContext *c, DSPContext* dsp) { ...@@ -353,13 +345,13 @@ av_cold void ff_rv40dsp_init(RV34DSPContext *c, DSPContext* dsp) {
c->put_pixels_tab[1][15] = ff_put_rv40_qpel8_mc33_c; c->put_pixels_tab[1][15] = ff_put_rv40_qpel8_mc33_c;
c->avg_pixels_tab[1][ 0] = dsp->avg_h264_qpel_pixels_tab[1][0]; c->avg_pixels_tab[1][ 0] = dsp->avg_h264_qpel_pixels_tab[1][0];
c->avg_pixels_tab[1][ 1] = avg_rv40_qpel8_mc10_c; c->avg_pixels_tab[1][ 1] = avg_rv40_qpel8_mc10_c;
c->avg_pixels_tab[1][ 2] = avg_rv40_qpel8_mc20_c; c->avg_pixels_tab[1][ 2] = dsp->avg_h264_qpel_pixels_tab[1][2];
c->avg_pixels_tab[1][ 3] = avg_rv40_qpel8_mc30_c; c->avg_pixels_tab[1][ 3] = avg_rv40_qpel8_mc30_c;
c->avg_pixels_tab[1][ 4] = avg_rv40_qpel8_mc01_c; c->avg_pixels_tab[1][ 4] = avg_rv40_qpel8_mc01_c;
c->avg_pixels_tab[1][ 5] = avg_rv40_qpel8_mc11_c; c->avg_pixels_tab[1][ 5] = avg_rv40_qpel8_mc11_c;
c->avg_pixels_tab[1][ 6] = avg_rv40_qpel8_mc21_c; c->avg_pixels_tab[1][ 6] = avg_rv40_qpel8_mc21_c;
c->avg_pixels_tab[1][ 7] = avg_rv40_qpel8_mc31_c; c->avg_pixels_tab[1][ 7] = avg_rv40_qpel8_mc31_c;
c->avg_pixels_tab[1][ 8] = avg_rv40_qpel8_mc02_c; c->avg_pixels_tab[1][ 8] = dsp->avg_h264_qpel_pixels_tab[1][8];
c->avg_pixels_tab[1][ 9] = avg_rv40_qpel8_mc12_c; c->avg_pixels_tab[1][ 9] = avg_rv40_qpel8_mc12_c;
c->avg_pixels_tab[1][10] = avg_rv40_qpel8_mc22_c; c->avg_pixels_tab[1][10] = avg_rv40_qpel8_mc22_c;
c->avg_pixels_tab[1][11] = avg_rv40_qpel8_mc32_c; c->avg_pixels_tab[1][11] = avg_rv40_qpel8_mc32_c;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment