diff options
-rw-r--r-- | libavcodec/ljpegenc.c | 22 | ||||
-rw-r--r-- | libavcodec/mjpegenc.c | 18 | ||||
-rw-r--r-- | libavcodec/mjpegenc.h | 1 |
3 files changed, 14 insertions, 27 deletions
diff --git a/libavcodec/ljpegenc.c b/libavcodec/ljpegenc.c index e7e32eff5b..35b82fdea2 100644 --- a/libavcodec/ljpegenc.c +++ b/libavcodec/ljpegenc.c @@ -272,7 +272,6 @@ static av_cold int ljpeg_encode_close(AVCodecContext *avctx) static av_cold int ljpeg_encode_init(AVCodecContext *avctx) { LJpegEncContext *s = avctx->priv_data; - int chroma_v_shift, chroma_h_shift; if ((avctx->pix_fmt == AV_PIX_FMT_YUV420P || avctx->pix_fmt == AV_PIX_FMT_YUV422P || @@ -296,26 +295,7 @@ static av_cold int ljpeg_encode_init(AVCodecContext *avctx) ff_dsputil_init(&s->dsp, avctx); ff_init_scantable(s->dsp.idct_permutation, &s->scantable, ff_zigzag_direct); - av_pix_fmt_get_chroma_sub_sample(avctx->pix_fmt, &chroma_h_shift, - &chroma_v_shift); - - if ( avctx->pix_fmt == AV_PIX_FMT_BGR0 - || avctx->pix_fmt == AV_PIX_FMT_BGRA - || avctx->pix_fmt == AV_PIX_FMT_BGR24) { - s->vsample[0] = s->hsample[0] = - s->vsample[1] = s->hsample[1] = - s->vsample[2] = s->hsample[2] = 1; - } else if (avctx->pix_fmt == AV_PIX_FMT_YUV444P || avctx->pix_fmt == AV_PIX_FMT_YUVJ444P) { - s->vsample[0] = s->vsample[1] = s->vsample[2] = 2; - s->hsample[0] = s->hsample[1] = s->hsample[2] = 1; - } else { - s->vsample[0] = 2; - s->vsample[1] = 2 >> chroma_v_shift; - s->vsample[2] = 2 >> chroma_v_shift; - s->hsample[0] = 2; - s->hsample[1] = 2 >> chroma_h_shift; - s->hsample[2] = 2 >> chroma_h_shift; - } + ff_mjpeg_init_hvsample(avctx, s->hsample, s->vsample); ff_mjpeg_build_huffman_codes(s->huff_size_dc_luminance, s->huff_code_dc_luminance, diff --git a/libavcodec/mjpegenc.c b/libavcodec/mjpegenc.c index a78123bcfa..ffc29fd41f 100644 --- a/libavcodec/mjpegenc.c +++ b/libavcodec/mjpegenc.c @@ -204,14 +204,9 @@ static void jpeg_put_comments(AVCodecContext *avctx, PutBitContext *p) } } -void ff_mjpeg_encode_picture_header(AVCodecContext *avctx, PutBitContext *pb, - ScanTable *intra_scantable, - uint16_t intra_matrix[64]) +void ff_mjpeg_init_hvsample(AVCodecContext *avctx, int hsample[3], int vsample[3]) { int chroma_h_shift, chroma_v_shift; - const int lossless = avctx->codec_id != AV_CODEC_ID_MJPEG && avctx->codec_id != AV_CODEC_ID_AMV; - int hsample[3], vsample[3]; - int i; av_pix_fmt_get_chroma_sub_sample(avctx->pix_fmt, &chroma_h_shift, &chroma_v_shift); @@ -233,6 +228,17 @@ void ff_mjpeg_encode_picture_header(AVCodecContext *avctx, PutBitContext *pb, hsample[1] = 2 >> chroma_h_shift; hsample[2] = 2 >> chroma_h_shift; } +} + +void ff_mjpeg_encode_picture_header(AVCodecContext *avctx, PutBitContext *pb, + ScanTable *intra_scantable, + uint16_t intra_matrix[64]) +{ + const int lossless = avctx->codec_id != AV_CODEC_ID_MJPEG && avctx->codec_id != AV_CODEC_ID_AMV; + int hsample[3], vsample[3]; + int i; + + ff_mjpeg_init_hvsample(avctx, hsample, vsample); put_marker(pb, SOI); diff --git a/libavcodec/mjpegenc.h b/libavcodec/mjpegenc.h index 21efd486a5..4b19e214d8 100644 --- a/libavcodec/mjpegenc.h +++ b/libavcodec/mjpegenc.h @@ -57,6 +57,7 @@ void ff_mjpeg_encode_picture_header(AVCodecContext *avctx, PutBitContext *pb, void ff_mjpeg_encode_picture_trailer(PutBitContext *pb, int header_bits); void ff_mjpeg_escape_FF(PutBitContext *pb, int start); void ff_mjpeg_encode_stuffing(MpegEncContext *s); +void ff_mjpeg_init_hvsample(AVCodecContext *avctx, int hsample[3], int vsample[3]); void ff_mjpeg_encode_dc(PutBitContext *pb, int val, uint8_t *huff_size, uint16_t *huff_code); void ff_mjpeg_encode_mb(MpegEncContext *s, int16_t block[6][64]); |