X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Fyuv4mpeg.c;h=6f1eb5d6e676d718310b89e4efd91aed4a3d1a18;hb=7a7718e38f7610de534eb0b4e21bb8736ab911f9;hp=361ef8eeec22ea9b33acef77608b802056790c99;hpb=ad97e414e2f1c6e0c021c473b9244c9d894d5312;p=ffmpeg diff --git a/libavformat/yuv4mpeg.c b/libavformat/yuv4mpeg.c index 361ef8eeec2..6f1eb5d6e67 100644 --- a/libavformat/yuv4mpeg.c +++ b/libavformat/yuv4mpeg.c @@ -2,18 +2,20 @@ * YUV4MPEG format * Copyright (c) 2001, 2002, 2003 Fabrice Bellard. * - * This library is free software; you can redistribute it and/or + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. + * version 2.1 of the License, or (at your option) any later version. * - * This library is distributed in the hope that it will be useful, + * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software + * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "avformat.h" @@ -22,8 +24,6 @@ #define Y4M_FRAME_MAGIC "FRAME" #define Y4M_LINE_MAX 256 -#ifdef CONFIG_MUXERS - struct frame_attributes { int interlaced_frame; int top_field_first; @@ -35,7 +35,7 @@ static int yuv4_generate_header(AVFormatContext *s, char* buf) int width, height; int raten, rated, aspectn, aspectd, n; char inter; - char *colorspace = ""; + const char *colorspace = ""; st = s->streams[0]; width = st->codec->width; @@ -87,7 +87,7 @@ static int yuv4_generate_header(AVFormatContext *s, char* buf) static int yuv4_write_packet(AVFormatContext *s, AVPacket *pkt) { AVStream *st = s->streams[pkt->stream_index]; - ByteIOContext *pb = &s->pb; + ByteIOContext *pb = s->pb; AVPicture *picture; int* first_pkt = s->priv_data; int width, height, h_chroma_shift, v_chroma_shift; @@ -103,7 +103,7 @@ static int yuv4_write_packet(AVFormatContext *s, AVPacket *pkt) *first_pkt = 0; if (yuv4_generate_header(s, buf2) < 0) { av_log(s, AV_LOG_ERROR, "Error. YUV4MPEG stream header write failed.\n"); - return AVERROR_IO; + return AVERROR(EIO); } else { put_buffer(pb, buf2, strlen(buf2)); } @@ -149,7 +149,7 @@ static int yuv4_write_header(AVFormatContext *s) int* first_pkt = s->priv_data; if (s->nb_streams != 1) - return AVERROR_IO; + return AVERROR(EIO); if (s->streams[0]->codec->pix_fmt == PIX_FMT_YUV411P) { av_log(s, AV_LOG_ERROR, "Warning: generating rarely used 4:1:1 YUV stream, some mjpegtools might not work.\n"); @@ -159,19 +159,15 @@ static int yuv4_write_header(AVFormatContext *s) (s->streams[0]->codec->pix_fmt != PIX_FMT_GRAY8) && (s->streams[0]->codec->pix_fmt != PIX_FMT_YUV444P)) { av_log(s, AV_LOG_ERROR, "ERROR: yuv4mpeg only handles yuv444p, yuv422p, yuv420p, yuv411p and gray pixel formats. Use -pix_fmt to select one.\n"); - return AVERROR_IO; + return AVERROR(EIO); } *first_pkt = 1; return 0; } -static int yuv4_write_trailer(AVFormatContext *s) -{ - return 0; -} - -AVOutputFormat yuv4mpegpipe_oformat = { +#ifdef CONFIG_YUV4MPEGPIPE_MUXER +AVOutputFormat yuv4mpegpipe_muxer = { "yuv4mpegpipe", "YUV4MPEG pipe format", "", @@ -181,10 +177,9 @@ AVOutputFormat yuv4mpegpipe_oformat = { CODEC_ID_RAWVIDEO, yuv4_write_header, yuv4_write_packet, - yuv4_write_trailer, .flags = AVFMT_RAWPICTURE, }; -#endif //CONFIG_MUXERS +#endif /* Header size increased to allow room for optional flags */ #define MAX_YUV4_HEADER 80 @@ -195,7 +190,7 @@ static int yuv4_read_header(AVFormatContext *s, AVFormatParameters *ap) char header[MAX_YUV4_HEADER+10]; // Include headroom for the longest option char *tokstart,*tokend,*header_end; int i; - ByteIOContext *pb = &s->pb; + ByteIOContext *pb = s->pb; int width=-1, height=-1, raten=0, rated=0, aspectn=0, aspectd=0; enum PixelFormat pix_fmt=PIX_FMT_NONE,alt_pix_fmt=PIX_FMT_NONE; AVStream *st; @@ -327,7 +322,6 @@ static int yuv4_read_header(AVFormatContext *s, AVFormatParameters *ap) } st = av_new_stream(s, 0); - st = s->streams[0]; st->codec->width = width; st->codec->height = height; av_reduce(&raten, &rated, raten, rated, (1UL<<31)-1); @@ -349,7 +343,7 @@ static int yuv4_read_packet(AVFormatContext *s, AVPacket *pkt) struct frame_attributes *s1 = s->priv_data; for (i=0; ipb); + header[i] = get_byte(s->pb); if (header[i] == '\n') { header[i+1] = 0; break; @@ -365,8 +359,8 @@ static int yuv4_read_packet(AVFormatContext *s, AVPacket *pkt) if (packet_size < 0) return -1; - if (av_get_packet(&s->pb, pkt, packet_size) != packet_size) - return AVERROR_IO; + if (av_get_packet(s->pb, pkt, packet_size) != packet_size) + return AVERROR(EIO); if (s->streams[0]->codec->coded_frame) { s->streams[0]->codec->coded_frame->interlaced_frame = s1->interlaced_frame; @@ -385,15 +379,14 @@ static int yuv4_read_close(AVFormatContext *s) static int yuv4_probe(AVProbeData *pd) { /* check file header */ - if (pd->buf_size <= sizeof(Y4M_MAGIC)) - return 0; if (strncmp(pd->buf, Y4M_MAGIC, sizeof(Y4M_MAGIC)-1)==0) return AVPROBE_SCORE_MAX; else return 0; } -AVInputFormat yuv4mpegpipe_iformat = { +#ifdef CONFIG_YUV4MPEGPIPE_DEMUXER +AVInputFormat yuv4mpegpipe_demuxer = { "yuv4mpegpipe", "YUV4MPEG pipe format", sizeof(struct frame_attributes), @@ -403,13 +396,4 @@ AVInputFormat yuv4mpegpipe_iformat = { yuv4_read_close, .extensions = "y4m" }; - -int yuv4mpeg_init(void) -{ - av_register_input_format(&yuv4mpegpipe_iformat); -#ifdef CONFIG_MUXERS - av_register_output_format(&yuv4mpegpipe_oformat); -#endif //CONFIG_MUXERS - return 0; -} - +#endif