[FFmpeg-devel] [patch] 6 channelrawaudioinputresultsininvalid PCM packet error
Baptiste Coudurier
baptiste.coudurier
Sun Nov 16 22:48:21 CET 2008
Hi,
Michael Niedermayer wrote:
> On Fri, Nov 14, 2008 at 02:28:50PM -0800, Baptiste Coudurier wrote:
>> Michael Niedermayer wrote:
>>> On Fri, Nov 14, 2008 at 10:52:37AM -0800, Baptiste Coudurier wrote:
>>>> Michael Niedermayer wrote:
>>>>> On Wed, Nov 12, 2008 at 04:30:12PM -0800, Phil Rutschman wrote:
>>>>>>> your original logic generates packets that are not a multiple of 512
>>>>>> or
>>>>>>> 1024 thus not a multiple of disk sectors, this seems not ideal
>>>>>> It generates these packets only in cases which currently fail entirely.
>>>>>> While this may not be ideal (at least, if there is neither OS nor C
>>>>>> library caching going on), it has the virtue of solving the problem at
>>>>>> hand without changing current behavior.
>>>>>>
>>>>>>> in principle updating the regression test checksums would be fine, but
>>>>>>> why does g726 change? this looks like there is something wrong in g726
>>>>>>> which has to be found and fixed ...
>>>>>> It is worth observing that the size of the mov and mkv files change, not
>>>>>> just their checksum. When I extract the raw audio data from
>>>>>> tests/data/a-pcm_s16be.mov and strip the header, the file matches the
>>>>>> original asynth1.sw file except that it is not quite as long. Reducing
>>>>>> RAW_PACKET_SIZE increases the size of the resulting mov file, and
>>>>>> conversely increasing it results in a smaller mov.
>>>>>>
>>>>>> Something odd overall is clearly happening related to RAW_PACKET_SIZE,
>>>>>> which may or may not be related to the g726 issue, but I don't currently
>>>>>> have the time to investigate the specifics of either.
>>>>> so the summary is we need some volunteer to fix
>>>>> 1. g726
>>>>> 2. mov/mkv loosing some samples depending on RAW_PACKET_SIZE
>>>>>
>>>> Huh ? If there is a problem with mov I'll fix it right now.
>>> I dont know if there is, i just added mov because phil said:
>>> "It is worth observing that the size of the mov and mkv files change, not
>>> just their checksum. When I extract the raw audio data from
>>> tests/data/a-pcm_s16be.mov and strip the header, the file matches the
>>> original asynth1.sw file except that it is not quite as long."
>>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>>
>>> ive not confirmed this or investigated at all ...
>>>
>> What about this patch ? Regression tests pass.
> [...]
>> Index: libavformat/raw.c
>> ===================================================================
>> --- libavformat/raw.c (revision 15823)
>> +++ libavformat/raw.c (working copy)
>> @@ -115,6 +115,13 @@
>> st->codec->sample_rate = ap->sample_rate;
>> if(ap->channels) st->codec->channels = ap->channels;
>> else st->codec->channels = 1;
>> + st->codec->bits_per_coded_sample = av_get_bits_per_sample(st->codec->codec_id);
>> + assert(st->codec->bits_per_coded_sample > 0);
>> + if (!st->codec->channels) {
>> + av_log(s, AV_LOG_ERROR, "channels is not set\n");
>> + return -1;
>> + }
>
> i dont see how this if() could be true
Humm, right, leftover.
>
>> + st->codec->block_align = st->codec->bits_per_coded_sample*st->codec->channels/8;
>> av_set_pts_info(st, 64, 1, st->codec->sample_rate);
>> break;
>> case CODEC_TYPE_VIDEO:
>> @@ -139,9 +146,9 @@
>> static int raw_read_packet(AVFormatContext *s, AVPacket *pkt)
>> {
>> int ret, size, bps;
>> - // AVStream *st = s->streams[0];
>> + AVStream *st = s->streams[0];
>>
>> - size= RAW_PACKET_SIZE;
>> + size= (RAW_PACKET_SIZE/st->codec->block_align)*st->codec->block_align;
>
> i think i prefer if the packet size contains a constant number of samples
> across channels.
I don't see what you mean here.
Also this is the way it is done in wav demuxer.
--
Baptiste COUDURIER GnuPG Key Id: 0x5C1ABAAA
Key fingerprint 8D77134D20CC9220201FC5DB0AC9325C5C1ABAAA
checking for life_signs in -lkenny... no
More information about the ffmpeg-devel
mailing list