diff options
author | Aneesh Dogra <lionaneesh@gmail.com> | 2012-02-08 23:18:40 +0530 |
---|---|---|
committer | Justin Ruggles <justin.ruggles@gmail.com> | 2012-02-10 15:38:24 -0500 |
commit | eeb9e61a518f6b3a1a85dd44e44d55e395e015f6 (patch) | |
tree | 3111dd6ea6cc49c1a80b3f12a0ec6b154d4c7714 /libavcodec | |
parent | af701d42c3550c9927652986229a96404346b1e4 (diff) | |
download | ffmpeg-streaming-eeb9e61a518f6b3a1a85dd44e44d55e395e015f6.zip ffmpeg-streaming-eeb9e61a518f6b3a1a85dd44e44d55e395e015f6.tar.gz |
v210enc: Use Bytestream2 functions
Signed-off-by: Justin Ruggles <justin.ruggles@gmail.com>
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/v210enc.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/libavcodec/v210enc.c b/libavcodec/v210enc.c index 77cb30b..714b6fb 100644 --- a/libavcodec/v210enc.c +++ b/libavcodec/v210enc.c @@ -55,18 +55,20 @@ static int encode_frame(AVCodecContext *avctx, unsigned char *buf, const AVFrame *pic = data; int aligned_width = ((avctx->width + 47) / 48) * 48; int stride = aligned_width * 8 / 3; + int line_padding = stride - ((avctx->width * 8 + 11) / 12) * 4; int h, w; const uint16_t *y = (const uint16_t*)pic->data[0]; const uint16_t *u = (const uint16_t*)pic->data[1]; const uint16_t *v = (const uint16_t*)pic->data[2]; - uint8_t *p = buf; - uint8_t *pdst = buf; + PutByteContext p; if (buf_size < avctx->height * stride) { av_log(avctx, AV_LOG_ERROR, "output buffer too small\n"); return AVERROR(ENOMEM); } + bytestream2_init_writer(&p, buf, buf_size); + #define CLIP(v) av_clip(v, 4, 1019) #define WRITE_PIXELS(a, b, c) \ @@ -74,7 +76,7 @@ static int encode_frame(AVCodecContext *avctx, unsigned char *buf, val = CLIP(*a++); \ val |= (CLIP(*b++) << 10) | \ (CLIP(*c++) << 20); \ - bytestream_put_le32(&p, val); \ + bytestream2_put_le32u(&p, val); \ } while (0) for (h = 0; h < avctx->height; h++) { @@ -90,25 +92,24 @@ static int encode_frame(AVCodecContext *avctx, unsigned char *buf, val = CLIP(*y++); if (w == avctx->width - 2) - bytestream_put_le32(&p, val); + bytestream2_put_le32u(&p, val); } if (w < avctx->width - 3) { val |= (CLIP(*u++) << 10) | (CLIP(*y++) << 20); - bytestream_put_le32(&p, val); + bytestream2_put_le32u(&p, val); val = CLIP(*v++) | (CLIP(*y++) << 10); - bytestream_put_le32(&p, val); + bytestream2_put_le32u(&p, val); } - pdst += stride; - memset(p, 0, pdst - p); - p = pdst; + bytestream2_set_buffer(&p, 0, line_padding); + y += pic->linesize[0] / 2 - avctx->width; u += pic->linesize[1] / 2 - avctx->width / 2; v += pic->linesize[2] / 2 - avctx->width / 2; } - return p - buf; + return bytestream2_tell_p(&p); } static av_cold int encode_close(AVCodecContext *avctx) |