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
oldabi
Zhou Zongyi 14 years ago committed by Carl Eugen Hoyos
parent 527c91e34a
commit 4383692896
  1. 1
      Changelog
  2. 1
      doc/general.texi
  3. 1
      libavcodec/Makefile
  4. 1
      libavcodec/allcodecs.c
  5. 3
      libavcodec/avcodec.h
  6. 22
      libavcodec/r210dec.c
  7. 1
      libavformat/isom.c
  8. 1
      libavformat/riff.c

@ -34,6 +34,7 @@ version <next>:
- a64 codec - a64 codec
- MMS-HTTP support - MMS-HTTP support
- G.722 ADPCM audio decoder - G.722 ADPCM audio decoder
- R10k video decoder
version 0.6: version 0.6:

@ -460,6 +460,7 @@ following image formats are supported:
@tab fourcc: 'smc ' @tab fourcc: 'smc '
@item QuickTime video (RPZA) @tab @tab X @item QuickTime video (RPZA) @tab @tab X
@tab fourcc: rpza @tab fourcc: rpza
@item R10K AJA Kona 10-bit RGB Codec @tab @tab X
@item R210 Quicktime Uncompressed RGB 10-bit @tab @tab X @item R210 Quicktime Uncompressed RGB 10-bit @tab @tab X
@item Raw Video @tab X @tab X @item Raw Video @tab X @tab X
@item RealVideo 1.0 @tab X @tab X @item RealVideo 1.0 @tab X @tab X

@ -289,6 +289,7 @@ OBJS-$(CONFIG_QDRAW_DECODER) += qdrw.o
OBJS-$(CONFIG_QPEG_DECODER) += qpeg.o OBJS-$(CONFIG_QPEG_DECODER) += qpeg.o
OBJS-$(CONFIG_QTRLE_DECODER) += qtrle.o OBJS-$(CONFIG_QTRLE_DECODER) += qtrle.o
OBJS-$(CONFIG_QTRLE_ENCODER) += qtrleenc.o OBJS-$(CONFIG_QTRLE_ENCODER) += qtrleenc.o
OBJS-$(CONFIG_R10K_DECODER) += r210dec.o
OBJS-$(CONFIG_R210_DECODER) += r210dec.o OBJS-$(CONFIG_R210_DECODER) += r210dec.o
OBJS-$(CONFIG_RA_144_DECODER) += ra144dec.o ra144.o celp_filters.o OBJS-$(CONFIG_RA_144_DECODER) += ra144dec.o ra144.o celp_filters.o
OBJS-$(CONFIG_RA_144_ENCODER) += ra144enc.o ra144.o celp_filters.o OBJS-$(CONFIG_RA_144_ENCODER) += ra144enc.o ra144.o celp_filters.o

@ -163,6 +163,7 @@ void avcodec_register_all(void)
REGISTER_DECODER (QDRAW, qdraw); REGISTER_DECODER (QDRAW, qdraw);
REGISTER_DECODER (QPEG, qpeg); REGISTER_DECODER (QPEG, qpeg);
REGISTER_ENCDEC (QTRLE, qtrle); REGISTER_ENCDEC (QTRLE, qtrle);
REGISTER_DECODER (R10K, r10k);
REGISTER_DECODER (R210, r210); REGISTER_DECODER (R210, r210);
REGISTER_ENCDEC (RAWVIDEO, rawvideo); REGISTER_ENCDEC (RAWVIDEO, rawvideo);
REGISTER_DECODER (RL2, rl2); REGISTER_DECODER (RL2, rl2);

@ -31,7 +31,7 @@
#include "libavutil/cpu.h" #include "libavutil/cpu.h"
#define LIBAVCODEC_VERSION_MAJOR 52 #define LIBAVCODEC_VERSION_MAJOR 52
#define LIBAVCODEC_VERSION_MINOR 88 #define LIBAVCODEC_VERSION_MINOR 89
#define LIBAVCODEC_VERSION_MICRO 0 #define LIBAVCODEC_VERSION_MICRO 0
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
@ -227,6 +227,7 @@ enum CodecID {
CODEC_ID_ANSI, CODEC_ID_ANSI,
CODEC_ID_A64_MULTI, CODEC_ID_A64_MULTI,
CODEC_ID_A64_MULTI5, CODEC_ID_A64_MULTI5,
CODEC_ID_R10K,
/* various PCM "codecs" */ /* various PCM "codecs" */
CODEC_ID_PCM_S16LE= 0x10000, CODEC_ID_PCM_S16LE= 0x10000,

@ -63,9 +63,15 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size,
for (w = 0; w < avctx->width; w++) { for (w = 0; w < avctx->width; w++) {
uint32_t pixel = av_be2ne32(*src++); uint32_t pixel = av_be2ne32(*src++);
uint16_t r, g, b; uint16_t r, g, b;
if (avctx->codec_id==CODEC_ID_R210) {
b = pixel << 6; b = pixel << 6;
g = (pixel >> 4) & 0xffc0; g = (pixel >> 4) & 0xffc0;
r = (pixel >> 14) & 0xffc0; r = (pixel >> 14) & 0xffc0;
} else {
b = pixel << 4;
g = (pixel >> 6) & 0xffc0;
r = (pixel >> 16) & 0xffc0;
}
*dst++ = r | (r >> 10); *dst++ = r | (r >> 10);
*dst++ = g | (g >> 10); *dst++ = g | (g >> 10);
*dst++ = b | (b >> 10); *dst++ = b | (b >> 10);
@ -90,6 +96,7 @@ static av_cold int decode_close(AVCodecContext *avctx)
return 0; return 0;
} }
#if CONFIG_R210_DECODER
AVCodec r210_decoder = { AVCodec r210_decoder = {
"r210", "r210",
AVMEDIA_TYPE_VIDEO, AVMEDIA_TYPE_VIDEO,
@ -102,3 +109,18 @@ AVCodec r210_decoder = {
CODEC_CAP_DR1, CODEC_CAP_DR1,
.long_name = NULL_IF_CONFIG_SMALL("Uncompressed RGB 10-bit"), .long_name = NULL_IF_CONFIG_SMALL("Uncompressed RGB 10-bit"),
}; };
#endif
#if CONFIG_R10K_DECODER
AVCodec r10k_decoder = {
"r10k",
AVMEDIA_TYPE_VIDEO,
CODEC_ID_R10K,
0,
decode_init,
NULL,
decode_close,
decode_frame,
CODEC_CAP_DR1,
.long_name = NULL_IF_CONFIG_SMALL("AJA Kona 10-bit RGB Codec"),
};
#endif

@ -77,6 +77,7 @@ const AVCodecTag codec_movvideo_tags[] = {
{ CODEC_ID_RAWVIDEO, MKTAG('b', '1', '6', 'g') }, { CODEC_ID_RAWVIDEO, MKTAG('b', '1', '6', 'g') },
{ CODEC_ID_RAWVIDEO, MKTAG('b', '4', '8', 'r') }, { CODEC_ID_RAWVIDEO, MKTAG('b', '4', '8', 'r') },
{ CODEC_ID_R10K, MKTAG('R', '1', '0', 'k') }, /* UNCOMPRESSED 10BIT RGB */
{ CODEC_ID_R210, MKTAG('r', '2', '1', '0') }, /* UNCOMPRESSED 10BIT RGB */ { CODEC_ID_R210, MKTAG('r', '2', '1', '0') }, /* UNCOMPRESSED 10BIT RGB */
{ CODEC_ID_V210, MKTAG('v', '2', '1', '0') }, /* UNCOMPRESSED 10BIT 4:2:2 */ { CODEC_ID_V210, MKTAG('v', '2', '1', '0') }, /* UNCOMPRESSED 10BIT 4:2:2 */

@ -179,6 +179,7 @@ const AVCodecTag ff_codec_bmp_tags[] = {
{ CODEC_ID_RAWVIDEO, MKTAG('Y', 'U', 'V', '9') }, { CODEC_ID_RAWVIDEO, MKTAG('Y', 'U', 'V', '9') },
{ CODEC_ID_RAWVIDEO, MKTAG('Y', 'V', 'U', '9') }, { CODEC_ID_RAWVIDEO, MKTAG('Y', 'V', 'U', '9') },
{ CODEC_ID_FRWU, MKTAG('F', 'R', 'W', 'U') }, { CODEC_ID_FRWU, MKTAG('F', 'R', 'W', 'U') },
{ CODEC_ID_R10K, MKTAG('R', '1', '0', 'k') },
{ CODEC_ID_R210, MKTAG('r', '2', '1', '0') }, { CODEC_ID_R210, MKTAG('r', '2', '1', '0') },
{ CODEC_ID_V210, MKTAG('v', '2', '1', '0') }, { CODEC_ID_V210, MKTAG('v', '2', '1', '0') },
{ CODEC_ID_INDEO3, MKTAG('I', 'V', '3', '1') }, { CODEC_ID_INDEO3, MKTAG('I', 'V', '3', '1') },

Loading…
Cancel
Save