From patchwork Tue May 15 10:51:36 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?=C5=81ukasz_Krzciuk?= X-Patchwork-Id: 8975 Delivered-To: ffmpegpatchwork@gmail.com Received: by 2002:a02:155:0:0:0:0:0 with SMTP id c82-v6csp1272379jad; Tue, 15 May 2018 03:51:46 -0700 (PDT) X-Google-Smtp-Source: AB8JxZoo+rUfhQiotPB65glV2e6HNuMxgllI6emKbHgrtHVOqSz1uOd3P0IUUn3qgqCo8p7YJZAc X-Received: by 2002:a1c:aa09:: with SMTP id t9-v6mr6043726wme.65.1526381506643; Tue, 15 May 2018 03:51:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1526381506; cv=none; d=google.com; s=arc-20160816; b=0Hu6EL6WZszMb302Y+GACA/OS61zeMBykSFJuqNouP/IHlK6C8ogoUC8ewgib6Z10S Wo5OwaFTYssAt5Oam2G4NDwy6oFAqNs0R/VkQVGvS/UkOaSAzAiLKatr7M0KzuEsvWtb EQVgKW4T1rxne+S/hYpJ+yqTAgqLE/xH2onk7WOYJ6E3pnjnhMk1sOseabGPeWEoKD2o 8Fjv/3BuU/5UsXyccvKm0ZOjjT2XK0WGv/IEelC84MBvRRB21AIOAEOb2FpBY00cFZ1U dAGTYHtB8UHFXyNKcm7PRMJBhUwihiKWEphWPmpS3CG4rsSfAeLR8uxwipzeLbwesLYo rxtA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:subject:to :message-id:date:from:references:in-reply-to:mime-version :dkim-signature:delivered-to:arc-authentication-results; bh=0p9AuKwORmMXgtu9dzafYcOZnDhBJEj8/MoGhSdg0lo=; b=gLYzR0rFuqB/7SgBWsf3to+e2Nf6Hi7W/NqXPAXoOXbPxlEduGWpYZuTJwkaHbQTMS FSmAiZDaMXpO1YbHOJRGZeeT80VgfOii3j8zC/YOgyS7nB7YrqZGGCGUvrI3qCqdoRrv jNgNSYp73qYupsksl5Fc1dQUU/UA4ioa5aFdmfUYGr+njegSh5n9wH2/AOJfbEjpIZRw milHbmMfXl1xq1SAdZAUsbHRivRHYIaKlxDCKaJyj0n0u5qLIaSEZGqbdkWAe2slkN47 gO7ZUQ6O0BUV/qPETR+FHP1Cs/zCuup03lr/6RT3nZ9Vejo86jCL2JQNi5P1mPnQyyTf ZZQw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@vewd-com.20150623.gappssmtp.com header.s=20150623 header.b=m62rS7zP; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id m13-v6si10333682wrf.442.2018.05.15.03.51.45; Tue, 15 May 2018 03:51:46 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@vewd-com.20150623.gappssmtp.com header.s=20150623 header.b=m62rS7zP; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1E779688292; Tue, 15 May 2018 13:51:06 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm0-f54.google.com (mail-wm0-f54.google.com [74.125.82.54]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id AD6D568042B for ; Tue, 15 May 2018 13:50:59 +0300 (EEST) Received: by mail-wm0-f54.google.com with SMTP id a137-v6so15352022wme.1 for ; Tue, 15 May 2018 03:51:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vewd-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to; bh=b/ucYTpuQG4PNUg69r3J36ZiRRt+w5jsev6czR+Ld04=; b=m62rS7zPlcaO2swUQJRnCT0oyf360xgHi2QfWMO8uuE7/bdA2JomOWGlzNDjic0oVL OakzeBw1baOaMHSjN+ims6O4/IPsn4kCB7taadlbK6HK1KX3EHSPEBnx2uzwMzEVK2H/ +FAxh2FeBKY66BLNw4ZAMAnywhf43P/CajkP42G0FgIqqWBtN6bhvUxzYTcCFkRd9+ZE PFyNefF5QvEBBTLy4po/dRvtFZ0aVdVvZvYBv9E97cl2+hSv3I3Rup6dnJfXDvdT6vYX psDI03ulYzVCg76XREB6i7NSIFOk/FxkRzjr1UoYi9KETC/zi2GpT80z3x7IQ54VlVm/ 6u0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to; bh=b/ucYTpuQG4PNUg69r3J36ZiRRt+w5jsev6czR+Ld04=; b=OnH4hi3h6lMWD41Np6QH3Pv3Nz5wgtJpaQwzNEm1z+E8HygGU2CDFizP/UYQZtIphe l2wB/+6Voq2V1gdvCD3Wyn0N7xWqR3JgC/mQz3NkGl3in55JPUUeFvAFEpf27VnhZpcJ /JrfuA3CVXof77oVAJvJUUinpImMDFKQSKDHKb6EieIPTYyOV7rgP0ykQtEa6MBkMFw1 IVX3+N3WfhJuF6LZXgkG4cvfhq2X+uRxf1oxZnUow62fA7Rl6FgnkTyNrVk8/Vk1XjtQ jp6bzTwh2FZzaCMNcvasDF0Q8TEN3D/l9h+cd2a8yvGWL8K6/T4PDBDTRoDDQiN3Hld2 LWuA== X-Gm-Message-State: ALKqPwcjaoaQufKu8zcB9ZFLrxdw6b8rfXiDrqY0ovXk+xEn4bQ93jtV T2vOoih4+SCmQ6jsE+V0TVHe/6Di8UqERIfSef9hbztJ X-Received: by 2002:a1c:ee58:: with SMTP id m85-v6mr8087118wmh.44.1526381497327; Tue, 15 May 2018 03:51:37 -0700 (PDT) MIME-Version: 1.0 Received: by 10.28.55.133 with HTTP; Tue, 15 May 2018 03:51:36 -0700 (PDT) In-Reply-To: References: <20180413155020.GV20131@michaelspb> <20180418210319.GA20131@michaelspb> <20180425000934.GP20131@michaelspb> <20180426000546.GD20131@michaelspb> <20180510010922.GH20131@michaelspb> From: =?UTF-8?Q?=C5=81ukasz_Krzciuk?= Date: Tue, 15 May 2018 12:51:36 +0200 Message-ID: To: FFmpeg development discussions and patches X-Content-Filtered-By: Mailman/MimeDel 2.1.20 Subject: Re: [FFmpeg-devel] avformat/mpegts: set AV_DISPOSITION_DESCRIPTIONS for OIPF cases X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" I have prepared a testcase. PMT data comes from org.hbbtv_HTML50420 - I have squashed them and there is one file attached now. Please review. Regards, *Łukasz Krzciuk* Developer Vewd ul. Grabarska 2, Pegaz 2A, 50-079 Wrocław, Polska On Mon, May 14, 2018 at 10:23 AM, Łukasz Krzciuk wrote: > I have prepared a testcase. PMT data comes from org.hbbtv_HTML50420. Please > review. > > Regards, > > *Łukasz Krzciuk* > Developer > > Vewd > ul. Grabarska 2, Pegaz 2A, 50-079 Wrocław, Polska > > > On Thu, May 10, 2018 at 8:54 PM, Aman Gupta wrote: > >> On Thu, May 10, 2018 at 1:46 AM Łukasz Krzciuk wrote: >> >> > Lets skip a testcase. It will be not easy to me to prepare it. >> >> >> It should be simple to extract a small sample containing the PMT. If you >> link some larger samples I can help extract the relevant bytes for test >> case. >> >> Aman >> >> >> > >> > Regards, >> > >> > *Łukasz Krzciuk* >> > Developer >> > >> > Vewd >> > ul. Grabarska 2 >> > , Pegaz >> 2A, >> > 50-079 Wrocław, Polska >> > >> > >> > On Thu, May 10, 2018 at 3:09 AM, Michael Niedermayer >> > > > > wrote: >> > >> > > On Wed, May 09, 2018 at 10:19:26AM +0200, Łukasz Krzciuk wrote: >> > > > Any updates on this issue? >> > > >> > > about adding a testcase ? >> > > adding a huge sample file is not possible. >> > > It either has to be made smaller or generated by a muxer >> > > or last resort, no test >> > > >> > > [...] >> > > -- >> > > Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC7 >> 87040B0FAB >> > > >> > > The worst form of inequality is to try to make unequal things equal. >> > > -- Aristotle >> > > >> > > _______________________________________________ >> > > ffmpeg-devel mailing list >> > > ffmpeg-devel@ffmpeg.org >> > > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel >> > > >> > > >> > _______________________________________________ >> > ffmpeg-devel mailing list >> > ffmpeg-devel@ffmpeg.org >> > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel >> > >> _______________________________________________ >> ffmpeg-devel mailing list >> ffmpeg-devel@ffmpeg.org >> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel >> > > From 5181275d0474aadc420da46f3a1c9044900aa36d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Krzciuk?= Date: Fri, 13 Apr 2018 14:57:57 +0200 Subject: [PATCH] avformat/mpegts: set AV_DISPOSITION_DESCRIPTIONS for OIPF cases 1. an audio component with an ISO_639_language_descriptor in the PMT with the audio_type field set to 0x03 2. a supplementary_audio_descriptor with the editorial_classification field set to 0x01 3. an ac-3_descriptor or an enhanced_ac-3_descriptor with a component_type field with the service_type flags set to Visually Impaired --- libavformat/Makefile | 1 + libavformat/mpegts.c | 30 +++++ libavformat/tests/descriptor.c | 265 +++++++++++++++++++++++++++++++++++++++++ tests/fate/libavformat.mak | 4 + tests/ref/fate/descriptor | 5 + 5 files changed, 305 insertions(+) create mode 100644 libavformat/tests/descriptor.c create mode 100644 tests/ref/fate/descriptor diff --git a/libavformat/Makefile b/libavformat/Makefile index 3eeca50..373c131 100644 --- a/libavformat/Makefile +++ b/libavformat/Makefile @@ -635,6 +635,7 @@ TESTPROGS-$(CONFIG_FFRTMPCRYPT_PROTOCOL) += rtmpdh TESTPROGS-$(CONFIG_MOV_MUXER) += movenc TESTPROGS-$(CONFIG_NETWORK) += noproxy TESTPROGS-$(CONFIG_SRTP) += srtp +TESTPROGS-$(CONFIG_NETWORK) += descriptor TOOLS = aviocat \ ismindex \ diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c index 37a6aa8..629631f 100644 --- a/libavformat/mpegts.c +++ b/libavformat/mpegts.c @@ -1835,6 +1835,7 @@ int ff_parse_mpeg2_descriptor(AVFormatContext *fc, AVStream *st, int stream_type break; case 0x03: st->disposition |= AV_DISPOSITION_VISUAL_IMPAIRED; + st->disposition |= AV_DISPOSITION_DESCRIPTIONS; break; } } @@ -1910,6 +1911,7 @@ int ff_parse_mpeg2_descriptor(AVFormatContext *fc, AVStream *st, int stream_type switch ((flags >> 2) & 0x1F) { /* editorial_classification */ case 0x01: st->disposition |= AV_DISPOSITION_VISUAL_IMPAIRED; + st->disposition |= AV_DISPOSITION_DESCRIPTIONS; break; case 0x02: st->disposition |= AV_DISPOSITION_HEARING_IMPAIRED; @@ -1934,6 +1936,34 @@ int ff_parse_mpeg2_descriptor(AVFormatContext *fc, AVStream *st, int stream_type } } break; + case 0x6a: /* ac-3_descriptor */ + { + int component_type_flag = get8(pp, desc_end) & (1 << 7); + if (component_type_flag) { + int component_type = get8(pp, desc_end); + int service_type_mask = 0x38; // 0b00111000 + int service_type = ((component_type & service_type_mask) >> 3); + if (service_type == 0x02 /* 0b010 */) { + st->disposition |= AV_DISPOSITION_DESCRIPTIONS; + av_log(ts->stream, AV_LOG_DEBUG, "New track disposition for id %u: %u\n", st->id, st->disposition); + } + } + } + break; + case 0x7a: /* enhanced_ac-3_descriptor */ + { + int component_type_flag = get8(pp, desc_end) & (1 << 7); + if (component_type_flag) { + int component_type = get8(pp, desc_end); + int service_type_mask = 0x38; // 0b00111000 + int service_type = ((component_type & service_type_mask) >> 3); + if (service_type == 0x02 /* 0b010 */) { + st->disposition |= AV_DISPOSITION_DESCRIPTIONS; + av_log(ts->stream, AV_LOG_DEBUG, "New track disposition for id %u: %u\n", st->id, st->disposition); + } + } + } + break; default: break; } diff --git a/libavformat/tests/descriptor.c b/libavformat/tests/descriptor.c new file mode 100644 index 0000000..a9635cb --- /dev/null +++ b/libavformat/tests/descriptor.c @@ -0,0 +1,265 @@ +/* + * Copyright (c) 2018 Łukasz Krzciuk + * + * 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 "config.h" + +#include "libavutil/intreadwrite.h" +#include "libavutil/md5.h" + +#include "libavformat/avformat.h" +#include "libavformat/mpegts.h" + +#if HAVE_UNISTD_H +#include +#endif + +#if !HAVE_GETOPT +#include "compat/getopt.c" +#endif + +#define HASH_SIZE 16 + +static const uint8_t aac_extradata[] = { + 0x12, 0x10 +}; +static const uint8_t pmt_editorial_classification[] = { + 0x02, 0xb0, 0x22, 0x00, 0x02, 0xc1, 0x00, 0x00, 0xe0, 0x21, 0xf0, 0x00, + 0x1b, 0xe0, 0x21, 0xf0, 0x00, 0x11, 0xe0, 0x24, 0xf0, 0x0b, 0x7f, 0x05, + 0x06, 0x87, 0x65, 0x6e, 0x67, 0x7c, 0x02, 0x60, 0x00, 0x6f, 0xe1, 0x92, + 0xf7 +}; + +static const char *format = "mp4"; +AVFormatContext *ctx; +uint8_t iobuf[32768]; +AVDictionary *opts; + +const char *cur_name; +int out_size; +struct AVMD5* md5; +uint8_t hash[HASH_SIZE]; + +AVStream *audio_st; +int64_t audio_dts; + +int64_t audio_duration; +int force_iobuf_size; + +static inline int get8(const uint8_t **pp, const uint8_t *p_end) +{ + const uint8_t *p; + int c; + + p = *pp; + if (p >= p_end) + return AVERROR_INVALIDDATA; + c = *p++; + *pp = p; + return c; +} + +static inline int get16(const uint8_t **pp, const uint8_t *p_end) +{ + const uint8_t *p; + int c; + + p = *pp; + if (1 >= p_end - p) + return AVERROR_INVALIDDATA; + c = AV_RB16(p); + p += 2; + *pp = p; + return c; +} + +static void parse_section_header(const uint8_t **pp, const uint8_t *p_end) +{ + get8(pp, p_end); + get8(pp, p_end); + get8(pp, p_end); + get8(pp, p_end); + get8(pp, p_end); + get8(pp, p_end); + + get8(pp, p_end); // tid + get16(pp, p_end); // id + get8(pp, p_end); // version + get8(pp, p_end); // sec_num + get8(pp, p_end); // last_sec_num +} + +static int io_write(void *opaque, uint8_t *buf, int size) +{ + out_size += size; + av_md5_update(md5, buf, size); + return size; +} + +static int io_write_data_type(void *opaque, uint8_t *buf, int size, + enum AVIODataMarkerType type, int64_t time) +{ + char timebuf[30], content[5] = { 0 }; + const char *str; + switch (type) { + case AVIO_DATA_MARKER_HEADER: str = "header"; break; + case AVIO_DATA_MARKER_SYNC_POINT: str = "sync"; break; + case AVIO_DATA_MARKER_BOUNDARY_POINT: str = "boundary"; break; + case AVIO_DATA_MARKER_UNKNOWN: str = "unknown"; break; + case AVIO_DATA_MARKER_TRAILER: str = "trailer"; break; + default: str = "unknown"; break; + } + if (time == AV_NOPTS_VALUE) + snprintf(timebuf, sizeof(timebuf), "nopts"); + else + snprintf(timebuf, sizeof(timebuf), "%"PRId64, time); + // There can be multiple header/trailer callbacks, only log the box type + // for header at out_size == 0 + if (type != AVIO_DATA_MARKER_UNKNOWN && + type != AVIO_DATA_MARKER_TRAILER && + (type != AVIO_DATA_MARKER_HEADER || out_size == 0) && + size >= 8) + memcpy(content, &buf[4], 4); + else + snprintf(content, sizeof(content), "-"); + printf("write_data len %d, time %s, type %s atom %s\n", size, timebuf, str, content); + return io_write(opaque, buf, size); +} + +static void init_out(const char *name) +{ + char buf[100]; + cur_name = name; + snprintf(buf, sizeof(buf), "%s.%s", cur_name, format); + + av_md5_init(md5); + out_size = 0; +} + +static void close_out(void) +{ + int i; + av_md5_final(md5, hash); + for (i = 0; i < HASH_SIZE; i++) + printf("%02x", hash[i]); + printf(" %d %s\n", out_size, cur_name); +} + +static void init_fps(int bf, int audio_preroll, int fps) +{ + AVStream *st; + int iobuf_size = force_iobuf_size ? force_iobuf_size : sizeof(iobuf); + ctx = avformat_alloc_context(); + if (!ctx) + exit(1); + ctx->oformat = av_guess_format(format, NULL, NULL); + if (!ctx->oformat) + exit(1); + ctx->pb = avio_alloc_context(iobuf, iobuf_size, AVIO_FLAG_WRITE, NULL, NULL, io_write, NULL); + if (!ctx->pb) + exit(1); + ctx->pb->write_data_type = io_write_data_type; + ctx->flags |= AVFMT_FLAG_BITEXACT; + + st = avformat_new_stream(ctx, NULL); + if (!st) + exit(1); + st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; + st->codecpar->codec_id = AV_CODEC_ID_AAC; + st->codecpar->sample_rate = 44100; + st->codecpar->channels = 2; + st->time_base.num = 1; + st->time_base.den = 44100; + st->codecpar->extradata_size = sizeof(aac_extradata); + st->codecpar->extradata = av_mallocz(st->codecpar->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE); + if (!st->codecpar->extradata) + exit(1); + memcpy(st->codecpar->extradata, aac_extradata, sizeof(aac_extradata)); + audio_st = st; + + if (avformat_write_header(ctx, &opts) < 0) + exit(1); + av_dict_free(&opts); + + audio_duration = 1024LL * audio_st->time_base.den / audio_st->codecpar->sample_rate; + if (audio_preroll) + audio_preroll = 2048LL * audio_st->time_base.den / audio_st->codecpar->sample_rate; + + audio_dts = -audio_preroll; +} + +static void init(int bf, int audio_preroll) +{ + init_fps(bf, audio_preroll, 30); +} + +static void finish(void) +{ + av_write_trailer(ctx); + avio_context_free(&ctx->pb); + avformat_free_context(ctx); + ctx = NULL; +} + +static void pmt_cb(const uint8_t *p, int p_size) +{ + int pid, desc_list_len; + const uint8_t *desc_list_end; + const uint8_t *p_end = p + p_size - 4; + parse_section_header(&p, p_end); + + for (;;) { + int stream_type = get8(&p, p_end); + if (stream_type < 0) + break; + pid = get16(&p, p_end); + if (pid < 0) + break; + desc_list_len = get16(&p, p_end); + desc_list_len &= 0xfff; + desc_list_end = p + desc_list_len; + if (desc_list_end > p_end) + break; + for (;;) { + if (ff_parse_mpeg2_descriptor(ctx, audio_st, 0, &p, desc_list_end, NULL, 0, 0, NULL)) + break; + } + p = desc_list_end; + } + printf("disposition:%d\n", audio_st->disposition); +} + +int main(int argc, char **argv) +{ + md5 = av_md5_alloc(); + if (!md5) + return 1; + + // Test + init_out("pmt with editorial_classification"); + av_dict_set(&opts, "movflags", "frag_keyframe", 0); + init(0, 0); + pmt_cb(pmt_editorial_classification, sizeof(pmt_editorial_classification)); + finish(); + close_out(); + + av_free(md5); + + return 0; +} diff --git a/tests/fate/libavformat.mak b/tests/fate/libavformat.mak index cf1ba18..622f199 100644 --- a/tests/fate/libavformat.mak +++ b/tests/fate/libavformat.mak @@ -22,6 +22,10 @@ FATE_LIBAVFORMAT-$(CONFIG_MOV_MUXER) += fate-movenc fate-movenc: libavformat/tests/movenc$(EXESUF) fate-movenc: CMD = run libavformat/tests/movenc +FATE_LIBAVFORMAT-yes += fate-descriptor +fate-descriptor: libavformat/tests/descriptor$(EXESUF) +fate-descriptor: CMD = run libavformat/tests/descriptor + FATE_LIBAVFORMAT += $(FATE_LIBAVFORMAT-yes) FATE-$(CONFIG_AVFORMAT) += $(FATE_LIBAVFORMAT) fate-libavformat: $(FATE_LIBAVFORMAT) diff --git a/tests/ref/fate/descriptor b/tests/ref/fate/descriptor new file mode 100644 index 0000000..23b6f18 --- /dev/null +++ b/tests/ref/fate/descriptor @@ -0,0 +1,5 @@ +write_data len 32, time nopts, type header atom ftyp +disposition:131328 +write_data len 649, time nopts, type header atom - +write_data len 24, time nopts, type trailer atom - +1da78d265861b40de21f6ec205d48ea4 705 pmt with editorial_classification -- 2.8.3