[FFmpeg-devel] [PATCH 2/3] RSD demuxer
Paul B Mahol
onemda at gmail.com
Mon May 6 11:48:18 CEST 2013
On 5/6/13, Paul B Mahol <onemda at gmail.com> wrote:
> On 5/6/13, Michael Niedermayer <michaelni at gmx.at> wrote:
>> On Mon, May 06, 2013 at 11:26:33AM +0200, Michael Niedermayer wrote:
>>> On Mon, Apr 22, 2013 at 04:40:42PM -0300, James Almer wrote:
>>> >
>>> > Signed-off-by: James Almer <jamrial at gmail.com>
>>> > ---
>>> > Changelog | 1 +
>>> > doc/general.texi | 1 +
>>> > libavformat/Makefile | 1 +
>>> > libavformat/allformats.c | 1 +
>>> > libavformat/rsd.c | 193
>>> > +++++++++++++++++++++++++++++++++++++++++++++++
>>> > libavformat/version.h | 2 +-
>>> > 6 files changed, 198 insertions(+), 1 deletion(-)
>>> > create mode 100644 libavformat/rsd.c
>>> >
>
> [...]
>
>>> > +static int rsd_read_packet(AVFormatContext *s, AVPacket *pkt)
>>> > +{
>>> > + AVCodecContext *codec = s->streams[0]->codec;
>>> > + RSDDemuxContext *rsd = s->priv_data;
>>> > + int i, ret, size = 1024;
>>> > +
>>> > + if (url_feof(s->pb))
>>> > + return AVERROR_EOF;
>>> > +
>>> > + if (codec->codec_id == AV_CODEC_ID_ADPCM_THP) {
>>> > + uint8_t *dst;
>>> > +
>>> > + if ((ret = av_new_packet(pkt, size)) < 0)
>>> > + return ret;
>>> > + if (!av_packet_new_side_data(pkt, AV_PKT_DATA_NEW_EXTRADATA,
>>> > 32))
>>> > + return AVERROR(ENOMEM);
>>> > + dst = pkt->side_data[0].data;
>>> > + for (i = 0; i < 16; i++)
>>> > + bytestream_put_be16(&dst, AV_RL16(rsd->table + i * 2));
>>>
>>> extradata is global data, AV_PKT_DATA_NEW_EXTRADATA is when "global"
>>> data changes due to concatenation of 2 streams with different global
>>> data.
>>> In this case here AVCodecContext->extradata should be used probably
>>
>> also consider remuxing rsd -> rsd
>> If you take the global extradata and put it in every packet then
>> the muxer would have to somehow proof that the data never changes
>> or risk failure (theres another demuxer where it can change so it
>> could get either kind of packets)
>>
>> and it would have to get the first packet to write the global table
>> in the header.
>> AVCodecContext.extradata simplifies that alot, the demuxer puts the
>> table in extradata, the muxer writes it againa
>
> "Extradata" is different in each packet. So probably different kind of
> packet
> side data should be used.
> This code makes it possible to use existing decoder instead of
> writting yet another one.
Actually not in this specific case, but in some other (think BRSTM one).
>
>>
>> [...]
>>
>> --
>> Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
>>
>> The educated differ from the uneducated as much as the living from the
>> dead. -- Aristotle
>>
>
More information about the ffmpeg-devel
mailing list