Как создать AVStream с флагом AV_DISPOSITION_TIMED_THUMBNAILS - PullRequest
0 голосов
/ 11 марта 2020

Я пытаюсь сделать аудиокнигу, используя ffmpeg. Поддержка формата m4b охватывает изображение для каждой главы. ffmpeg также загрузит его, но я не смогу создать AVStream с флагом расположения AV_DISPOSITION_TIMED_THUMBNAILS.

int addVideoStream( AVFormatContext *ctx, CoverData *cover) {
    const AVCodec *c = avcodec_find_encoder( AV_CODEC_ID_MJPEG );
    if ( !c )
        return -1;

    int stream_indx = ctx->nb_streams;

    AVStream *stream = avformat_new_stream( ctx, NULL );
    AVCodecContext *img_codec_ctx = avcodec_alloc_context3( c );

    img_codec_ctx->width = cover->width();
    img_codec_ctx->height = cover->height();
    img_codec_ctx->pix_fmt = AV_PIX_FMT_YUVJ420P;

    if ( ctx->oformat->flags & AVFMT_GLOBALHEADER )
        img_codec_ctx->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;

    int res = avcodec_parameters_from_context( stream->codecpar, img_codec_ctx );
    avcodec_free_context( &img_codec_ctx );


    return stream_indx;
}

int new_v_stream_index = addVideoStream( out_ctx, img_data );
AVStream *v_stream = out_ctx->streams[ new_v_stream_index ];
v_stream->disposition = AV_DISPOSITION_DEFAULT|AV_DISPOSITION_ATTACHED_PIC|AV_DISPOSITION_TIMED_THUMBNAILS;
int error = avformat_write_header( out_ctx, NULL );

ошибка возврата = -22

, если установлено только расположение

v_stream->disposition = AV_DISPOSITION_ATTACHED_PIC;

ошибка = 0, но это только для одного прикрепленного пакета изображения: stream-> attach_pi c

где я ошибаюсь?

...