From 290038f3de13b728cab6d3db7729078482903844 Mon Sep 17 00:00:00 2001 From: austriancoder Date: Mon, 15 Aug 2005 17:28:49 +0000 Subject: HEAD = 0.2.3 release, because i want to start my coding with this codebase --- dxr3ffmpeg.c | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 dxr3ffmpeg.c (limited to 'dxr3ffmpeg.c') diff --git a/dxr3ffmpeg.c b/dxr3ffmpeg.c new file mode 100644 index 0000000..fcb6e2d --- /dev/null +++ b/dxr3ffmpeg.c @@ -0,0 +1,91 @@ +/* + * dxr3ffmpeg.c + * + * Copyright (C) 2004 Christian Gmeiner + * + * This program 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.1 + * of the License, or (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#include "dxr3ffmpeg.h" +#include "dxr3configdata.h" +#include + +// ================================== +//! constructor +cDxr3Ffmepg::cDxr3Ffmepg() +{ + avcodec_init(); + // Register only codec(s) we'll need. + register_avcodec(&mp2_decoder); +} + +// ================================== +//! look if Codec is supported by ffmpeg +bool cDxr3Ffmepg::FindCodec(struct Dxr3Codec& Codec) +{ + // find codec + Codec.codec = avcodec_find_decoder(Codec.id); + + if (!Codec.codec) + { + esyslog("dxr3: ffmpeg: codec %#.5x not found - not supported" + " by FFmpeg?", Codec.id); + return false; + } + + // init codec_context + memset(&Codec.codec_context, 0, sizeof(Codec.codec_context)); + + return true; +} + +// ================================== +//! try to open Codec +bool cDxr3Ffmepg::OpenCodec(struct Dxr3Codec& Codec) +{ + // try to open codec + int result = avcodec_open(&Codec.codec_context, Codec.codec); + + if (result < 0) + { + esyslog("dxr3: ffmpeg: couldn't open codec %#.5x", Codec.id); + return false; + } + else + { + Codec.Open = true; + } + + return true; +} + +// ================================== +//! close codec +void cDxr3Ffmepg::CloseCodec(struct Dxr3Codec& Codec) +{ + if (Codec.Open) + { + avcodec_close(&Codec.codec_context); + Codec.Open = false; + } +} + +// Local variables: +// mode: c++ +// c-file-style: "stroustrup" +// c-file-offsets: ((inline-open . 0)) +// indent-tabs-mode: t +// End: -- cgit v1.2.3