diff --git a/libavcodec/ljpegenc.c b/libavcodec/ljpegenc.c index 09ae7905b2..c467d636fd 100644 --- a/libavcodec/ljpegenc.c +++ b/libavcodec/ljpegenc.c @@ -210,8 +210,9 @@ static int encode_picture_lossless(AVCodecContext *avctx, AVPacket *pkt, emms_c(); av_assert0(s->esc_pos == s->header_bits >> 3); + ff_mjpeg_encode_stuffing(s); - ff_mjpeg_encode_picture_trailer(s); + ff_mjpeg_encode_picture_trailer(&s->pb, s->header_bits); s->picture_number++; flush_put_bits(&s->pb); diff --git a/libavcodec/mjpegenc.c b/libavcodec/mjpegenc.c index 4bc807641e..f3c05c955f 100644 --- a/libavcodec/mjpegenc.c +++ b/libavcodec/mjpegenc.c @@ -324,11 +324,11 @@ end: s->thread_context[i]->esc_pos = 0; } -static void escape_FF(MpegEncContext *s, int start) +static void escape_FF(PutBitContext *pb, int start) { - int size= put_bits_count(&s->pb) - start*8; + int size = put_bits_count(pb) - start * 8; int i, ff_count; - uint8_t *buf= s->pb.buf + start; + uint8_t *buf = pb->buf + start; int align= (-(size_t)(buf))&3; av_assert1((size&7) == 0); @@ -361,8 +361,8 @@ static void escape_FF(MpegEncContext *s, int start) if(ff_count==0) return; - flush_put_bits(&s->pb); - skip_put_bytes(&s->pb, ff_count); + flush_put_bits(pb); + skip_put_bytes(pb, ff_count); for(i=size-1; ff_count; i--){ int v= buf[i]; @@ -385,7 +385,7 @@ void ff_mjpeg_encode_stuffing(MpegEncContext *s) if(length) put_bits(pbc, length, (1<pb); - escape_FF(s, s->esc_pos); + escape_FF(&s->pb, s->esc_pos); if((s->avctx->active_thread_type & FF_THREAD_SLICE) && mb_y < s->mb_height) put_marker(pbc, RST0 + (mb_y&7)); @@ -395,13 +395,11 @@ void ff_mjpeg_encode_stuffing(MpegEncContext *s) s->last_dc[i] = 128 << s->intra_dc_precision; } -void ff_mjpeg_encode_picture_trailer(MpegEncContext *s) +void ff_mjpeg_encode_picture_trailer(PutBitContext *pb, int header_bits) { + av_assert1((header_bits & 7) == 0); - av_assert1((s->header_bits&7)==0); - - - put_marker(&s->pb, EOI); + put_marker(pb, EOI); } void ff_mjpeg_encode_dc(MpegEncContext *s, int val, diff --git a/libavcodec/mjpegenc.h b/libavcodec/mjpegenc.h index 7a3a62562f..293fe0f948 100644 --- a/libavcodec/mjpegenc.h +++ b/libavcodec/mjpegenc.h @@ -54,7 +54,7 @@ void ff_mjpeg_encode_close(MpegEncContext *s); void ff_mjpeg_encode_picture_header(AVCodecContext *avctx, PutBitContext *pb, ScanTable *intra_scantable, uint16_t intra_matrix[64]); -void ff_mjpeg_encode_picture_trailer(MpegEncContext *s); +void ff_mjpeg_encode_picture_trailer(PutBitContext *pb, int header_bits); void ff_mjpeg_encode_stuffing(MpegEncContext *s); void ff_mjpeg_encode_dc(MpegEncContext *s, int val, uint8_t *huff_size, uint16_t *huff_code); diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 7c46f74f3b..dcbdc036da 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -1598,7 +1598,7 @@ vbv_retry: frame_end(s); if (CONFIG_MJPEG_ENCODER && s->out_format == FMT_MJPEG) - ff_mjpeg_encode_picture_trailer(s); + ff_mjpeg_encode_picture_trailer(&s->pb, s->header_bits); if (avctx->rc_buffer_size) { RateControlContext *rcc = &s->rc_context;