Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2012-02-13 04:39:11 +0400
committerMichael Niedermayer <michaelni@gmx.at>2012-02-13 05:06:44 +0400
commit4e04e1b81e4e31b7a11b3b5033ac97d2da3b866d (patch)
treec12bd6d0b08e93cecc67993391c0ff0c6caed991 /libavcodec
parentf51a0721604deb9aea230522e618b2c4769cad77 (diff)
parent3e23badd83edc021e8a830db109a08c5553988b0 (diff)
Merge remote-tracking branch 'qatar/master'
* qatar/master: swscale: convert yuv2yuvX() to using named arguments. swscale: rename "dstw" to "w" to prevent name collisions. swscale: use named registers in yuv2yuv1_plane() place. lavf: fix aspect ratio mismatch message. avconv: set AVFormatContext.duration from '-t' cljr: implement encode2. cljr: set the properties of the coded_frame, not input frame. dnxhdenc: switch to encode2. bmpenc: switch to encode2(). Conflicts: libavcodec/bmpenc.c libavcodec/cljr.c libavformat/utils.c tests/ref/vsynth1/cljr tests/ref/vsynth2/cljr Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/bmpenc.c27
-rw-r--r--libavcodec/cljr.c26
-rw-r--r--libavcodec/dnxhdenc.c19
3 files changed, 45 insertions, 27 deletions
diff --git a/libavcodec/bmpenc.c b/libavcodec/bmpenc.c
index b457445321..4455af7d8c 100644
--- a/libavcodec/bmpenc.c
+++ b/libavcodec/bmpenc.c
@@ -25,6 +25,7 @@
#include "bytestream.h"
#include "bmp.h"
#include <assert.h>
+#include "internal.h"
static const uint32_t monoblack_pal[] = { 0x000000, 0xFFFFFF };
static const uint32_t rgb565_masks[] = { 0xF800, 0x07E0, 0x001F };
@@ -67,17 +68,17 @@ static av_cold int bmp_encode_init(AVCodecContext *avctx){
return 0;
}
-static int bmp_encode_frame(AVCodecContext *avctx, unsigned char *buf, int buf_size, void *data){
+static int bmp_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
+ const AVFrame *pict, int *got_packet)
+{
BMPContext *s = avctx->priv_data;
- AVFrame *pict = data;
AVFrame * const p= (AVFrame*)&s->picture;
- int n_bytes_image, n_bytes_per_row, n_bytes, i, n, hsize;
+ int n_bytes_image, n_bytes_per_row, n_bytes, i, n, hsize, ret;
const uint32_t *pal = NULL;
uint32_t palette256[256];
int pad_bytes_per_row, pal_entries = 0, compression = BMP_RGB;
int bit_count = avctx->bits_per_coded_sample;
- uint8_t *ptr;
- unsigned char* buf0 = buf;
+ uint8_t *ptr, *buf;
*p = *pict;
p->pict_type= AV_PICTURE_TYPE_I;
p->key_frame= 1;
@@ -119,10 +120,11 @@ static int bmp_encode_frame(AVCodecContext *avctx, unsigned char *buf, int buf_s
#define SIZE_BITMAPINFOHEADER 40
hsize = SIZE_BITMAPFILEHEADER + SIZE_BITMAPINFOHEADER + (pal_entries << 2);
n_bytes = n_bytes_image + hsize;
- if(n_bytes>buf_size) {
- av_log(avctx, AV_LOG_ERROR, "buf size too small (need %d, got %d)\n", n_bytes, buf_size);
- return -1;
+ if ((ret = ff_alloc_packet(pkt, n_bytes)) < 0) {
+ av_log(avctx, AV_LOG_ERROR, "Error getting output packet.\n");
+ return ret;
}
+ buf = pkt->data;
bytestream_put_byte(&buf, 'B'); // BITMAPFILEHEADER.bfType
bytestream_put_byte(&buf, 'M'); // do.
bytestream_put_le32(&buf, n_bytes); // BITMAPFILEHEADER.bfSize
@@ -144,7 +146,7 @@ static int bmp_encode_frame(AVCodecContext *avctx, unsigned char *buf, int buf_s
bytestream_put_le32(&buf, pal[i] & 0xFFFFFF);
// BMP files are bottom-to-top so we start from the end...
ptr = p->data[0] + (avctx->height - 1) * p->linesize[0];
- buf = buf0 + hsize;
+ buf = pkt->data + hsize;
for(i = 0; i < avctx->height; i++) {
if (bit_count == 16) {
const uint16_t *src = (const uint16_t *) ptr;
@@ -159,7 +161,10 @@ static int bmp_encode_frame(AVCodecContext *avctx, unsigned char *buf, int buf_s
buf += pad_bytes_per_row;
ptr -= p->linesize[0]; // ... and go back
}
- return n_bytes;
+
+ pkt->flags |= AV_PKT_FLAG_KEY;
+ *got_packet = 1;
+ return 0;
}
AVCodec ff_bmp_encoder = {
@@ -168,7 +173,7 @@ AVCodec ff_bmp_encoder = {
.id = CODEC_ID_BMP,
.priv_data_size = sizeof(BMPContext),
.init = bmp_encode_init,
- .encode = bmp_encode_frame,
+ .encode2 = bmp_encode_frame,
.pix_fmts = (const enum PixelFormat[]){
PIX_FMT_BGRA, PIX_FMT_BGR24,
PIX_FMT_RGB565, PIX_FMT_RGB555, PIX_FMT_RGB444,
diff --git a/libavcodec/cljr.c b/libavcodec/cljr.c
index 4027cff4c7..2a26b4929c 100644
--- a/libavcodec/cljr.c
+++ b/libavcodec/cljr.c
@@ -27,6 +27,7 @@
#include "avcodec.h"
#include "libavutil/opt.h"
#include "get_bits.h"
+#include "internal.h"
#include "put_bits.h"
typedef struct CLJRContext {
@@ -132,13 +133,12 @@ AVCodec ff_cljr_decoder = {
#endif
#if CONFIG_CLJR_ENCODER
-static int encode_frame(AVCodecContext *avctx, unsigned char *buf,
- int buf_size, void *data)
+static int encode_frame(AVCodecContext *avctx, AVPacket *pkt,
+ const AVFrame *p, int *got_packet)
{
CLJRContext *a = avctx->priv_data;
PutBitContext pb;
- AVFrame *p = data;
- int x, y;
+ int x, y, ret;
uint32_t dither= avctx->frame_number;
static const uint32_t ordered_dither[2][2] =
{
@@ -146,10 +146,15 @@ static int encode_frame(AVCodecContext *avctx, unsigned char *buf,
{ 0xCB2A0000, 0xCB250000 },
};
- p->pict_type = AV_PICTURE_TYPE_I;
- p->key_frame = 1;
+ if ((ret = ff_alloc_packet(pkt, 32*avctx->height*avctx->width/4)) < 0) {
+ av_log(avctx, AV_LOG_ERROR, "Error getting output packet.\n");
+ return ret;
+ }
+
+ avctx->coded_frame->pict_type = AV_PICTURE_TYPE_I;
+ avctx->coded_frame->key_frame = 1;
- init_put_bits(&pb, buf, buf_size / 8);
+ init_put_bits(&pb, pkt->data, pkt->size);
for (y = 0; y < avctx->height; y++) {
uint8_t *luma = &p->data[0][y * p->linesize[0]];
@@ -173,7 +178,10 @@ static int encode_frame(AVCodecContext *avctx, unsigned char *buf,
flush_put_bits(&pb);
- return put_bits_count(&pb) / 8;
+ pkt->size = put_bits_count(&pb) / 8;
+ pkt->flags |= AV_PKT_FLAG_KEY;
+ *got_packet = 1;
+ return 0;
}
#define OFFSET(x) offsetof(CLJRContext, x)
@@ -196,7 +204,7 @@ AVCodec ff_cljr_encoder = {
.id = CODEC_ID_CLJR,
.priv_data_size = sizeof(CLJRContext),
.init = common_init,
- .encode = encode_frame,
+ .encode2 = encode_frame,
.pix_fmts = (const enum PixelFormat[]) { PIX_FMT_YUV411P,
PIX_FMT_NONE },
.long_name = NULL_IF_CONFIG_SMALL("Cirrus Logic AccuPak"),
diff --git a/libavcodec/dnxhdenc.c b/libavcodec/dnxhdenc.c
index 8045da2399..576fe67151 100644
--- a/libavcodec/dnxhdenc.c
+++ b/libavcodec/dnxhdenc.c
@@ -29,6 +29,7 @@
#include "libavutil/opt.h"
#include "avcodec.h"
#include "dsputil.h"
+#include "internal.h"
#include "mpegvideo.h"
#include "mpegvideo_common.h"
#include "dnxhdenc.h"
@@ -901,18 +902,21 @@ static void dnxhd_load_picture(DNXHDEncContext *ctx, const AVFrame *frame)
ctx->cur_field = frame->interlaced_frame && !frame->top_field_first;
}
-static int dnxhd_encode_picture(AVCodecContext *avctx, unsigned char *buf, int buf_size, void *data)
+static int dnxhd_encode_picture(AVCodecContext *avctx, AVPacket *pkt,
+ const AVFrame *frame, int *got_packet)
{
DNXHDEncContext *ctx = avctx->priv_data;
int first_field = 1;
int offset, i, ret;
+ uint8_t *buf;
- if (buf_size < ctx->cid_table->frame_size) {
+ if ((ret = ff_alloc_packet(pkt, ctx->cid_table->frame_size)) < 0) {
av_log(avctx, AV_LOG_ERROR, "output buffer is too small to compress picture\n");
- return -1;
+ return ret;
}
+ buf = pkt->data;
- dnxhd_load_picture(ctx, data);
+ dnxhd_load_picture(ctx, frame);
encode_coding_unit:
for (i = 0; i < 3; i++) {
@@ -953,13 +957,14 @@ static int dnxhd_encode_picture(AVCodecContext *avctx, unsigned char *buf, int b
first_field = 0;
ctx->cur_field ^= 1;
buf += ctx->cid_table->coding_unit_size;
- buf_size -= ctx->cid_table->coding_unit_size;
goto encode_coding_unit;
}
ctx->frame.quality = ctx->qscale*FF_QP2LAMBDA;
- return ctx->cid_table->frame_size;
+ pkt->flags |= AV_PKT_FLAG_KEY;
+ *got_packet = 1;
+ return 0;
}
static int dnxhd_encode_end(AVCodecContext *avctx)
@@ -1002,7 +1007,7 @@ AVCodec ff_dnxhd_encoder = {
.id = CODEC_ID_DNXHD,
.priv_data_size = sizeof(DNXHDEncContext),
.init = dnxhd_encode_init,
- .encode = dnxhd_encode_picture,
+ .encode2 = dnxhd_encode_picture,
.close = dnxhd_encode_end,
.capabilities = CODEC_CAP_SLICE_THREADS,
.pix_fmts = (const enum PixelFormat[]){PIX_FMT_YUV422P, PIX_FMT_YUV422P10, PIX_FMT_NONE},