Hi! A user has provided a "spdif" file that is incompatible with my hardware receiver but used together with SDI and MXF as specified by SMPTE (iiuc). See "Ingest of SMPTE-377M" on the FFmpeg user mailing list.
Attached patch allows to write such files, I cannot test. Please review, Carl Eugen
diff --git a/libavformat/spdifenc.c b/libavformat/spdifenc.c index b4608a1..faba9de 100644 --- a/libavformat/spdifenc.c +++ b/libavformat/spdifenc.c @@ -80,6 +80,7 @@ typedef struct IEC61937Context { int dtshd_rate; int dtshd_fallback; #define SPDIF_FLAG_BIGENDIAN 0x01 +#define SPDIF_FLAG_SMPTE 0x02 int spdif_flags; /// function, which generates codec dependent header information. @@ -90,6 +91,7 @@ typedef struct IEC61937Context { static const AVOption options[] = { { "spdif_flags", "IEC 61937 encapsulation flags", offsetof(IEC61937Context, spdif_flags), AV_OPT_TYPE_FLAGS, {.i64 = 0}, 0, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "spdif_flags" }, { "be", "output in big-endian format (for use as s16be)", 0, AV_OPT_TYPE_CONST, {.i64 = SPDIF_FLAG_BIGENDIAN}, 0, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "spdif_flags" }, +{ "smpte", "use smpte specification instead of iec", 0, AV_OPT_TYPE_CONST, {.i64 = SPDIF_FLAG_SMPTE}, 0, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "spdif_flags" }, { "dtshd_rate", "mux complete DTS frames in HD mode at the specified IEC958 rate (in Hz, default 0=disabled)", offsetof(IEC61937Context, dtshd_rate), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 768000, AV_OPT_FLAG_ENCODING_PARAM }, { "dtshd_fallback_time", "min secs to strip HD for after an overflow (-1: till the end, default 60)", offsetof(IEC61937Context, dtshd_fallback), AV_OPT_TYPE_INT, {.i64 = 60}, -1, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM }, { NULL }, @@ -132,11 +134,17 @@ static int spdif_header_eac3(AVFormatContext *s, AVPacket *pkt) ctx->pkt_offset = 0; return 0; } + if (ctx->spdif_flags & SPDIF_FLAG_SMPTE) { + ctx->data_type = 16; + ctx->length_code = + ctx->pkt_offset = 6144; + } else { ctx->data_type = IEC61937_EAC3; ctx->pkt_offset = 24576; + ctx->length_code = ctx->hd_buf_filled; + } ctx->out_buf = ctx->hd_buf; ctx->out_bytes = ctx->hd_buf_filled; - ctx->length_code = ctx->hd_buf_filled; ctx->hd_buf_count = 0; ctx->hd_buf_filled = 0;
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel