Thursday, 4 July 2019

Opções binárias de obj


Implementando AVOptions retornar anterior. NULO. A criação de childnext () e childclassnext () como definido acima em testclass agora tornará childstructs opções acessíveis através de teststruct (novamente, a instalação adequada como descrito acima precisa ser feito em childstruct logo após ele é criado). Do exemplo acima pode não estar claro por que tanto childnext () quanto childclassnext () são necessários. A distinção é que childnext () itera sobre objetos realmente existentes, enquanto childclassnext () itera sobre todas as possíveis classes filho. Por exemplo. Se um AVCodecContext foi inicializado para usar um codec que tenha opções privadas, então seu childnext () retornará AVCodecContext. privdata e terminará iterating. O OTOH childclassnext () no AVCodecContext. avclass itera sobre todos os codecs disponíveis com opções privadas. Constantes nomeadas É possível criar constantes nomeadas para opções. Basta definir o campo de unidade da opção as constantes devem aplicar a uma seqüência de caracteres e criar as próprias constantes como opções de tipo AVOPTTYPECONST com seu campo de unidade definido para a mesma seqüência de caracteres. Seu campo defaultval deve conter o valor da constante nomeada. Por exemplo, para adicionar algumas constantes nomeadas para a opção testflags acima, coloque o seguinte na matriz childopts: offsetof (childstruct, flagsopt), AVOPTTYPEFLAGS. , INTMIN, INTMAX, quottestunitquot, Using AVOptions Esta seção trata de acessar opções em uma estrutura habilitada para AVOptions. Tais estruturas em FFmpeg são e. AVCodecContext em libavcodec ou AVFormatContext em libavformat. Examinando AVOptions As funções básicas para examinar as opções são avoptnext (). Que itera sobre todas as opções definidas para um objeto, e avoptfind (). Que procura uma opção com o nome fornecido. A situação é mais complicada com o assentamento. Uma estrutura habilitada para AVOptions pode ter filhos habilitados para AVOptions. Passar a bandeira AVOPTSEARCHCHILDREN para avoptfind () fará com que a função procure as crianças recursivamente. Para enumerar há basicamente dois casos. O primeiro é quando você deseja obter todas as opções que possam existir potencialmente na estrutura e seus filhos (por exemplo, ao construir a documentação). Nesse caso, você deve chamar avoptchildclassnext () recursivamente sobre o pai estruturas AVClass. O segundo caso é quando você tem uma estrutura já inicializada com todos os seus filhos e você deseja obter todas as opções que podem ser realmente escritas ou ler a partir dele. Nesse caso, você deve chamar avoptchildnext () recursivamente (e avoptnext () em cada resultado). Leitura e escrita AVOptions Ao definir opções, você geralmente tem uma seqüência de caracteres lida diretamente do usuário. Em tal caso, basta passar para avoptset () é suficiente. Para opções de tipo não-string, avoptset () analisará a string de acordo com o tipo de opção. Da mesma forma avoptget () irá ler qualquer tipo de opção e convertê-lo para uma seqüência de caracteres que será retornado. Não esqueça que a string é alocada, então você tem que liberá-lo com avfree (). Em alguns casos, pode ser mais conveniente para colocar todas as opções em um AVDictionary e chamar avoptsetdict () sobre ele. Um caso específico disso é o formato / codec aberto funções em lavf / lavc que levam um dicionário preenchido com a opção como um parâmetro. Isto permite definir algumas opções que não podem ser definidas de outro modo, p. Ex. O formato de arquivo de entrada não é conhecido antes que o arquivo seja realmente aberto. Documentação de definição de macro O valor a ser definido. Se o campo não é de um tipo string, então a string dada é analisada. Correcções SI e alguns escalares nomeados são suportados. Se o campo é de um tipo numérico, ele tem que ser um escalar numérico ou nomeado. Comportamento com mais de um escalar e - infix operadores é indefinido. Se o campo é de um tipo de sinalizadores, ele tem que ser uma seqüência de escalares numéricos ou de sinalizadores nomeados separados por ou -. Prefixing um sinalizador com faz com que ele seja definido sem afetar as outras sinalizações de forma semelhante, - desabilita um sinalizador. Se non-NULL colocar aqui um ponteiro para a AVOption encontrado

No comments:

Post a Comment