Browse code

Add R10k decoder.

Original patch by Zhou Zongyi, zhouzy A os pku edu cn, resubmitted by
James Darnley, james.darnley gmail, changes by me.

Originally committed as revision 25115 to svn://svn.ffmpeg.org/ffmpeg/trunk

Zhou Zongyi authored on 2010/09/14 07:08:51
Showing 8 changed files
... ...
@@ -34,6 +34,7 @@ version <next>:
34 34
 - a64 codec
35 35
 - MMS-HTTP support
36 36
 - G.722 ADPCM audio decoder
37
+- R10k video decoder
37 38
 
38 39
 
39 40
 version 0.6:
... ...
@@ -460,6 +460,7 @@ following image formats are supported:
460 460
     @tab fourcc: 'smc '
461 461
 @item QuickTime video (RPZA) @tab     @tab  X
462 462
     @tab fourcc: rpza
463
+@item R10K AJA Kona 10-bit RGB Codec     @tab     @tab  X
463 464
 @item R210 Quicktime Uncompressed RGB 10-bit     @tab     @tab  X
464 465
 @item Raw Video              @tab  X  @tab  X
465 466
 @item RealVideo 1.0          @tab  X  @tab  X
... ...
@@ -289,6 +289,7 @@ OBJS-$(CONFIG_QDRAW_DECODER)           += qdrw.o
289 289
 OBJS-$(CONFIG_QPEG_DECODER)            += qpeg.o
290 290
 OBJS-$(CONFIG_QTRLE_DECODER)           += qtrle.o
291 291
 OBJS-$(CONFIG_QTRLE_ENCODER)           += qtrleenc.o
292
+OBJS-$(CONFIG_R10K_DECODER)            += r210dec.o
292 293
 OBJS-$(CONFIG_R210_DECODER)            += r210dec.o
293 294
 OBJS-$(CONFIG_RA_144_DECODER)          += ra144dec.o ra144.o celp_filters.o
294 295
 OBJS-$(CONFIG_RA_144_ENCODER)          += ra144enc.o ra144.o celp_filters.o
... ...
@@ -163,6 +163,7 @@ void avcodec_register_all(void)
163 163
     REGISTER_DECODER (QDRAW, qdraw);
164 164
     REGISTER_DECODER (QPEG, qpeg);
165 165
     REGISTER_ENCDEC  (QTRLE, qtrle);
166
+    REGISTER_DECODER (R10K,  r10k);
166 167
     REGISTER_DECODER (R210,  r210);
167 168
     REGISTER_ENCDEC  (RAWVIDEO, rawvideo);
168 169
     REGISTER_DECODER (RL2, rl2);
... ...
@@ -31,7 +31,7 @@
31 31
 #include "libavutil/cpu.h"
32 32
 
33 33
 #define LIBAVCODEC_VERSION_MAJOR 52
34
-#define LIBAVCODEC_VERSION_MINOR 88
34
+#define LIBAVCODEC_VERSION_MINOR 89
35 35
 #define LIBAVCODEC_VERSION_MICRO  0
36 36
 
37 37
 #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
... ...
@@ -227,6 +227,7 @@ enum CodecID {
227 227
     CODEC_ID_ANSI,
228 228
     CODEC_ID_A64_MULTI,
229 229
     CODEC_ID_A64_MULTI5,
230
+    CODEC_ID_R10K,
230 231
 
231 232
     /* various PCM "codecs" */
232 233
     CODEC_ID_PCM_S16LE= 0x10000,
... ...
@@ -63,9 +63,15 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size,
63 63
         for (w = 0; w < avctx->width; w++) {
64 64
             uint32_t pixel = av_be2ne32(*src++);
65 65
             uint16_t r, g, b;
66
+            if (avctx->codec_id==CODEC_ID_R210) {
66 67
             b =  pixel <<  6;
67 68
             g = (pixel >>  4) & 0xffc0;
68 69
             r = (pixel >> 14) & 0xffc0;
70
+            } else {
71
+                b =  pixel <<  4;
72
+                g = (pixel >>  6) & 0xffc0;
73
+                r = (pixel >> 16) & 0xffc0;
74
+            }
69 75
             *dst++ = r | (r >> 10);
70 76
             *dst++ = g | (g >> 10);
71 77
             *dst++ = b | (b >> 10);
... ...
@@ -90,6 +96,7 @@ static av_cold int decode_close(AVCodecContext *avctx)
90 90
     return 0;
91 91
 }
92 92
 
93
+#if CONFIG_R210_DECODER
93 94
 AVCodec r210_decoder = {
94 95
     "r210",
95 96
     AVMEDIA_TYPE_VIDEO,
... ...
@@ -102,3 +109,18 @@ AVCodec r210_decoder = {
102 102
     CODEC_CAP_DR1,
103 103
     .long_name = NULL_IF_CONFIG_SMALL("Uncompressed RGB 10-bit"),
104 104
 };
105
+#endif
106
+#if CONFIG_R10K_DECODER
107
+AVCodec r10k_decoder = {
108
+    "r10k",
109
+    AVMEDIA_TYPE_VIDEO,
110
+    CODEC_ID_R10K,
111
+    0,
112
+    decode_init,
113
+    NULL,
114
+    decode_close,
115
+    decode_frame,
116
+    CODEC_CAP_DR1,
117
+    .long_name = NULL_IF_CONFIG_SMALL("AJA Kona 10-bit RGB Codec"),
118
+};
119
+#endif
... ...
@@ -77,6 +77,7 @@ const AVCodecTag codec_movvideo_tags[] = {
77 77
     { CODEC_ID_RAWVIDEO, MKTAG('b', '1', '6', 'g') },
78 78
     { CODEC_ID_RAWVIDEO, MKTAG('b', '4', '8', 'r') },
79 79
 
80
+    { CODEC_ID_R10K,   MKTAG('R', '1', '0', 'k') }, /* UNCOMPRESSED 10BIT RGB */
80 81
     { CODEC_ID_R210,   MKTAG('r', '2', '1', '0') }, /* UNCOMPRESSED 10BIT RGB */
81 82
     { CODEC_ID_V210,   MKTAG('v', '2', '1', '0') }, /* UNCOMPRESSED 10BIT 4:2:2 */
82 83
 
... ...
@@ -179,6 +179,7 @@ const AVCodecTag ff_codec_bmp_tags[] = {
179 179
     { CODEC_ID_RAWVIDEO,     MKTAG('Y', 'U', 'V', '9') },
180 180
     { CODEC_ID_RAWVIDEO,     MKTAG('Y', 'V', 'U', '9') },
181 181
     { CODEC_ID_FRWU,         MKTAG('F', 'R', 'W', 'U') },
182
+    { CODEC_ID_R10K,         MKTAG('R', '1', '0', 'k') },
182 183
     { CODEC_ID_R210,         MKTAG('r', '2', '1', '0') },
183 184
     { CODEC_ID_V210,         MKTAG('v', '2', '1', '0') },
184 185
     { CODEC_ID_INDEO3,       MKTAG('I', 'V', '3', '1') },