* Copyright (c) 2003 Alex Beregszaszi
* Copyright (c) 2003-2004 Michael Niedermayer
*
+ * Support for external huffman table, various fixes (AVID workaround),
+ * aspecting, new decode_frame mechanism and apple mjpeg-b support
+ * by Alex Beregszaszi
+ *
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Support for external huffman table, various fixes (AVID workaround),
- * aspecting, new decode_frame mechanism and apple mjpeg-b support
- * by Alex Beregszaszi
*/
/**
#undef TWOMATRIXES
-int mjpeg_init(MpegEncContext *s)
+int ff_mjpeg_encode_init(MpegEncContext *s)
{
MJpegContext *m;
return 0;
}
-void mjpeg_close(MpegEncContext *s)
+void ff_mjpeg_encode_close(MpegEncContext *s)
{
av_free(s->mjpeg_ctx);
}
ff_mjpeg_val_ac_luminance);
size += put_huffman_table(s, 1, 1, ff_mjpeg_bits_ac_chrominance,
ff_mjpeg_val_ac_chrominance);
- ptr[0] = size >> 8;
- ptr[1] = size;
+ AV_WB16(ptr, size);
}
static void jpeg_put_comments(MpegEncContext *s)
put_bits(p, 16, 0); /* patched later */
ff_put_string(p, LIBAVCODEC_IDENT, 1);
size = strlen(LIBAVCODEC_IDENT)+3;
- ptr[0] = size >> 8;
- ptr[1] = size;
+ AV_WB16(ptr, size);
}
if( s->avctx->pix_fmt == PIX_FMT_YUV420P
put_bits(p, 16, 0); /* patched later */
ff_put_string(p, "CS=ITU601", 1);
size = strlen("CS=ITU601")+3;
- ptr[0] = size >> 8;
- ptr[1] = size;
+ AV_WB16(ptr, size);
}
}
-void mjpeg_picture_header(MpegEncContext *s)
+void ff_mjpeg_encode_picture_header(MpegEncContext *s)
{
const int lossless= s->avctx->codec_id != CODEC_ID_MJPEG;
}
}
-void ff_mjpeg_stuffing(PutBitContext * pbc)
+void ff_mjpeg_encode_stuffing(PutBitContext * pbc)
{
int length;
length= (-put_bits_count(pbc))&7;
if(length) put_bits(pbc, length, (1<<length)-1);
}
-void mjpeg_picture_trailer(MpegEncContext *s)
+void ff_mjpeg_encode_picture_trailer(MpegEncContext *s)
{
- ff_mjpeg_stuffing(&s->pb);
+ ff_mjpeg_encode_stuffing(&s->pb);
flush_put_bits(&s->pb);
assert((s->header_bits&7)==0);
put_marker(&s->pb, EOI);
}
-void mjpeg_encode_dc(MpegEncContext *s, int val,
- uint8_t *huff_size, uint16_t *huff_code)
+void ff_mjpeg_encode_dc(MpegEncContext *s, int val,
+ uint8_t *huff_size, uint16_t *huff_code)
{
int mant, nbits;
dc = block[0]; /* overflow is impossible */
val = dc - s->last_dc[component];
if (n < 4) {
- mjpeg_encode_dc(s, val, m->huff_size_dc_luminance, m->huff_code_dc_luminance);
+ ff_mjpeg_encode_dc(s, val, m->huff_size_dc_luminance, m->huff_code_dc_luminance);
huff_size_ac = m->huff_size_ac_luminance;
huff_code_ac = m->huff_code_ac_luminance;
} else {
- mjpeg_encode_dc(s, val, m->huff_size_dc_chrominance, m->huff_code_dc_chrominance);
+ ff_mjpeg_encode_dc(s, val, m->huff_size_dc_chrominance, m->huff_code_dc_chrominance);
huff_size_ac = m->huff_size_ac_chrominance;
huff_code_ac = m->huff_code_ac_chrominance;
}
put_bits(&s->pb, huff_size_ac[0], huff_code_ac[0]);
}
-void mjpeg_encode_mb(MpegEncContext *s,
- DCTELEM block[6][64])
+void ff_mjpeg_encode_mb(MpegEncContext *s, DCTELEM block[6][64])
{
int i;
for(i=0;i<5;i++) {
encode_block(s, block[7], 7);
}
}
+
+AVCodec mjpeg_encoder = {
+ "mjpeg",
+ CODEC_TYPE_VIDEO,
+ CODEC_ID_MJPEG,
+ sizeof(MpegEncContext),
+ MPV_encode_init,
+ MPV_encode_picture,
+ MPV_encode_end,
+ .pix_fmts= (enum PixelFormat[]){PIX_FMT_YUVJ420P, PIX_FMT_YUVJ422P, -1},
+};