From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id E3CAF49CEC for ; Fri, 8 Mar 2024 12:06:51 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1129968CEE6; Fri, 8 Mar 2024 14:06:49 +0200 (EET) Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04olkn2011.outbound.protection.outlook.com [40.92.75.11]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id F313B68CC58 for ; Fri, 8 Mar 2024 14:06:42 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eMuxJcZEBsJO3OqF+t5qydDkr9fkGVFZ9Epos3xNgfTMnGTOky3WS0tFQrgZN21M38F5BcwBULJ8GOowdNVOTW9k7ISCNdSWbbGjmvTPeBq4GwBej8I7IY232ErWe/LMwvSwDDVgkTJiavCCsksblHPCCb6FjOy5ZDSp5QdyzF3n5/NgZIxbyV3CiJeeyuuMjtBXS5kpD6Meo9763knmJTjXgRPk70R/wZy91OVdFSFIiuZNdxFLVGaE7k5ygDONokAISS1y+B8aWQRTSaElKSrdtJnqVzZHbR/FK08DrdvqfYjTnv/u3kq3y4TIyJNSmZJjFVpm3dYhGP/AgKz+UQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=g/GH5FqstJ3EvjVF5chZCE0BjQiwsPYqSrjuWu8W/vc=; b=JUq4W6lvQXvzqW43/sAEPAbCUSU4NB70qEmMz3xoPjN9mB1sO7ylaqagIFcLZFju7ZP+HNwHoAJYgzPTEpPD0I/ebUF/WkioNXRHCs/NSaBf2uUgXIMT0P3wLsGAUNYNpG6+l62sY5c5LphipjmRgKLgKNSRWDfaMBL5TUH8DYxVoNlcWVf5U6pnGrCW0QwtGWt3DO5jVvssAdx6J2uMy3KauwfrRyXXkr4GcskXv83zAkzgOWfiod6YssIyTQjP8lEex34Uuw8/WA37zEj7nuDZph9hwujZK7XQrIiiQ5v8nrwIQoFBwin2/gKuwsaRAQs+mRC9lA3SJqfkwLoIbw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=g/GH5FqstJ3EvjVF5chZCE0BjQiwsPYqSrjuWu8W/vc=; b=rKTw4DoMdzw7AkVusK3DeAd2uc56U/vsi5VlESUZwVs0YPf8ff+sHlrPpR8Ld9t35qAKWFh5iJ8hk4u0beKoXKbMHP9bf9/5mDUY95txG5daoIRIXaHMGsy/Eoh7m++G7g8EFOxi5NbpjzZLP7iHjDmEvZHiGcXvXVlTwRGTNFsw0A2qszvp07KFUvTtUZ37jpNcQFDcgLLZtV8zKtlH8uTokFlaBW+siamlGGeKXVbasK3XghS6mlY17akqaKvZuILZyBQdAF+zfJLiYUDmnAgQExQvZwifikC69yCRVWTV+Y8NA/wFZjOFtHhh1aa+J0SQwJB81meC1Hezrowqjw== Received: from GV1SPRMB0052.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:109::15) by DB9P250MB0425.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:335::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7362.24; Fri, 8 Mar 2024 12:06:39 +0000 Received: from GV1SPRMB0052.EURP250.PROD.OUTLOOK.COM ([fe80::a8f2:5082:22e4:8d1b]) by GV1SPRMB0052.EURP250.PROD.OUTLOOK.COM ([fe80::a8f2:5082:22e4:8d1b%5]) with mapi id 15.20.7339.035; Fri, 8 Mar 2024 12:06:39 +0000 Message-ID: Date: Fri, 8 Mar 2024 13:06:37 +0100 User-Agent: Mozilla Thunderbird Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: From: Andreas Rheinhardt In-Reply-To: X-TMN: [ecoSCO4LeDTx67mIwuVtDmH1Moa+gQhNDkqlqX8gXIg=] X-ClientProxiedBy: FR3P281CA0078.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1f::19) To GV1SPRMB0052.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:109::15) X-Microsoft-Original-Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1SPRMB0052:EE_|DB9P250MB0425:EE_ X-MS-Office365-Filtering-Correlation-Id: 1b871c76-b669-4d16-baa2-08dc3f6835a0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: GMujxvDdtDKr496UqL3S6wo/k9Uwfw26mxe6Y8kMlhVEWhGvTFvQG2k+bu7M8+psox7wajeK479OkXR1LthqSMpDVvMsYsA0LyxsZvxXdlmur4Cm2NQ3c+yZvgXqP2f7eHHXqWNnjyWq/YPE4bqhbavOO2Dl228GhH/ILZ0IyYnb6E8i0Hh7sVA2KunyenGlY6nS5XL9ItedDxlrRc3sDSpiNulbOZEzlRVNGjkBMutR84Zijg1ftxg38+ZkWRCEnsFRQJymA4im/KR+0VeF5rAWsl0a5Pxm/i5jgv8TfAQvihgEaoDA8cqq9UCzwPyzhfFIy8rwu2pAPe3btgCvUEGaA/mJxP+z/Q8Z5r8xa/BlGilrjqMPQnGZa+vJmrQqcOXKnrSgoOR95j+2SMDh4aDPbeH3148yPstocQOIoQWDPdZuKVaQz0FlvrLAirXQiDHhS2WtCx8JAqfSfib67NWcjVVEAcGSD2h7htXIeImI5vmN3QYRXXb9o7ae5E2V4XExcspia/D1/AWvxPfmJs1bKuV6hW/bzfGfMbimI8GpSkajuj7qD9GVlIBoVzq8 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?U2Ira0pIZ2FaaGRuK2dnL0FrK0JQeUZRTEMveUw4ang1eWZvemV4WGFzUlc3?= =?utf-8?B?ck5XNWtOeUd6TmwwZEJ2alpCeFpSU1lMUWdnS085dlJ4ZU5SUDd5SFMvSzc4?= =?utf-8?B?d0greGphZldIcWV2YnhDUmxwTVJVMDVvVnV1eE9JejdmNHpiN3pSK1o2aEdB?= =?utf-8?B?Qm8yakhVQ1BmUUhtYXZralRKR1FUdXhuUnMyWGZLQ1VKTEp1MEI3UjFZOWhC?= =?utf-8?B?TDN2UFZPaytwVDNoWTg0OFhodkh4Vm03MjNsNmd4ejdkN1hpZENLRElHNzV0?= =?utf-8?B?aTJGK3R0dmNLS3ZEYnlWNitHU3RmdDh3cWlMYWdNYzhiMEJUUlNncUlVbkpu?= =?utf-8?B?ejgzU3d6Rm9DTngvc0V3cEhuK0hBaXZHTU1ORU80d0phVEROV1Nzakw4Mmdl?= =?utf-8?B?UTllbE1iY1lybE85U3N4YWdNbGhNNHZaQ2srYitUbHQzWHRmWlF2MllKbERt?= =?utf-8?B?VEFCUWRZdjlJNkxxMWhBbmFKSkswWXlhRm53bFllTDJQOEErSkJqWVF4ZHJW?= =?utf-8?B?cmx3UEdvNll3clk2bGcwSmp2bXpKZTA1S3Ura2hBYmVBU1E1anJyVUJQZDJV?= =?utf-8?B?a2daaXhoQU53Nm11MVRacmJBVWtaVGdETkY4cUJaQWpQNk81Y3F5SDVaOGJl?= =?utf-8?B?UW5hd3FsbVJxRzNIT05KbTFCR0plcTRWQm5VN2VXbmpLMFEwM0ZtU0F4MWJM?= =?utf-8?B?SnlMMlNIMHA4dGpBMjBHWS9WUW9JWnF1UTJsb1NLZ1lzUUQ3L01VWWFhZTlD?= =?utf-8?B?UXVZMmJNVG5CLzJ5T1BxREUzQVRiUTIrVjAwRUtyM0ZJTmRrNzhDS3U5Skpx?= =?utf-8?B?N25lMUxsRXVzaVI2WWpZemQrRlU2eWQzakNzTFRvYlRZYzBLRjlUWmt2RmdR?= =?utf-8?B?eXY0NVBManFKUXVFeXZmYzE2SFpPWTlhem1jQW5FU2U1YlRJaFd4S05zME5v?= =?utf-8?B?TEZyZ3A1MTAzcHZUUm1CbnhIMGRFdDZuWThWTVM5OTh4ZWRRWHIrRjYvbTQz?= =?utf-8?B?SmJKVmttWUJpcXFjWXQvMmdheTU0YktwZ0N0NUNGbmlCMmpYTzJFMmE4YUp4?= =?utf-8?B?M1pzVEcydWNHQVlUM3c5UE9BOVpWcDREMklpZXp1aVZEWTJHVHhrQVhFczFZ?= =?utf-8?B?YzJjeXBHMTZUMy9IRy9UdmcxRVVOb0R0WlVGMURZVTlKbVFxT000YWppeFR0?= =?utf-8?B?Y0s4b2NsWjRCMVdNRGtDVWhCc3pnY3o1VWVZdmVEQURGQzRKS3Z5ejNzajVx?= =?utf-8?B?OStScGJiVXJoZ3hEQXNpSjdBQ1hHUnlkKzNuVkx6U2szcnZMOTJoVWdyODQy?= =?utf-8?B?T3VJc0VZVVhGRW9DbVdRa1VDaGZKSE13WjM1b0gyNEZNeDM4UUY5SUhVWXB3?= =?utf-8?B?ajZKWDg1Y2ttRWVVUlNvM04zeFF6UnpqU0dEVk5RMnJRYkdXcE1OTlVEMjBE?= =?utf-8?B?dDJBaEFWWktQb3F2VDJIUnhXdFdScFBKTThoNjJSbmxDeWg3ZDR1cHhLWTBn?= =?utf-8?B?aXJpTm13RUtZNVdhZWVFTG16TUprOXVBeHRKSmUwaVN4UkFwZ0ROd3dGeUlx?= =?utf-8?B?SGhRVUt5OEZkeGhQdlMxMi9qZUVmV0dhNmdyQ1ZDU21EMUUzM3pKK3lPcGtj?= =?utf-8?B?c1UzQjVIdktIS3J0amlKZ1ZPNzlWNTI0WFg0U25Kb2tJdWdSQmptMmVZZHRq?= =?utf-8?B?anFpQVdjc3VCT0RneC94VXBqL0RtU2FiKzNILzlyUitDMFBRcXd0OUh3PT0=?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1b871c76-b669-4d16-baa2-08dc3f6835a0 X-MS-Exchange-CrossTenant-AuthSource: GV1SPRMB0052.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Mar 2024 12:06:39.0330 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9P250MB0425 Subject: Re: [FFmpeg-devel] [PATCH] avformat/aea: Add aea muxer X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: asivery via ffmpeg-devel: > +typedef struct { > + int block_count; > +} AeaMuxerContext; > + > +static int aea_init(AVFormatContext *s) > +{ > + AeaMuxerContext *c = s->priv_data; > + c->block_count = 0; Unnecessary: A muxer's priv_data is always pre-zeroed. > + > + return 0; > +} > + > +static int aea_write_header(AVFormatContext *s) > +{ > + AVDictionaryEntry *title_entry; const > + int title_length = 0, i; > + char* title_contents; > + AVStream *st; > + > + > + if (s->nb_streams > 1) { > + av_log(s, AV_LOG_WARNING, "Got more than one stream to encode, they will be ignored.\n"); We don't ignore extraneous streams, we normally error out if something like this happens. > + } > + > + st = s->streams[0]; > + if (st->codecpar->ch_layout.nb_channels != 1 && st->codecpar->ch_layout.nb_channels != 2) { > + av_log(s, AV_LOG_ERROR, "Invalid amount of channels to mux (%d).\n", st->codecpar->ch_layout.nb_channels); > + return AVERROR(EINVAL); > + } > + > + if (st->codecpar->sample_rate != 44100) { > + av_log(s, AV_LOG_ERROR, "Invalid sample rate (%d) AEA only supports 44.1kHz.\n", st->codecpar->sample_rate); > + return AVERROR(EINVAL); > + } > + > + /* Write magic */ > + avio_wl32(s->pb, 2048); > + > + /* Write AEA title */ > + title_entry = av_dict_get(st->metadata, "title", NULL, 0); > + if (title_entry) { > + title_contents = title_entry->value; > + title_length = FFMIN(256, strlen(title_contents)); Don't use strlen() in FFMIN (like many macros, it can evaluate its argument multiple times). > + } > + > + if (title_length) { > + avio_write(s->pb, title_contents, title_length); > + } No need for this branch, just call this inside the "if (title_entry)" block above. > + > + for (i = 0; i<(256 - title_length); i++) { > + avio_w8(s->pb, 0); > + } ffio_fill(). Same below. > + > + /* Write number of frames (zero at header-writing time, will seek later), number of channels */ > + avio_wl32(s->pb, 0); > + avio_w8(s->pb, st->codecpar->ch_layout.nb_channels); > + avio_w8(s->pb, 0); > + > + /* Write flags (meaning unknown) */ > + for(i = 0; i<11; i++) { > + avio_wl32(s->pb, 0); > + } > + > + /* Pad the header to 2048 bytes */ > + for(i = 0; i<1738; i++) avio_w8(s->pb, 0); > + > + return 0; > +} > + > +static int aea_write_packet(struct AVFormatContext *s, AVPacket *pkt) > +{ > + AeaMuxerContext *c = s->priv_data; > + c->block_count++; > + > + avio_write(s->pb, pkt->data, pkt->size); > + return 0; You can avoid this and the whole muxer context by using ff_raw_write_packet() and relying on AVStream.nb_frames. > +} > + > +static int aea_write_trailer(struct AVFormatContext *s) > +{ > + AVIOContext *pb = s->pb; > + AeaMuxerContext *c = s->priv_data; > + if (pb->seekable & AVIO_SEEKABLE_NORMAL) { > + /* Seek to rewrite the block count. */ > + avio_seek(pb, 260, SEEK_SET); > + avio_wl32(pb, c->block_count * s->streams[0]->codecpar->ch_layout.nb_channels); > + } else { > + av_log(s, AV_LOG_WARNING, "unable to rewrite AEA header.\n"); > + } > + > + return 0; > +} > + > +const FFOutputFormat ff_aea_muxer = { > + .p.name = "aea", > + .p.long_name = NULL_IF_CONFIG_SMALL("MD STUDIO audio"), > + .priv_data_size = sizeof(AeaMuxerContext), > + .p.extensions = "aea", > + .p.audio_codec = AV_CODEC_ID_ATRAC1, > + .init = aea_init, > + > + .write_header = aea_write_header, > + .write_packet = aea_write_packet, > + .write_trailer = aea_write_trailer, > + .p.flags = AVFMT_GENERIC_INDEX, Makes no sense for a muxer. > +}; _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".