Commit 93947d88 authored by Michael Niedermayer's avatar Michael Niedermayer

Merge commit '24abd806'

* commit '24abd806':
  ljpegenc: deMpegEncContextize

Conflicts:
	libavcodec/ljpegenc.c
	libavcodec/mpegvideo.h
	libavcodec/mpegvideo_enc.c
	tests/ref/vsynth/vsynth1-ljpeg
	tests/ref/vsynth/vsynth2-ljpeg
Merged-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parents d756b2b5 24abd806
This diff is collapsed.
...@@ -212,15 +212,13 @@ void ff_mjpeg_encode_picture_header(AVCodecContext *avctx, PutBitContext *pb, ...@@ -212,15 +212,13 @@ void ff_mjpeg_encode_picture_header(AVCodecContext *avctx, PutBitContext *pb,
const int lossless = avctx->codec_id != AV_CODEC_ID_MJPEG; const int lossless = avctx->codec_id != AV_CODEC_ID_MJPEG;
int hsample[3], vsample[3]; int hsample[3], vsample[3];
int i; int i;
MpegEncContext *s = avctx->priv_data;
av_assert0(avctx->codec->priv_data_size == sizeof(MpegEncContext));
av_pix_fmt_get_chroma_sub_sample(avctx->pix_fmt, &chroma_h_shift, av_pix_fmt_get_chroma_sub_sample(avctx->pix_fmt, &chroma_h_shift,
&chroma_v_shift); &chroma_v_shift);
if (avctx->codec->id == AV_CODEC_ID_LJPEG && if (avctx->codec->id == AV_CODEC_ID_LJPEG &&
(avctx->pix_fmt == AV_PIX_FMT_BGR0 (avctx->pix_fmt == AV_PIX_FMT_BGR0
|| s->avctx->pix_fmt == AV_PIX_FMT_BGRA || avctx->pix_fmt == AV_PIX_FMT_BGRA
|| s->avctx->pix_fmt == AV_PIX_FMT_BGR24)) { || avctx->pix_fmt == AV_PIX_FMT_BGR24)) {
vsample[0] = hsample[0] = vsample[0] = hsample[0] =
vsample[1] = hsample[1] = vsample[1] = hsample[1] =
vsample[2] = hsample[2] = 1; vsample[2] = hsample[2] = 1;
...@@ -319,9 +317,14 @@ void ff_mjpeg_encode_picture_header(AVCodecContext *avctx, PutBitContext *pb, ...@@ -319,9 +317,14 @@ void ff_mjpeg_encode_picture_header(AVCodecContext *avctx, PutBitContext *pb,
put_bits(pb, 8, 0); /* Ah/Al (not used) */ put_bits(pb, 8, 0); /* Ah/Al (not used) */
end: end:
s->esc_pos = put_bits_count(pb) >> 3; if (avctx->codec->priv_data_size == sizeof(MpegEncContext)) {
for(i=1; i<s->slice_context_count; i++) MpegEncContext *s = avctx->priv_data;
s->thread_context[i]->esc_pos = 0; av_assert0(avctx->codec->priv_data_size == sizeof(MpegEncContext));
s->esc_pos = put_bits_count(pb) >> 3;
for(i=1; i<s->slice_context_count; i++)
s->thread_context[i]->esc_pos = 0;
}
} }
void ff_mjpeg_escape_FF(PutBitContext *pb, int start) void ff_mjpeg_escape_FF(PutBitContext *pb, int start)
...@@ -530,6 +533,9 @@ static int amv_encode_picture(AVCodecContext *avctx, AVPacket *pkt, ...@@ -530,6 +533,9 @@ static int amv_encode_picture(AVCodecContext *avctx, AVPacket *pkt,
MpegEncContext *s = avctx->priv_data; MpegEncContext *s = avctx->priv_data;
AVFrame pic = *pic_arg; AVFrame pic = *pic_arg;
int i; int i;
int chroma_h_shift, chroma_v_shift;
av_pix_fmt_get_chroma_sub_sample(avctx->pix_fmt, &chroma_h_shift, &chroma_v_shift);
//CODEC_FLAG_EMU_EDGE have to be cleared //CODEC_FLAG_EMU_EDGE have to be cleared
if(s->avctx->flags & CODEC_FLAG_EMU_EDGE) if(s->avctx->flags & CODEC_FLAG_EMU_EDGE)
...@@ -537,7 +543,8 @@ static int amv_encode_picture(AVCodecContext *avctx, AVPacket *pkt, ...@@ -537,7 +543,8 @@ static int amv_encode_picture(AVCodecContext *avctx, AVPacket *pkt,
//picture should be flipped upside-down //picture should be flipped upside-down
for(i=0; i < 3; i++) { for(i=0; i < 3; i++) {
pic.data[i] += (pic.linesize[i] * (s->mjpeg_vsample[i] * (8 * s->mb_height -((s->height/V_MAX)&7)) - 1 )); int vsample = i ? 2 >> chroma_v_shift : 2;
pic.data[i] += (pic.linesize[i] * (vsample * (8 * s->mb_height -((s->height/V_MAX)&7)) - 1 ));
pic.linesize[i] *= -1; pic.linesize[i] *= -1;
} }
return ff_MPV_encode_picture(avctx, pkt, &pic, got_packet); return ff_MPV_encode_picture(avctx, pkt, &pic, got_packet);
......
...@@ -625,8 +625,6 @@ typedef struct MpegEncContext { ...@@ -625,8 +625,6 @@ typedef struct MpegEncContext {
/* MJPEG specific */ /* MJPEG specific */
struct MJpegContext *mjpeg_ctx; struct MJpegContext *mjpeg_ctx;
int mjpeg_vsample[3]; ///< vertical sampling factors, default = {2, 1, 1}
int mjpeg_hsample[3]; ///< horizontal sampling factors, default = {2, 1, 1}
int esc_pos; int esc_pos;
/* MSMPEG4 specific */ /* MSMPEG4 specific */
......
...@@ -243,7 +243,6 @@ av_cold int ff_MPV_encode_init(AVCodecContext *avctx) ...@@ -243,7 +243,6 @@ av_cold int ff_MPV_encode_init(AVCodecContext *avctx)
{ {
MpegEncContext *s = avctx->priv_data; MpegEncContext *s = avctx->priv_data;
int i, ret; int i, ret;
int chroma_h_shift, chroma_v_shift;
MPV_encode_defaults(s); MPV_encode_defaults(s);
...@@ -256,21 +255,6 @@ av_cold int ff_MPV_encode_init(AVCodecContext *avctx) ...@@ -256,21 +255,6 @@ av_cold int ff_MPV_encode_init(AVCodecContext *avctx)
return -1; return -1;
} }
break; break;
case AV_CODEC_ID_LJPEG:
if (avctx->pix_fmt != AV_PIX_FMT_YUVJ420P &&
avctx->pix_fmt != AV_PIX_FMT_YUVJ422P &&
avctx->pix_fmt != AV_PIX_FMT_YUVJ444P &&
avctx->pix_fmt != AV_PIX_FMT_BGR0 &&
avctx->pix_fmt != AV_PIX_FMT_BGRA &&
avctx->pix_fmt != AV_PIX_FMT_BGR24 &&
((avctx->pix_fmt != AV_PIX_FMT_YUV420P &&
avctx->pix_fmt != AV_PIX_FMT_YUV422P &&
avctx->pix_fmt != AV_PIX_FMT_YUV444P) ||
avctx->strict_std_compliance > FF_COMPLIANCE_UNOFFICIAL)) {
av_log(avctx, AV_LOG_ERROR, "colorspace not supported in LJPEG\n");
return -1;
}
break;
case AV_CODEC_ID_MJPEG: case AV_CODEC_ID_MJPEG:
case AV_CODEC_ID_AMV: case AV_CODEC_ID_AMV:
if (avctx->pix_fmt != AV_PIX_FMT_YUVJ420P && if (avctx->pix_fmt != AV_PIX_FMT_YUVJ420P &&
...@@ -657,8 +641,6 @@ av_cold int ff_MPV_encode_init(AVCodecContext *avctx) ...@@ -657,8 +641,6 @@ av_cold int ff_MPV_encode_init(AVCodecContext *avctx)
av_log(avctx, AV_LOG_DEBUG, "intra_quant_bias = %d inter_quant_bias = %d\n",s->intra_quant_bias,s->inter_quant_bias); av_log(avctx, AV_LOG_DEBUG, "intra_quant_bias = %d inter_quant_bias = %d\n",s->intra_quant_bias,s->inter_quant_bias);
avcodec_get_chroma_sub_sample(avctx->pix_fmt, &chroma_h_shift, &chroma_v_shift);
if (avctx->codec_id == AV_CODEC_ID_MPEG4 && if (avctx->codec_id == AV_CODEC_ID_MPEG4 &&
s->avctx->time_base.den > (1 << 16) - 1) { s->avctx->time_base.den > (1 << 16) - 1) {
av_log(avctx, AV_LOG_ERROR, av_log(avctx, AV_LOG_ERROR,
...@@ -682,30 +664,11 @@ av_cold int ff_MPV_encode_init(AVCodecContext *avctx) ...@@ -682,30 +664,11 @@ av_cold int ff_MPV_encode_init(AVCodecContext *avctx)
avctx->delay = s->low_delay ? 0 : (s->max_b_frames + 1); avctx->delay = s->low_delay ? 0 : (s->max_b_frames + 1);
s->rtp_mode = 1; s->rtp_mode = 1;
break; break;
case AV_CODEC_ID_LJPEG:
case AV_CODEC_ID_MJPEG: case AV_CODEC_ID_MJPEG:
case AV_CODEC_ID_AMV: case AV_CODEC_ID_AMV:
s->out_format = FMT_MJPEG; s->out_format = FMT_MJPEG;
s->intra_only = 1; /* force intra only for jpeg */ s->intra_only = 1; /* force intra only for jpeg */
if (avctx->codec->id == AV_CODEC_ID_LJPEG && if (!CONFIG_MJPEG_ENCODER ||
(avctx->pix_fmt == AV_PIX_FMT_BGR0
|| s->avctx->pix_fmt == AV_PIX_FMT_BGRA
|| s->avctx->pix_fmt == AV_PIX_FMT_BGR24)) {
s->mjpeg_vsample[0] = s->mjpeg_hsample[0] =
s->mjpeg_vsample[1] = s->mjpeg_hsample[1] =
s->mjpeg_vsample[2] = s->mjpeg_hsample[2] = 1;
} else if (avctx->pix_fmt == AV_PIX_FMT_YUV444P || avctx->pix_fmt == AV_PIX_FMT_YUVJ444P) {
s->mjpeg_vsample[0] = s->mjpeg_vsample[1] = s->mjpeg_vsample[2] = 2;
s->mjpeg_hsample[0] = s->mjpeg_hsample[1] = s->mjpeg_hsample[2] = 1;
} else {
s->mjpeg_vsample[0] = 2;
s->mjpeg_vsample[1] = 2 >> chroma_v_shift;
s->mjpeg_vsample[2] = 2 >> chroma_v_shift;
s->mjpeg_hsample[0] = 2;
s->mjpeg_hsample[1] = 2 >> chroma_h_shift;
s->mjpeg_hsample[2] = 2 >> chroma_h_shift;
}
if (!(CONFIG_MJPEG_ENCODER || CONFIG_LJPEG_ENCODER) ||
ff_mjpeg_encode_init(s) < 0) ff_mjpeg_encode_init(s) < 0)
return -1; return -1;
avctx->delay = 0; avctx->delay = 0;
...@@ -954,7 +917,7 @@ av_cold int ff_MPV_encode_end(AVCodecContext *avctx) ...@@ -954,7 +917,7 @@ av_cold int ff_MPV_encode_end(AVCodecContext *avctx)
ff_rate_control_uninit(s); ff_rate_control_uninit(s);
ff_MPV_common_end(s); ff_MPV_common_end(s);
if ((CONFIG_MJPEG_ENCODER || CONFIG_LJPEG_ENCODER) && if (CONFIG_MJPEG_ENCODER &&
s->out_format == FMT_MJPEG) s->out_format == FMT_MJPEG)
ff_mjpeg_encode_close(s); ff_mjpeg_encode_close(s);
......
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