1/* 2 * Raw Video Encoder 3 * Copyright (c) 2001 Fabrice Bellard 4 * 5 * This file is part of FFmpeg. 6 * 7 * FFmpeg is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU Lesser General Public 9 * License as published by the Free Software Foundation; either 10 * version 2.1 of the License, or (at your option) any later version. 11 * 12 * FFmpeg is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * Lesser General Public License for more details. 16 * 17 * You should have received a copy of the GNU Lesser General Public 18 * License along with FFmpeg; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 20 */ 21 22/** 23 * @file 24 * Raw Video Encoder 25 */ 26 27#include "avcodec.h" 28#include "raw.h" 29#include "libavutil/pixdesc.h" 30#include "libavutil/intreadwrite.h" 31 32static av_cold int raw_init_encoder(AVCodecContext *avctx) 33{ 34 avctx->coded_frame = (AVFrame *)avctx->priv_data; 35 avctx->coded_frame->pict_type = FF_I_TYPE; 36 avctx->coded_frame->key_frame = 1; 37 avctx->bits_per_coded_sample = av_get_bits_per_pixel(&av_pix_fmt_descriptors[avctx->pix_fmt]); 38 if(!avctx->codec_tag) 39 avctx->codec_tag = avcodec_pix_fmt_to_codec_tag(avctx->pix_fmt); 40 return 0; 41} 42 43static int raw_encode(AVCodecContext *avctx, 44 unsigned char *frame, int buf_size, void *data) 45{ 46 int ret = avpicture_layout((AVPicture *)data, avctx->pix_fmt, avctx->width, 47 avctx->height, frame, buf_size); 48 49 if(avctx->codec_tag == AV_RL32("yuv2") && ret > 0 && 50 avctx->pix_fmt == PIX_FMT_YUYV422) { 51 int x; 52 for(x = 1; x < avctx->height*avctx->width*2; x += 2) 53 frame[x] ^= 0x80; 54 } 55 return ret; 56} 57 58AVCodec rawvideo_encoder = { 59 "rawvideo", 60 AVMEDIA_TYPE_VIDEO, 61 CODEC_ID_RAWVIDEO, 62 sizeof(AVFrame), 63 raw_init_encoder, 64 raw_encode, 65 .long_name = NULL_IF_CONFIG_SMALL("raw video"), 66}; 67