@@ -27,6 +27,7 @@ version <next>: | |||||
- Argonaut Games BRP demuxer | - Argonaut Games BRP demuxer | ||||
- DAT demuxer | - DAT demuxer | ||||
- aax demuxer | - aax demuxer | ||||
- IPU decoder, parser and demuxer | |||||
version 4.3: | version 4.3: | ||||
@@ -278,6 +278,7 @@ OBJS-$(CONFIG_IMAGE_XPM_PIPE_DEMUXER) += img2dec.o img2.o | |||||
OBJS-$(CONFIG_IMAGE_XWD_PIPE_DEMUXER) += img2dec.o img2.o | OBJS-$(CONFIG_IMAGE_XWD_PIPE_DEMUXER) += img2dec.o img2.o | ||||
OBJS-$(CONFIG_INGENIENT_DEMUXER) += ingenientdec.o rawdec.o | OBJS-$(CONFIG_INGENIENT_DEMUXER) += ingenientdec.o rawdec.o | ||||
OBJS-$(CONFIG_IPMOVIE_DEMUXER) += ipmovie.o | OBJS-$(CONFIG_IPMOVIE_DEMUXER) += ipmovie.o | ||||
OBJS-$(CONFIG_IPU_DEMUXER) += ipudec.o | |||||
OBJS-$(CONFIG_IRCAM_DEMUXER) += ircamdec.o ircam.o pcm.o | OBJS-$(CONFIG_IRCAM_DEMUXER) += ircamdec.o ircam.o pcm.o | ||||
OBJS-$(CONFIG_IRCAM_MUXER) += ircamenc.o ircam.o rawenc.o | OBJS-$(CONFIG_IRCAM_MUXER) += ircamenc.o ircam.o rawenc.o | ||||
OBJS-$(CONFIG_ISS_DEMUXER) += iss.o | OBJS-$(CONFIG_ISS_DEMUXER) += iss.o | ||||
@@ -211,6 +211,7 @@ extern AVInputFormat ff_image2_brender_pix_demuxer; | |||||
extern AVInputFormat ff_ingenient_demuxer; | extern AVInputFormat ff_ingenient_demuxer; | ||||
extern AVInputFormat ff_ipmovie_demuxer; | extern AVInputFormat ff_ipmovie_demuxer; | ||||
extern AVOutputFormat ff_ipod_muxer; | extern AVOutputFormat ff_ipod_muxer; | ||||
extern AVInputFormat ff_ipu_demuxer; | |||||
extern AVInputFormat ff_ircam_demuxer; | extern AVInputFormat ff_ircam_demuxer; | ||||
extern AVOutputFormat ff_ircam_muxer; | extern AVOutputFormat ff_ircam_muxer; | ||||
extern AVOutputFormat ff_ismv_muxer; | extern AVOutputFormat ff_ismv_muxer; | ||||
@@ -0,0 +1,89 @@ | |||||
/* | |||||
* IPU video demuxer | |||||
* Copyright (c) 2020 Paul B Mahol | |||||
* | |||||
* 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.1 of the License, or (at your option) any later version. | |||||
* | |||||
* 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 FFmpeg; if not, write to the Free Software | |||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |||||
*/ | |||||
#include "avformat.h" | |||||
#include "internal.h" | |||||
#include "avio_internal.h" | |||||
#include "rawdec.h" | |||||
#include "libavutil/intreadwrite.h" | |||||
#include "libavcodec/internal.h" | |||||
static int ipu_read_probe(const AVProbeData *p) | |||||
{ | |||||
if (AV_RB32(p->buf) != MKBETAG('i', 'p', 'u', 'm')) | |||||
return 0; | |||||
if (AV_RL32(p->buf + 4) == 0) | |||||
return 0; | |||||
if (AV_RL16(p->buf + 8) == 0) | |||||
return 0; | |||||
if (AV_RL16(p->buf + 10) == 0) | |||||
return 0; | |||||
if (AV_RL32(p->buf + 12) == 0) | |||||
return 0; | |||||
return AVPROBE_SCORE_MAX; | |||||
} | |||||
static int ipu_read_header(AVFormatContext *s) | |||||
{ | |||||
AVIOContext *pb = s->pb; | |||||
AVStream *st = avformat_new_stream(s, NULL); | |||||
if (!st) | |||||
return AVERROR(ENOMEM); | |||||
avio_skip(pb, 8); | |||||
st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; | |||||
st->codecpar->codec_id = AV_CODEC_ID_IPU; | |||||
st->codecpar->width = avio_rl16(pb); | |||||
st->codecpar->height = avio_rl16(pb); | |||||
st->start_time = 0; | |||||
st->duration = | |||||
st->nb_frames = avio_rl32(pb); | |||||
st->need_parsing = AVSTREAM_PARSE_FULL_RAW; | |||||
avpriv_set_pts_info(st, 64, 1, 25); | |||||
return 0; | |||||
} | |||||
static const AVClass ipu_demuxer_class = { | |||||
.class_name = "ipu demuxer", | |||||
.item_name = av_default_item_name, | |||||
.option = ff_raw_options, | |||||
.version = LIBAVUTIL_VERSION_INT, | |||||
}; | |||||
AVInputFormat ff_ipu_demuxer = { | |||||
.name = "ipu", | |||||
.long_name = NULL_IF_CONFIG_SMALL("raw IPU Video"), | |||||
.read_probe = ipu_read_probe, | |||||
.read_header = ipu_read_header, | |||||
.read_packet = ff_raw_read_partial_packet, | |||||
.extensions = "ipu", | |||||
.flags = AVFMT_GENERIC_INDEX, | |||||
.raw_codec_id = AV_CODEC_ID_IPU, | |||||
.priv_data_size = sizeof(FFRawDemuxerContext), | |||||
.priv_class = &ipu_demuxer_class, | |||||
}; |
@@ -32,7 +32,7 @@ | |||||
// Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium) | // Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium) | ||||
// Also please add any ticket numbers that you believe might be affected here | // Also please add any ticket numbers that you believe might be affected here | ||||
#define LIBAVFORMAT_VERSION_MAJOR 58 | #define LIBAVFORMAT_VERSION_MAJOR 58 | ||||
#define LIBAVFORMAT_VERSION_MINOR 58 | |||||
#define LIBAVFORMAT_VERSION_MINOR 59 | |||||
#define LIBAVFORMAT_VERSION_MICRO 100 | #define LIBAVFORMAT_VERSION_MICRO 100 | ||||
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ | #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ | ||||