(I apologise if this mail gets sent to the wrong thread and other
errors. I'm trying out a new mail client)

On Wed, 26 Aug 2020 16:31:46 +0000
"Anamitra Ghorui" <agho...@teknik.io> wrote:

[...]

> I agree that the case statements between if statements and while
> statements are not very good looking, but this allows us to extract the
> function logic without having to set the, or look at the state
> management variables and statements. Trying to make do without the
> interleaving statements would cause us to set s->segment many times,
> set multiple switch statements etc.
> 
>     func(FLIF16XYZContext *s, ...)
>     {
>         // Init stuff
>         ...
>         
>         switch (s->segment) {
>         /* Note how cases are right before RAC calls */
>         case 1:
>             RAC_GET(...);
>             ...
>         case 2:
>             RAC_GET(...);
>             ...
>         ...
>         }
> 
>         // End stuff
>         ...
>         return 0;
> 
>     need more data:
>         ...
>         return AVERROR(EAGAIN);
>     }
> 
> I get your point about using do {} while (0) to break the sequence, it
> does make sense now to ditch the need_more_data entirely and hence free 
> it from having to using a specific goto label, however it introduces an 
> additional level of indentation. This is how majority of the decoder 
> logic and transform logic has been written, so it may make the code 
> look a bit bulkier. Should I do it anyway?
> 
>     func(FLIF16XYZContext *s, ...)
>     {
>         // Init stuff
>         ...
> 
>         do {
>             switch (s->segment) {
>             /* Note how cases are right before RAC calls */
>             case 1:
>                 RAC_GET(...);
> 
>             case 2:
>                 RAC_GET(...);
>             ...
>             }
> 
>             // End stuff
>             ...
>             return 0;
>         } while (0);
> 
>         // EAGAIN stuff
>         ...
>         return AVERROR(EAGAIN);
>     }
> 
> 

Wait a second, that's wrong. It should be like this instead:

    int main()
    {
        // Init Stuff
        ...
        switch (k) {
        case 0:
            RAC_GET(...)
            break;
        ...
        case N:
            RAC_GET(...)

        default:
            // Success end case
            // We don't want the control here if error case
            return 0;
        }

        // Error end case
        return AVERROR(EAGAIN);
    }

--
Regards,
Anamitra

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to