]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/mjpegenc.c
simplify
[ffmpeg] / libavcodec / mjpegenc.c
index 8bf64920a37c2c151f98ffe61f2bb62285e44487..b5e5a827d3ab7757f00a8572a84bd1fcc64d4966 100644 (file)
@@ -4,6 +4,10 @@
  * 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
  */
 
 /**
@@ -44,7 +44,7 @@
 #undef TWOMATRIXES
 
 
-int mjpeg_init(MpegEncContext *s)
+int ff_mjpeg_encode_init(MpegEncContext *s)
 {
     MJpegContext *m;
 
@@ -77,7 +77,7 @@ int mjpeg_init(MpegEncContext *s)
     return 0;
 }
 
-void mjpeg_close(MpegEncContext *s)
+void ff_mjpeg_encode_close(MpegEncContext *s)
 {
     av_free(s->mjpeg_ctx);
 }
@@ -147,8 +147,7 @@ static void jpeg_table_header(MpegEncContext *s)
                               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)
@@ -179,8 +178,7 @@ 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
@@ -192,12 +190,11 @@ static void jpeg_put_comments(MpegEncContext *s)
         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;
 
@@ -335,16 +332,16 @@ static void escape_FF(MpegEncContext *s, int start)
     }
 }
 
-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);
@@ -354,8 +351,8 @@ void mjpeg_picture_trailer(MpegEncContext *s)
     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;
 
@@ -389,11 +386,11 @@ static void encode_block(MpegEncContext *s, DCTELEM *block, int n)
     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;
     }
@@ -434,8 +431,7 @@ static void encode_block(MpegEncContext *s, DCTELEM *block, int n)
         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++) {
@@ -449,3 +445,14 @@ void mjpeg_encode_mb(MpegEncContext *s,
         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},
+};