mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
cljr: add encoder
Signed-off-by: Diego Biurrun <diego@biurrun.de>
This commit is contained in:
parent
47b20a1db0
commit
e93947b7d8
@ -105,6 +105,7 @@ easier to use. The changes are:
|
|||||||
- CRI ADX audio format demuxer
|
- CRI ADX audio format demuxer
|
||||||
- Playstation Portable PMP format demuxer
|
- Playstation Portable PMP format demuxer
|
||||||
- PCM format support in OMA demuxer
|
- PCM format support in OMA demuxer
|
||||||
|
- CLJR encoder
|
||||||
|
|
||||||
|
|
||||||
version 0.7:
|
version 0.7:
|
||||||
|
@ -382,7 +382,7 @@ following image formats are supported:
|
|||||||
@tab Codec used in Delphine Software International games.
|
@tab Codec used in Delphine Software International games.
|
||||||
@item Discworld II BMV Video @tab @tab X
|
@item Discworld II BMV Video @tab @tab X
|
||||||
@item Cinepak @tab @tab X
|
@item Cinepak @tab @tab X
|
||||||
@item Cirrus Logic AccuPak @tab @tab X
|
@item Cirrus Logic AccuPak @tab X @tab X
|
||||||
@tab fourcc: CLJR
|
@tab fourcc: CLJR
|
||||||
@item Creative YUV (CYUV) @tab @tab X
|
@item Creative YUV (CYUV) @tab @tab X
|
||||||
@item DFA @tab @tab X
|
@item DFA @tab @tab X
|
||||||
|
@ -87,7 +87,7 @@ void avcodec_register_all(void)
|
|||||||
REGISTER_DECODER (CAVS, cavs);
|
REGISTER_DECODER (CAVS, cavs);
|
||||||
REGISTER_DECODER (CDGRAPHICS, cdgraphics);
|
REGISTER_DECODER (CDGRAPHICS, cdgraphics);
|
||||||
REGISTER_DECODER (CINEPAK, cinepak);
|
REGISTER_DECODER (CINEPAK, cinepak);
|
||||||
REGISTER_DECODER (CLJR, cljr);
|
REGISTER_ENCDEC (CLJR, cljr);
|
||||||
REGISTER_DECODER (CSCD, cscd);
|
REGISTER_DECODER (CSCD, cscd);
|
||||||
REGISTER_DECODER (CYUV, cyuv);
|
REGISTER_DECODER (CYUV, cyuv);
|
||||||
REGISTER_DECODER (DFA, dfa);
|
REGISTER_DECODER (DFA, dfa);
|
||||||
|
@ -25,12 +25,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#include "dsputil.h"
|
|
||||||
#include "get_bits.h"
|
#include "get_bits.h"
|
||||||
|
#include "put_bits.h"
|
||||||
/* Disable the encoder. */
|
|
||||||
#undef CONFIG_CLJR_ENCODER
|
|
||||||
#define CONFIG_CLJR_ENCODER 0
|
|
||||||
|
|
||||||
typedef struct CLJRContext{
|
typedef struct CLJRContext{
|
||||||
AVCodecContext *avctx;
|
AVCodecContext *avctx;
|
||||||
@ -92,24 +88,35 @@ static int decode_frame(AVCodecContext *avctx,
|
|||||||
|
|
||||||
#if CONFIG_CLJR_ENCODER
|
#if CONFIG_CLJR_ENCODER
|
||||||
static int encode_frame(AVCodecContext *avctx, unsigned char *buf, int buf_size, void *data){
|
static int encode_frame(AVCodecContext *avctx, unsigned char *buf, int buf_size, void *data){
|
||||||
CLJRContext * const a = avctx->priv_data;
|
PutBitContext pb;
|
||||||
AVFrame *pict = data;
|
AVFrame *p = data;
|
||||||
AVFrame * const p= (AVFrame*)&a->picture;
|
int x, y;
|
||||||
int size;
|
|
||||||
|
|
||||||
*p = *pict;
|
|
||||||
p->pict_type= AV_PICTURE_TYPE_I;
|
p->pict_type= AV_PICTURE_TYPE_I;
|
||||||
p->key_frame= 1;
|
p->key_frame= 1;
|
||||||
|
|
||||||
|
init_put_bits(&pb, buf, buf_size / 8);
|
||||||
|
|
||||||
|
for (y = 0; y < avctx->height; y++) {
|
||||||
|
uint8_t *luma = &p->data[0][y * p->linesize[0]];
|
||||||
|
uint8_t *cb = &p->data[1][y * p->linesize[1]];
|
||||||
|
uint8_t *cr = &p->data[2][y * p->linesize[2]];
|
||||||
|
for (x = 0; x < avctx->width; x += 4) {
|
||||||
|
put_bits(&pb, 5, luma[3] >> 3);
|
||||||
|
put_bits(&pb, 5, luma[2] >> 3);
|
||||||
|
put_bits(&pb, 5, luma[1] >> 3);
|
||||||
|
put_bits(&pb, 5, luma[0] >> 3);
|
||||||
|
luma += 4;
|
||||||
|
put_bits(&pb, 6, *(cb++) >> 2);
|
||||||
|
put_bits(&pb, 6, *(cr++) >> 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
flush_put_bits(&pb);
|
||||||
|
|
||||||
emms_c();
|
emms_c();
|
||||||
|
|
||||||
avpriv_align_put_bits(&a->pb);
|
return put_bits_count(&pb) / 8;
|
||||||
while(get_bit_count(&a->pb)&31)
|
|
||||||
put_bits(&a->pb, 8, 0);
|
|
||||||
|
|
||||||
size= get_bit_count(&a->pb)/32;
|
|
||||||
|
|
||||||
return size*4;
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -165,6 +172,8 @@ AVCodec ff_cljr_encoder = {
|
|||||||
.priv_data_size = sizeof(CLJRContext),
|
.priv_data_size = sizeof(CLJRContext),
|
||||||
.init = encode_init,
|
.init = encode_init,
|
||||||
.encode = encode_frame,
|
.encode = encode_frame,
|
||||||
|
.pix_fmts = (const enum PixelFormat[]) { PIX_FMT_YUV411P,
|
||||||
|
PIX_FMT_NONE },
|
||||||
.long_name = NULL_IF_CONFIG_SMALL("Cirrus Logic AccuPak"),
|
.long_name = NULL_IF_CONFIG_SMALL("Cirrus Logic AccuPak"),
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
#define AVCODEC_VERSION_H
|
#define AVCODEC_VERSION_H
|
||||||
|
|
||||||
#define LIBAVCODEC_VERSION_MAJOR 53
|
#define LIBAVCODEC_VERSION_MAJOR 53
|
||||||
#define LIBAVCODEC_VERSION_MINOR 26
|
#define LIBAVCODEC_VERSION_MINOR 27
|
||||||
#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, \
|
||||||
|
@ -264,7 +264,7 @@ const AVCodecTag ff_codec_bmp_tags[] = {
|
|||||||
{ CODEC_ID_TARGA, MKTAG('t', 'g', 'a', ' ') },
|
{ CODEC_ID_TARGA, MKTAG('t', 'g', 'a', ' ') },
|
||||||
{ CODEC_ID_PNG, MKTAG('M', 'P', 'N', 'G') },
|
{ CODEC_ID_PNG, MKTAG('M', 'P', 'N', 'G') },
|
||||||
{ CODEC_ID_PNG, MKTAG('P', 'N', 'G', '1') },
|
{ CODEC_ID_PNG, MKTAG('P', 'N', 'G', '1') },
|
||||||
{ CODEC_ID_CLJR, MKTAG('c', 'l', 'j', 'r') },
|
{ CODEC_ID_CLJR, MKTAG('C', 'L', 'J', 'R') },
|
||||||
{ CODEC_ID_DIRAC, MKTAG('d', 'r', 'a', 'c') },
|
{ CODEC_ID_DIRAC, MKTAG('d', 'r', 'a', 'c') },
|
||||||
{ CODEC_ID_RPZA, MKTAG('a', 'z', 'p', 'r') },
|
{ CODEC_ID_RPZA, MKTAG('a', 'z', 'p', 'r') },
|
||||||
{ CODEC_ID_RPZA, MKTAG('R', 'P', 'Z', 'A') },
|
{ CODEC_ID_RPZA, MKTAG('R', 'P', 'Z', 'A') },
|
||||||
|
Loading…
Reference in New Issue
Block a user