Signed-off-by: Paul B Mahol <onemda@gmail.com>tags/n3.3
@@ -16,6 +16,7 @@ version <next>: | |||||
- NewTek SpeedHQ decoder | - NewTek SpeedHQ decoder | ||||
- MIDI Sample Dump Standard demuxer | - MIDI Sample Dump Standard demuxer | ||||
- readeia608 filter | - readeia608 filter | ||||
- Sample Dump eXchange demuxer | |||||
version 3.2: | version 3.2: | ||||
- libopenmpt demuxer | - libopenmpt demuxer | ||||
@@ -483,6 +483,7 @@ library: | |||||
@tab Output is performed by publishing stream to RTMP server | @tab Output is performed by publishing stream to RTMP server | ||||
@item RTP @tab X @tab X | @item RTP @tab X @tab X | ||||
@item RTSP @tab X @tab X | @item RTSP @tab X @tab X | ||||
@item Sample Dump eXchange @tab @tab X | |||||
@item SAP @tab X @tab X | @item SAP @tab X @tab X | ||||
@item SBG @tab @tab X | @item SBG @tab @tab X | ||||
@item SDP @tab @tab X | @item SDP @tab @tab X | ||||
@@ -437,6 +437,7 @@ OBJS-$(CONFIG_SBG_DEMUXER) += sbgdec.o | |||||
OBJS-$(CONFIG_SDP_DEMUXER) += rtsp.o | OBJS-$(CONFIG_SDP_DEMUXER) += rtsp.o | ||||
OBJS-$(CONFIG_SDR2_DEMUXER) += sdr2.o | OBJS-$(CONFIG_SDR2_DEMUXER) += sdr2.o | ||||
OBJS-$(CONFIG_SDS_DEMUXER) += sdsdec.o | OBJS-$(CONFIG_SDS_DEMUXER) += sdsdec.o | ||||
OBJS-$(CONFIG_SDX_DEMUXER) += sdxdec.o | |||||
OBJS-$(CONFIG_SEGAFILM_DEMUXER) += segafilm.o | OBJS-$(CONFIG_SEGAFILM_DEMUXER) += segafilm.o | ||||
OBJS-$(CONFIG_SEGMENT_MUXER) += segment.o | OBJS-$(CONFIG_SEGMENT_MUXER) += segment.o | ||||
OBJS-$(CONFIG_SHORTEN_DEMUXER) += shortendec.o rawdec.o | OBJS-$(CONFIG_SHORTEN_DEMUXER) += shortendec.o rawdec.o | ||||
@@ -276,6 +276,7 @@ void av_register_all(void) | |||||
REGISTER_DEMUXER (SDP, sdp); | REGISTER_DEMUXER (SDP, sdp); | ||||
REGISTER_DEMUXER (SDR2, sdr2); | REGISTER_DEMUXER (SDR2, sdr2); | ||||
REGISTER_DEMUXER (SDS, sds); | REGISTER_DEMUXER (SDS, sds); | ||||
REGISTER_DEMUXER (SDX, sdx); | |||||
#if CONFIG_RTPDEC | #if CONFIG_RTPDEC | ||||
ff_register_rtp_dynamic_payload_handlers(); | ff_register_rtp_dynamic_payload_handlers(); | ||||
ff_register_rdt_dynamic_payload_handlers(); | ff_register_rdt_dynamic_payload_handlers(); | ||||
@@ -0,0 +1,90 @@ | |||||
/* | |||||
* SDX demuxer | |||||
* Copyright (c) 2017 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 "libavutil/avstring.h" | |||||
#include "libavutil/intreadwrite.h" | |||||
#include "avformat.h" | |||||
#include "internal.h" | |||||
#include "pcm.h" | |||||
static int sdx_probe(AVProbeData *p) | |||||
{ | |||||
if (AV_RB32(p->buf) == AV_RB32("SDX:")) | |||||
return AVPROBE_SCORE_EXTENSION; | |||||
return 0; | |||||
} | |||||
static int sdx_read_header(AVFormatContext *s) | |||||
{ | |||||
AVStream *st; | |||||
int depth, length; | |||||
avio_skip(s->pb, 4); | |||||
while (!avio_feof(s->pb)) { | |||||
if (avio_r8(s->pb) == 0x1a) | |||||
break; | |||||
} | |||||
if (avio_r8(s->pb) != 1) | |||||
return AVERROR_INVALIDDATA; | |||||
length = avio_r8(s->pb); | |||||
avio_skip(s->pb, length); | |||||
avio_skip(s->pb, 4); | |||||
depth = avio_r8(s->pb); | |||||
st = avformat_new_stream(s, NULL); | |||||
if (!st) | |||||
return AVERROR(ENOMEM); | |||||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||||
st->codecpar->channels = 1; | |||||
st->codecpar->sample_rate = avio_rl32(s->pb); | |||||
switch (depth) { | |||||
case 8: | |||||
st->codecpar->codec_id = AV_CODEC_ID_PCM_U8; | |||||
break; | |||||
case 16: | |||||
st->codecpar->codec_id = AV_CODEC_ID_PCM_U16LE; | |||||
break; | |||||
case 24: | |||||
st->codecpar->codec_id = AV_CODEC_ID_PCM_U24LE; | |||||
break; | |||||
case 32: | |||||
st->codecpar->codec_id = AV_CODEC_ID_PCM_U32LE; | |||||
break; | |||||
default: | |||||
return AVERROR_INVALIDDATA; | |||||
} | |||||
avio_skip(s->pb, 16); | |||||
st->codecpar->block_align = depth / 8; | |||||
return 0; | |||||
} | |||||
AVInputFormat ff_sdx_demuxer = { | |||||
.name = "sdx", | |||||
.long_name = NULL_IF_CONFIG_SMALL("Sample Dump eXchange"), | |||||
.read_probe = sdx_probe, | |||||
.read_header = sdx_read_header, | |||||
.read_packet = ff_pcm_read_packet, | |||||
.read_seek = ff_pcm_read_seek, | |||||
.extensions = "sdx", | |||||
.flags = AVFMT_GENERIC_INDEX, | |||||
}; |
@@ -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 57 | #define LIBAVFORMAT_VERSION_MAJOR 57 | ||||
#define LIBAVFORMAT_VERSION_MINOR 63 | |||||
#define LIBAVFORMAT_VERSION_MINOR 64 | |||||
#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, \ | ||||