[FFmpeg-devel] [PATCH 03/20] lavc: Add coded bitstream read/write API
Michael Niedermayer
michael at niedermayer.cc
Fri Sep 15 00:51:38 EEST 2017
On Thu, Sep 14, 2017 at 09:51:31PM +0100, Mark Thompson wrote:
> On 14/09/17 21:28, Michael Niedermayer wrote:
> > On Thu, Sep 14, 2017 at 08:31:28AM +0100, Mark Thompson wrote:
> >> On 14/09/17 01:42, Michael Niedermayer wrote:
> >>> On Wed, Sep 13, 2017 at 12:43:53AM +0100, Mark Thompson wrote:
> > [...]
> >
> >>>> +int ff_cbs_write_packet(CodedBitstreamContext *ctx,
> >>>> + AVPacket *pkt,
> >>>> + CodedBitstreamFragment *frag)
> >>>> +{
> >>>> + int err;
> >>>> +
> >>>> + err = ff_cbs_write_fragment_data(ctx, frag);
> >>>> + if (err < 0)
> >>>> + return err;
> >>>> +
> >>>
> >>>> + av_new_packet(pkt, frag->data_size);
> >>>> + if (err < 0)
> >>>> + return err;
> >>>
> >>> that does not work
> >>
> >> I think I'm missing something. Can you be more precise about what doesn't work?
> >
> > you ignore the return code of av_new_packet()
> > the check does nothing
>
> Duh, oops. I spent a while looking for some subtlety in av_new_packet() and missed the obvious. Sorry!
>
> >>>> + */
> >>>> + int nb_units;
> >>>> + /**
> >>>> + * Pointer to an array of units of length nb_units.
> >>>> + *
> >>>> + * Must be NULL if nb_units is zero.
> >>>> + */
> >>>> + CodedBitstreamUnit *units;
> >>>> +} CodedBitstreamFragment;
> >>>> +
> >>>> +/**
> >>>> + * Context structure for coded bitstream operations.
> >>>> + */
> >>>> +typedef struct CodedBitstreamContext {
> >>>> + /**
> >>>> + * Logging context to be passed to all av_log() calls associated
> >>>> + * with this context.
> >>>> + */
> >>>> + void *log_ctx;
> >>>> +
> >>>> + /**
> >>>> + * Internal codec-specific hooks.
> >>>> + */
> >>>> + const struct CodedBitstreamType *codec;
> >>>> +
> >>>> + /**
> >>>> + * Internal codec-specific data.
> >>>> + *
> >>>> + * This contains any information needed when reading/writing
> >>>> + * bitsteams which will not necessarily be present in a fragment.
> >>>> + * For example, for H.264 it contains all currently visible
> >>>> + * parameter sets - they are required to determine the bitstream
> >>>> + * syntax but need not be present in every access unit.
> >>>> + */
> >>>> + void *priv_data;
> >>>> +
> >>>
> >>>> + /**
> >>>> + * Array of unit types which should be decomposed when reading.
> >>>> + *
> >>>> + * Types not in this list will be available in bitstream form only.
> >>>> + * If NULL, all supported types will be decomposed.
> >>>> + */
> >>>> + uint32_t *decompose_unit_types;
> >>>
> >>> this should not be a generic integer.
> >>> a typedef or enum would be better
> >>
> >> It's H.264 nal unit types union H.265 nal unit types union MPEG-2 start codes (union any other codec that gets added).
> >>
> >> What type should that be? I chose uint32_t to make it fixed-size and hopefully large enough to be able to make sense for any future codec.
> >
> > a typedef based type would be better than a litterally hardcoded
> > one. A hardcoded type would be duplicatedly hardcoded in many
> > places ...
>
> So have "typedef uint32_t CBSUnitType;"? I'm not really sure this adds anything since every implementation is using its own enum anyway, but ok.
duplication is bad
consider you ever want to change the underlaying type ...
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
I have often repented speaking, but never of holding my tongue.
-- Xenocrates
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20170914/3314540a/attachment.sig>
More information about the ffmpeg-devel
mailing list